This is a rough sketch of my current ideas, as I won't have the time
to work on this this week and I know Antoine wants to get his feet
wet.

Stefan

I'm trying to combine Antoine's and my ideas a little here:

* introduce Resource with name, exists and lastmodified as attributes.

  more can be added later, if needed.

  should probably go into the types package.

* introduce ResourceFactory interface with one method:

  Resource getResource(String name)

  types package (or util?).

* make ZipScanner return the names of the ZipEntries instead of the
  name of the archive in getIncludedFiles and so on.

* introduce SourceSelector with a method

  Resource[] selectOutOfDateSources(Resource[] source,
                                    FileNameMapper mapper,
                                    ResourceFactory targets)

  that would basically do what SourceFileScanner#restrict does today,
  but worked on the lastmodfied properties of the Resources.

  util package.

* in Zip 

  - use Resources wrapped around Files for "normal" <fileset>s
    and wrapped around ZipEntrys for <zipfilesets> that use the src
    attribute.

  - use a ResourceFactory that wraps resources around ZipEntrys of the
    existing archive.

  - short-circuit, if the archive doesn't exis, off course.

  we'll probably want to cache the Resources of the existing archive
  so that we don't re-read the archive for each fileset.

* make SourceFileScanner delegate to SourceSelector using a built-in
  ResourceFactory that wraps Resources around "new File(srcDir, files[i])"
  and "new File(destDir, name)" respectively.

  this is here for backwards compatibilty.


Optional, not really necessary to fix the bug.

* make DirectoryScanner implement ResourceFactory

  will return a Resource that wraps "new File(dir, name)"

* make ZipScanner override the method so that it will return a wrapper
  around the correct ZipEntry.

* something similar needs to be done to FTPDirectoryScanner in
  oata.taskdefs.optional.net.FTP.

* add getIncludedResources() and so on to DirectoryScanner that return
  Resource instances instead of names.

  use these methods in all tasks and use SourceSelector instead of
  SourceFileScanner.

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

Reply via email to