2 * Copyright (C) 2001, 2002 The Mir-coders group
4 * This file is part of Mir.
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.
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.
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
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.
30 package mircoders.producer.reader;
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;
52 public class SupplementalProducerNodeBuilders {
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);
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", );
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 = {};
72 public static class ContentMarkingProducerNodeBuilder extends DefaultProducerNodeBuilders.AbstractProducerNodeBuilder {
76 public ContentMarkingProducerNodeBuilder() {
77 super(MARKER_SUBNODES);
80 public void setAttributes(Map anAttributes) throws ProducerConfigExc, XMLParserExc {
81 XMLReaderTool.checkAttributes(anAttributes, MARKER_REQUIRED_ATTRIBUTES, MARKER_OPTIONAL_ATTRIBUTES);
83 key = (String) anAttributes.get(MARKER_KEY_ATTRIBUTE);
86 public ProducerNode constructNode() {
87 return new ContentMarkingProducerNode(key);
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 = {};
96 public static class ContentIndexingProducerNodeBuilder extends DefaultProducerNodeBuilders.AbstractProducerNodeBuilder {
98 private String pathToIndex;
99 private File indexBasePath;
101 private static class factory implements ProducerNodeBuilderFactory {
102 private File sourceBasePath;
104 public factory(File aSourceBasePath) {
105 sourceBasePath = aSourceBasePath;
108 public ProducerNodeBuilder makeBuilder() {
109 return new ContentIndexingProducerNodeBuilder(sourceBasePath);
113 public ContentIndexingProducerNodeBuilder(File anIndexBasePath) {
114 super(INDEXER_SUBNODES);
116 indexBasePath = anIndexBasePath;
119 public void setAttributes(Map anAttributes) throws ProducerConfigExc, XMLParserExc {
120 XMLReaderTool.checkAttributes(anAttributes, INDEXER_REQUIRED_ATTRIBUTES, INDEXER_OPTIONAL_ATTRIBUTES);
122 key = (String) anAttributes.get(INDEXER_KEY_ATTRIBUTE);
123 pathToIndex = (String) anAttributes.get(INDEXER_INDEX_ATTRIBUTE);
126 public ProducerNode constructNode() {
127 return new IndexingProducerNode(indexBasePath, key, pathToIndex);
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 = {};
137 public static class ContentUnIndexingProducerNodeBuilder extends DefaultProducerNodeBuilders.AbstractProducerNodeBuilder {
139 private String pathToIndex;
141 private File indexBasePath;
143 private static class factory implements ProducerNodeBuilderFactory {
144 private File indexBasePath;
146 public factory(File aSourceBasePath) {
147 indexBasePath = aSourceBasePath;
150 public ProducerNodeBuilder makeBuilder() {
151 return new ContentUnIndexingProducerNodeBuilder(indexBasePath);
155 public ContentUnIndexingProducerNodeBuilder(File anIndexBasePath) {
156 super(UNINDEXER_SUBNODES);
158 indexBasePath = anIndexBasePath;
161 public void setAttributes(Map anAttributes) throws ProducerConfigExc, XMLParserExc {
162 XMLReaderTool.checkAttributes(anAttributes, UNINDEXER_REQUIRED_ATTRIBUTES, UNINDEXER_OPTIONAL_ATTRIBUTES);
164 key = (String) anAttributes.get(UNINDEXER_KEY_ATTRIBUTE);
165 pathToIndex = (String) anAttributes.get(UNINDEXER_INDEX_ATTRIBUTE);
168 public ProducerNode constructNode() {
169 return new UnIndexingProducerNode(indexBasePath, key,pathToIndex);
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 = {};
180 public static class ContentModifyingProducerNodeBuilder extends DefaultProducerNodeBuilders.AbstractProducerNodeBuilder {
183 private String field;
184 private String value;
186 public ContentModifyingProducerNodeBuilder() {
187 super(CONTENT_MODIFIER_SUBNODES);
190 public void setAttributes(Map anAttributes) throws ProducerConfigExc, XMLParserExc {
191 XMLReaderTool.checkAttributes(anAttributes, CONTENT_MODIFIER_REQUIRED_ATTRIBUTES, CONTENT_MODIFIER_OPTIONAL_ATTRIBUTES);
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);
198 public ProducerNode constructNode() {
199 return new ContentModifyingProducerNode(key, field, value);
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 = {};
208 public static class MediaGeneratingProducerNodeBuilder extends DefaultProducerNodeBuilders.AbstractProducerNodeBuilder {
212 public MediaGeneratingProducerNodeBuilder() {
213 super(MEDIA_SUBNODES);
216 public void setAttributes(Map anAttributes) throws ProducerConfigExc, XMLParserExc {
217 XMLReaderTool.checkAttributes(anAttributes, MEDIA_REQUIRED_ATTRIBUTES, MEDIA_OPTIONAL_ATTRIBUTES);
219 key = (String) anAttributes.get(MEDIA_KEY_ATTRIBUTE);
222 public ProducerNode constructNode() {
223 return new MediaGeneratingProducerNode(key);
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 = {};
239 private String numLinesBetweenImages;
240 private String contentAreaWidthCM;
241 private String characterWidthCM;
242 private String pixelWidthCM;
243 private String lineHeightCM;
245 public PDFPreFormattingProducerNodeBuilder() {
246 super(MARKER_SUBNODES);
249 public void setAttributes(Map anAttributes) throws ProducerConfigExc, XMLParserExc {
250 XMLReaderTool.checkAttributes(anAttributes, MARKER_REQUIRED_ATTRIBUTES, MARKER_OPTIONAL_ATTRIBUTES);
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);
262 public ProducerNode constructNode() {
263 return new PDFPreFormattingProducerNode(key,numLinesBetweenImages,contentAreaWidthCM,characterWidthCM,pixelWidthCM,lineHeightCM);
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 = {};
275 private String generator;
276 private String destination;
277 private String stylesheet;
280 public PDFGeneratingProducerNodeBuilder() {
281 super(MARKER_SUBNODES);
284 public void setAttributes(Map anAttributes) throws ProducerConfigExc, XMLParserExc {
285 XMLReaderTool.checkAttributes(anAttributes, MARKER_REQUIRED_ATTRIBUTES, MARKER_OPTIONAL_ATTRIBUTES);
287 generator = (String) anAttributes.get(PDF_GENERATOR_ATTRIBUTE);
288 destination = (String) anAttributes.get(PDF_DESTINATION_ATTRIBUTE);
289 stylesheet = (String) anAttributes.get(PDF_STYLESHEET_ATTRIBUTE);
292 public ProducerNode constructNode() {
293 return new PDFGeneratingProducerNode(generator,destination,stylesheet);
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 = {};
305 private String groupname;
306 private String gmtoffset;
308 public RadicalendarProducerNodeBuilder() {
312 public void setAttributes(Map anAttributes) throws ProducerConfigExc, XMLParserExc {
313 XMLReaderTool.checkAttributes(anAttributes, RC_REQUIRED_ATTRIBUTES, RC_OPTIONAL_ATTRIBUTES);
315 key = (String) anAttributes.get(RC_KEY_ATTRIBUTE);
316 groupname = (String) anAttributes.get(RC_GROUPNAME_ATTRIBUTE);
317 gmtoffset = (String) anAttributes.get(RC_GMTOFFSET_ATTRIBUTE);
320 public ProducerNode constructNode() {
321 return new RadicalendarProducerNode(key,groupname,gmtoffset);
328 * Builder for {@link mircoders.producer.ChangedFilesReportingProducerNode}
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 = {};
342 private String reportFile;
343 private String lockFile;
344 private String basePath;
345 private String excludedPaths;
346 private String flush;
348 public ChangeReportingProducerNodeBuilder() {
352 public void setAttributes(Map anAttributes) throws ProducerConfigExc, XMLParserExc {
353 XMLReaderTool.checkAttributes(anAttributes, REQUIRED_ATTRIBUTES, OPTIONAL_ATTRIBUTES);
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");
362 public ProducerNode constructNode() {
363 return new ChangedFilesReportingProducerNode(reportFile, lockFile, basePath, excludedPaths, flush);