ant-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Stephen McConnell" <>
Subject RE: Resource.getURL()
Date Mon, 25 Sep 2006 18:07:08 GMT

> -----Original Message-----
> From: Dominique Devienne [] 
> Sent: Monday, 25 September 2006 10:32 PM
> To: Ant Developers List
> Subject: Re: Resource.getURL()
> > > The question is why would you need to get back a URL from 
> > > a Resource?
> > 
> > You need to get a URL from a resource if you want to use 
> > the resource as InputSource in XML processing.
> > The URL is used to set the SystemId, in practice to be able 
> > to resolve includes, entities, ... which are to be found 
> > with a relative path.
> But when you get a StringResource, or PropertyResource, which 
> are ficticious Resource impls wrapping a string or the value 
> of an Ant property, even if you wrap these into a custom URL, 
> how would you resolve URLs relative to these???
> This is the reason why I'm saying that a getURL only makes 
> sense for true URLResources only. 
> Pushing it down to Resource smells wrong to me. 

I think the smell you are talking about may be the general aroma related to
a class providing more than a single concern. The Resource class as declared
in 1.6.5 addresses several:

  a) association with a name
  b) comparable
  c) equivalence
  d) existence
  e) association with a modification timestamp
  f) association with a size
  g) a flag declaring if the resource is a directory

The version of Resource declared in 1.7 adds the following additional

  d) streamable behaviour
  a) a flag indicating if the resource is derived from the filesystem
     (which makes me uncomfortable)
  b) adds ResourceCollection as an implemented interface 
  c) adds the ArchiveResource, CompressedResource, FileResource, 
     JavaResource, PropertyResource, StringResource, and 
     URLResource as derived types

As things stand all of these classes expose the operation getOutputStream().
The getOutputStream() method is documented as throwing
UnsupportedOperationException if the supply of a resource stream is not
supported.  IMO there is a good argument to include getURL() at the same
level as getInputStream() and getOutputStream().  My immediate conclusion is
that we could declare a interface named Streamable that includes all three
methods and from this define the abstract class StreamableResource. In
addition - any streamable resource implementation should be required to
fully support getURL() and getOutputStream(). 


Cheers, Steve.

Stephen McConnell

To unsubscribe, e-mail:
For additional commands, e-mail:

View raw message