some code cleanup. removed unnecessary semikolons, unused vars, etc.
[mir.git] / source / mircoders / producer / reader / SupplementalProducerNodeBuilders.java
1 /*
2  * Copyright (C) 2001, 2002 The Mir-coders group
3  *
4  * This file is part of Mir.
5  *
6  * Mir is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * Mir is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with Mir; if not, write to the Free Software
18  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19  *
20  * In addition, as a special exception, The Mir-coders gives permission to link
21  * the code of this program with  any library licensed under the Apache Software License,
22  * The Sun (tm) Java Advanced Imaging library (JAI), The Sun JIMI library
23  * (or with modified versions of the above that use the same license as the above),
24  * and distribute linked combinations including the two.  You must obey the
25  * GNU General Public License in all respects for all of the code used other than
26  * the above mentioned libraries.  If you modify this file, you may extend this
27  * exception to your version of the file, but you are not obligated to do so.
28  * If you do not wish to do so, delete this exception statement from your version.
29  */
30 package mircoders.producer.reader;
31
32 import java.io.File;
33 import java.util.Map;
34
35 import mir.producer.ProducerNode;
36 import mir.producer.reader.DefaultProducerNodeBuilders;
37 import mir.producer.reader.ProducerConfigExc;
38 import mir.producer.reader.ProducerNodeBuilder;
39 import mir.producer.reader.ProducerNodeBuilderLibrary;
40 import mir.util.xml.XMLParserExc;
41 import mir.util.xml.XMLReaderTool;
42 import mircoders.producer.ContentMarkingProducerNode;
43 import mircoders.producer.ContentModifyingProducerNode;
44 import mircoders.producer.IndexingProducerNode;
45 import mircoders.producer.MediaGeneratingProducerNode;
46 import mircoders.producer.PDFGeneratingProducerNode;
47 import mircoders.producer.PDFPreFormattingProducerNode;
48 import mircoders.producer.RadicalendarProducerNode;
49 import mircoders.producer.UnIndexingProducerNode;
50
51
52 public class SupplementalProducerNodeBuilders {
53
54   public static void registerBuilders(ProducerNodeBuilderLibrary aBuilderLibrary, File aBasePath) throws ProducerConfigExc {
55     aBuilderLibrary.registerBuilder("ModifyContent", ContentModifyingProducerNodeBuilder.class);
56     aBuilderLibrary.registerBuilder("MarkContent", ContentMarkingProducerNodeBuilder.class);
57     aBuilderLibrary.registerBuilder("GenerateMedia", MediaGeneratingProducerNodeBuilder.class);
58
59     aBuilderLibrary.registerFactory("IndexContent", new ContentIndexingProducerNodeBuilder.factory(aBasePath));
60     aBuilderLibrary.registerFactory("UnIndexContent", new ContentUnIndexingProducerNodeBuilder.factory(aBasePath));
61     aBuilderLibrary.registerBuilder("PDFPreFormat", PDFPreFormattingProducerNodeBuilder.class);
62     aBuilderLibrary.registerBuilder("PDFGenerate", PDFGeneratingProducerNodeBuilder.class);
63     aBuilderLibrary.registerBuilder("Radicalendar", RadicalendarProducerNodeBuilder.class);
64 //    aBuilderLibrary.registerBuilder("ReportChangedFiles", );
65   }
66
67   private final static String   MARKER_KEY_ATTRIBUTE = DefaultProducerNodeBuilders.KEY_ATTRIBUTE;
68   private final static String[] MARKER_REQUIRED_ATTRIBUTES = { MARKER_KEY_ATTRIBUTE };
69   private final static String[] MARKER_OPTIONAL_ATTRIBUTES = {};
70   private final static String[] MARKER_SUBNODES = {};
71
72   public static class ContentMarkingProducerNodeBuilder extends DefaultProducerNodeBuilders.AbstractProducerNodeBuilder {
73
74     private String key;
75
76     public ContentMarkingProducerNodeBuilder() {
77       super(MARKER_SUBNODES);
78     }
79
80     public void setAttributes(Map anAttributes) throws ProducerConfigExc, XMLParserExc {
81       XMLReaderTool.checkAttributes(anAttributes, MARKER_REQUIRED_ATTRIBUTES, MARKER_OPTIONAL_ATTRIBUTES);
82
83       key = (String) anAttributes.get(MARKER_KEY_ATTRIBUTE);
84     }
85
86     public ProducerNode constructNode() {
87       return new ContentMarkingProducerNode(key);
88     }
89   }
90   private final static String   INDEXER_KEY_ATTRIBUTE = DefaultProducerNodeBuilders.KEY_ATTRIBUTE;
91   private final static String   INDEXER_INDEX_ATTRIBUTE = "pathToIndex";
92   private final static String[] INDEXER_REQUIRED_ATTRIBUTES = { INDEXER_KEY_ATTRIBUTE, INDEXER_INDEX_ATTRIBUTE };
93   private final static String[] INDEXER_OPTIONAL_ATTRIBUTES = {};
94   private final static String[] INDEXER_SUBNODES = {};
95
96   public static class ContentIndexingProducerNodeBuilder extends DefaultProducerNodeBuilders.AbstractProducerNodeBuilder {
97     private String key;
98     private String pathToIndex;
99     private File indexBasePath;
100
101     private static class factory implements ProducerNodeBuilderFactory {
102       private File sourceBasePath;
103
104       public factory(File aSourceBasePath) {
105         sourceBasePath = aSourceBasePath;
106       }
107
108       public ProducerNodeBuilder makeBuilder() {
109         return new ContentIndexingProducerNodeBuilder(sourceBasePath);
110       }
111     }
112
113     public ContentIndexingProducerNodeBuilder(File anIndexBasePath) {
114       super(INDEXER_SUBNODES);
115
116       indexBasePath = anIndexBasePath;
117     }
118
119     public void setAttributes(Map anAttributes) throws ProducerConfigExc, XMLParserExc {
120       XMLReaderTool.checkAttributes(anAttributes, INDEXER_REQUIRED_ATTRIBUTES, INDEXER_OPTIONAL_ATTRIBUTES);
121
122       key = (String) anAttributes.get(INDEXER_KEY_ATTRIBUTE);
123       pathToIndex = (String) anAttributes.get(INDEXER_INDEX_ATTRIBUTE);
124     }
125
126     public ProducerNode constructNode() {
127       return new IndexingProducerNode(indexBasePath, key, pathToIndex);
128     }
129   }
130
131   private final static String   UNINDEXER_KEY_ATTRIBUTE = DefaultProducerNodeBuilders.KEY_ATTRIBUTE;
132   private final static String   UNINDEXER_INDEX_ATTRIBUTE = "pathToIndex";
133   private final static String[] UNINDEXER_REQUIRED_ATTRIBUTES = { UNINDEXER_KEY_ATTRIBUTE, UNINDEXER_INDEX_ATTRIBUTE };
134   private final static String[] UNINDEXER_OPTIONAL_ATTRIBUTES = {};
135   private final static String[] UNINDEXER_SUBNODES = {};
136
137   public static class ContentUnIndexingProducerNodeBuilder extends DefaultProducerNodeBuilders.AbstractProducerNodeBuilder {
138     private String key;
139     private String pathToIndex;
140
141     private File indexBasePath;
142
143     private static class factory implements ProducerNodeBuilderFactory {
144       private File indexBasePath;
145
146       public factory(File aSourceBasePath) {
147         indexBasePath = aSourceBasePath;
148       }
149
150       public ProducerNodeBuilder makeBuilder() {
151         return new ContentUnIndexingProducerNodeBuilder(indexBasePath);
152       }
153     }
154
155     public ContentUnIndexingProducerNodeBuilder(File anIndexBasePath) {
156       super(UNINDEXER_SUBNODES);
157
158       indexBasePath = anIndexBasePath;
159     }
160
161     public void setAttributes(Map anAttributes) throws ProducerConfigExc, XMLParserExc {
162       XMLReaderTool.checkAttributes(anAttributes, UNINDEXER_REQUIRED_ATTRIBUTES, UNINDEXER_OPTIONAL_ATTRIBUTES);
163
164       key = (String) anAttributes.get(UNINDEXER_KEY_ATTRIBUTE);
165       pathToIndex = (String) anAttributes.get(UNINDEXER_INDEX_ATTRIBUTE);
166     }
167
168     public ProducerNode constructNode() {
169       return new UnIndexingProducerNode(indexBasePath, key,pathToIndex);
170     }
171   }
172
173   private final static String   CONTENT_MODIFIER_KEY_ATTRIBUTE = DefaultProducerNodeBuilders.KEY_ATTRIBUTE;
174   private final static String   CONTENT_MODIFIER_FIELD_ATTRIBUTE = "field";
175   private final static String   CONTENT_MODIFIER_VALUE_ATTRIBUTE = "value";
176   private final static String[] CONTENT_MODIFIER_REQUIRED_ATTRIBUTES = { CONTENT_MODIFIER_KEY_ATTRIBUTE, CONTENT_MODIFIER_FIELD_ATTRIBUTE, CONTENT_MODIFIER_VALUE_ATTRIBUTE };
177   private final static String[] CONTENT_MODIFIER_OPTIONAL_ATTRIBUTES = {};
178   private final static String[] CONTENT_MODIFIER_SUBNODES = {};
179
180   public static class ContentModifyingProducerNodeBuilder extends DefaultProducerNodeBuilders.AbstractProducerNodeBuilder {
181
182     private String key;
183     private String field;
184     private String value;
185
186     public ContentModifyingProducerNodeBuilder() {
187       super(CONTENT_MODIFIER_SUBNODES);
188     }
189
190     public void setAttributes(Map anAttributes) throws ProducerConfigExc, XMLParserExc {
191       XMLReaderTool.checkAttributes(anAttributes, CONTENT_MODIFIER_REQUIRED_ATTRIBUTES, CONTENT_MODIFIER_OPTIONAL_ATTRIBUTES);
192
193       key = (String) anAttributes.get(CONTENT_MODIFIER_KEY_ATTRIBUTE);
194       field = (String) anAttributes.get(CONTENT_MODIFIER_FIELD_ATTRIBUTE);
195       value = (String) anAttributes.get(CONTENT_MODIFIER_VALUE_ATTRIBUTE);
196     }
197
198     public ProducerNode constructNode() {
199       return new ContentModifyingProducerNode(key, field, value);
200     }
201   }
202
203   private final static String   MEDIA_KEY_ATTRIBUTE = DefaultProducerNodeBuilders.KEY_ATTRIBUTE;
204   private final static String[] MEDIA_REQUIRED_ATTRIBUTES = { MEDIA_KEY_ATTRIBUTE };
205   private final static String[] MEDIA_OPTIONAL_ATTRIBUTES = {};
206   private final static String[] MEDIA_SUBNODES = {};
207
208   public static class MediaGeneratingProducerNodeBuilder extends DefaultProducerNodeBuilders.AbstractProducerNodeBuilder {
209
210     private String key;
211
212     public MediaGeneratingProducerNodeBuilder() {
213       super(MEDIA_SUBNODES);
214     }
215
216     public void setAttributes(Map anAttributes) throws ProducerConfigExc, XMLParserExc {
217       XMLReaderTool.checkAttributes(anAttributes, MEDIA_REQUIRED_ATTRIBUTES, MEDIA_OPTIONAL_ATTRIBUTES);
218
219       key = (String) anAttributes.get(MEDIA_KEY_ATTRIBUTE);
220     }
221
222     public ProducerNode constructNode() {
223       return new MediaGeneratingProducerNode(key);
224     }
225   }
226
227   public static class PDFPreFormattingProducerNodeBuilder extends DefaultProducerNodeBuilders.AbstractProducerNodeBuilder {
228     private final static String   MARKER_KEY_ATTRIBUTE = DefaultProducerNodeBuilders.KEY_ATTRIBUTE;
229     private final static String   PDF_NUM_LINES_ATTRIBUTE = "numLinesBetweenImages";
230     private final static String   PDF_CONTENT_WIDTH_ATTRIBUTE = "contentAreaWidthCM";
231     private final static String   PDF_CHAR_WIDTH_ATTRIBUTE = "charWidthCM";
232     private final static String   PDF_PIXEL_WIDTH_ATTRIBUTE = "pixelWidthCM";
233     private final static String   PDF_LINE_HEIGHT_ATTRIBUTE = "lineHeightCM";
234     private final static String[] MARKER_REQUIRED_ATTRIBUTES = { MARKER_KEY_ATTRIBUTE, PDF_NUM_LINES_ATTRIBUTE, PDF_CONTENT_WIDTH_ATTRIBUTE,PDF_CHAR_WIDTH_ATTRIBUTE,PDF_PIXEL_WIDTH_ATTRIBUTE,PDF_LINE_HEIGHT_ATTRIBUTE };
235     private final static String[] MARKER_OPTIONAL_ATTRIBUTES = {};
236     private final static String[] MARKER_SUBNODES = {};
237
238     private String key;
239     private String numLinesBetweenImages;
240     private String contentAreaWidthCM;
241     private String characterWidthCM;
242     private String pixelWidthCM;
243     private String lineHeightCM;
244
245     public PDFPreFormattingProducerNodeBuilder() {
246       super(MARKER_SUBNODES);
247     }
248
249     public void setAttributes(Map anAttributes) throws ProducerConfigExc, XMLParserExc {
250       XMLReaderTool.checkAttributes(anAttributes, MARKER_REQUIRED_ATTRIBUTES, MARKER_OPTIONAL_ATTRIBUTES);
251
252       key = (String) anAttributes.get(MARKER_KEY_ATTRIBUTE);
253       numLinesBetweenImages = (String) anAttributes.get(PDF_NUM_LINES_ATTRIBUTE);
254       contentAreaWidthCM = (String) anAttributes.get(PDF_CONTENT_WIDTH_ATTRIBUTE);
255       characterWidthCM = (String) anAttributes.get(PDF_CHAR_WIDTH_ATTRIBUTE);
256       pixelWidthCM   = (String) anAttributes.get(PDF_PIXEL_WIDTH_ATTRIBUTE);
257       lineHeightCM = (String) anAttributes.get(PDF_LINE_HEIGHT_ATTRIBUTE);
258     }
259
260     public ProducerNode constructNode() {
261       return new PDFPreFormattingProducerNode(key,numLinesBetweenImages,contentAreaWidthCM,characterWidthCM,pixelWidthCM,lineHeightCM);
262     }
263   }
264
265   public static class PDFGeneratingProducerNodeBuilder extends DefaultProducerNodeBuilders.AbstractProducerNodeBuilder {
266     private final static String   PDF_GENERATOR_ATTRIBUTE = "generator";
267     private final static String   PDF_DESTINATION_ATTRIBUTE = "destination";
268     private final static String   PDF_STYLESHEET_ATTRIBUTE = "stylesheet";
269     private final static String[] MARKER_REQUIRED_ATTRIBUTES = {PDF_GENERATOR_ATTRIBUTE,PDF_DESTINATION_ATTRIBUTE,PDF_STYLESHEET_ATTRIBUTE  };
270     private final static String[] MARKER_OPTIONAL_ATTRIBUTES = {};
271     private final static String[] MARKER_SUBNODES = {};
272
273     private String generator;
274     private String destination;
275     private String stylesheet;
276
277
278     public PDFGeneratingProducerNodeBuilder() {
279       super(MARKER_SUBNODES);
280     }
281
282     public void setAttributes(Map anAttributes) throws ProducerConfigExc, XMLParserExc {
283       XMLReaderTool.checkAttributes(anAttributes, MARKER_REQUIRED_ATTRIBUTES, MARKER_OPTIONAL_ATTRIBUTES);
284
285       generator = (String) anAttributes.get(PDF_GENERATOR_ATTRIBUTE);
286       destination = (String) anAttributes.get(PDF_DESTINATION_ATTRIBUTE);
287       stylesheet = (String) anAttributes.get(PDF_STYLESHEET_ATTRIBUTE);
288     }
289
290     public ProducerNode constructNode() {
291       return new PDFGeneratingProducerNode(generator,destination,stylesheet);
292     }
293   }
294
295     public static class RadicalendarProducerNodeBuilder extends DefaultProducerNodeBuilders.AbstractProducerNodeBuilder {
296         private final static String RC_KEY_ATTRIBUTE = "key";
297         private final static String RC_GROUPNAME_ATTRIBUTE = "groupname";
298         private final static String RC_GMTOFFSET_ATTRIBUTE = "gmtoffset";
299         private final static String[] RC_REQUIRED_ATTRIBUTES = {RC_KEY_ATTRIBUTE,RC_GROUPNAME_ATTRIBUTE,RC_GMTOFFSET_ATTRIBUTE};
300         private final static String[] RC_OPTIONAL_ATTRIBUTES = {};
301         private final static String[] RC_SUBNODES = {};
302         private String key;
303         private String groupname;
304         private String gmtoffset;
305
306         public RadicalendarProducerNodeBuilder() {
307             super(RC_SUBNODES);
308         }
309         
310         public void setAttributes(Map anAttributes) throws ProducerConfigExc, XMLParserExc {
311             XMLReaderTool.checkAttributes(anAttributes, RC_REQUIRED_ATTRIBUTES, RC_OPTIONAL_ATTRIBUTES);
312
313             key = (String) anAttributes.get(RC_KEY_ATTRIBUTE);
314             groupname = (String) anAttributes.get(RC_GROUPNAME_ATTRIBUTE);
315             gmtoffset = (String) anAttributes.get(RC_GMTOFFSET_ATTRIBUTE);
316         }
317         
318         public ProducerNode constructNode() {
319             return new RadicalendarProducerNode(key,groupname,gmtoffset);
320         }
321                         
322     }
323     
324
325   /**
326    * Builder for {@link mircoders.producer.ChangedFilesReportingProducerNode}
327    * nodes.
328    */
329 /*
330   private static class ChangeReportingProducerNodeBuilder extends DefaultProducerNodeBuilders.AbstractProducerNodeBuilder {
331     private final static String   DESTINATION_FILE_ATTRIBUTE = "reportFile";
332     private final static String   LOCK_FILE_ATTRIBUTE = "lockfile";
333     private final static String   BASE_PATH_ATTRIBUTE = "basepath";
334     private final static String   EXCLUDED_PATHS_ATTRIBUTE = "excludedpaths";
335     private final static String   FLUSH_ATTRIBUTE = "flush";
336     private final static String[] REQUIRED_ATTRIBUTES = {DESTINATION_FILE_ATTRIBUTE};
337     private final static String[] OPTIONAL_ATTRIBUTES = {LOCK_FILE_ATTRIBUTE, BASE_PATH_ATTRIBUTE, EXCLUDED_PATHS_ATTRIBUTE, FLUSH_ATTRIBUTE};
338     private final static String[] SUBNODES = {};
339
340     private String reportFile;
341     private String lockFile;
342     private String basePath;
343     private String excludedPaths;
344     private String flush;
345
346     public ChangeReportingProducerNodeBuilder() {
347       super(SUBNODES);
348     }
349
350     public void setAttributes(Map anAttributes) throws ProducerConfigExc, XMLParserExc {
351       XMLReaderTool.checkAttributes(anAttributes, REQUIRED_ATTRIBUTES, OPTIONAL_ATTRIBUTES);
352
353       reportFile = XMLReaderTool.getStringAttributeWithDefault(anAttributes, DESTINATION_FILE_ATTRIBUTE, null);
354       lockFile = XMLReaderTool.getStringAttributeWithDefault(anAttributes, LOCK_FILE_ATTRIBUTE, null);
355       basePath = XMLReaderTool.getStringAttributeWithDefault(anAttributes, BASE_PATH_ATTRIBUTE, "");
356       excludedPaths = XMLReaderTool.getStringAttributeWithDefault(anAttributes, EXCLUDED_PATHS_ATTRIBUTE, "");
357       flush = XMLReaderTool.getStringAttributeWithDefault(anAttributes, FLUSH_ATTRIBUTE, "1");
358     };
359
360     public ProducerNode constructNode() {
361       return new ChangedFilesReportingProducerNode(reportFile, lockFile, basePath, excludedPaths, flush);
362     };
363   }
364 */
365 }
366
367