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 }