merge of localization branch into HEAD. mh and zap
[mir.git] / source / mircoders / producer / ContentModifyingProducerNode.java
1 package mircoders.producer;
2
3 import java.util.*;
4 import java.io.*;
5 import mir.util.*;
6 import mir.producer.*;
7 import mir.entity.*;
8 import mir.entity.adapter.*;
9 import mircoders.entity.*;
10 import mircoders.module.*;
11 import mircoders.storage.*;
12
13
14 public class ContentModifyingProducerNode implements ProducerNode {
15   private String contentKey;
16   private String fieldNameExpression;
17   private String valueExpression;
18
19   public ContentModifyingProducerNode(String aContentKey, String aFieldNameExpression, String aValueExpression) {
20     contentKey = aContentKey;
21     fieldNameExpression = aFieldNameExpression;
22     valueExpression = aValueExpression;
23   }
24
25   public void produce(Map aValueMap, String aVerb, PrintWriter aLogger) throws ProducerFailure {
26     Object data;
27     Entity entity;
28     String value;
29     String fieldName;
30
31     try {
32       ModuleContent contentModule = new ModuleContent(DatabaseContent.getInstance());
33
34       data = ParameterExpander.findValueForKey( aValueMap, contentKey );
35
36       if (! (data instanceof EntityAdapter)) {
37         throw new ProducerFailure("ContentModifyingProducerNode: value of '"+contentKey+"' is not an EntityAdapter, but an " + data.getClass().getName(), null);
38       }
39
40       entity = ((EntityAdapter) data).getEntity();
41       if (! (entity instanceof EntityContent)) {
42         throw new ProducerFailure("ContentModifyingProducerNode: value of '"+contentKey+"' is not a content EntityAdapter, but a " + entity.getClass().getName() + " adapter", null);
43       }
44
45       value = ParameterExpander.expandExpression(aValueMap, valueExpression);
46       fieldName = ParameterExpander.expandExpression(aValueMap, fieldNameExpression);
47
48       entity.setValueForProperty("is_produced", "0");
49       entity.setValueForProperty(fieldName, value);
50       entity.update();
51
52       aLogger.println("  Modified content " + entity.get("id") + ": " + fieldName + " = " + value );
53     }
54     catch (Throwable t) {
55       aLogger.println("Error while modifying content: " + t.getMessage());
56       t.printStackTrace(aLogger);
57
58       throw new ProducerFailure(t.getMessage(), t);
59     }
60   }
61
62   public Set buildVerbSet() {
63     return new HashSet();
64   }
65 }