KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > mmbase > bridge > util > NodeChanger


1 /*
2
3 This software is OSI Certified Open Source Software.
4 OSI Certified is a certification mark of the Open Source Initiative.
5
6 The license (Mozilla version 1.0) can be read at the MMBase site.
7 See http://www.MMBase.org/license
8
9 */

10
11 package org.mmbase.bridge.util;
12
13 import java.util.*;
14 import org.mmbase.bridge.*;
15
16 /**
17  * Wraps another Node, and adds 'isChangedByThis'.
18  *
19  * @author Michiel Meeuwissen
20  * @version $Id: NodeChanger.java,v 1.1 2006/02/10 18:01:44 michiel Exp $
21  * @since MMBase-1.8
22  */

23
24 public class NodeChanger extends NodeWrapper {
25     protected Map originalValues = null;
26
27     public NodeChanger(Node node) {
28         super(node);
29     }
30
31     protected void change(String JavaDoc fieldName) {
32         if (originalValues == null) originalValues = new HashMap();
33         if (! originalValues.containsKey(fieldName)) {
34             originalValues.put(fieldName, node.getValueWithoutProcess(fieldName));
35         }
36     }
37
38     public void setValue(String JavaDoc fieldName, Object JavaDoc value) { change(fieldName); super.setValue(fieldName, value); }
39     public void setValueWithoutProcess(String JavaDoc fieldName, Object JavaDoc value) { change(fieldName); super.setValueWithoutProcess(fieldName, value); }
40     public void setObjectValue(String JavaDoc fieldName, Object JavaDoc value) { change(fieldName); super.setObjectValue(fieldName, value); }
41     public void setBooleanValue(String JavaDoc fieldName, boolean value) { change(fieldName); super.setBooleanValue(fieldName, value); }
42     public void setNodeValue(String JavaDoc fieldName, Node value) { change(fieldName); super.setNodeValue(fieldName, value); }
43     public void setIntValue(String JavaDoc fieldName, int value) { change(fieldName); super.setIntValue(fieldName, value); }
44     public void setFloatValue(String JavaDoc fieldName, float value) { change(fieldName); super.setFloatValue(fieldName, value); }
45     public void setDoubleValue(String JavaDoc fieldName, double value) { change(fieldName); super.setDoubleValue(fieldName, value); }
46     public void setByteValue(String JavaDoc fieldName, byte[] value) { change(fieldName); super.setByteValue(fieldName, value); }
47     public void setInputStreamValue(String JavaDoc fieldName, java.io.InputStream JavaDoc value, long size) { change(fieldName); super.setInputStreamValue(fieldName, value, size); }
48     public void setLongValue(String JavaDoc fieldName, long value) { change(fieldName); super.setLongValue(fieldName, value); }
49     public void setStringValue(String JavaDoc fieldName, String JavaDoc value) { change(fieldName); super.setStringValue(fieldName, value); }
50     public void setDateValue(String JavaDoc fieldName, Date value) { change(fieldName); super.setDateValue(fieldName, value); }
51     public void setListValue(String JavaDoc fieldName, List value) { change(fieldName); super.setListValue(fieldName, value); }
52     /**
53      * The isChanged method reflects the isChanged status of the underlying core node.isChanged. Before
54      * commiting the node, you may want to check if _you_ changed to node, and not some other
55      * thread. In that case you can first wrap your Node in a NodeChanger object.
56      *
57      */

58     public boolean isChangedByThis() {
59         return originalValues != null && super.isChanged();
60     }
61
62     public void cancelThis() {
63         if (originalValues != null) {
64             Iterator i = originalValues.entrySet().iterator();
65             while (i.hasNext()) {
66                 Map.Entry entry = (Map.Entry) i.next();
67                 getNode().setValueWithoutProcess((String JavaDoc ) entry.getKey(), entry.getValue());
68             }
69                 
70         }
71     }
72
73 }
74
Popular Tags