You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@commons.apache.org by Philippe Poulard <Ph...@sophia.inria.fr> on 2005/08/31 15:24:57 UTC

[VFS] "res:" protocol issue

hi,

i'm thinking about solutions on multiple matchings with the "res:" protocol

in fact, as a file is unique in its context (a resolution must always 
give 0 or 1 real file), there are no direct solution that VFS can provide

the problem is the same with the "file:" scheme, for Windows that has 
multiple drives :
file:///path/to/resource
could give several resources if each drive is considered

what are the solution ?
1) if no additional information is given, a "current" drive, say "C:" is 
assumed, and the resolution gives a single result ; that's the same for 
the "res:" scheme : there is a mechanism that gives a single result 
(arbitrary, it is the first found, which is not a bad strategy, i don't 
know a better one)

2) if the drive is known, it is simply specified :
file://C:/path/to/resource
        ^^ here
now, it's the same with "res:", that can be replaced by "jar:"
jar:this.jar!/path/to/resource

in fact, there is still a difference between "res:" and "jar:" : "res:" 
gives what is in the classpath, "jar:" gives any jar (and i don't know 
if a class taken from an explicit "jar:" that has been also specified in 
the classpath should be load by the same classloader, that is to say : 
are they the same class ? is there a Java expert here ?)

now what's happenned if you don't know the drives ? just ask for it :
File.listRoots();
now you can resolve /path/to/resource on each drive and select those 
that you prefer

this is just what is missing for "res:"
ResUtil.listJar();
now you can resolve /path/to/resource on each jar and select those that 
you prefer

just write the tool
-- 
Cordialement,

            ///
           (. .)
  -----ooO--(_)--Ooo-----
|   Philippe Poulard    |
  -----------------------

---------------------------------------------------------------------
To unsubscribe, e-mail: commons-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-user-help@jakarta.apache.org


Re: [VFS] "res:" protocol issue

Posted by Mario Ivankovits <ma...@ops.co.at>.
For sure we can combine both methods to:

FileObject fo = new CompositeFileObject(ResUtils.resolveClasspath())

Which is exactly what the classpath:/ fileprovider will have to do at first.

---
Mario


---------------------------------------------------------------------
To unsubscribe, e-mail: commons-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-user-help@jakarta.apache.org


Re: [VFS] "res:" protocol issue

Posted by Mario Ivankovits <ma...@ops.co.at>.
Hi (again ;-) )!
> this is just what is missing for "res:"
> ResUtil.listJar();
> now you can resolve /path/to/resource on each jar and select those 
> that you prefer
>
> just write the tool
And if you ;-) write it dont forget a classpath do not only contain jars 
but also directories.

So if I understand what you would like to have is something like

FileObject[] fos = ResUtils.resolveClasspath();

and then one is able to check if a requested resource is child of one of 
the "fos".


I have hade something else in mind, I thought it would be nice if we 
introduce a CompositeFileObject then we can do:

FileObject fo = VFS.getManager().resovleFile("classpath:org/");
FileObject[] fos = fo.getChildren();

The returned array is then a list of (maybe Composite-) FileObjects 
collected through different jars/directories.

The problem is that "org" in one jar can be a "file" and in another a 
"directory", but this can be solved in CompositeFileObject and so there 
is no "unclean" solution in VFS core.

This "CompositeFileObject" can be used outside of classpath:// to, e.g. 
what you can do is

FileObject fo = new CompositeFileObject("file://c:/", "file://d:/");
A fo.getChildren() will return a list from both filesystems then.


BTW: Notice the trailing "/" ;-) I start to like it.

Ciao,
Mario


---------------------------------------------------------------------
To unsubscribe, e-mail: commons-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-user-help@jakarta.apache.org