merge of localization branch into HEAD. mh and zap
[mir.git] / source / mir / producer / EntityModifyingProducerNode.java
1 package mir.producer;
2
3 import java.util.*;
4 import java.io.*;
5 import mir.entity.*;
6 import mir.entity.adapter.*;
7 import mir.util.*;
8
9
10 public abstract class EntityModifyingProducerNode implements ProducerNode {
11   String entityExpression;
12   String entityField;
13   String valueExpression;
14
15   public EntityModifyingProducerNode(String anEntityExpression, String anEntityField, String aValueExpression) {
16     entityExpression = anEntityExpression;
17     entityField = anEntityField;
18     valueExpression = aValueExpression;
19   }
20
21   public void produce(Map aValueMap, String aVerb, PrintWriter aLogger) throws ProducerFailure {
22     Object entity;
23
24     try {
25       entity = ParameterExpander.findValueForKey( aValueMap, entityExpression );
26
27       if (entity instanceof EntityAdapter) {
28         ((EntityAdapter) entity).getEntity().setValueForProperty(entityField, valueExpression);
29         ((EntityAdapter) entity).getEntity().update();
30       }
31       else
32         throw new Exception( entityExpression + " does not evaluate to an entity");
33     }
34     catch (Throwable t) {
35       aLogger.println("Error while performing entity modifying operation: " + t.getMessage());
36
37       throw new ProducerFailure(t.getMessage(), t);
38     }
39   }
40
41   public Set buildVerbSet() {
42     return new HashSet();
43   }
44 }