View Javadoc

1   /***
2    * Redistribution  and use  in source  and binary  forms, with  or without
3    * modification, are permitted provided  that the following conditions are
4    * met :
5    *
6    * . Redistributions  of  source  code  must  retain  the  above copyright
7    *   notice, this list of conditions and the following disclaimer.
8    *
9    * . Redistributions in  binary form  must reproduce  the above  copyright
10   *   notice, this list of conditions  and the following disclaimer in  the
11   *   documentation and/or other materials provided with the distribution.
12   *
13   * . The name of the author may not be used to endorse or promote products
14   *   derived from this software without specific prior written permission.
15   *
16   * THIS SOFTWARE IS  PROVIDED BY THE  AUTHOR ``AS IS''  AND ANY EXPRESS  OR
17   * IMPLIED  WARRANTIES,  INCLUDING,  BUT   NOT  LIMITED  TO,  THE   IMPLIED
18   * WARRANTIES OF MERCHANTABILITY AND  FITNESS FOR A PARTICULAR  PURPOSE ARE
19   * DISCLAIMED.  IN NO  EVENT SHALL  THE AUTHOR  BE LIABLE  FOR ANY  DIRECT,
20   * INDIRECT,  INCIDENTAL,  SPECIAL,  EXEMPLARY,  OR  CONSEQUENTIAL  DAMAGES
21   * (INCLUDING,  BUT  NOT LIMITED  TO,  PROCUREMENT OF  SUBSTITUTE  GOODS OR
22   * SERVICES;  LOSS  OF USE,  DATA,  OR PROFITS;  OR  BUSINESS INTERRUPTION)
23   * HOWEVER CAUSED  AND ON  ANY THEORY  OF LIABILITY,  WHETHER IN  CONTRACT,
24   * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
25   * ANY  WAY  OUT OF  THE  USE OF  THIS  SOFTWARE, EVEN  IF  ADVISED OF  THE
26   * POSSIBILITY OF SUCH DAMAGE.
27   *
28   * $Id$
29   */
30  
31  package palmed.file;
32  
33  import java.io.IOException;
34  import java.util.Enumeration;
35  import java.util.Vector;
36  import javax.microedition.lcdui.Image;
37  import javax.microedition.lcdui.List;
38  
39  /***
40   * This class retrieves the content of a given directory.
41   *
42   * @author Mathieu Champlon
43   * @version $Revision$ $Date$
44   */
45  public final class DirectoryVisitor implements IDirectoryVisitor
46  {
47      /***
48       * The retrieved directories and files.
49       */
50      private final Vector directories_, files_;
51      /***
52       * The directory and file icons.
53       */
54      private final Image directoryIcon_, fileIcon_;
55  
56      /***
57       * Create a directory visitor.
58       */
59      public DirectoryVisitor()
60      {
61          directories_ = new Vector();
62          files_ = new Vector();
63          directoryIcon_ = load( "/icons/folder.png" );
64          fileIcon_ = load( "/icons/text-x-generic.png" );
65      }
66  
67      private Image load( final String filename )
68      {
69          try
70          {
71              return Image.createImage( filename );
72          }
73          catch( Exception e )
74          {
75              throw new RuntimeException( e.getMessage() );
76          }
77      }
78  
79      /***
80       * Lists alphabetically the directories and files contained in a given directory.
81       *
82       * @param list the list to fill
83       * @param directory the directory to visit
84       * @throws IOException an io exception occured
85       */
86      public void fill( final List list, final IDirectory directory ) throws IOException
87      {
88          files_.removeAllElements();
89          directories_.removeAllElements();
90          directory.accept( this );
91          Enumeration e = directories_.elements();
92          while( e.hasMoreElements() )
93              list.append( (String)e.nextElement(), directoryIcon_ );
94          e = files_.elements();
95          while( e.hasMoreElements() )
96              list.append( (String)e.nextElement(), fileIcon_ );
97      }
98  
99      /***
100      * {@inheritDoc}
101      */
102     public void visitFile( final String name )
103     {
104         insertSorted( files_, name );
105     }
106 
107     /***
108      * {@inheritDoc}
109      */
110     public void visitDirectory( final String name )
111     {
112         insertSorted( directories_, name );
113     }
114 
115     private void insertSorted( final Vector vector, final String name )
116     {
117         for( int index = 0; index < vector.size(); ++index )
118         {
119             if( before( name, (String)vector.elementAt( index ) ) )
120             {
121                 vector.insertElementAt( name, index );
122                 return;
123             }
124         }
125         vector.addElement( name );
126     }
127 
128     private boolean before( final String str1, final String str2 )
129     {
130         return str1.toLowerCase().compareTo( str2.toLowerCase() ) < 0;
131     }
132 }