1 /*
2 * $Id: SnippetHtmlFileImpl.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.snippet;
27
28 import java.io.File;
29 import java.io.FileInputStream;
30 import java.io.FileNotFoundException;
31 import java.io.FileOutputStream;
32 import java.io.IOException;
33 import java.util.LinkedList;
34 import java.util.List;
35
36 import org.apache.commons.io.IOUtils;
37
38 import de.awtools.homegen.TransformerException;
39 import de.awtools.homegen.directory.GHDirectory;
40 import de.awtools.homegen.directory.utils.AbstractGHFile;
41
42 /**
43 * Die Implementierung von {@link SnippetHtmlFile}.
44 *
45 * @version $LastChangedRevision: 2993 $ $LastChangedDate: 2011-11-24 20:51:48 +0100 (Thu, 24 Nov 2011) $
46 * @author by Andre Winkler, $LastChangedBy: andrewinkler $
47 *
48 * @since 1.3
49 */
50 final class SnippetHtmlFileImpl extends AbstractGHFile implements
51 SnippetHtmlFile {
52
53 /**
54 * Konstruktor.
55 *
56 * @param _file Die zugeordnete Datei.
57 * @param _directory Das zugeordnete Verzeichnis.
58 * @param _name Der Name für die zugeordnete Datei.
59 */
60 public SnippetHtmlFileImpl(final File _file, final GHDirectory _directory,
61 final String _name) {
62
63 super(_file, _directory, _name);
64 }
65
66 // -- cssFiles ------------------------------------------------------------
67
68 /** Die importierten CSS Dateien. */
69 private final List<String> cssFiles = new LinkedList<String>();
70
71 /**
72 * Liefert die importierten CSS Dateien.
73 *
74 * @see SnippetHtmlFile#getCSSFiles()
75 */
76 @Override
77 public String[] getCSSFiles() {
78 return ((String[]) cssFiles.toArray(new String[cssFiles.size()]));
79 }
80
81 /**
82 * Fügt eine weitere CSS Datei hinzu.
83 *
84 * @param cssFile Eine CSS Datei.
85 */
86 void addCSSFile(final String cssFile) {
87 cssFiles.add(cssFile);
88 }
89
90 /**
91 * Fügt weitere CSS Dateien hinzu.
92 *
93 * @param _cssFiles Eine List von CSS Dateien.
94 */
95 void addCSSFile(final List<String> _cssFiles) {
96 cssFiles.addAll(_cssFiles);
97 }
98
99 // -- title ---------------------------------------------------------------
100
101 /** Der Title der Seite. */
102 private String title;
103
104 /**
105 * Liefert den Titel der Seite.
106 *
107 * @return Der Titel der Seite.
108 */
109 @Override
110 public String getTitle() {
111 return title;
112 }
113
114 /**
115 * Setzt den Titel der Seite.
116 *
117 * @param value Ein Titel.
118 */
119 void setTitle(final String value) {
120 title = value;
121 }
122
123 // -- body ----------------------------------------------------------------
124
125 /** Der HTML-Body der Seite. */
126 private File body;
127
128 /**
129 * Liefert den HTML Body der Seite. Die Informationen werden aus einer
130 * Datei gelesen.
131 *
132 * @param encoding Die Zeichensatzkodierung der Datei.
133 * @return Der Body der Seite.
134 */
135 @Override
136 public String getBody(final String encoding) {
137 try {
138 return (IOUtils.toString(new FileInputStream(body), encoding));
139 } catch (FileNotFoundException ex) {
140 throw new TransformerException(ex);
141 } catch (IOException ex) {
142 throw new TransformerException(ex);
143 }
144 }
145
146 /**
147 * Liefert das FileHandle für den Body. In dieser Datei steht der
148 * extrahierte HTML Body der Datei. Die Body-Informationen werden nicht
149 * im Speicher gehalten.
150 *
151 * @return Der FileHandle für den Body.
152 */
153 File getBodyFileHandle() {
154 return body;
155 }
156
157 /**
158 * Legt die Body Informationen in einer Datei ab. Der Dateiname entspricht
159 * dem Originaldateiname plus einem '__' Prefix.
160 *
161 * @param value Der Body.
162 */
163 void setBody(final String value) {
164 // TODO
165 StringBuilder buf = new StringBuilder(getName());
166 buf.append("_snippet");
167 body = new File(getDirectory().getFile(), buf.toString());
168
169 FileOutputStream fos = null;
170 try {
171 fos = new FileOutputStream(body);
172 IOUtils.write(value, fos);
173 } catch (FileNotFoundException ex) {
174 throw new TransformerException(ex);
175 } catch (IOException ex) {
176 throw new TransformerException(ex);
177 } finally {
178 IOUtils.closeQuietly(fos);
179 }
180 }
181
182 }