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 mir.producer.reader;
32 import java.util.Arrays;
33 import java.util.HashMap;
34 import java.util.HashSet;
35 import java.util.Iterator;
39 import mir.entity.adapter.EntityAdapterModel;
40 import mir.generator.Generator;
41 import mir.generator.WriterEngine;
42 import mir.log.LoggerWrapper;
43 import mir.producer.ConditionalProducerNode;
44 import mir.producer.DirCopyingProducerNode;
45 import mir.producer.EntityBatchingProducerNode;
46 import mir.producer.EntityDeletingProducerNode;
47 import mir.producer.EntityEnumeratingProducerNode;
48 import mir.producer.EntityListProducerNode;
49 import mir.producer.EntityModifyingProducerNode;
50 import mir.producer.EvaluatedAssignmentProducerNode;
51 import mir.producer.ExpandedAssignmentProducerNode;
52 import mir.producer.FileDateSettingProducerNode;
53 import mir.producer.FileDeletingProducerNode;
54 import mir.producer.FreeQueryProducerNode;
55 import mir.producer.GeneratingProducerNode;
56 import mir.producer.ListEnumeratingProducerNode;
57 import mir.producer.LoggingProducerNode;
58 import mir.producer.LoopProducerNode;
59 import mir.producer.ProducerNode;
60 import mir.producer.RDFAggregatorProducerNode;
61 import mir.producer.RSSProducerNode;
62 import mir.producer.ResourceBundleProducerNode;
63 import mir.producer.ScriptCallingProducerNode;
64 import mir.util.XMLReader;
65 import mir.util.XMLReaderTool;
67 public class DefaultProducerNodeBuilders {
69 public static void registerBuilders(ProducerNodeBuilderLibrary aBuilderLibrary,
70 EntityAdapterModel aModel, Generator.GeneratorLibrary aGeneratorLibrary,
71 WriterEngine aWriterEngine, String aSourceBasePath, String aDestinationBasePath) throws ProducerConfigExc {
73 aBuilderLibrary.registerBuilder("Set", EvaluatedAssignmentProducerNodeBuilder.class);
74 aBuilderLibrary.registerBuilder("Define", ExpandedAssignmentProducerNodeBuilder.class);
75 aBuilderLibrary.registerBuilder("Log", LoggingProducerNodeBuilder.class);
76 aBuilderLibrary.registerBuilder("Execute", ScriptCallingProducerNodeBuilder.class);
77 aBuilderLibrary.registerBuilder("Resource", ResourceBundleProducerNodeBuilder.class);
78 aBuilderLibrary.registerFactory("CopyDir", new DirCopyProducerNodeBuilder.factory( aSourceBasePath, aDestinationBasePath));
80 aBuilderLibrary.registerBuilder("DeleteFile", FileDeletingProducerNodeBuilder.class);
81 aBuilderLibrary.registerBuilder("SetFileDate", FileDateSettingProducerNodeBuilder.class);
82 aBuilderLibrary.registerBuilder("If", ConditionalProducerNodeBuilder.class);
83 aBuilderLibrary.registerBuilder("While", LoopProducerNodeBuilder.class);
85 aBuilderLibrary.registerBuilder("RSS", RSSProducerNodeBuilder.class);
86 aBuilderLibrary.registerBuilder("RDFAggregate", RDFAggregatorProducerNodeBuilder.class);
88 aBuilderLibrary.registerBuilder("FreeQuery", FreeQueryProducerNodeBuilder.class);
90 aBuilderLibrary.registerFactory("Enumerate", new EnumeratingProducerNodeBuilder.factory(aModel));
91 aBuilderLibrary.registerFactory("List", new ListProducerNodeBuilder.factory(aModel));
92 aBuilderLibrary.registerFactory("Batch", new BatchingProducerNodeBuilder.factory(aModel));
94 aBuilderLibrary.registerFactory("UpdateEntity", new UpdateEntityProducerNodeBuilder.factory(aModel));
95 aBuilderLibrary.registerFactory("CreateEntity", new CreateEntityProducerNodeBuilder.factory(aModel));
96 aBuilderLibrary.registerFactory("DeleteEntity", new DeleteEntityProducerNodeBuilder.factory(aModel));
98 aBuilderLibrary.registerFactory("Generate",
99 new GeneratingProducerNodeBuilder.factory(aGeneratorLibrary, aWriterEngine));
102 public static abstract class AbstractProducerNodeBuilder implements ProducerNodeBuilder {
103 private Map attributes;
104 private Map subNodes;
105 private Set availableSubnodes;
107 public AbstractProducerNodeBuilder(String anAvailableSubNodes[]) {
108 attributes = new HashMap();
109 subNodes = new HashMap();
110 availableSubnodes = new HashSet(Arrays.asList(anAvailableSubNodes));
113 protected ProducerNode getSubNode(String aName) {
114 return (ProducerNode) subNodes.get(aName);
117 public void setSubNode(String aName, ProducerNode aNode) {
118 subNodes.put(aName, aNode);
121 public Set getAvailableSubNodes() {
122 return availableSubnodes;
126 ////////////////////////////////////////////////////////////////////////////////
128 // general attribute names, specifc builders reference these, to keep attribute
131 public final static String SELECTION_ATTRIBUTE = "selection";
132 public final static String ORDER_ATTRIBUTE = "order";
133 public final static String DEFINITION_ATTRIBUTE = "table";
134 public final static String SKIP_ATTRIBUTE = "skip";
135 public final static String KEY_ATTRIBUTE = "key";
136 public final static String LIMIT_ATTRIBUTE = "limit";
137 public final static String URL_ATTRIBUTE = "url";
139 ////////////////////////////////////////////////////////////////////////////////
141 private final static String ASSIGNMENT_KEY_ATTRIBUTE = KEY_ATTRIBUTE;
142 private final static String ASSIGNMENT_VALUE_ATTRIBUTE = "value";
143 private final static String[] ASSIGNMENT_REQUIRED_ATTRIBUTES = { ASSIGNMENT_KEY_ATTRIBUTE, ASSIGNMENT_VALUE_ATTRIBUTE };
144 private final static String[] ASSIGNMENT_OPTIONAL_ATTRIBUTES = {};
145 private final static String[] ASSIGNMENT_SUBNODES = {};
147 public static class ExpandedAssignmentProducerNodeBuilder extends AbstractProducerNodeBuilder {
150 private String value;
152 public ExpandedAssignmentProducerNodeBuilder() {
153 super(ASSIGNMENT_SUBNODES);
156 public void setAttributes(Map anAttributes) throws ProducerConfigExc, XMLReader.XMLReaderExc {
157 XMLReaderTool.checkAttributes(anAttributes, ASSIGNMENT_REQUIRED_ATTRIBUTES, ASSIGNMENT_OPTIONAL_ATTRIBUTES);
159 key = (String) anAttributes.get(ASSIGNMENT_KEY_ATTRIBUTE);
160 value = (String) anAttributes.get(ASSIGNMENT_VALUE_ATTRIBUTE);
163 public ProducerNode constructNode() {
164 return new ExpandedAssignmentProducerNode(key, value);
168 ////////////////////////////////////////////////////////////////////////////////
170 public static class EvaluatedAssignmentProducerNodeBuilder extends AbstractProducerNodeBuilder {
173 private String value;
175 public EvaluatedAssignmentProducerNodeBuilder() {
176 super(ASSIGNMENT_SUBNODES);
179 public void setAttributes(Map anAttributes) throws ProducerConfigExc, XMLReader.XMLReaderExc {
180 XMLReaderTool.checkAttributes(anAttributes, ASSIGNMENT_REQUIRED_ATTRIBUTES, ASSIGNMENT_OPTIONAL_ATTRIBUTES);
182 key = (String) anAttributes.get(ASSIGNMENT_KEY_ATTRIBUTE);
183 value = (String) anAttributes.get(ASSIGNMENT_VALUE_ATTRIBUTE);
186 public ProducerNode constructNode() {
187 return new EvaluatedAssignmentProducerNode(key, value);
191 ////////////////////////////////////////////////////////////////////////////////
193 public static class EnumeratingProducerNodeBuilder extends AbstractProducerNodeBuilder {
194 private final static String ENUMERATION_KEY_ATTRIBUTE = KEY_ATTRIBUTE;
195 private final static String ENUMERATION_DEFINITION_ATTRIBUTE = DEFINITION_ATTRIBUTE;
196 private final static String ENUMERATION_LIST_ATTRIBUTE = "list";
197 private final static String ENUMERATION_SELECTION_ATTRIBUTE = SELECTION_ATTRIBUTE;
198 private final static String ENUMERATION_ORDER_ATTRIBUTE = ORDER_ATTRIBUTE;
199 private final static String ENUMERATION_DEFAULT_SUBNODE = "default";
200 private final static String ENUMERATION_LIMIT_ATTRIBUTE = LIMIT_ATTRIBUTE;
201 private final static String ENUMERATION_SKIP_ATTRIBUTE = SKIP_ATTRIBUTE;
202 private final static String[] ENUMERATION_LIST_REQUIRED_ATTRIBUTES = { ENUMERATION_LIST_ATTRIBUTE, ENUMERATION_KEY_ATTRIBUTE };
203 private final static String[] ENUMERATION_LIST_OPTIONAL_ATTRIBUTES = { };
204 private final static String[] ENUMERATION_QUERY_REQUIRED_ATTRIBUTES = { ENUMERATION_DEFINITION_ATTRIBUTE, ENUMERATION_KEY_ATTRIBUTE };
205 private final static String[] ENUMERATION_QUERY_OPTIONAL_ATTRIBUTES = { ENUMERATION_SELECTION_ATTRIBUTE, ENUMERATION_ORDER_ATTRIBUTE, ENUMERATION_LIMIT_ATTRIBUTE, ENUMERATION_SKIP_ATTRIBUTE};
206 private final static String[] ENUMERATION_SUBNODES = {ENUMERATION_DEFAULT_SUBNODE};
209 private String definition;
211 private String selection;
212 private String order;
213 private String limit;
215 private EntityAdapterModel model;
217 public EnumeratingProducerNodeBuilder(EntityAdapterModel aModel) {
218 super(ENUMERATION_SUBNODES);
223 public void setAttributes(Map anAttributes) throws ProducerConfigExc, XMLReader.XMLReaderExc {
224 definition = (String) anAttributes.get(ENUMERATION_DEFINITION_ATTRIBUTE);
225 list = (String) anAttributes.get(ENUMERATION_LIST_ATTRIBUTE);
227 if ((list==null && definition==null) || (list!=null && definition!=null))
228 throw new ProducerConfigExc("Exactly one of "+ENUMERATION_DEFINITION_ATTRIBUTE+" and "+ENUMERATION_LIST_ATTRIBUTE+" must be set");
232 XMLReaderTool.checkAttributes(anAttributes, ENUMERATION_LIST_REQUIRED_ATTRIBUTES, ENUMERATION_LIST_OPTIONAL_ATTRIBUTES);
233 if (definition!=null)
234 XMLReaderTool.checkAttributes(anAttributes, ENUMERATION_QUERY_REQUIRED_ATTRIBUTES, ENUMERATION_QUERY_OPTIONAL_ATTRIBUTES);
237 key = (String) anAttributes.get(ENUMERATION_KEY_ATTRIBUTE);
238 selection = (String) XMLReaderTool.getStringAttributeWithDefault(anAttributes, ENUMERATION_SELECTION_ATTRIBUTE, "");
239 order = (String) XMLReaderTool.getStringAttributeWithDefault(anAttributes, ENUMERATION_ORDER_ATTRIBUTE, "");
240 limit = (String) anAttributes.get(ENUMERATION_LIMIT_ATTRIBUTE);
241 skip = (String) anAttributes.get(ENUMERATION_SKIP_ATTRIBUTE);
244 public ProducerNode constructNode() {
245 if (definition!=null)
246 return new EntityEnumeratingProducerNode(key, model, definition, selection, order, limit, skip, getSubNode(ENUMERATION_DEFAULT_SUBNODE ));
248 return new ListEnumeratingProducerNode(key, list, getSubNode(ENUMERATION_DEFAULT_SUBNODE ));
251 public static class factory implements ProducerNodeBuilderFactory {
252 private EntityAdapterModel model;
254 public factory(EntityAdapterModel aModel) {
258 public ProducerNodeBuilder makeBuilder() {
259 return new EnumeratingProducerNodeBuilder(model);
264 ////////////////////////////////////////////////////////////////////////////////
266 public static class UpdateEntityProducerNodeBuilder extends AbstractProducerNodeBuilder {
267 private final static String UPDATE_KEY_ATTRIBUTE = KEY_ATTRIBUTE;
268 private final static String UPDATE_DEFINITION_ATTRIBUTE = DEFINITION_ATTRIBUTE;
269 private final static String[] UPDATE_SUBNODES = {};
272 private String definition;
273 private Map fieldValues;
275 private EntityAdapterModel model;
277 public UpdateEntityProducerNodeBuilder(EntityAdapterModel aModel) {
278 super(UPDATE_SUBNODES);
281 fieldValues = new HashMap();
284 public void setAttributes(Map anAttributes) throws ProducerConfigExc, XMLReader.XMLReaderExc {
285 key = (String) anAttributes.get(UPDATE_KEY_ATTRIBUTE);
288 throw new XMLReader.XMLReaderExc("missing required attribute '" + UPDATE_KEY_ATTRIBUTE + "'" );
289 definition = (String) anAttributes.get(UPDATE_DEFINITION_ATTRIBUTE);
291 fieldValues.putAll(anAttributes);
292 fieldValues.remove(UPDATE_KEY_ATTRIBUTE);
293 fieldValues.remove(UPDATE_DEFINITION_ATTRIBUTE);
296 public ProducerNode constructNode() {
297 return new EntityModifyingProducerNode(model, false, definition, key, fieldValues);
300 public static class factory implements ProducerNodeBuilderFactory {
301 private EntityAdapterModel model;
303 public factory(EntityAdapterModel aModel) {
307 public ProducerNodeBuilder makeBuilder() {
308 return new UpdateEntityProducerNodeBuilder(model);
313 ////////////////////////////////////////////////////////////////////////////////
315 public static class CreateEntityProducerNodeBuilder extends AbstractProducerNodeBuilder {
316 private final static String CREATEENTITY_KEY_ATTRIBUTE = KEY_ATTRIBUTE;
317 private final static String CREATEENTITY_DEFINITION_ATTRIBUTE = DEFINITION_ATTRIBUTE;
318 private final static String[] CREATEENTITY_SUBNODES = {};
321 private String definition;
322 private Map fieldValues;
324 private EntityAdapterModel model;
326 public CreateEntityProducerNodeBuilder(EntityAdapterModel aModel) {
327 super(CREATEENTITY_SUBNODES);
330 fieldValues = new HashMap();
333 public void setAttributes(Map anAttributes) throws ProducerConfigExc, XMLReader.XMLReaderExc {
334 key = (String) anAttributes.get(CREATEENTITY_KEY_ATTRIBUTE);
335 definition = (String) anAttributes.get(CREATEENTITY_DEFINITION_ATTRIBUTE);
338 throw new XMLReader.XMLReaderExc("missing required attribute '" + CREATEENTITY_KEY_ATTRIBUTE + "'" );
339 if (definition == null)
340 throw new XMLReader.XMLReaderExc("missing required attribute '" + CREATEENTITY_DEFINITION_ATTRIBUTE + "'" );
342 fieldValues.putAll(anAttributes);
343 fieldValues.remove(CREATEENTITY_KEY_ATTRIBUTE);
344 fieldValues.remove(CREATEENTITY_DEFINITION_ATTRIBUTE);
347 public ProducerNode constructNode() {
348 return new EntityModifyingProducerNode(model, true, definition, key, fieldValues);
351 public static class factory implements ProducerNodeBuilderFactory {
352 private EntityAdapterModel model;
354 public factory(EntityAdapterModel aModel) {
358 public ProducerNodeBuilder makeBuilder() {
359 return new CreateEntityProducerNodeBuilder(model);
364 ////////////////////////////////////////////////////////////////////////////////
366 public static class LoopProducerNodeBuilder extends AbstractProducerNodeBuilder {
367 private final static String LOOP_CONDITION_ATTRIBUTE = "condition";
368 private final static String LOOP_LIMIT_ATTRIBUTE = LIMIT_ATTRIBUTE;
369 private final static String LOOP_DEFAULT_SUBNODE = "default";
370 private final static String[] LOOP_REQUIRED_ATTRIBUTES = { LOOP_CONDITION_ATTRIBUTE };
371 private final static String[] LOOP_OPTIONAL_ATTRIBUTES = { LOOP_LIMIT_ATTRIBUTE };
372 private final static String[] LOOP_SUBNODES = {LOOP_DEFAULT_SUBNODE};
374 private String condition;
375 private String limit;
377 public LoopProducerNodeBuilder() {
378 super(LOOP_SUBNODES);
381 public void setAttributes(Map anAttributes) throws ProducerConfigExc, XMLReader.XMLReaderExc {
382 XMLReaderTool.checkAttributes(anAttributes, LOOP_REQUIRED_ATTRIBUTES, LOOP_OPTIONAL_ATTRIBUTES);
384 condition = (String) anAttributes.get(LOOP_CONDITION_ATTRIBUTE);
385 limit = (String) XMLReaderTool.getStringAttributeWithDefault(anAttributes, LOOP_LIMIT_ATTRIBUTE, "");
388 public ProducerNode constructNode() {
389 return new LoopProducerNode(condition, limit, getSubNode( LOOP_DEFAULT_SUBNODE ));
393 ////////////////////////////////////////////////////////////////////////////////
395 public static class ListProducerNodeBuilder extends AbstractProducerNodeBuilder {
396 private final static String LIST_KEY_ATTRIBUTE = KEY_ATTRIBUTE;
397 private final static String LIST_DEFINITION_ATTRIBUTE = DEFINITION_ATTRIBUTE;
398 private final static String LIST_SELECTION_ATTRIBUTE = SELECTION_ATTRIBUTE;
399 private final static String LIST_ORDER_ATTRIBUTE = ORDER_ATTRIBUTE;
400 private final static String LIST_DEFAULT_SUBNODE = "default";
401 private final static String LIST_LIMIT_ATTRIBUTE = LIMIT_ATTRIBUTE;
402 private final static String LIST_SKIP_ATTRIBUTE = SKIP_ATTRIBUTE;
403 private final static String[] LIST_REQUIRED_ATTRIBUTES = { LIST_KEY_ATTRIBUTE, LIST_DEFINITION_ATTRIBUTE };
404 private final static String[] LIST_OPTIONAL_ATTRIBUTES = { LIST_SELECTION_ATTRIBUTE, LIST_ORDER_ATTRIBUTE, LIST_SKIP_ATTRIBUTE, LIST_LIMIT_ATTRIBUTE};
405 private final static String[] LIST_SUBNODES = {};
408 private String definition;
409 private String selection;
410 private String order;
411 private String limit;
413 private EntityAdapterModel model;
415 public ListProducerNodeBuilder(EntityAdapterModel aModel) {
416 super(LIST_SUBNODES);
421 public void setAttributes(Map anAttributes) throws ProducerConfigExc, XMLReader.XMLReaderExc {
422 XMLReaderTool.checkAttributes(anAttributes, LIST_REQUIRED_ATTRIBUTES, LIST_OPTIONAL_ATTRIBUTES);
424 key = (String) anAttributes.get(LIST_KEY_ATTRIBUTE);
425 definition = (String) anAttributes.get(LIST_DEFINITION_ATTRIBUTE);
426 selection = (String) XMLReaderTool.getStringAttributeWithDefault(anAttributes, LIST_SELECTION_ATTRIBUTE, "");
427 order = (String) XMLReaderTool.getStringAttributeWithDefault(anAttributes, LIST_ORDER_ATTRIBUTE, "");
428 limit = (String) anAttributes.get(LIST_LIMIT_ATTRIBUTE);
429 skip = (String) anAttributes.get(LIST_SKIP_ATTRIBUTE);
432 public ProducerNode constructNode() {
433 return new EntityListProducerNode(key, model, definition, selection, order, limit, skip, null );
436 public static class factory implements ProducerNodeBuilderFactory {
437 private EntityAdapterModel model;
439 public factory(EntityAdapterModel aModel) {
443 public ProducerNodeBuilder makeBuilder() {
444 return new ListProducerNodeBuilder(model);
449 ////////////////////////////////////////////////////////////////////////////////
451 public static class DeleteEntityProducerNodeBuilder extends AbstractProducerNodeBuilder {
452 private final static String DELETEENTITY_DEFINITION_ATTRIBUTE = DEFINITION_ATTRIBUTE;
453 private final static String DELETEENTITY_SELECTION_ATTRIBUTE = SELECTION_ATTRIBUTE;
454 private final static String[] DELETEENTITY_REQUIRED_ATTRIBUTES = { DELETEENTITY_SELECTION_ATTRIBUTE, DELETEENTITY_DEFINITION_ATTRIBUTE };
455 private final static String[] DELETEENTITY_OPTIONAL_ATTRIBUTES = { };
456 private final static String[] DELETEENTITY_SUBNODES = {};
458 private String definition;
459 private String selection;
461 private EntityAdapterModel model;
463 public DeleteEntityProducerNodeBuilder(EntityAdapterModel aModel) {
464 super(DELETEENTITY_SUBNODES);
469 public void setAttributes(Map anAttributes) throws ProducerConfigExc, XMLReader.XMLReaderExc {
470 XMLReaderTool.checkAttributes(anAttributes, DELETEENTITY_REQUIRED_ATTRIBUTES, DELETEENTITY_OPTIONAL_ATTRIBUTES);
472 definition = (String) anAttributes.get(DELETEENTITY_DEFINITION_ATTRIBUTE);
473 selection = (String) XMLReaderTool.getStringAttributeWithDefault(anAttributes, DELETEENTITY_SELECTION_ATTRIBUTE, "");
476 public ProducerNode constructNode() {
477 return new EntityDeletingProducerNode(model, definition, selection);
480 public static class factory implements ProducerNodeBuilderFactory {
481 private EntityAdapterModel model;
483 public factory(EntityAdapterModel aModel) {
487 public ProducerNodeBuilder makeBuilder() {
488 return new DeleteEntityProducerNodeBuilder(model);
493 ////////////////////////////////////////////////////////////////////////////////
495 public static class LoggingProducerNodeBuilder extends AbstractProducerNodeBuilder {
496 private final static String LOG_MESSAGE_ATTRIBUTE = "message";
497 private final static String LOG_TYPE_ATTRIBUTE = "type";
498 private final static String[] LOG_REQUIRED_ATTRIBUTES = { LOG_MESSAGE_ATTRIBUTE };
499 private final static String[] LOG_OPTIONAL_ATTRIBUTES = { LOG_TYPE_ATTRIBUTE };
500 private final static String[] LOG_SUBNODES = {};
502 private String message;
503 private int type = LoggerWrapper.INFO_MESSAGE;
505 public LoggingProducerNodeBuilder() {
509 public void setAttributes(Map anAttributes) throws ProducerConfigExc, XMLReader.XMLReaderExc {
512 XMLReaderTool.checkAttributes(anAttributes, LOG_REQUIRED_ATTRIBUTES, LOG_OPTIONAL_ATTRIBUTES);
514 message = (String) anAttributes.get(LOG_MESSAGE_ATTRIBUTE);
515 if (anAttributes.containsKey(LOG_TYPE_ATTRIBUTE)) {
516 typeString = ((String) anAttributes.get( LOG_TYPE_ATTRIBUTE ));
518 if (typeString.toLowerCase().equals("debug"))
519 type = LoggerWrapper.DEBUG_MESSAGE;
520 else if (typeString.toLowerCase().equals("info"))
521 type = LoggerWrapper.INFO_MESSAGE;
522 else if (typeString.toLowerCase().equals("error"))
523 type = LoggerWrapper.ERROR_MESSAGE;
524 else if (typeString.toLowerCase().equals("warning"))
525 type = LoggerWrapper.WARN_MESSAGE;
526 else if (typeString.toLowerCase().equals("fatal"))
527 type = LoggerWrapper.FATAL_MESSAGE;
529 throw new ProducerConfigExc("unknown log type: " + typeString + " (allowed are debug, info, warning, error, fatal)");
532 type = LoggerWrapper.INFO_MESSAGE;
535 public ProducerNode constructNode() {
536 return new LoggingProducerNode(message, type);
540 ////////////////////////////////////////////////////////////////////////////////
542 public static class FreeQueryProducerNodeBuilder extends AbstractProducerNodeBuilder {
543 private final static String FREEQUERY_KEY_ATTRIBUTE = KEY_ATTRIBUTE;
544 private final static String FREEQUERY_LIMIT_ATTRIBUTE = LIMIT_ATTRIBUTE;
545 private final static String FREEQUERY_QUERY_ATTRIBUTE = "query";
546 private final static String FREEQUERY_TYPE_ATTRIBUTE = "type";
547 private final static String[] FREEQUERY_REQUIRED_ATTRIBUTES = { KEY_ATTRIBUTE, FREEQUERY_QUERY_ATTRIBUTE };
548 private final static String[] FREEQUERY_OPTIONAL_ATTRIBUTES = { LIMIT_ATTRIBUTE, FREEQUERY_TYPE_ATTRIBUTE };
549 private final static String[] FREEQUERY_SUBNODES = {};
552 private String query;
553 private String limit;
556 public FreeQueryProducerNodeBuilder() {
557 super(FREEQUERY_SUBNODES);
560 public void setAttributes(Map anAttributes) throws ProducerConfigExc, XMLReader.XMLReaderExc {
563 XMLReaderTool.checkAttributes(anAttributes, FREEQUERY_REQUIRED_ATTRIBUTES, FREEQUERY_OPTIONAL_ATTRIBUTES);
565 key = (String) anAttributes.get(FREEQUERY_KEY_ATTRIBUTE);
566 query = (String) anAttributes.get(FREEQUERY_QUERY_ATTRIBUTE);
567 limit = (String) anAttributes.get(FREEQUERY_LIMIT_ATTRIBUTE);
569 if (anAttributes.containsKey(FREEQUERY_TYPE_ATTRIBUTE)) {
570 typeString = ((String) anAttributes.get( FREEQUERY_TYPE_ATTRIBUTE ));
572 if (typeString.toLowerCase().equals("set"))
573 type = FreeQueryProducerNode.QUERY_TYPE_SET;
574 else if (typeString.toLowerCase().equals("row"))
575 type = FreeQueryProducerNode.QUERY_TYPE_ROW;
576 else if (typeString.toLowerCase().equals("value"))
577 type = FreeQueryProducerNode.QUERY_TYPE_VALUE;
578 else if (typeString.toLowerCase().equals("update"))
579 type = FreeQueryProducerNode.QUERY_TYPE_UPDATE;
581 throw new ProducerConfigExc("unknown query type: " + typeString + " (allowed are set, row and value)");
584 type = FreeQueryProducerNode.QUERY_TYPE_SET;
587 public ProducerNode constructNode() {
588 return new FreeQueryProducerNode(key, query, limit, type);
592 ////////////////////////////////////////////////////////////////////////////////
594 public static class ResourceBundleProducerNodeBuilder extends AbstractProducerNodeBuilder {
595 private final static String RESOURCEBUNDLE_KEY_ATTRIBUTE = KEY_ATTRIBUTE;
596 private final static String RESOURCEBUNDLE_BUNDLE_ATTRIBUTE = "bundle";
597 private final static String RESOURCEBUNDLE_LANGUAGE_ATTRIBUTE = "language";
598 private final static String RESOURCEBUNDLE_DEFAULT_SUBNODE = "default";
599 private final static String[] RESOURCEBUNDLE_REQUIRED_ATTRIBUTES = { RESOURCEBUNDLE_KEY_ATTRIBUTE, RESOURCEBUNDLE_BUNDLE_ATTRIBUTE };
600 private final static String[] RESOURCEBUNDLE_OPTIONAL_ATTRIBUTES = { RESOURCEBUNDLE_LANGUAGE_ATTRIBUTE};
601 private final static String[] RESOURCEBUNDLE_SUBNODES = {};
604 private String bundle;
605 private String language;
607 public ResourceBundleProducerNodeBuilder() {
608 super(RESOURCEBUNDLE_SUBNODES);
611 public void setAttributes(Map anAttributes) throws ProducerConfigExc, XMLReader.XMLReaderExc {
612 XMLReaderTool.checkAttributes(anAttributes, RESOURCEBUNDLE_REQUIRED_ATTRIBUTES, RESOURCEBUNDLE_OPTIONAL_ATTRIBUTES);
614 key = (String) anAttributes.get(RESOURCEBUNDLE_KEY_ATTRIBUTE);
615 bundle = (String) anAttributes.get(RESOURCEBUNDLE_BUNDLE_ATTRIBUTE);
616 language = (String) anAttributes.get(RESOURCEBUNDLE_LANGUAGE_ATTRIBUTE);
619 public ProducerNode constructNode() {
620 return new ResourceBundleProducerNode(key, bundle, language);
624 ////////////////////////////////////////////////////////////////////////////////
626 public static class FileDateSettingProducerNodeBuilder extends AbstractProducerNodeBuilder {
627 private final static String FILEDATESETTING_FILE_ATTRIBUTE = "filename";
628 private final static String FILEDATESETTING_DATE_ATTRIBUTE = "date";
629 private final static String[] FILEDATESETTING_REQUIRED_ATTRIBUTES = { FILEDATESETTING_FILE_ATTRIBUTE, FILEDATESETTING_DATE_ATTRIBUTE };
630 private final static String[] FILEDATESETTING_OPTIONAL_ATTRIBUTES = { };
631 private final static String[] FILEDATESETTING_SUBNODES = {};
633 private String fileNameKey;
634 private String dateKey;
636 public FileDateSettingProducerNodeBuilder() {
637 super(FILEDATESETTING_SUBNODES);
640 public void setAttributes(Map anAttributes) throws ProducerConfigExc, XMLReader.XMLReaderExc {
641 XMLReaderTool.checkAttributes(anAttributes, FILEDATESETTING_REQUIRED_ATTRIBUTES, FILEDATESETTING_OPTIONAL_ATTRIBUTES);
643 fileNameKey = (String) anAttributes.get(FILEDATESETTING_FILE_ATTRIBUTE);
644 dateKey = (String) anAttributes.get(FILEDATESETTING_DATE_ATTRIBUTE);
647 public ProducerNode constructNode() {
648 return new FileDateSettingProducerNode(fileNameKey, dateKey);
652 ////////////////////////////////////////////////////////////////////////////////
654 public static class FileDeletingProducerNodeBuilder extends AbstractProducerNodeBuilder {
655 private final static String FILEDELETING_FILE_ATTRIBUTE = "filename";
656 private final static String[] FILEDELETING_REQUIRED_ATTRIBUTES = { FILEDELETING_FILE_ATTRIBUTE };
657 private final static String[] FILEDELETING_OPTIONAL_ATTRIBUTES = { };
658 private final static String[] FILEDELETING_SUBNODES = { };
660 private String fileNameKey;
662 public FileDeletingProducerNodeBuilder() {
663 super(FILEDELETING_SUBNODES);
666 public void setAttributes(Map anAttributes) throws ProducerConfigExc, XMLReader.XMLReaderExc {
667 XMLReaderTool.checkAttributes(anAttributes, FILEDELETING_REQUIRED_ATTRIBUTES, FILEDELETING_OPTIONAL_ATTRIBUTES);
669 fileNameKey = (String) anAttributes.get(FILEDELETING_FILE_ATTRIBUTE);
672 public ProducerNode constructNode() {
673 return new FileDeletingProducerNode(fileNameKey);
677 ////////////////////////////////////////////////////////////////////////////////
679 public static class ScriptCallingProducerNodeBuilder extends AbstractProducerNodeBuilder {
680 private final static String SCRIPT_COMMAND_ATTRIBUTE = "command";
681 private final static String[] SCRIPT_REQUIRED_ATTRIBUTES = { SCRIPT_COMMAND_ATTRIBUTE };
682 private final static String[] SCRIPT_OPTIONAL_ATTRIBUTES = {};
683 private final static String[] SCRIPT_SUBNODES = {};
685 private String command;
687 public ScriptCallingProducerNodeBuilder() {
688 super(SCRIPT_SUBNODES);
691 public void setAttributes(Map anAttributes) throws ProducerConfigExc, XMLReader.XMLReaderExc {
692 XMLReaderTool.checkAttributes(anAttributes, SCRIPT_REQUIRED_ATTRIBUTES, SCRIPT_OPTIONAL_ATTRIBUTES);
694 command = (String) anAttributes.get(SCRIPT_COMMAND_ATTRIBUTE);
697 public ProducerNode constructNode() {
698 return new ScriptCallingProducerNode(command);
702 ////////////////////////////////////////////////////////////////////////////////
704 private final static String DIRCOPY_SOURCE_ATTRIBUTE = "source";
705 private final static String DIRCOPY_DESTINATION_ATTRIBUTE = "destination";
706 private final static String[] DIRCOPY_REQUIRED_ATTRIBUTES = { DIRCOPY_SOURCE_ATTRIBUTE, DIRCOPY_DESTINATION_ATTRIBUTE };
707 private final static String[] DIRCOPY_OPTIONAL_ATTRIBUTES = {};
708 private final static String[] DIRCOPY_SUBNODES = {};
710 public static class DirCopyProducerNodeBuilder extends AbstractProducerNodeBuilder {
711 private String source;
712 private String destination;
713 private String sourceBasePath;
714 private String destinationBasePath;
716 public DirCopyProducerNodeBuilder(String aSourceBasePath, String aDestinationBasePath) {
717 super(DIRCOPY_SUBNODES);
719 sourceBasePath = aSourceBasePath;
720 destinationBasePath = aDestinationBasePath;
723 public void setAttributes(Map anAttributes) throws ProducerConfigExc, XMLReader.XMLReaderExc {
724 XMLReaderTool.checkAttributes(anAttributes, DIRCOPY_REQUIRED_ATTRIBUTES, DIRCOPY_OPTIONAL_ATTRIBUTES);
726 source = (String) anAttributes.get(DIRCOPY_SOURCE_ATTRIBUTE);
727 destination = (String) anAttributes.get(DIRCOPY_DESTINATION_ATTRIBUTE);
730 public ProducerNode constructNode() {
731 return new DirCopyingProducerNode(sourceBasePath, destinationBasePath, source, destination);
734 public static class factory implements ProducerNodeBuilderFactory {
735 private String sourceBasePath;
736 private String destinationBasePath;
738 public factory(String aSourceBasePath, String aDestinationBasePath) {
739 sourceBasePath = aSourceBasePath;
740 destinationBasePath = aDestinationBasePath;
743 public ProducerNodeBuilder makeBuilder() {
744 return new DirCopyProducerNodeBuilder(sourceBasePath, destinationBasePath);
749 ////////////////////////////////////////////////////////////////////////////////
751 public static class GeneratingProducerNodeBuilder extends AbstractProducerNodeBuilder {
752 private final static String GENERATION_GENERATOR_ATTRIBUTE = "generator";
753 private final static String GENERATION_DESTINATION_ATTRIBUTE = "destination";
754 private final static String GENERATION_PARAMETERS_ATTRIBUTE = "parameters";
755 private final static String[] GENERATION_REQUIRED_ATTRIBUTES = { GENERATION_GENERATOR_ATTRIBUTE, GENERATION_DESTINATION_ATTRIBUTE };
756 private final static String[] GENERATION_OPTIONAL_ATTRIBUTES = { GENERATION_PARAMETERS_ATTRIBUTE};
757 private final static String[] GENERATION_SUBNODES = {};
759 private String generator;
760 private String destination;
761 private String parameters;
762 private Generator.GeneratorLibrary generatorLibrary;
763 private WriterEngine writerEngine;
765 public GeneratingProducerNodeBuilder(Generator.GeneratorLibrary aGeneratorLibrary, WriterEngine aWriterEngine) {
766 super(GENERATION_SUBNODES);
768 writerEngine = aWriterEngine;
769 generatorLibrary = aGeneratorLibrary;
772 public void setAttributes(Map anAttributes) throws ProducerConfigExc, XMLReader.XMLReaderExc {
773 XMLReaderTool.checkAttributes(anAttributes, GENERATION_REQUIRED_ATTRIBUTES, GENERATION_OPTIONAL_ATTRIBUTES);
775 generator = (String) anAttributes.get(GENERATION_GENERATOR_ATTRIBUTE);
776 destination = (String) anAttributes.get(GENERATION_DESTINATION_ATTRIBUTE);
777 parameters = XMLReaderTool.getStringAttributeWithDefault(anAttributes, GENERATION_PARAMETERS_ATTRIBUTE, "" );
780 public ProducerNode constructNode() {
781 return new GeneratingProducerNode(generatorLibrary, writerEngine, generator, destination, parameters);
784 public static class factory implements ProducerNodeBuilderFactory {
785 private Generator.GeneratorLibrary generatorLibrary;
786 private WriterEngine writerEngine;
788 public factory(Generator.GeneratorLibrary aGeneratorLibrary, WriterEngine aWriterEngine) {
789 writerEngine = aWriterEngine;
790 generatorLibrary = aGeneratorLibrary;
793 public ProducerNodeBuilder makeBuilder() {
794 return new GeneratingProducerNodeBuilder(generatorLibrary, writerEngine);
799 ////////////////////////////////////////////////////////////////////////////////
801 public static class BatchingProducerNodeBuilder extends AbstractProducerNodeBuilder {
803 private final static String BATCHER_DATAKEY_ATTRIBUTE = KEY_ATTRIBUTE;
804 private final static String BATCHER_INFOKEY_ATTRIBUTE = "infokey";
805 private final static String BATCHER_DEFINITION_ATTRIBUTE = DEFINITION_ATTRIBUTE;
806 private final static String BATCHER_SELECTION_ATTRIBUTE = SELECTION_ATTRIBUTE;
807 private final static String BATCHER_ORDER_ATTRIBUTE = ORDER_ATTRIBUTE;
809 private final static String BATCHER_BATCHSIZE_ATTRIBUTE = "batchsize";
810 private final static String BATCHER_MINBATCHSIZE_ATTRIBUTE = "minbatchsize";
811 private final static String BATCHER_SKIP_ATTRIBUTE = SKIP_ATTRIBUTE;
813 private final static String BATCHER_PROCESS_ATTRIBUTE = "process";
815 private final static String BATCHER_BATCH_SUBNODE = "batches";
816 private final static String BATCHER_BATCHLIST_SUBNODE = "batchlist";
817 private final static String[] BATCHER_REQUIRED_ATTRIBUTES = { BATCHER_DATAKEY_ATTRIBUTE, BATCHER_INFOKEY_ATTRIBUTE, BATCHER_DEFINITION_ATTRIBUTE, BATCHER_BATCHSIZE_ATTRIBUTE };
818 private final static String[] BATCHER_OPTIONAL_ATTRIBUTES = { BATCHER_SELECTION_ATTRIBUTE, BATCHER_ORDER_ATTRIBUTE, BATCHER_MINBATCHSIZE_ATTRIBUTE, BATCHER_SKIP_ATTRIBUTE, BATCHER_PROCESS_ATTRIBUTE };
819 private final static String[] BATCHER_SUBNODES = { BATCHER_BATCH_SUBNODE, BATCHER_BATCHLIST_SUBNODE };
821 private EntityAdapterModel model;
822 private String batchDataKey;
823 private String batchInfoKey;
824 private String definition;
825 private String selection;
826 private String order;
827 private String batchSize;
828 private String minBatchSize;
830 private String process;
832 public BatchingProducerNodeBuilder(EntityAdapterModel aModel) {
833 super(BATCHER_SUBNODES);
838 public void setAttributes(Map anAttributes) throws ProducerConfigExc, XMLReader.XMLReaderExc {
839 XMLReaderTool.checkAttributes(anAttributes, BATCHER_REQUIRED_ATTRIBUTES, BATCHER_OPTIONAL_ATTRIBUTES);
841 batchDataKey = XMLReaderTool.getStringAttributeWithDefault(anAttributes, BATCHER_DATAKEY_ATTRIBUTE, "data" );
842 batchInfoKey = XMLReaderTool.getStringAttributeWithDefault(anAttributes, BATCHER_INFOKEY_ATTRIBUTE, "info" );
843 definition = XMLReaderTool.getStringAttributeWithDefault(anAttributes, BATCHER_DEFINITION_ATTRIBUTE, "" );
844 selection = XMLReaderTool.getStringAttributeWithDefault(anAttributes, BATCHER_SELECTION_ATTRIBUTE, "" );
845 order = XMLReaderTool.getStringAttributeWithDefault(anAttributes, BATCHER_ORDER_ATTRIBUTE, "" );
847 batchSize = XMLReaderTool.getStringAttributeWithDefault(anAttributes, BATCHER_BATCHSIZE_ATTRIBUTE, "20" );
848 minBatchSize = XMLReaderTool.getStringAttributeWithDefault(anAttributes, BATCHER_MINBATCHSIZE_ATTRIBUTE, "0" );
849 skip = XMLReaderTool.getStringAttributeWithDefault(anAttributes, BATCHER_SKIP_ATTRIBUTE, "0" );
850 process = XMLReaderTool.getStringAttributeWithDefault(anAttributes, BATCHER_PROCESS_ATTRIBUTE, "-1" );
853 public ProducerNode constructNode() {
854 return new EntityBatchingProducerNode(
865 getSubNode( BATCHER_BATCH_SUBNODE ),
866 getSubNode( BATCHER_BATCHLIST_SUBNODE )
870 public static class factory implements ProducerNodeBuilderFactory {
871 private EntityAdapterModel model;
873 public factory(EntityAdapterModel aModel) {
877 public ProducerNodeBuilder makeBuilder() {
878 return new BatchingProducerNodeBuilder(model);
883 ////////////////////////////////////////////////////////////////////////////////
885 public static class ConditionalProducerNodeBuilder extends AbstractProducerNodeBuilder {
886 private final static String IF_CONDITION_ATTRIBUTE = "condition";
888 private final static String IF_TRUE_SUBNODE = "then";
889 private final static String IF_FALSE_SUBNODE = "else";
890 private final static String[] IF_REQUIRED_ATTRIBUTES = { IF_CONDITION_ATTRIBUTE };
891 private final static String[] IF_OPTIONAL_ATTRIBUTES = { };
892 private final static String[] IF_SUBNODES = { IF_TRUE_SUBNODE, IF_FALSE_SUBNODE };
894 private String condition;
896 public ConditionalProducerNodeBuilder() {
900 public void setAttributes(Map anAttributes) throws ProducerConfigExc, XMLReader.XMLReaderExc {
901 XMLReaderTool.checkAttributes(anAttributes, IF_REQUIRED_ATTRIBUTES, IF_OPTIONAL_ATTRIBUTES);
903 condition = (String) anAttributes.get( IF_CONDITION_ATTRIBUTE );
906 public ProducerNode constructNode() {
907 return new ConditionalProducerNode(
909 getSubNode( IF_TRUE_SUBNODE ),
910 getSubNode( IF_FALSE_SUBNODE )
916 ////////////////////////////////////////////////////////////////////////////////
918 public static class RSSProducerNodeBuilder extends AbstractProducerNodeBuilder {
919 private final static String RSS_KEY_ATTRIBUTE = KEY_ATTRIBUTE;
920 private final static String RSS_URL_ATTRIBUTE = URL_ATTRIBUTE;
921 private final static String RSS_VERSION_ATTRIBUTE = "version";
923 private final static String[] RSS_REQUIRED_ATTRIBUTES = { RSS_KEY_ATTRIBUTE, RSS_URL_ATTRIBUTE };
924 private final static String[] RSS_OPTIONAL_ATTRIBUTES = { RSS_VERSION_ATTRIBUTE };
925 private final static String[] RSS_SUBNODES = { };
929 private String version;
931 public RSSProducerNodeBuilder() {
935 public void setAttributes(Map anAttributes) throws ProducerConfigExc, XMLReader.XMLReaderExc {
936 XMLReaderTool.checkAttributes(anAttributes, RSS_REQUIRED_ATTRIBUTES, RSS_OPTIONAL_ATTRIBUTES);
938 key = (String) anAttributes.get( RSS_KEY_ATTRIBUTE );
939 url = (String) anAttributes.get( RSS_URL_ATTRIBUTE );
940 version = XMLReaderTool.getStringAttributeWithDefault(anAttributes, RSS_VERSION_ATTRIBUTE, "1.0");
943 public ProducerNode constructNode() {
944 return new RSSProducerNode(key, url, version);
948 ////////////////////////////////////////////////////////////////////////////////
950 public static class RDFAggregatorProducerNodeBuilder extends AbstractProducerNodeBuilder {
951 private final static String RDF_AGGREGATOR_KEY_ATTRIBUTE = KEY_ATTRIBUTE;
952 private final static String RDF_AGGREGATOR_SOURCE_ATTRIBUTE = "source";
953 private final static String RDF_AGGREGATOR_ORDER_ATTRIBUTE = ORDER_ATTRIBUTE;
954 private final static String RDF_AGGREGATOR_FILTER_ATTRIBUTE = "filter";
956 private final static String[] RDF_AGGREGATOR_REQUIRED_ATTRIBUTES = { RDF_AGGREGATOR_KEY_ATTRIBUTE, RDF_AGGREGATOR_SOURCE_ATTRIBUTE };
957 private final static String[] RDF_AGGREGATOR_OPTIONAL_ATTRIBUTES = { RDF_AGGREGATOR_ORDER_ATTRIBUTE, RDF_AGGREGATOR_FILTER_ATTRIBUTE };
958 private final static String[] RDF_AGGREGATOR_SUBNODES = { };
961 private String source;
962 private String order;
963 private String filter;
965 public RDFAggregatorProducerNodeBuilder() {
966 super(RDF_AGGREGATOR_SUBNODES);
969 public void setAttributes(Map anAttributes) throws ProducerConfigExc, XMLReader.XMLReaderExc {
970 XMLReaderTool.checkAttributes(anAttributes, RDF_AGGREGATOR_REQUIRED_ATTRIBUTES, RDF_AGGREGATOR_OPTIONAL_ATTRIBUTES);
972 key = (String) anAttributes.get( RDF_AGGREGATOR_KEY_ATTRIBUTE );
973 source = (String) anAttributes.get( RDF_AGGREGATOR_SOURCE_ATTRIBUTE );
974 order = XMLReaderTool.getStringAttributeWithDefault(anAttributes, RDF_AGGREGATOR_SOURCE_ATTRIBUTE, "");
975 filter = XMLReaderTool.getStringAttributeWithDefault(anAttributes, RDF_AGGREGATOR_FILTER_ATTRIBUTE, "");
978 public ProducerNode constructNode() {
979 return new RDFAggregatorProducerNode(key, source, order, filter);
983 ////////////////////////////////////////////////////////////////////////////////
985 public static class ScriptedProducerParameterNodeBuilder implements ProducerNodeBuilder {
986 private String parameterName;
987 private String scriptedNodeName;
989 public ScriptedProducerParameterNodeBuilder(String aScriptedNodeName, String aParameterName) {
990 parameterName = aParameterName;
991 scriptedNodeName = aScriptedNodeName;
994 public void setSubNode(String aName, ProducerNode aNode) {
997 public Set getAvailableSubNodes() {
998 return new HashSet();
1001 public void setAttributes(Map anAttributes) throws ProducerConfigExc {
1002 if (!anAttributes.isEmpty())
1003 throw new ProducerConfigExc("No parameters allowed here");
1006 public ProducerNode constructNode() {
1007 return new ScriptedProducerNodeDefinition.NodeParameterProducerNode(scriptedNodeName, parameterName);
1011 ////////////////////////////////////////////////////////////////////////////////
1013 public static class ScriptedProducerNodeBuilder implements ProducerNodeBuilder {
1014 private ScriptedProducerNodeDefinition definition;
1015 private Map nodeParameterValues;
1016 private Map integerParameterValues;
1017 private Map stringParameterValues;
1019 public ScriptedProducerNodeBuilder(ScriptedProducerNodeDefinition aDefinition) {
1020 definition = aDefinition;
1022 stringParameterValues = new HashMap();
1023 stringParameterValues.putAll(definition.getStringParameters());
1025 integerParameterValues = new HashMap();
1026 integerParameterValues.putAll(definition.getIntegerParameters());
1028 nodeParameterValues = new HashMap();
1031 public void setSubNode(String aName, ProducerNode aNode) {
1032 nodeParameterValues.put(aName, aNode);
1035 public Set getAvailableSubNodes() {
1036 return definition.getNodeParameters();
1039 public void setAttributes(Map anAttributes) throws ProducerConfigExc, XMLReader.XMLReaderExc {
1040 XMLReaderTool.checkAttributeSet(anAttributes.keySet(), definition.getRequiredAttributes(), definition.getOptionalAttributes());
1042 Iterator i = anAttributes.entrySet().iterator();
1043 while (i.hasNext()) {
1044 Map.Entry entry = (Map.Entry) i.next();
1046 if (definition.getIntegerParameters().keySet().contains(entry.getKey()))
1047 integerParameterValues.put(entry.getKey(), entry.getValue());
1049 stringParameterValues.put(entry.getKey(), entry.getValue());
1053 public ProducerNode constructNode() {
1054 return new ScriptedProducerNode(definition, stringParameterValues, integerParameterValues, nodeParameterValues);
1057 public static class factory implements ProducerNodeBuilderFactory {
1058 private ScriptedProducerNodeDefinition definition;
1060 public factory(ScriptedProducerNodeDefinition aDefinition) {
1061 definition = aDefinition;
1064 public ProducerNodeBuilder makeBuilder() {
1065 return new ScriptedProducerNodeBuilder(definition);