some javadoc additions some early work on the new producer node to report changes...
[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.RadicalendarProducerNode;
47 import mircoders.producer.UnIndexingProducerNode;
48
49
50 public class SupplementalProducerNodeBuilders {
51
52   public static void registerBuilders(ProducerNodeBuilderLibrary aBuilderLibrary, File aBasePath) throws ProducerConfigExc {
53     aBuilderLibrary.registerBuilder("ModifyContent", ContentModifyingProducerNodeBuilder.class);
54     aBuilderLibrary.registerBuilder("MarkContent", ContentMarkingProducerNodeBuilder.class);
55     aBuilderLibrary.registerBuilder("GenerateMedia", MediaGeneratingProducerNodeBuilder.class);
56
57     aBuilderLibrary.registerFactory("IndexContent", new ContentIndexingProducerNodeBuilder.factory(aBasePath));
58     aBuilderLibrary.registerFactory("UnIndexContent", new ContentUnIndexingProducerNodeBuilder.factory(aBasePath));
59     aBuilderLibrary.registerBuilder("Radicalendar", RadicalendarProducerNodeBuilder.class);
60
61     aBuilderLibrary.registerFactory("IndexContent", new ContentIndexingProducerNodeBuilder.factory(aBasePath));
62   }
63
64   private final static String MARKER_KEY_ATTRIBUTE = DefaultProducerNodeBuilders.KEY_ATTRIBUTE;
65   private final static String[] MARKER_REQUIRED_ATTRIBUTES = {MARKER_KEY_ATTRIBUTE};
66   private final static String[] MARKER_OPTIONAL_ATTRIBUTES = {};
67   private final static String[] MARKER_SUBNODES = {};
68
69   public static class ContentMarkingProducerNodeBuilder extends DefaultProducerNodeBuilders.AbstractProducerNodeBuilder {
70
71     private String key;
72
73     public ContentMarkingProducerNodeBuilder() {
74       super(MARKER_SUBNODES);
75     }
76
77     public void setAttributes(Map anAttributes) throws ProducerConfigExc, XMLParserExc {
78       XMLReaderTool.checkAttributes(anAttributes, MARKER_REQUIRED_ATTRIBUTES, MARKER_OPTIONAL_ATTRIBUTES);
79
80       key = (String) anAttributes.get(MARKER_KEY_ATTRIBUTE);
81     }
82
83     public ProducerNode constructNode() {
84       return new ContentMarkingProducerNode(key);
85     }
86   }
87
88   private final static String INDEXER_KEY_ATTRIBUTE = DefaultProducerNodeBuilders.KEY_ATTRIBUTE;
89   private final static String INDEXER_INDEX_ATTRIBUTE = "pathToIndex";
90   private final static String[] INDEXER_REQUIRED_ATTRIBUTES = {INDEXER_KEY_ATTRIBUTE, INDEXER_INDEX_ATTRIBUTE};
91   private final static String[] INDEXER_OPTIONAL_ATTRIBUTES = {};
92   private final static String[] INDEXER_SUBNODES = {};
93
94   public static class ContentIndexingProducerNodeBuilder extends DefaultProducerNodeBuilders.AbstractProducerNodeBuilder {
95     private String key;
96     private String pathToIndex;
97     private File indexBasePath;
98
99     private static class factory implements ProducerNodeBuilderFactory {
100       private File sourceBasePath;
101
102       public factory(File aSourceBasePath) {
103         sourceBasePath = aSourceBasePath;
104       }
105
106       public ProducerNodeBuilder makeBuilder() {
107         return new ContentIndexingProducerNodeBuilder(sourceBasePath);
108       }
109     }
110
111     public ContentIndexingProducerNodeBuilder(File anIndexBasePath) {
112       super(INDEXER_SUBNODES);
113
114       indexBasePath = anIndexBasePath;
115     }
116
117     public void setAttributes(Map anAttributes) throws ProducerConfigExc, XMLParserExc {
118       XMLReaderTool.checkAttributes(anAttributes, INDEXER_REQUIRED_ATTRIBUTES, INDEXER_OPTIONAL_ATTRIBUTES);
119
120       key = (String) anAttributes.get(INDEXER_KEY_ATTRIBUTE);
121       pathToIndex = (String) anAttributes.get(INDEXER_INDEX_ATTRIBUTE);
122     }
123
124     public ProducerNode constructNode() {
125       return new IndexingProducerNode(indexBasePath, key, pathToIndex);
126     }
127   }
128
129   private final static String UNINDEXER_KEY_ATTRIBUTE = DefaultProducerNodeBuilders.KEY_ATTRIBUTE;
130   private final static String UNINDEXER_INDEX_ATTRIBUTE = "pathToIndex";
131   private final static String[] UNINDEXER_REQUIRED_ATTRIBUTES = {UNINDEXER_KEY_ATTRIBUTE, UNINDEXER_INDEX_ATTRIBUTE};
132   private final static String[] UNINDEXER_OPTIONAL_ATTRIBUTES = {};
133   private final static String[] UNINDEXER_SUBNODES = {};
134
135   public static class ContentUnIndexingProducerNodeBuilder extends DefaultProducerNodeBuilders.AbstractProducerNodeBuilder {
136     private String key;
137     private String pathToIndex;
138
139     private File indexBasePath;
140
141     private static class factory implements ProducerNodeBuilderFactory {
142       private File indexBasePath;
143
144       public factory(File aSourceBasePath) {
145         indexBasePath = aSourceBasePath;
146       }
147
148       public ProducerNodeBuilder makeBuilder() {
149         return new ContentUnIndexingProducerNodeBuilder(indexBasePath);
150       }
151     }
152
153     public ContentUnIndexingProducerNodeBuilder(File anIndexBasePath) {
154       super(UNINDEXER_SUBNODES);
155
156       indexBasePath = anIndexBasePath;
157     }
158
159     public void setAttributes(Map anAttributes) throws ProducerConfigExc, XMLParserExc {
160       XMLReaderTool.checkAttributes(anAttributes, UNINDEXER_REQUIRED_ATTRIBUTES, UNINDEXER_OPTIONAL_ATTRIBUTES);
161
162       key = (String) anAttributes.get(UNINDEXER_KEY_ATTRIBUTE);
163       pathToIndex = (String) anAttributes.get(UNINDEXER_INDEX_ATTRIBUTE);
164     }
165
166     public ProducerNode constructNode() {
167       return new UnIndexingProducerNode(indexBasePath, key, pathToIndex);
168     }
169   }
170
171   private final static String CONTENT_MODIFIER_KEY_ATTRIBUTE = DefaultProducerNodeBuilders.KEY_ATTRIBUTE;
172   private final static String CONTENT_MODIFIER_FIELD_ATTRIBUTE = "field";
173   private final static String CONTENT_MODIFIER_VALUE_ATTRIBUTE = "value";
174   private final static String[] CONTENT_MODIFIER_REQUIRED_ATTRIBUTES = {CONTENT_MODIFIER_KEY_ATTRIBUTE, CONTENT_MODIFIER_FIELD_ATTRIBUTE, CONTENT_MODIFIER_VALUE_ATTRIBUTE};
175   private final static String[] CONTENT_MODIFIER_OPTIONAL_ATTRIBUTES = {};
176   private final static String[] CONTENT_MODIFIER_SUBNODES = {};
177
178   public static class ContentModifyingProducerNodeBuilder extends DefaultProducerNodeBuilders.AbstractProducerNodeBuilder {
179
180     private String key;
181     private String field;
182     private String value;
183
184     public ContentModifyingProducerNodeBuilder() {
185       super(CONTENT_MODIFIER_SUBNODES);
186     }
187
188     public void setAttributes(Map anAttributes) throws ProducerConfigExc, XMLParserExc {
189       XMLReaderTool.checkAttributes(anAttributes, CONTENT_MODIFIER_REQUIRED_ATTRIBUTES, CONTENT_MODIFIER_OPTIONAL_ATTRIBUTES);
190
191       key = (String) anAttributes.get(CONTENT_MODIFIER_KEY_ATTRIBUTE);
192       field = (String) anAttributes.get(CONTENT_MODIFIER_FIELD_ATTRIBUTE);
193       value = (String) anAttributes.get(CONTENT_MODIFIER_VALUE_ATTRIBUTE);
194     }
195
196     public ProducerNode constructNode() {
197       return new ContentModifyingProducerNode(key, field, value);
198     }
199   }
200
201   private final static String MEDIA_KEY_ATTRIBUTE = DefaultProducerNodeBuilders.KEY_ATTRIBUTE;
202   private final static String[] MEDIA_REQUIRED_ATTRIBUTES = {MEDIA_KEY_ATTRIBUTE};
203   private final static String[] MEDIA_OPTIONAL_ATTRIBUTES = {};
204   private final static String[] MEDIA_SUBNODES = {};
205
206   public static class MediaGeneratingProducerNodeBuilder extends DefaultProducerNodeBuilders.AbstractProducerNodeBuilder {
207
208     private String key;
209
210     public MediaGeneratingProducerNodeBuilder() {
211       super(MEDIA_SUBNODES);
212     }
213
214     public void setAttributes(Map anAttributes) throws ProducerConfigExc, XMLParserExc {
215       XMLReaderTool.checkAttributes(anAttributes, MEDIA_REQUIRED_ATTRIBUTES, MEDIA_OPTIONAL_ATTRIBUTES);
216
217       key = (String) anAttributes.get(MEDIA_KEY_ATTRIBUTE);
218     }
219
220     public ProducerNode constructNode() {
221       return new MediaGeneratingProducerNode(key);
222     }
223   }
224
225   public static class RadicalendarProducerNodeBuilder extends DefaultProducerNodeBuilders.AbstractProducerNodeBuilder {
226     private final static String RC_KEY_ATTRIBUTE = "key";
227     private final static String RC_GROUPNAME_ATTRIBUTE = "groupname";
228     private final static String RC_GMTOFFSET_ATTRIBUTE = "gmtoffset";
229     private final static String[] RC_REQUIRED_ATTRIBUTES = {RC_KEY_ATTRIBUTE, RC_GROUPNAME_ATTRIBUTE, RC_GMTOFFSET_ATTRIBUTE};
230     private final static String[] RC_OPTIONAL_ATTRIBUTES = {};
231     private final static String[] RC_SUBNODES = {};
232     private String key;
233     private String groupname;
234     private String gmtoffset;
235
236     public RadicalendarProducerNodeBuilder() {
237       super(RC_SUBNODES);
238     }
239
240     public void setAttributes(Map anAttributes) throws ProducerConfigExc, XMLParserExc {
241       XMLReaderTool.checkAttributes(anAttributes, RC_REQUIRED_ATTRIBUTES, RC_OPTIONAL_ATTRIBUTES);
242
243       key = (String) anAttributes.get(RC_KEY_ATTRIBUTE);
244       groupname = (String) anAttributes.get(RC_GROUPNAME_ATTRIBUTE);
245       gmtoffset = (String) anAttributes.get(RC_GMTOFFSET_ATTRIBUTE);
246     }
247
248     public ProducerNode constructNode() {
249       return new RadicalendarProducerNode(key, groupname, gmtoffset);
250     }
251   }
252
253 }
254
255