1 8 package org.mmbase.core.event; 9 10 import java.io.*; 11 import java.util.*; 12 13 import org.mmbase.util.HashCodeUtil; 14 import org.mmbase.module.core.MMBase; 15 import org.mmbase.util.logging.Logger; 16 import org.mmbase.util.logging.Logging; 17 18 19 28 public class NodeEvent extends Event { 29 30 31 private static final long serialVersionUID = 1L; 32 33 private static final Logger log = Logging.getLoggerInstance(NodeEvent.class); 34 35 38 public static final int TYPE_RELATION_CHANGE = 3; 39 40 private final int nodeNumber; 41 private String builderName; 42 43 private final Map oldValues; 44 private final Map newValues; 45 46 53 public NodeEvent(String machineName, String builderName, int nodeNumber, Map oldValues, Map newValues, int eventType ){ 54 super(machineName, eventType); 55 this.builderName = builderName; 56 this.nodeNumber = nodeNumber; 57 this.oldValues = oldValues == null ? Collections.EMPTY_MAP : Collections.unmodifiableMap(new HashMap(oldValues)); 58 this.newValues = newValues == null ? Collections.EMPTY_MAP : Collections.unmodifiableMap(new HashMap(newValues)); 59 } 60 61 62 67 public final Object getOldValue(String fieldName) { 68 return oldValues.get(fieldName); 69 } 70 71 74 public final Set getChangedFields() { 75 switch(getType()) { 76 case TYPE_NEW: 77 return newValues.keySet(); 78 case TYPE_CHANGE: 79 return newValues.keySet(); 81 case TYPE_DELETE: 82 return oldValues.keySet(); 83 default: 84 return Collections.EMPTY_SET; 85 } 86 } 87 88 94 public final Object getNewValue(String fieldName) { 95 return newValues.get(fieldName); 96 } 97 98 101 public final String getBuilderName() { 102 return builderName; 103 } 104 107 public final int getNodeNumber() { 108 return nodeNumber; 109 } 110 111 112 public String toString() { 113 String changedFields = ""; 114 for (Iterator i = getChangedFields().iterator(); i.hasNext();) { 115 changedFields = changedFields + (String ) i.next() + ","; 116 } 117 return "Node event: '" + getEventTypeGuiName(eventType) + "', node: " + nodeNumber + ", nodetype: " + builderName + ", oldValues: " + oldValues + ", newValues: " + newValues + "changedFields: " + getChangedFields(); 118 } 119 120 protected static String getEventTypeGuiName(int eventType) { 121 switch (eventType) { 122 case Event.TYPE_CHANGE: 123 return "node changed"; 124 case Event.TYPE_DELETE: 125 return "node deleted"; 126 case Event.TYPE_NEW: 127 return "new node"; 128 case NodeEvent.TYPE_RELATION_CHANGE: 129 return "relation changed"; 130 default: 131 throw new IllegalArgumentException ("HELP! event of type " + eventType + " is unknown. This should not happen"); 132 } 133 } 134 135 136 137 141 148 149 156 public static String newTypeToOldType(int eventType) { 157 switch (eventType) { 158 case Event.TYPE_CHANGE: return "c"; 159 case Event.TYPE_DELETE: return "d"; 160 case Event.TYPE_NEW: return "n"; 161 case NodeEvent.TYPE_RELATION_CHANGE: return "r"; 162 default: throw new IllegalArgumentException ("HELP! event of type " + eventType + " is unknown. This should not happen"); 163 } 164 } 165 166 172 public static int oldTypeToNewType(String eventType) { 173 if (eventType.length() > 1) { 174 throw new IllegalArgumentException ("HELP! event of type '" + eventType + "' is unknown. This should not happen. (length = " + eventType.length() + ")"); 175 } 176 switch(eventType.charAt(0)) { 177 case 'c': return Event.TYPE_CHANGE; 178 case 'd': return Event.TYPE_DELETE; 179 case 'n': return Event.TYPE_NEW; 180 case 'r': return NodeEvent.TYPE_RELATION_CHANGE; 181 default: throw new IllegalArgumentException ("HELP! event of type " + eventType + " is unknown. This should not happen"); 182 } 183 } 184 185 190 public boolean hasChanged(String fieldName){ 191 return oldValues.keySet().contains(fieldName) || newValues.keySet().contains(fieldName); 192 } 193 194 195 public int hashCode() { 196 int result = 0; 197 result = HashCodeUtil.hashCode(result, eventType); 198 result = HashCodeUtil.hashCode(result, nodeNumber); 199 result = HashCodeUtil.hashCode(result, builderName); 200 return result; 201 202 } 203 public boolean equals(Object o) { 204 if (o instanceof NodeEvent) { 205 NodeEvent ne = (NodeEvent) o; 206 return eventType == ne.eventType && nodeNumber == ne.nodeNumber && builderName.equals(ne.builderName); 207 } else { 208 return false; 209 } 210 } 211 212 221 public final Map getOldValues(){ 222 return oldValues; 223 } 224 225 234 public final Map getNewValues(){ 235 return newValues; 236 } 237 238 239 public static void main(String [] args) { 240 Map oldv = new HashMap(), newv = new HashMap(); 242 oldv.put("een","veen"); 243 oldv.put("twee","vtwee"); 244 newv.putAll(oldv); 245 246 NodeEvent event = new NodeEvent( "local", "builder", 0, oldv, newv, NodeEvent.TYPE_CHANGE); 247 System.out.println("event 1: " + event.toString()); 248 249 } 250 251 } 252
| Popular Tags
|