1.1 restoration
[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.util.Map;
33 import java.io.File;
34
35 import mir.producer.ProducerNode;
36 import mir.producer.reader.DefaultProducerNodeBuilders;
37 import mir.producer.reader.ProducerConfigExc;
38 import mir.producer.reader.ProducerNodeBuilderLibrary;
39 import mir.producer.reader.ProducerNodeBuilder;
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     };
261
262     public ProducerNode constructNode() {
263       return new PDFPreFormattingProducerNode(key,numLinesBetweenImages,contentAreaWidthCM,characterWidthCM,pixelWidthCM,lineHeightCM);
264     };
265   }
266
267   public static class PDFGeneratingProducerNodeBuilder extends DefaultProducerNodeBuilders.AbstractProducerNodeBuilder {
268     private final static String   PDF_GENERATOR_ATTRIBUTE = "generator";
269     private final static String   PDF_DESTINATION_ATTRIBUTE = "destination";
270     private final static String   PDF_STYLESHEET_ATTRIBUTE = "stylesheet";
271     private final static String[] MARKER_REQUIRED_ATTRIBUTES = {PDF_GENERATOR_ATTRIBUTE,PDF_DESTINATION_ATTRIBUTE,PDF_STYLESHEET_ATTRIBUTE  };
272     private final static String[] MARKER_OPTIONAL_ATTRIBUTES = {};
273     private final static String[] MARKER_SUBNODES = {};
274
275     private String generator;
276     private String destination;
277     private String stylesheet;
278
279
280     public PDFGeneratingProducerNodeBuilder() {
281       super(MARKER_SUBNODES);
282     }
283
284     public void setAttributes(Map anAttributes) throws ProducerConfigExc, XMLParserExc {
285       XMLReaderTool.checkAttributes(anAttributes, MARKER_REQUIRED_ATTRIBUTES, MARKER_OPTIONAL_ATTRIBUTES);
286
287       generator = (String) anAttributes.get(PDF_GENERATOR_ATTRIBUTE);
288       destination = (String) anAttributes.get(PDF_DESTINATION_ATTRIBUTE);
289       stylesheet = (String) anAttributes.get(PDF_STYLESHEET_ATTRIBUTE);
290     };
291
292     public ProducerNode constructNode() {
293       return new PDFGeneratingProducerNode(generator,destination,stylesheet);
294     };
295   }
296
297     public static class RadicalendarProducerNodeBuilder extends DefaultProducerNodeBuilders.AbstractProducerNodeBuilder {
298         private final static String RC_KEY_ATTRIBUTE = "key";
299         private final static String RC_GROUPNAME_ATTRIBUTE = "groupname";
300         private final static String RC_GMTOFFSET_ATTRIBUTE = "gmtoffset";
301         private final static String[] RC_REQUIRED_ATTRIBUTES = {RC_KEY_ATTRIBUTE,RC_GROUPNAME_ATTRIBUTE,RC_GMTOFFSET_ATTRIBUTE};
302         private final static String[] RC_OPTIONAL_ATTRIBUTES = {};
303         private final static String[] RC_SUBNODES = {};
304         private String key;
305         private String groupname;
306         private String gmtoffset;
307
308         public RadicalendarProducerNodeBuilder() {
309             super(RC_SUBNODES);
310         }
311         
312         public void setAttributes(Map anAttributes) throws ProducerConfigExc, XMLParserExc {
313             XMLReaderTool.checkAttributes(anAttributes, RC_REQUIRED_ATTRIBUTES, RC_OPTIONAL_ATTRIBUTES);
314
315             key = (String) anAttributes.get(RC_KEY_ATTRIBUTE);
316             groupname = (String) anAttributes.get(RC_GROUPNAME_ATTRIBUTE);
317             gmtoffset = (String) anAttributes.get(RC_GMTOFFSET_ATTRIBUTE);
318         }
319         
320         public ProducerNode constructNode() {
321             return new RadicalendarProducerNode(key,groupname,gmtoffset);
322         }
323                         
324     }
325     
326
327   /**
328    * Builder for {@link mircoders.producer.ChangedFilesReportingProducerNode}
329    * nodes.
330    */
331 /*
332   private static class ChangeReportingProducerNodeBuilder extends DefaultProducerNodeBuilders.AbstractProducerNodeBuilder {
333     private final static String   DESTINATION_FILE_ATTRIBUTE = "reportFile";
334     private final static String   LOCK_FILE_ATTRIBUTE = "lockfile";
335     private final static String   BASE_PATH_ATTRIBUTE = "basepath";
336     private final static String   EXCLUDED_PATHS_ATTRIBUTE = "excludedpaths";
337     private final static String   FLUSH_ATTRIBUTE = "flush";
338     private final static String[] REQUIRED_ATTRIBUTES = {DESTINATION_FILE_ATTRIBUTE};
339     private final static String[] OPTIONAL_ATTRIBUTES = {LOCK_FILE_ATTRIBUTE, BASE_PATH_ATTRIBUTE, EXCLUDED_PATHS_ATTRIBUTE, FLUSH_ATTRIBUTE};
340     private final static String[] SUBNODES = {};
341
342     private String reportFile;
343     private String lockFile;
344     private String basePath;
345     private String excludedPaths;
346     private String flush;
347
348     public ChangeReportingProducerNodeBuilder() {
349       super(SUBNODES);
350     }
351
352     public void setAttributes(Map anAttributes) throws ProducerConfigExc, XMLParserExc {
353       XMLReaderTool.checkAttributes(anAttributes, REQUIRED_ATTRIBUTES, OPTIONAL_ATTRIBUTES);
354
355       reportFile = XMLReaderTool.getStringAttributeWithDefault(anAttributes, DESTINATION_FILE_ATTRIBUTE, null);
356       lockFile = XMLReaderTool.getStringAttributeWithDefault(anAttributes, LOCK_FILE_ATTRIBUTE, null);
357       basePath = XMLReaderTool.getStringAttributeWithDefault(anAttributes, BASE_PATH_ATTRIBUTE, "");
358       excludedPaths = XMLReaderTool.getStringAttributeWithDefault(anAttributes, EXCLUDED_PATHS_ATTRIBUTE, "");
359       flush = XMLReaderTool.getStringAttributeWithDefault(anAttributes, FLUSH_ATTRIBUTE, "1");
360     };
361
362     public ProducerNode constructNode() {
363       return new ChangedFilesReportingProducerNode(reportFile, lockFile, basePath, excludedPaths, flush);
364     };
365   }
366 */
367 }
368
369