View Javadoc

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 }