1 package mir.producer.reader;
4 import mir.generator.*;
6 import mir.entity.adapter.*;
9 public class DefaultProducerNodeBuilders {
11 public static void registerBuilders(ProducerNodeBuilderLibrary aBuilderLibrary,
12 EntityAdapterModel aModel, Generator.GeneratorLibrary aGeneratorLibrary,
13 WriterEngine aWriterEngine) {
15 aBuilderLibrary.registerBuilder("Set", EvaluatedAssignmentProducerNodeBuilder.class);
16 aBuilderLibrary.registerBuilder("Define", ExpandedAssignmentProducerNodeBuilder.class);
17 aBuilderLibrary.registerBuilder("Log", LoggingProducerNodeBuilder.class);
18 aBuilderLibrary.registerBuilder("Execute", ScriptCallingProducerNodeBuilder.class);
19 aBuilderLibrary.registerBuilder("Resource", ResourceBundleProducerNodeBuilder.class);
21 aBuilderLibrary.registerBuilder("DeleteFile", FileDeletingProducerNodeBuilder.class);
22 aBuilderLibrary.registerBuilder("SetFileDate", FileDateSettingProducerNodeBuilder.class);
23 aBuilderLibrary.registerBuilder("If", ConditionalProducerNodeBuilder.class);
26 aBuilderLibrary.registerFactory("Enumerate", new EnumeratingProducerNodeBuilder.factory(aModel));
27 aBuilderLibrary.registerFactory("List", new ListProducerNodeBuilder.factory(aModel));
28 aBuilderLibrary.registerFactory("Batch", new BatchingProducerNodeBuilder.factory(aModel));
30 aBuilderLibrary.registerFactory("Generate",
31 new GeneratingProducerNodeBuilder.factory(aGeneratorLibrary, aWriterEngine));
34 public static abstract class AbstractProducerNodeBuilder implements ProducerNodeBuilder {
35 private Map attributes;
37 private Set availableSubnodes;
39 public AbstractProducerNodeBuilder(String anAvailableSubNodes[]) {
40 attributes = new HashMap();
41 subNodes = new HashMap();
42 availableSubnodes = new HashSet(Arrays.asList(anAvailableSubNodes));
45 protected ProducerNode getSubNode(String aName) {
46 return (ProducerNode) subNodes.get(aName);
49 public void setSubNode(String aName, ProducerNode aNode) {
50 subNodes.put(aName, aNode);
53 public Set getAvailableSubNodes() {
54 return availableSubnodes;
58 ////////////////////////////////////////////////////////////////////////////////
60 // general attribute names, specifc builders reference these, to keep attribute
63 public final static String SELECTION_ATTRIBUTE = "selection";
64 public final static String ORDER_ATTRIBUTE = "order";
65 public final static String DEFINITION_ATTRIBUTE = "table";
66 public final static String SKIP_ATTRIBUTE = "skip";
67 public final static String KEY_ATTRIBUTE = "key";
68 public final static String LIMIT_ATTRIBUTE = "limit";
70 ////////////////////////////////////////////////////////////////////////////////
72 public static class ExpandedAssignmentProducerNodeBuilder extends AbstractProducerNodeBuilder {
73 private final static String ASSIGNMENT_KEY_ATTRIBUTE = KEY_ATTRIBUTE;
74 private final static String ASSIGNMENT_VALUE_ATTRIBUTE = "value";
75 private final static String[] ASSIGNMENT_REQUIRED_ATTRIBUTES = { ASSIGNMENT_KEY_ATTRIBUTE, ASSIGNMENT_VALUE_ATTRIBUTE };
76 private final static String[] ASSIGNMENT_OPTIONAL_ATTRIBUTES = {};
77 private final static String[] ASSIGNMENT_SUBNODES = {};
82 public ExpandedAssignmentProducerNodeBuilder() {
83 super(ASSIGNMENT_SUBNODES);
86 public void setAttributes(Map anAttributes) throws ProducerConfigExc {
87 ReaderTool.checkAttributes(anAttributes, ASSIGNMENT_REQUIRED_ATTRIBUTES, ASSIGNMENT_OPTIONAL_ATTRIBUTES);
89 key = (String) anAttributes.get(ASSIGNMENT_KEY_ATTRIBUTE);
90 value = (String) anAttributes.get(ASSIGNMENT_VALUE_ATTRIBUTE);
93 public ProducerNode constructNode() {
94 return new EvaluatedAssignmentProducerNode(key, value);
98 ////////////////////////////////////////////////////////////////////////////////
100 public static class EvaluatedAssignmentProducerNodeBuilder extends AbstractProducerNodeBuilder {
101 private final static String ASSIGNMENT_KEY_ATTRIBUTE = KEY_ATTRIBUTE;
102 private final static String ASSIGNMENT_VALUE_ATTRIBUTE = "value";
103 private final static String[] ASSIGNMENT_REQUIRED_ATTRIBUTES = { ASSIGNMENT_KEY_ATTRIBUTE, ASSIGNMENT_VALUE_ATTRIBUTE };
104 private final static String[] ASSIGNMENT_OPTIONAL_ATTRIBUTES = {};
105 private final static String[] ASSIGNMENT_SUBNODES = {};
108 private String value;
110 public EvaluatedAssignmentProducerNodeBuilder() {
111 super(ASSIGNMENT_SUBNODES);
114 public void setAttributes(Map anAttributes) throws ProducerConfigExc {
115 ReaderTool.checkAttributes(anAttributes, ASSIGNMENT_REQUIRED_ATTRIBUTES, ASSIGNMENT_OPTIONAL_ATTRIBUTES);
117 key = (String) anAttributes.get(ASSIGNMENT_KEY_ATTRIBUTE);
118 value = (String) anAttributes.get(ASSIGNMENT_VALUE_ATTRIBUTE);
121 public ProducerNode constructNode() {
122 return new EvaluatedAssignmentProducerNode(key, value);
126 ////////////////////////////////////////////////////////////////////////////////
128 public static class EnumeratingProducerNodeBuilder extends AbstractProducerNodeBuilder {
129 // ML: add limit, skip!
130 private final static String ENUMERATION_KEY_ATTRIBUTE = KEY_ATTRIBUTE;
131 private final static String ENUMERATION_DEFINITION_ATTRIBUTE = DEFINITION_ATTRIBUTE;
132 private final static String ENUMERATION_SELECTION_ATTRIBUTE = SELECTION_ATTRIBUTE;
133 private final static String ENUMERATION_ORDER_ATTRIBUTE = ORDER_ATTRIBUTE;
134 private final static String ENUMERATION_DEFAULT_SUBNODE = "default";
135 private final static String[] ENUMERATION_REQUIRED_ATTRIBUTES = { ENUMERATION_KEY_ATTRIBUTE, ENUMERATION_DEFINITION_ATTRIBUTE };
136 private final static String[] ENUMERATION_OPTIONAL_ATTRIBUTES = { ENUMERATION_SELECTION_ATTRIBUTE, ENUMERATION_ORDER_ATTRIBUTE};
137 private final static String[] ENUMERATION_SUBNODES = {ENUMERATION_DEFAULT_SUBNODE};
140 private String definition;
141 private String selection;
142 private String order;
143 private EntityAdapterModel model;
145 public EnumeratingProducerNodeBuilder(EntityAdapterModel aModel) {
146 super(ENUMERATION_SUBNODES);
151 public void setAttributes(Map anAttributes) throws ProducerConfigExc {
152 ReaderTool.checkAttributes(anAttributes, ENUMERATION_REQUIRED_ATTRIBUTES, ENUMERATION_OPTIONAL_ATTRIBUTES);
154 key = (String) anAttributes.get(ENUMERATION_KEY_ATTRIBUTE);
155 definition = (String) anAttributes.get(ENUMERATION_DEFINITION_ATTRIBUTE);
156 selection = (String) anAttributes.get(ENUMERATION_SELECTION_ATTRIBUTE);
157 order = (String) anAttributes.get(ENUMERATION_ORDER_ATTRIBUTE);
160 public ProducerNode constructNode() {
161 return new EntityEnumeratingProducerNode(key, model, definition, selection, order, getSubNode(ENUMERATION_DEFAULT_SUBNODE ));
164 public static class factory implements ProducerNodeBuilderFactory {
165 private EntityAdapterModel model;
167 public factory(EntityAdapterModel aModel) {
171 public ProducerNodeBuilder makeBuilder() {
172 return new EnumeratingProducerNodeBuilder(model);
177 ////////////////////////////////////////////////////////////////////////////////
179 public static class ListProducerNodeBuilder extends AbstractProducerNodeBuilder {
180 private final static String LIST_KEY_ATTRIBUTE = KEY_ATTRIBUTE;
181 private final static String LIST_DEFINITION_ATTRIBUTE = DEFINITION_ATTRIBUTE;
182 private final static String LIST_SELECTION_ATTRIBUTE = SELECTION_ATTRIBUTE;
183 private final static String LIST_ORDER_ATTRIBUTE = ORDER_ATTRIBUTE;
184 private final static String LIST_DEFAULT_SUBNODE = "default";
185 private final static String LIST_LIMIT_ATTRIBUTE = LIMIT_ATTRIBUTE;
186 private final static String LIST_SKIP_ATTRIBUTE = SKIP_ATTRIBUTE;
187 private final static String[] LIST_REQUIRED_ATTRIBUTES = { LIST_KEY_ATTRIBUTE, LIST_DEFINITION_ATTRIBUTE };
188 private final static String[] LIST_OPTIONAL_ATTRIBUTES = { LIST_SELECTION_ATTRIBUTE, LIST_ORDER_ATTRIBUTE, LIST_SKIP_ATTRIBUTE, LIST_LIMIT_ATTRIBUTE};
189 private final static String[] LIST_SUBNODES = {LIST_DEFAULT_SUBNODE};
192 private String definition;
193 private String selection;
194 private String order;
197 private EntityAdapterModel model;
199 public ListProducerNodeBuilder(EntityAdapterModel aModel) {
200 super(LIST_SUBNODES);
205 public void setAttributes(Map anAttributes) throws ProducerConfigExc {
209 ReaderTool.checkAttributes(anAttributes, LIST_REQUIRED_ATTRIBUTES, LIST_OPTIONAL_ATTRIBUTES);
211 key = (String) anAttributes.get(LIST_KEY_ATTRIBUTE);
212 definition = (String) anAttributes.get(LIST_DEFINITION_ATTRIBUTE);
213 selection = (String) anAttributes.get(LIST_SELECTION_ATTRIBUTE);
214 order = (String) anAttributes.get(LIST_ORDER_ATTRIBUTE);
218 limitString = (String) anAttributes.get(LIST_LIMIT_ATTRIBUTE);
219 if (limitString!=null) {
221 limit = Integer.parseInt(limitString);
223 catch (Throwable t) {
224 throw new ProducerConfigExc("invalid value for list parameter: " + limitString);
227 skipString = (String) anAttributes.get(LIST_SKIP_ATTRIBUTE);
228 if (skipString!=null) {
230 skip = Integer.parseInt(skipString);
232 catch (Throwable t) {
233 throw new ProducerConfigExc("invalid value for skip parameter: " + skipString);
238 public ProducerNode constructNode() {
239 return new EntityListProducerNode(key, model, definition, selection, order, limit, skip, getSubNode(LIST_DEFAULT_SUBNODE ));
242 public static class factory implements ProducerNodeBuilderFactory {
243 private EntityAdapterModel model;
245 public factory(EntityAdapterModel aModel) {
249 public ProducerNodeBuilder makeBuilder() {
250 return new ListProducerNodeBuilder(model);
255 ////////////////////////////////////////////////////////////////////////////////
257 public static class LoggingProducerNodeBuilder extends AbstractProducerNodeBuilder {
258 private final static String LOG_MESSAGE_ATTRIBUTE = "message";
259 private final static String[] LOG_REQUIRED_ATTRIBUTES = { LOG_MESSAGE_ATTRIBUTE };
260 private final static String[] LOG_OPTIONAL_ATTRIBUTES = {};
261 private final static String[] LOG_SUBNODES = {};
263 private String message;
265 public LoggingProducerNodeBuilder() {
269 public void setAttributes(Map anAttributes) throws ProducerConfigExc {
270 ReaderTool.checkAttributes(anAttributes, LOG_REQUIRED_ATTRIBUTES, LOG_OPTIONAL_ATTRIBUTES);
272 message = (String) anAttributes.get(LOG_MESSAGE_ATTRIBUTE);
275 public ProducerNode constructNode() {
276 return new LoggingProducerNode(message);
280 ////////////////////////////////////////////////////////////////////////////////
282 public static class ResourceBundleProducerNodeBuilder extends AbstractProducerNodeBuilder {
283 private final static String RESOURCEBUNDLE_KEY_ATTRIBUTE = KEY_ATTRIBUTE;
284 private final static String RESOURCEBUNDLE_BUNDLE_ATTRIBUTE = "bundle";
285 private final static String RESOURCEBUNDLE_LANGUAGE_ATTRIBUTE = "language";
286 private final static String RESOURCEBUNDLE_DEFAULT_SUBNODE = "default";
287 private final static String[] RESOURCEBUNDLE_REQUIRED_ATTRIBUTES = { RESOURCEBUNDLE_KEY_ATTRIBUTE, RESOURCEBUNDLE_BUNDLE_ATTRIBUTE };
288 private final static String[] RESOURCEBUNDLE_OPTIONAL_ATTRIBUTES = { RESOURCEBUNDLE_LANGUAGE_ATTRIBUTE};
289 private final static String[] RESOURCEBUNDLE_SUBNODES = {RESOURCEBUNDLE_DEFAULT_SUBNODE};
292 private String bundle;
293 private String language;
295 public ResourceBundleProducerNodeBuilder() {
296 super(RESOURCEBUNDLE_SUBNODES);
299 public void setAttributes(Map anAttributes) throws ProducerConfigExc {
300 ReaderTool.checkAttributes(anAttributes, RESOURCEBUNDLE_REQUIRED_ATTRIBUTES, RESOURCEBUNDLE_OPTIONAL_ATTRIBUTES);
302 key = (String) anAttributes.get(RESOURCEBUNDLE_KEY_ATTRIBUTE);
303 bundle = (String) anAttributes.get(RESOURCEBUNDLE_BUNDLE_ATTRIBUTE);
304 language = (String) anAttributes.get(RESOURCEBUNDLE_LANGUAGE_ATTRIBUTE);
307 public ProducerNode constructNode() {
308 return new ResourceBundleProducerNode(key, bundle, language, getSubNode(RESOURCEBUNDLE_DEFAULT_SUBNODE ));
312 ////////////////////////////////////////////////////////////////////////////////
314 public static class FileDateSettingProducerNodeBuilder extends AbstractProducerNodeBuilder {
315 private final static String FILEDATESETTING_FILE_ATTRIBUTE = "filename";
316 private final static String FILEDATESETTING_DATE_ATTRIBUTE = "date";
317 private final static String[] FILEDATESETTING_REQUIRED_ATTRIBUTES = { FILEDATESETTING_FILE_ATTRIBUTE, FILEDATESETTING_DATE_ATTRIBUTE };
318 private final static String[] FILEDATESETTING_OPTIONAL_ATTRIBUTES = { };
319 private final static String[] FILEDATESETTING_SUBNODES = {};
321 private String fileNameKey;
322 private String dateKey;
324 public FileDateSettingProducerNodeBuilder() {
325 super(FILEDATESETTING_SUBNODES);
328 public void setAttributes(Map anAttributes) throws ProducerConfigExc {
329 ReaderTool.checkAttributes(anAttributes, FILEDATESETTING_REQUIRED_ATTRIBUTES, FILEDATESETTING_OPTIONAL_ATTRIBUTES);
331 fileNameKey = (String) anAttributes.get(FILEDATESETTING_FILE_ATTRIBUTE);
332 dateKey = (String) anAttributes.get(FILEDATESETTING_DATE_ATTRIBUTE);
335 public ProducerNode constructNode() {
336 return new FileDateSettingProducerNode(fileNameKey, dateKey);
340 ////////////////////////////////////////////////////////////////////////////////
342 public static class FileDeletingProducerNodeBuilder extends AbstractProducerNodeBuilder {
343 private final static String FILEDELETING_FILE_ATTRIBUTE = "filename";
344 private final static String[] FILEDELETING_REQUIRED_ATTRIBUTES = { FILEDELETING_FILE_ATTRIBUTE };
345 private final static String[] FILEDELETING_OPTIONAL_ATTRIBUTES = { };
346 private final static String[] FILEDELETING_SUBNODES = { };
348 private String fileNameKey;
350 public FileDeletingProducerNodeBuilder() {
351 super(FILEDELETING_SUBNODES);
354 public void setAttributes(Map anAttributes) throws ProducerConfigExc {
355 ReaderTool.checkAttributes(anAttributes, FILEDELETING_REQUIRED_ATTRIBUTES, FILEDELETING_OPTIONAL_ATTRIBUTES);
357 fileNameKey = (String) anAttributes.get(FILEDELETING_FILE_ATTRIBUTE);
360 public ProducerNode constructNode() {
361 return new FileDeletingProducerNode(fileNameKey);
365 ////////////////////////////////////////////////////////////////////////////////
367 public static class ScriptCallingProducerNodeBuilder extends AbstractProducerNodeBuilder {
368 private final static String SCRIPT_COMMAND_ATTRIBUTE = "command";
369 private final static String[] SCRIPT_REQUIRED_ATTRIBUTES = { SCRIPT_COMMAND_ATTRIBUTE };
370 private final static String[] SCRIPT_OPTIONAL_ATTRIBUTES = {};
371 private final static String[] SCRIPT_SUBNODES = {};
373 private String command;
375 public ScriptCallingProducerNodeBuilder() {
376 super(SCRIPT_SUBNODES);
379 public void setAttributes(Map anAttributes) throws ProducerConfigExc {
380 ReaderTool.checkAttributes(anAttributes, SCRIPT_REQUIRED_ATTRIBUTES, SCRIPT_OPTIONAL_ATTRIBUTES);
382 command = (String) anAttributes.get(SCRIPT_COMMAND_ATTRIBUTE);
385 public ProducerNode constructNode() {
386 return new ScriptCallingProducerNode(command);
390 ////////////////////////////////////////////////////////////////////////////////
392 public static class GeneratingProducerNodeBuilder extends AbstractProducerNodeBuilder {
393 private final static String GENERATION_GENERATOR_ATTRIBUTE = "generator";
394 private final static String GENERATION_DESTINATION_ATTRIBUTE = "destination";
395 private final static String GENERATION_PARAMETERS_ATTRIBUTE = "parameters";
396 private final static String[] GENERATION_REQUIRED_ATTRIBUTES = { GENERATION_GENERATOR_ATTRIBUTE, GENERATION_DESTINATION_ATTRIBUTE };
397 private final static String[] GENERATION_OPTIONAL_ATTRIBUTES = { GENERATION_PARAMETERS_ATTRIBUTE};
398 private final static String[] GENERATION_SUBNODES = {};
400 private String generator;
401 private String destination;
402 private String parameters;
403 private Generator.GeneratorLibrary generatorLibrary;
404 private WriterEngine writerEngine;
406 public GeneratingProducerNodeBuilder(Generator.GeneratorLibrary aGeneratorLibrary, WriterEngine aWriterEngine) {
407 super(GENERATION_SUBNODES);
409 writerEngine = aWriterEngine;
410 generatorLibrary = aGeneratorLibrary;
413 public void setAttributes(Map anAttributes) throws ProducerConfigExc {
414 ReaderTool.checkAttributes(anAttributes, GENERATION_REQUIRED_ATTRIBUTES, GENERATION_OPTIONAL_ATTRIBUTES);
416 generator = (String) anAttributes.get(GENERATION_GENERATOR_ATTRIBUTE);
417 destination = (String) anAttributes.get(GENERATION_DESTINATION_ATTRIBUTE);
418 parameters = ReaderTool.getStringAttributeWithDefault(anAttributes, GENERATION_PARAMETERS_ATTRIBUTE, "" );
421 public ProducerNode constructNode() {
422 return new GeneratingProducerNode(generatorLibrary, writerEngine, generator, destination, parameters);
425 public static class factory implements ProducerNodeBuilderFactory {
426 private Generator.GeneratorLibrary generatorLibrary;
427 private WriterEngine writerEngine;
429 public factory(Generator.GeneratorLibrary aGeneratorLibrary, WriterEngine aWriterEngine) {
430 writerEngine = aWriterEngine;
431 generatorLibrary = aGeneratorLibrary;
434 public ProducerNodeBuilder makeBuilder() {
435 return new GeneratingProducerNodeBuilder(generatorLibrary, writerEngine);
440 ////////////////////////////////////////////////////////////////////////////////
442 public static class BatchingProducerNodeBuilder extends AbstractProducerNodeBuilder {
444 private final static String BATCHER_DATAKEY_ATTRIBUTE = KEY_ATTRIBUTE;
445 private final static String BATCHER_INFOKEY_ATTRIBUTE = "infokey";
446 private final static String BATCHER_DEFINITION_ATTRIBUTE = DEFINITION_ATTRIBUTE;
447 private final static String BATCHER_SELECTION_ATTRIBUTE = SELECTION_ATTRIBUTE;
448 private final static String BATCHER_ORDER_ATTRIBUTE = ORDER_ATTRIBUTE;
450 private final static String BATCHER_BATCHSIZE_ATTRIBUTE = "batchsize";
451 private final static String BATCHER_MINBATCHSIZE_ATTRIBUTE = "minbatchsize";
452 private final static String BATCHER_SKIP_ATTRIBUTE = SKIP_ATTRIBUTE;
454 private final static String BATCHER_BATCH_SUBNODE = "batches";
455 private final static String BATCHER_BATCHLIST_SUBNODE = "batchlist";
456 private final static String[] BATCHER_REQUIRED_ATTRIBUTES = { BATCHER_DATAKEY_ATTRIBUTE, BATCHER_INFOKEY_ATTRIBUTE, BATCHER_DEFINITION_ATTRIBUTE, BATCHER_BATCHSIZE_ATTRIBUTE };
457 private final static String[] BATCHER_OPTIONAL_ATTRIBUTES = { BATCHER_SELECTION_ATTRIBUTE, BATCHER_ORDER_ATTRIBUTE, BATCHER_MINBATCHSIZE_ATTRIBUTE, BATCHER_SKIP_ATTRIBUTE };
458 private final static String[] BATCHER_SUBNODES = { BATCHER_BATCH_SUBNODE, BATCHER_BATCHLIST_SUBNODE };
460 private EntityAdapterModel model;
461 private String batchDataKey;
462 private String batchInfoKey;
463 private String definition;
464 private String selection;
465 private String order;
466 private int batchSize;
467 private int minBatchSize;
471 public BatchingProducerNodeBuilder(EntityAdapterModel aModel) {
472 super(BATCHER_SUBNODES);
477 public void setAttributes(Map anAttributes) throws ProducerConfigExc {
478 ReaderTool.checkAttributes(anAttributes, BATCHER_REQUIRED_ATTRIBUTES, BATCHER_OPTIONAL_ATTRIBUTES);
480 batchDataKey = ReaderTool.getStringAttributeWithDefault(anAttributes, BATCHER_DATAKEY_ATTRIBUTE, "data" );
481 batchInfoKey = ReaderTool.getStringAttributeWithDefault(anAttributes, BATCHER_INFOKEY_ATTRIBUTE, "info" );
482 definition = ReaderTool.getStringAttributeWithDefault(anAttributes, BATCHER_DEFINITION_ATTRIBUTE, "" );
483 selection = ReaderTool.getStringAttributeWithDefault(anAttributes, BATCHER_SELECTION_ATTRIBUTE, "" );
484 order = ReaderTool.getStringAttributeWithDefault(anAttributes, BATCHER_ORDER_ATTRIBUTE, "" );
486 batchSize = ReaderTool.getIntegerAttributeWithDefault(anAttributes, BATCHER_BATCHSIZE_ATTRIBUTE, 20 );
487 minBatchSize = ReaderTool.getIntegerAttributeWithDefault(anAttributes, BATCHER_MINBATCHSIZE_ATTRIBUTE, 0 );
488 skip = ReaderTool.getIntegerAttributeWithDefault(anAttributes, BATCHER_SKIP_ATTRIBUTE, 0 );
491 public ProducerNode constructNode() {
492 return new EntityBatchingProducerNode(
502 getSubNode( BATCHER_BATCH_SUBNODE ),
503 getSubNode( BATCHER_BATCHLIST_SUBNODE )
507 public static class factory implements ProducerNodeBuilderFactory {
508 private EntityAdapterModel model;
510 public factory(EntityAdapterModel aModel) {
514 public ProducerNodeBuilder makeBuilder() {
515 return new BatchingProducerNodeBuilder(model);
520 ////////////////////////////////////////////////////////////////////////////////
522 public static class ConditionalProducerNodeBuilder extends AbstractProducerNodeBuilder {
523 private final static String IF_CONDITION_ATTRIBUTE = "condition";
525 private final static String IF_TRUE_SUBNODE = "then";
526 private final static String IF_FALSE_SUBNODE = "else";
527 private final static String[] IF_REQUIRED_ATTRIBUTES = { IF_CONDITION_ATTRIBUTE };
528 private final static String[] IF_OPTIONAL_ATTRIBUTES = { };
529 private final static String[] IF_SUBNODES = { IF_TRUE_SUBNODE, IF_FALSE_SUBNODE };
531 private String condition;
533 public ConditionalProducerNodeBuilder() {
537 public void setAttributes(Map anAttributes) throws ProducerConfigExc {
538 ReaderTool.checkAttributes(anAttributes, IF_REQUIRED_ATTRIBUTES, IF_OPTIONAL_ATTRIBUTES);
540 condition = (String) anAttributes.get( IF_CONDITION_ATTRIBUTE );
543 public ProducerNode constructNode() {
544 return new ConditionalProducerNode(
546 getSubNode( IF_TRUE_SUBNODE ),
547 getSubNode( IF_FALSE_SUBNODE )
553 ////////////////////////////////////////////////////////////////////////////////
555 public static class ScriptedProducerNodeBuilder implements ProducerNodeBuilder {
556 private ScriptedProducerNodeDefinition definition;
557 private Map nodeParameterValues;
558 private Map parameterValues;
560 public ScriptedProducerNodeBuilder(ScriptedProducerNodeDefinition aDefinition) {
561 definition = aDefinition;
563 parameterValues = new HashMap();
564 parameterValues.putAll(definition.getParameters());
566 nodeParameterValues = new HashMap();
569 public void setSubNode(String aName, ProducerNode aNode) {
570 nodeParameterValues.put(aName, aNode);
573 public Set getAvailableSubNodes() {
574 return definition.getNodeParameters();
577 public void setAttributes(Map anAttributes) throws ProducerConfigExc {
578 ReaderTool.checkAttributeSet(anAttributes.keySet(), definition.getRequiredAttributes(), definition.getOptionalAttributes());
581 public ProducerNode constructNode() {
582 return new ScriptedProducerNode(definition, parameterValues, nodeParameterValues);
585 public static class factory implements ProducerNodeBuilderFactory {
586 private ScriptedProducerNodeDefinition definition;
588 public factory(ScriptedProducerNodeDefinition aDefinition) {
589 definition = aDefinition;
592 public ProducerNodeBuilder makeBuilder() {
593 return new ScriptedProducerNodeBuilder(definition);