Mario Ivankovits wrote:

As you might see, VFS needs to attach the file to resolve correctly if the user do NOT always state a directory with the leading "/".


I disagree : "/path/to/dir/" denotes definitively a DIRECTORY ; don't need to attach()


Now that we see we have to attach the file the question is if we simply change resolveFile to check if the base-fileObject is a file or directory/imaginary? In the first case we ask the parent fileObject to resolve in the latter we resolve like today. BUT - this is something a user can do today with its own VfsUtils.resolveFile() method.


Then there is still the problem to mark a filename as directory in advance.

If you use VFS as singleton (VFS.getManager()) and resolve the same file you will get the SAME FileObject/FileName instance. e.g. it allows threads to synchronize against a fileobject. Now what if the first thread uses "file:///any/name/" and the second uses "file:///any/name" - the first thread should see a filename in state DIRECTORY and the second in state IMAGINARY until the file is attached or created.

I proposed that in any case, "file:///any/name/" and "file:///any/name" would should both be "normalized" to "file:///any/name" ; if a FileName object needs to be created, the former must have a flag that states that it is a DIRECTORY, the latter an IMAGINARY file
now, what could happenned if a file is in the cache ?
1) "file:///any/name/" create the file name "file:///any/name" which is a DIRECTORY, put it in the cache 2) "file:///any/name" retrieve the entry in the cache, which is known as a DIRECTORY
the other scenario :
1) "file:///any/name" create the file name "file:///any/name" which is an IMAGINARY, put it in the cache 2) "file:///any/name/" retrieve the entry "file:///any/name" in the cache and change its type to DIRECTORY

as you see, before forcing attach(), there are many cases where a file is *known* to be a directory :
-if the cache tells that "file:///any/name" is a directory, believe it
-if the name ends with "/", it is a directory
-if the name doesn't end with "/" but i force the type to be a directory
i think it is necessary to "normalize" "file:///any/name/" and "file:///any/name" to a single name ; i think it is important that a FileName must have a flag that denotes if it is a DIRECTORY or not

attach() should be used in a last resort if this flag is missing ; this allows to work on *names* without involving the FS, which may be a bottleneck for remote FS

moreover, users should have the choice to invoke themselves attach() :

base.attach()
fsm.resolveFile( base, uri )

or

fsm.resolveFile( base, uri )

there is a last point : what about files that doesn't exist on the underlying FS ??? attach() won't help in this case ; users must be able to state on the type of such file, either by naming it with a trailing "/", or by forcing the name to be a DIRECTORY

that's why it is important to work on names, not on the real object on the FS

I admit, a very uncommon situation, but we have to deal with it.


--
Cordialement,

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

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to