1 package mir.producer.reader;
7 public class ScriptedProducerNodeDefinition {
8 private Map parameters; // name -> default value
9 private Set nodeParameters;
10 private ProducerNode body;
13 public static String SCRIPTED_PRODUCERNODE_RUNTIMEDATA_KEY = "$SCRIPTRUNTIMEDATA";
14 public static String SCRIPTED_PRODUCERNODE_RUNTIMESTACK_KEY = "stack";
16 public ScriptedProducerNodeDefinition(String aName) {
18 parameters = new HashMap();
19 nodeParameters = new HashSet();
20 body = new CompositeProducerNode();
23 public void addParameter(String aName, String aDefaultValue) {
24 parameters.put(aName, aDefaultValue);
27 public void addNodeParameter(String aName) {
28 nodeParameters.add(aName);
31 public void setBody(ProducerNode aBody) {
35 protected Map getParameters() {
39 protected Set getNodeParameters() {
40 return nodeParameters;
43 protected ProducerNode getBody() {
47 public String getName() {
51 public Set getRequiredAttributes() {
52 return getAttributesSelection(true);
55 public Set getOptionalAttributes() {
56 return getAttributesSelection(false);
59 public Set getAttributesSelection(boolean aRequired) {
60 Set result = new HashSet();
61 Iterator i = parameters.entrySet().iterator();
64 Map.Entry entry = (Map.Entry) i.next();
66 if (entry.getValue() == null && aRequired ) {
67 result.add(entry.getKey());
75 protected static class NodeParameterProducerNode implements ProducerNode {
76 private String parameterName;
77 private String definitionName;
79 public NodeParameterProducerNode(String aDefinitionName, String aParameterName) {
80 definitionName = aDefinitionName;
81 parameterName = aParameterName;
84 public void produce(Map aValues, String aVerb, PrintWriter aLogger) throws ProducerExc, ProducerFailure {
85 ProducerNode producerNode;
87 Map runTimeData = (Map) ((Map) aValues.get(SCRIPTED_PRODUCERNODE_RUNTIMEDATA_KEY)).get(definitionName);
88 Map parameters = (Map) ((Stack) runTimeData.get( SCRIPTED_PRODUCERNODE_RUNTIMESTACK_KEY )).peek();
90 producerNode = (ProducerNode) parameters.get(parameterName);
92 if (producerNode != null)
93 producerNode.produce(aValues, aVerb, aLogger);
96 public Set buildVerbSet() {