View Javadoc

1   /*
2    * $Id: AbstractGHFile.java 2993 2011-11-24 19:51:48Z andrewinkler $
3    * ============================================================================
4    * Project gluehloch-homepage-core
5    * Copyright (c) 2004-2010 by Andre Winkler. All rights reserved.
6    * ============================================================================
7    *          GNU LESSER GENERAL PUBLIC LICENSE
8    *  TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
9    *
10   *  This library is free software; you can redistribute it and/or
11   *  modify it under the terms of the GNU Lesser General Public
12   *  License as published by the Free Software Foundation; either
13   *  version 2.1 of the License, or (at your option) any later version.
14   *
15   *  This library is distributed in the hope that it will be useful,
16   *  but WITHOUT ANY WARRANTY; without even the implied warranty of
17   *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
18   *  Lesser General Public License for more details.
19   *
20   *  You should have received a copy of the GNU Lesser General Public
21   *  License along with this library; if not, write to the Free Software
22   *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
23   *
24   */
25  
26  package de.awtools.homegen.directory.utils;
27  
28  import java.io.File;
29  import java.util.List;
30  
31  import org.apache.commons.io.FilenameUtils;
32  
33  import de.awtools.homegen.directory.FileType;
34  import de.awtools.homegen.directory.GHDirectory;
35  import de.awtools.homegen.directory.GHFile;
36  
37  /**
38   * Utility Klasse für {@link GHFile} Implementierungen.
39   *
40   * @version $LastChangedRevision: 2993 $ $LastChangedDate: 2011-11-24 20:51:48 +0100 (Thu, 24 Nov 2011) $
41   * @author by Andre Winkler, $LastChangedBy: andrewinkler $
42   */
43  public abstract class AbstractGHFile extends AbstractGHEntry implements GHFile {
44  
45      /**
46       * Konstruktor.
47       *
48       * @param _file Die zugeordnete Datei.
49       * @param _directory Das zugeordnete Verzeichnis.
50       * @param _name Der Name für die zugeordnete Datei.
51       */
52      protected AbstractGHFile(final File _file, final GHDirectory _directory,
53              final String _name) {
54  
55          file = _file;
56          snippetDirectory = _directory;
57          name = _name;
58  
59          if (!name.startsWith("/")) {
60              throw new IllegalStateException("name of file '" + name
61                      + "' must start with a '/'");
62          }
63  
64          fileType = FileType.findType(_name);
65      }
66  
67      // -- name ----------------------------------------------------------------
68  
69      /** Der Name der zugeordneten Datei. */
70      private final String name;
71  
72      /**
73       * Der Name für die Datei.
74       *
75       * @return Dateiname.
76       */
77      @Override
78      public final String getName() {
79          return name;
80      }
81  
82      /**
83       * Liefert den Pfad für diese Datei. An dem Pfad ist nicht der Dateiname
84       * angehangen. Dafür ist {@link #getNameAndPath()} zu verwenden.
85       *
86       * @see de.awtools.homegen.directory.GHEntry#getPath()
87       */
88      @Override
89      public final String getPath() {
90          return getDirectory().getPath();
91      }
92  
93      /**
94       * Liefert den {@link GHDirectory} Pfad von der Wurzel bis zu diesem
95       * Eintrag.
96       *
97       * @return Eine Liste mit dem {@link GHDirectory}-Pfad von der Wurzel bis
98       *     zu diesem Eintrag.
99       */
100     @Override
101     public final List<GHDirectory> getDirectoryPath() {
102         return getDirectory().getDirectoryPath();
103     }
104 
105     /**
106      * Liefert den Name plus den Verzeichnispfad von der Wurzel an abwärts.
107      *
108      * @return Datei und Pfadname.
109      */
110     @Override
111     public final String getNameAndPath() {
112         StringBuilder sb = new StringBuilder();
113         sb.append(getDirectory().getPath());
114         sb.append(name);
115         return sb.toString();
116     }
117 
118     /**
119      * Liefert den Namen der Datei ohne Extension, d.h. der Name ohne den
120      * Zusatz, der nach '.' erscheint.
121      *
122      * @return Der Name der Datei ohne Extension.
123      */
124     @Override
125     public final String getNameWithoutExtension() {
126         return FilenameUtils.removeExtension(getName());
127     }
128 
129     /**
130      * Liefert die Extension der Datei, d.h. alles was nach dem letzten '.'
131      * im Namen steht.
132      *
133      * @return Die Datei-Extension.
134      */
135     @Override
136     public final String getExtension() {
137         return FilenameUtils.getExtension(getName());
138     }
139 
140     // -- file ----------------------------------------------------------------
141 
142     /** Das zugeordnete <code>File</code> Objekt. */
143     private final File file;
144 
145     /**
146      * Liefert das <code>File</code> Objekt für dies Datei. Für das
147      * Maven-Homepage-Plugin ist dies i.d.R. das Verzeichnis
148      * <code>target/www-prep</code>.
149      *
150      * @return Das <code>File</code> Objekt zu dieser Datei.
151      */
152     @Override
153     public final File getFile() {
154         return file;
155     }
156 
157     // -- directory -----------------------------------------------------------
158 
159     /** Das zugeordnete Verzeichnis. */
160     private final GHDirectory snippetDirectory;
161 
162     /**
163      * Liefert das zugeordnete Verzeichnis.
164      *
165      * @return Das zugeordnete Verzeichnis.
166      */
167     @Override
168     public final GHDirectory getDirectory() {
169         return snippetDirectory;
170     }
171 
172     // -- fileType ------------------------------------------------------------
173 
174     /** Der Dateityp. */
175     private final FileType fileType;
176 
177     /**
178      * Liefert den Dateityp.
179      *
180      * @return Der Dateityp.
181      */
182     @Override
183     public final FileType getFileType() {
184         return fileType;
185     }
186 
187     // -- level ---------------------------------------------------------------
188 
189     /**
190      * @return Die Anzahl der Verzeichnisstufen bis in das Wurzelverzeichnis.
191      *
192      * @see de.awtools.homegen.directory.GHDirectory#getLevelFromRoot()
193      */
194     @Override
195     public final int getLevelFromRoot() {
196         return snippetDirectory.getLevelFromRoot();
197     }
198 
199     @Override
200     public final String printGraph() {
201         StringBuilder spaces = new StringBuilder();
202         for (int tab = 0; tab < getLevelFromRoot(); tab++) {
203             spaces.append("  ");
204         }
205         return spaces.append("  |-- ").append(getName()).append("\r\n")
206                 .toString();
207     }
208 
209     // ------------------------------------------------------------------------
210 
211     @Override
212     public String toString() {
213         StringBuilder sb = new StringBuilder("[File='");
214         sb.append(getNameAndPath());
215         sb.append("']");
216         return sb.toString();
217     }
218 
219     @Override
220     public boolean equals(final Object _object) {
221         boolean result = false;
222         if (_object instanceof AbstractGHFile) {
223             AbstractGHFile aghf = (AbstractGHFile) _object;
224             result = (getNameAndPath().equals(aghf.getNameAndPath()));
225         }
226         return result;
227     }
228 
229     @Override
230     public int hashCode() {
231         return (getNameAndPath().hashCode());
232     }
233 
234 }