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 ExpandedAssignmentProducerNode(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 private final static String ENUMERATION_KEY_ATTRIBUTE = KEY_ATTRIBUTE;
130 private final static String ENUMERATION_DEFINITION_ATTRIBUTE = DEFINITION_ATTRIBUTE;
131 private final static String ENUMERATION_SELECTION_ATTRIBUTE = SELECTION_ATTRIBUTE;
132 private final static String ENUMERATION_ORDER_ATTRIBUTE = ORDER_ATTRIBUTE;
133 private final static String ENUMERATION_DEFAULT_SUBNODE = "default";
134 private final static String ENUMERATION_LIMIT_ATTRIBUTE = LIMIT_ATTRIBUTE;
135 private final static String ENUMERATION_SKIP_ATTRIBUTE = SKIP_ATTRIBUTE;
136 private final static String[] ENUMERATION_REQUIRED_ATTRIBUTES = { ENUMERATION_KEY_ATTRIBUTE, ENUMERATION_DEFINITION_ATTRIBUTE };
137 private final static String[] ENUMERATION_OPTIONAL_ATTRIBUTES = { ENUMERATION_SELECTION_ATTRIBUTE, ENUMERATION_ORDER_ATTRIBUTE, ENUMERATION_LIMIT_ATTRIBUTE, ENUMERATION_SKIP_ATTRIBUTE};
138 private final static String[] ENUMERATION_SUBNODES = {ENUMERATION_DEFAULT_SUBNODE};
141 private String definition;
142 private String selection;
143 private String order;
144 private String limit;
146 private EntityAdapterModel model;
148 public EnumeratingProducerNodeBuilder(EntityAdapterModel aModel) {
149 super(ENUMERATION_SUBNODES);
154 public void setAttributes(Map anAttributes) throws ProducerConfigExc {
155 ReaderTool.checkAttributes(anAttributes, ENUMERATION_REQUIRED_ATTRIBUTES, ENUMERATION_OPTIONAL_ATTRIBUTES);
157 key = (String) anAttributes.get(ENUMERATION_KEY_ATTRIBUTE);
158 definition = (String) anAttributes.get(ENUMERATION_DEFINITION_ATTRIBUTE);
159 selection = (String) ReaderTool.getStringAttributeWithDefault(anAttributes, ENUMERATION_SELECTION_ATTRIBUTE, "");
160 order = (String) ReaderTool.getStringAttributeWithDefault(anAttributes, ENUMERATION_ORDER_ATTRIBUTE, "");
161 limit = (String) anAttributes.get(ENUMERATION_LIMIT_ATTRIBUTE);
162 skip = (String) anAttributes.get(ENUMERATION_SKIP_ATTRIBUTE);
165 public ProducerNode constructNode() {
166 return new EntityEnumeratingProducerNode(key, model, definition, selection, order, limit, skip, getSubNode(ENUMERATION_DEFAULT_SUBNODE ));
169 public static class factory implements ProducerNodeBuilderFactory {
170 private EntityAdapterModel model;
172 public factory(EntityAdapterModel aModel) {
176 public ProducerNodeBuilder makeBuilder() {
177 return new EnumeratingProducerNodeBuilder(model);
182 ////////////////////////////////////////////////////////////////////////////////
184 public static class ListProducerNodeBuilder extends AbstractProducerNodeBuilder {
185 private final static String LIST_KEY_ATTRIBUTE = KEY_ATTRIBUTE;
186 private final static String LIST_DEFINITION_ATTRIBUTE = DEFINITION_ATTRIBUTE;
187 private final static String LIST_SELECTION_ATTRIBUTE = SELECTION_ATTRIBUTE;
188 private final static String LIST_ORDER_ATTRIBUTE = ORDER_ATTRIBUTE;
189 private final static String LIST_DEFAULT_SUBNODE = "default";
190 private final static String LIST_LIMIT_ATTRIBUTE = LIMIT_ATTRIBUTE;
191 private final static String LIST_SKIP_ATTRIBUTE = SKIP_ATTRIBUTE;
192 private final static String[] LIST_REQUIRED_ATTRIBUTES = { LIST_KEY_ATTRIBUTE, LIST_DEFINITION_ATTRIBUTE };
193 private final static String[] LIST_OPTIONAL_ATTRIBUTES = { LIST_SELECTION_ATTRIBUTE, LIST_ORDER_ATTRIBUTE, LIST_SKIP_ATTRIBUTE, LIST_LIMIT_ATTRIBUTE};
194 private final static String[] LIST_SUBNODES = {};
197 private String definition;
198 private String selection;
199 private String order;
200 private String limit;
202 private EntityAdapterModel model;
204 public ListProducerNodeBuilder(EntityAdapterModel aModel) {
205 super(LIST_SUBNODES);
210 public void setAttributes(Map anAttributes) throws ProducerConfigExc {
211 ReaderTool.checkAttributes(anAttributes, LIST_REQUIRED_ATTRIBUTES, LIST_OPTIONAL_ATTRIBUTES);
213 key = (String) anAttributes.get(LIST_KEY_ATTRIBUTE);
214 definition = (String) anAttributes.get(LIST_DEFINITION_ATTRIBUTE);
215 selection = (String) ReaderTool.getStringAttributeWithDefault(anAttributes, LIST_SELECTION_ATTRIBUTE, "");
216 order = (String) ReaderTool.getStringAttributeWithDefault(anAttributes, LIST_ORDER_ATTRIBUTE, "");
217 limit = (String) anAttributes.get(LIST_LIMIT_ATTRIBUTE);
218 skip = (String) anAttributes.get(LIST_SKIP_ATTRIBUTE);
221 public ProducerNode constructNode() {
222 return new EntityListProducerNode(key, model, definition, selection, order, limit, skip, null );
225 public static class factory implements ProducerNodeBuilderFactory {
226 private EntityAdapterModel model;
228 public factory(EntityAdapterModel aModel) {
232 public ProducerNodeBuilder makeBuilder() {
233 return new ListProducerNodeBuilder(model);
238 ////////////////////////////////////////////////////////////////////////////////
240 public static class LoggingProducerNodeBuilder extends AbstractProducerNodeBuilder {
241 private final static String LOG_MESSAGE_ATTRIBUTE = "message";
242 private final static String[] LOG_REQUIRED_ATTRIBUTES = { LOG_MESSAGE_ATTRIBUTE };
243 private final static String[] LOG_OPTIONAL_ATTRIBUTES = {};
244 private final static String[] LOG_SUBNODES = {};
246 private String message;
248 public LoggingProducerNodeBuilder() {
252 public void setAttributes(Map anAttributes) throws ProducerConfigExc {
253 ReaderTool.checkAttributes(anAttributes, LOG_REQUIRED_ATTRIBUTES, LOG_OPTIONAL_ATTRIBUTES);
255 message = (String) anAttributes.get(LOG_MESSAGE_ATTRIBUTE);
258 public ProducerNode constructNode() {
259 return new LoggingProducerNode(message);
263 ////////////////////////////////////////////////////////////////////////////////
265 public static class ResourceBundleProducerNodeBuilder extends AbstractProducerNodeBuilder {
266 private final static String RESOURCEBUNDLE_KEY_ATTRIBUTE = KEY_ATTRIBUTE;
267 private final static String RESOURCEBUNDLE_BUNDLE_ATTRIBUTE = "bundle";
268 private final static String RESOURCEBUNDLE_LANGUAGE_ATTRIBUTE = "language";
269 private final static String RESOURCEBUNDLE_DEFAULT_SUBNODE = "default";
270 private final static String[] RESOURCEBUNDLE_REQUIRED_ATTRIBUTES = { RESOURCEBUNDLE_KEY_ATTRIBUTE, RESOURCEBUNDLE_BUNDLE_ATTRIBUTE };
271 private final static String[] RESOURCEBUNDLE_OPTIONAL_ATTRIBUTES = { RESOURCEBUNDLE_LANGUAGE_ATTRIBUTE};
272 private final static String[] RESOURCEBUNDLE_SUBNODES = {};
275 private String bundle;
276 private String language;
278 public ResourceBundleProducerNodeBuilder() {
279 super(RESOURCEBUNDLE_SUBNODES);
282 public void setAttributes(Map anAttributes) throws ProducerConfigExc {
283 ReaderTool.checkAttributes(anAttributes, RESOURCEBUNDLE_REQUIRED_ATTRIBUTES, RESOURCEBUNDLE_OPTIONAL_ATTRIBUTES);
285 key = (String) anAttributes.get(RESOURCEBUNDLE_KEY_ATTRIBUTE);
286 bundle = (String) anAttributes.get(RESOURCEBUNDLE_BUNDLE_ATTRIBUTE);
287 language = (String) anAttributes.get(RESOURCEBUNDLE_LANGUAGE_ATTRIBUTE);
290 public ProducerNode constructNode() {
291 return new ResourceBundleProducerNode(key, bundle, language, null );
295 ////////////////////////////////////////////////////////////////////////////////
297 public static class FileDateSettingProducerNodeBuilder extends AbstractProducerNodeBuilder {
298 private final static String FILEDATESETTING_FILE_ATTRIBUTE = "filename";
299 private final static String FILEDATESETTING_DATE_ATTRIBUTE = "date";
300 private final static String[] FILEDATESETTING_REQUIRED_ATTRIBUTES = { FILEDATESETTING_FILE_ATTRIBUTE, FILEDATESETTING_DATE_ATTRIBUTE };
301 private final static String[] FILEDATESETTING_OPTIONAL_ATTRIBUTES = { };
302 private final static String[] FILEDATESETTING_SUBNODES = {};
304 private String fileNameKey;
305 private String dateKey;
307 public FileDateSettingProducerNodeBuilder() {
308 super(FILEDATESETTING_SUBNODES);
311 public void setAttributes(Map anAttributes) throws ProducerConfigExc {
312 ReaderTool.checkAttributes(anAttributes, FILEDATESETTING_REQUIRED_ATTRIBUTES, FILEDATESETTING_OPTIONAL_ATTRIBUTES);
314 fileNameKey = (String) anAttributes.get(FILEDATESETTING_FILE_ATTRIBUTE);
315 dateKey = (String) anAttributes.get(FILEDATESETTING_DATE_ATTRIBUTE);
318 public ProducerNode constructNode() {
319 return new FileDateSettingProducerNode(fileNameKey, dateKey);
323 ////////////////////////////////////////////////////////////////////////////////
325 public static class FileDeletingProducerNodeBuilder extends AbstractProducerNodeBuilder {
326 private final static String FILEDELETING_FILE_ATTRIBUTE = "filename";
327 private final static String[] FILEDELETING_REQUIRED_ATTRIBUTES = { FILEDELETING_FILE_ATTRIBUTE };
328 private final static String[] FILEDELETING_OPTIONAL_ATTRIBUTES = { };
329 private final static String[] FILEDELETING_SUBNODES = { };
331 private String fileNameKey;
333 public FileDeletingProducerNodeBuilder() {
334 super(FILEDELETING_SUBNODES);
337 public void setAttributes(Map anAttributes) throws ProducerConfigExc {
338 ReaderTool.checkAttributes(anAttributes, FILEDELETING_REQUIRED_ATTRIBUTES, FILEDELETING_OPTIONAL_ATTRIBUTES);
340 fileNameKey = (String) anAttributes.get(FILEDELETING_FILE_ATTRIBUTE);
343 public ProducerNode constructNode() {
344 return new FileDeletingProducerNode(fileNameKey);
348 ////////////////////////////////////////////////////////////////////////////////
350 public static class ScriptCallingProducerNodeBuilder extends AbstractProducerNodeBuilder {
351 private final static String SCRIPT_COMMAND_ATTRIBUTE = "command";
352 private final static String[] SCRIPT_REQUIRED_ATTRIBUTES = { SCRIPT_COMMAND_ATTRIBUTE };
353 private final static String[] SCRIPT_OPTIONAL_ATTRIBUTES = {};
354 private final static String[] SCRIPT_SUBNODES = {};
356 private String command;
358 public ScriptCallingProducerNodeBuilder() {
359 super(SCRIPT_SUBNODES);
362 public void setAttributes(Map anAttributes) throws ProducerConfigExc {
363 ReaderTool.checkAttributes(anAttributes, SCRIPT_REQUIRED_ATTRIBUTES, SCRIPT_OPTIONAL_ATTRIBUTES);
365 command = (String) anAttributes.get(SCRIPT_COMMAND_ATTRIBUTE);
368 public ProducerNode constructNode() {
369 return new ScriptCallingProducerNode(command);
373 ////////////////////////////////////////////////////////////////////////////////
375 public static class GeneratingProducerNodeBuilder extends AbstractProducerNodeBuilder {
376 private final static String GENERATION_GENERATOR_ATTRIBUTE = "generator";
377 private final static String GENERATION_DESTINATION_ATTRIBUTE = "destination";
378 private final static String GENERATION_PARAMETERS_ATTRIBUTE = "parameters";
379 private final static String[] GENERATION_REQUIRED_ATTRIBUTES = { GENERATION_GENERATOR_ATTRIBUTE, GENERATION_DESTINATION_ATTRIBUTE };
380 private final static String[] GENERATION_OPTIONAL_ATTRIBUTES = { GENERATION_PARAMETERS_ATTRIBUTE};
381 private final static String[] GENERATION_SUBNODES = {};
383 private String generator;
384 private String destination;
385 private String parameters;
386 private Generator.GeneratorLibrary generatorLibrary;
387 private WriterEngine writerEngine;
389 public GeneratingProducerNodeBuilder(Generator.GeneratorLibrary aGeneratorLibrary, WriterEngine aWriterEngine) {
390 super(GENERATION_SUBNODES);
392 writerEngine = aWriterEngine;
393 generatorLibrary = aGeneratorLibrary;
396 public void setAttributes(Map anAttributes) throws ProducerConfigExc {
397 ReaderTool.checkAttributes(anAttributes, GENERATION_REQUIRED_ATTRIBUTES, GENERATION_OPTIONAL_ATTRIBUTES);
399 generator = (String) anAttributes.get(GENERATION_GENERATOR_ATTRIBUTE);
400 destination = (String) anAttributes.get(GENERATION_DESTINATION_ATTRIBUTE);
401 parameters = ReaderTool.getStringAttributeWithDefault(anAttributes, GENERATION_PARAMETERS_ATTRIBUTE, "" );
404 public ProducerNode constructNode() {
405 return new GeneratingProducerNode(generatorLibrary, writerEngine, generator, destination, parameters);
408 public static class factory implements ProducerNodeBuilderFactory {
409 private Generator.GeneratorLibrary generatorLibrary;
410 private WriterEngine writerEngine;
412 public factory(Generator.GeneratorLibrary aGeneratorLibrary, WriterEngine aWriterEngine) {
413 writerEngine = aWriterEngine;
414 generatorLibrary = aGeneratorLibrary;
417 public ProducerNodeBuilder makeBuilder() {
418 return new GeneratingProducerNodeBuilder(generatorLibrary, writerEngine);
423 ////////////////////////////////////////////////////////////////////////////////
425 public static class BatchingProducerNodeBuilder extends AbstractProducerNodeBuilder {
427 private final static String BATCHER_DATAKEY_ATTRIBUTE = KEY_ATTRIBUTE;
428 private final static String BATCHER_INFOKEY_ATTRIBUTE = "infokey";
429 private final static String BATCHER_DEFINITION_ATTRIBUTE = DEFINITION_ATTRIBUTE;
430 private final static String BATCHER_SELECTION_ATTRIBUTE = SELECTION_ATTRIBUTE;
431 private final static String BATCHER_ORDER_ATTRIBUTE = ORDER_ATTRIBUTE;
433 private final static String BATCHER_BATCHSIZE_ATTRIBUTE = "batchsize";
434 private final static String BATCHER_MINBATCHSIZE_ATTRIBUTE = "minbatchsize";
435 private final static String BATCHER_SKIP_ATTRIBUTE = SKIP_ATTRIBUTE;
437 private final static String BATCHER_PROCESS_ATTRIBUTE = "process";
439 private final static String BATCHER_BATCH_SUBNODE = "batches";
440 private final static String BATCHER_BATCHLIST_SUBNODE = "batchlist";
441 private final static String[] BATCHER_REQUIRED_ATTRIBUTES = { BATCHER_DATAKEY_ATTRIBUTE, BATCHER_INFOKEY_ATTRIBUTE, BATCHER_DEFINITION_ATTRIBUTE, BATCHER_BATCHSIZE_ATTRIBUTE };
442 private final static String[] BATCHER_OPTIONAL_ATTRIBUTES = { BATCHER_SELECTION_ATTRIBUTE, BATCHER_ORDER_ATTRIBUTE, BATCHER_MINBATCHSIZE_ATTRIBUTE, BATCHER_SKIP_ATTRIBUTE, BATCHER_PROCESS_ATTRIBUTE };
443 private final static String[] BATCHER_SUBNODES = { BATCHER_BATCH_SUBNODE, BATCHER_BATCHLIST_SUBNODE };
445 // ML: batchSize, minBatchSize, skip should be expressions!
447 private EntityAdapterModel model;
448 private String batchDataKey;
449 private String batchInfoKey;
450 private String definition;
451 private String selection;
452 private String order;
453 private String batchSize;
454 private String minBatchSize;
456 private String process;
458 public BatchingProducerNodeBuilder(EntityAdapterModel aModel) {
459 super(BATCHER_SUBNODES);
464 public void setAttributes(Map anAttributes) throws ProducerConfigExc {
465 ReaderTool.checkAttributes(anAttributes, BATCHER_REQUIRED_ATTRIBUTES, BATCHER_OPTIONAL_ATTRIBUTES);
467 batchDataKey = ReaderTool.getStringAttributeWithDefault(anAttributes, BATCHER_DATAKEY_ATTRIBUTE, "data" );
468 batchInfoKey = ReaderTool.getStringAttributeWithDefault(anAttributes, BATCHER_INFOKEY_ATTRIBUTE, "info" );
469 definition = ReaderTool.getStringAttributeWithDefault(anAttributes, BATCHER_DEFINITION_ATTRIBUTE, "" );
470 selection = ReaderTool.getStringAttributeWithDefault(anAttributes, BATCHER_SELECTION_ATTRIBUTE, "" );
471 order = ReaderTool.getStringAttributeWithDefault(anAttributes, BATCHER_ORDER_ATTRIBUTE, "" );
473 batchSize = ReaderTool.getStringAttributeWithDefault(anAttributes, BATCHER_BATCHSIZE_ATTRIBUTE, "20" );
474 minBatchSize = ReaderTool.getStringAttributeWithDefault(anAttributes, BATCHER_MINBATCHSIZE_ATTRIBUTE, "0" );
475 skip = ReaderTool.getStringAttributeWithDefault(anAttributes, BATCHER_SKIP_ATTRIBUTE, "0" );
476 process = ReaderTool.getStringAttributeWithDefault(anAttributes, BATCHER_PROCESS_ATTRIBUTE, "-1" );
479 public ProducerNode constructNode() {
480 return new EntityBatchingProducerNode(
491 getSubNode( BATCHER_BATCH_SUBNODE ),
492 getSubNode( BATCHER_BATCHLIST_SUBNODE )
496 public static class factory implements ProducerNodeBuilderFactory {
497 private EntityAdapterModel model;
499 public factory(EntityAdapterModel aModel) {
503 public ProducerNodeBuilder makeBuilder() {
504 return new BatchingProducerNodeBuilder(model);
509 ////////////////////////////////////////////////////////////////////////////////
511 public static class ConditionalProducerNodeBuilder extends AbstractProducerNodeBuilder {
512 private final static String IF_CONDITION_ATTRIBUTE = "condition";
514 private final static String IF_TRUE_SUBNODE = "then";
515 private final static String IF_FALSE_SUBNODE = "else";
516 private final static String[] IF_REQUIRED_ATTRIBUTES = { IF_CONDITION_ATTRIBUTE };
517 private final static String[] IF_OPTIONAL_ATTRIBUTES = { };
518 private final static String[] IF_SUBNODES = { IF_TRUE_SUBNODE, IF_FALSE_SUBNODE };
520 private String condition;
522 public ConditionalProducerNodeBuilder() {
526 public void setAttributes(Map anAttributes) throws ProducerConfigExc {
527 ReaderTool.checkAttributes(anAttributes, IF_REQUIRED_ATTRIBUTES, IF_OPTIONAL_ATTRIBUTES);
529 condition = (String) anAttributes.get( IF_CONDITION_ATTRIBUTE );
532 public ProducerNode constructNode() {
533 return new ConditionalProducerNode(
535 getSubNode( IF_TRUE_SUBNODE ),
536 getSubNode( IF_FALSE_SUBNODE )
542 ////////////////////////////////////////////////////////////////////////////////
544 public static class ScriptedProducerParameterNodeBuilder implements ProducerNodeBuilder {
545 private String parameterName;
546 private String scriptedNodeName;
548 public ScriptedProducerParameterNodeBuilder(String aScriptedNodeName, String aParameterName) {
549 parameterName = aParameterName;
550 scriptedNodeName = aScriptedNodeName;
553 public void setSubNode(String aName, ProducerNode aNode) {
556 public Set getAvailableSubNodes() {
557 return new HashSet();
560 public void setAttributes(Map anAttributes) throws ProducerConfigExc {
561 if (!anAttributes.isEmpty())
562 throw new ProducerConfigExc("No parameters allowed here");
565 public ProducerNode constructNode() {
566 return new ScriptedProducerNodeDefinition.NodeParameterProducerNode(scriptedNodeName, parameterName);
570 ////////////////////////////////////////////////////////////////////////////////
572 public static class ScriptedProducerNodeBuilder implements ProducerNodeBuilder {
573 private ScriptedProducerNodeDefinition definition;
574 private Map nodeParameterValues;
575 private Map parameterValues;
577 public ScriptedProducerNodeBuilder(ScriptedProducerNodeDefinition aDefinition) {
578 definition = aDefinition;
580 parameterValues = new HashMap();
581 parameterValues.putAll(definition.getParameters());
583 nodeParameterValues = new HashMap();
586 public void setSubNode(String aName, ProducerNode aNode) {
587 nodeParameterValues.put(aName, aNode);
590 public Set getAvailableSubNodes() {
591 return definition.getNodeParameters();
594 public void setAttributes(Map anAttributes) throws ProducerConfigExc {
595 ReaderTool.checkAttributeSet(anAttributes.keySet(), definition.getRequiredAttributes(), definition.getOptionalAttributes());
598 public ProducerNode constructNode() {
599 return new ScriptedProducerNode(definition, parameterValues, nodeParameterValues);
602 public static class factory implements ProducerNodeBuilderFactory {
603 private ScriptedProducerNodeDefinition definition;
605 public factory(ScriptedProducerNodeDefinition aDefinition) {
606 definition = aDefinition;
609 public ProducerNodeBuilder makeBuilder() {
610 return new ScriptedProducerNodeBuilder(definition);