<?xml version="1.0"?>

<document>
    <properties>
        <title>TODO</title>
        <author email="jstrachan@apache.org">James Strachan</author>
        <author email="adammurdoch@apache.org">Adam Murdoch</author>
        <author email="imario@apache.org">Mario Ivankovits</author>
    </properties>

    <body>
        <section name="TODO">
            <p>
                The following is a list of items that need to be completed.
                Contributions are welcome!
            </p>

            <ul>
                <li>More documentation (status, file naming etc).</li>
                <li>Fix the
                    <a href="task-list.html">TODO items</a> in the code.
                </li>
                <li>Add more providers:
                    <ul>
                        <li>nfs</li>
                        <li>tar</li>
                        <li>
                            <strike>gzip</strike> (done)
                        </li>
                        <li>
                            <strike>bzip2</strike> (done)
                        </li>
                        <li>rsync</li>
                        <li>
                            <strike>ClassLoader resources</strike> (done)
                        </li>
                        <li>cvs</li>
                        <li>subversion</li>
                        <li>jdbc filesystem</li>
                        <li>xml filesystem</li>
                        <li>jndi</li>
                        <li>imap</li>
                        <li>local mirror</li>
                        <li>spidering http</li>
                        <li>...</li>
                    </ul>
                </li>
                <li>JNDI integration.</li>
                <li>Formalise the provider API.</li>
                <li>WebDAV Provider:
                    <ul>
                        <li>Add plain http support, and auto-detect dav resources.</li>
                        <li>Add set last-modified.</li>
                        <li>
                            <strike>Add proxy support</strike> (done)
                        </li>
                        <li>HTTPS</li>
                    </ul>
                </li>
                <li>SFTP Provider:
                    <ul>
                        <li>
                            <strike>Add key-based authentication.</strike> (done)
                        </li>
                        <li>
                            <strike>Support last-modified.</strike> (done)
                        </li>
                    </ul>
                </li>
                <li>Zip/Jar Provider:
                    <ul>
                        <li>Extract an AbstractLayerFileSystem out of ZipFileSystem.</li>
                        <li>
                            Track changes to the parent layer.  Eg when the
                            parent layer is deleted, mark all the files in the
                            fs as 'does-not-exist'.
                        </li>
                        <li>Add support for writing to zip/jar files.</li>
                    </ul>
                </li>
                <li>FTP Provider:
                    <ul>
                        <li>
                            <strike>Fix set last-modified.</strike> (done)
                        </li>
                        <li>
                            <strike>Support passive mode.</strike> (done FtpFileSystemConfigBuilder)
                        </li>
                        <li>
                            <strike>Add proxy support.</strike> no ftp-proxy standard available. If you are lucky - you simply could use special formed urls.
                        </li>
                    </ul>
                </li>
                <li>URL Provider:
                    <ul>
                        <li>Support attributes.</li>
                    </ul>
                </li>
                <li>HTTP Provider:
                    <ul>
                        <li>Support attributes.</li>
                        <li>HTTPS support.</li>
                    </ul>
                </li>
                <li>
                    <strike>The in-memory caching mechanism is pretty rudimentary at
                    this stage. It needs work to make it size capped. In addition,
                    some mechanism needs to be provided to release and refresh
                    cached info.</strike> (done)
                    <br/>
                    <strike>Some mechanism needs to be provided refresh cached info</strike>
                    (FileObject.close() rereads the file informations - this is threadsafe)
                </li>
                <li>
                    The local disk caching mechanism also needs more work.  Needs
                    to check last-modified time.  Replicator needs to be more
                    configurable.
                </li>
                <li>Add persistent replicator.</li>
                <li>Change the model so that folders may have content.</li>
                <li>
                    Finish support for junctions:  Make ancestors of a junction
                    point visible, fire events when junction is added or removed,
                    tests.
                </li>
                <li>
                    Add support for federation (ie transparently crossing file
                    system boundaries, such as drilling down into the contents
                    of a Jar file).
                </li>
                <li>
                    <strike>Add Filtering file systems, which sit on top of another
                    file system, and alter the contents.  For example, gzip or bzip2.
                    </strike>
                    <br/>No longer needet - VFS handles compressed files like a filesystem with only one entry
                </li>
                <li>Add an equivalent of the fileScanner Jelly tag.</li>
                <li>
                    Add an equivalent of Ant path, fileset, dirset, filelist, etc.
                    Ideally, these can be abstracted into a single data type.
                </li>
                <li>
                    Allow selectors, name mappers, and filters to be specified
                    for the Ant tasks.
                </li>
                <li>Add capabilities to FileObject.</li>
                <li>Attributes and attribute schema.</li>
                <li>
                    Handle file canonicalisation better (for cases like
                    case-insensitive file systems, symbolic links, name mangling, etc).
                </li>
                <li>Add more selectors: XPath, Ant style, regular expression.</li>
                <li>Add adaptor (NodePointerFactory?) for use with JXpath.</li>
                <li>
                    Add content-changed, attribute-changed, and move events to
                    FileListener.  Maybe split into structure and content
                    listeners.
                </li>
                <li>Provide a hook for authentication.</li>
                <li>Get/set the file permissions.</li>
                <li>Sort out threading model.</li>
                <li>Automatically checksum and/or verify remote files.</li>
                <li>
                    Use remote copies and moves for those file systems that
                    support it.
                </li>
                <li>Add a file monitor, that watches for external changes to files.</li>
                <li>Add a DefaultFileSystemManager subclass that is an Avalon component.</li>
                <li>
                    Look at adding native code for fine-grained control over
                    permissions, file monitoring, faster moves, etc.  Must be
                    optional - the thing should still build and run without the
                    native code.
                </li>
            </ul>
        </section>
    </body>
</document>