1 10 package org.mmbase.module.core; 11 12 import java.util.*; 13 14 import org.mmbase.bridge.Field; 15 import org.mmbase.util.logging.*; 16 import org.mmbase.util.Casting; 17 18 19 48 public class ClusterNode extends VirtualNode { 49 50 private static final Logger log = Logging.getLoggerInstance(ClusterNode.class); 51 52 56 public ClusterNode(ClusterBuilder parent) { 57 super(parent); 58 } 59 60 65 public ClusterNode(ClusterBuilder parent, int nrofnodes) { 66 super(parent); 67 } 68 69 77 public void testValidData() throws InvalidDataException { throw new UnsupportedOperationException ("ClusterNode " + this.getClass().getName() + " removed since 1.8"); 79 }; 80 81 87 public boolean commit() { 88 throw new UnsupportedOperationException ("ClusterNode " + this.getClass().getName() + " removed since 1.8"); 89 } 90 91 97 public MMObjectNode getRealNode(String builderName) { 98 if (builderName == null) return null; 99 Integer number = (Integer ) retrieveValue(builderName + ".number"); 100 if (number != null) { 101 return parent.getNode(number.intValue()); 102 } 103 return null; 104 } 105 106 113 public void storeValue(String fieldName, Object fieldValue) { 114 super.storeValue(fieldName, fieldValue); 115 } 116 117 126 public boolean setValue(String fieldName, Object fieldValue) { 127 if (initializing) { 130 if (! (parent instanceof ClusterBuilder)) { 131 values.put(ClusterBuilder.getFieldNameFromField(fieldName), fieldValue); 132 } else { 133 values.put(fieldName, fieldValue); 134 } 135 return true; 136 } 137 String builderName = getBuilderName(fieldName); 138 139 MMObjectNode n = getRealNode(builderName); 140 if (n != null) { 141 String realFieldName = ClusterBuilder.getFieldNameFromField(fieldName); 142 n.setValue(realFieldName, fieldValue); 143 values.remove(fieldName); 144 return true; 145 } 146 log.warn("Could not set field '" + fieldName + "')"); 147 return false; } 149 150 156 protected String getBuilderName(String fieldName) { 157 int pos = fieldName.indexOf("."); 158 if (pos == -1) { 159 return null; 160 } else { 161 String builderName = fieldName.substring(0, pos); 162 int pos2 = builderName.lastIndexOf("("); 163 builderName = builderName.substring(pos2 + 1); 164 return builderName; 166 } 167 } 168 169 public MMObjectBuilder getBuilder() { 172 if (parent instanceof ClusterBuilder) { 173 return super.getBuilder(); 174 } else { 175 return parent; 176 } 177 178 } 179 180 185 public Object getValue(String fieldName) { 186 String builder = getBuilderName(fieldName); 187 if (builder == null) { 188 if (parent instanceof ClusterBuilder) { 192 return getRealNode(fieldName); 193 } 194 195 } 196 Object o = super.getValue(fieldName); 197 if (o == null) { 198 String builderName = getBuilderName(fieldName); 201 MMObjectNode n = getRealNode(builderName); 202 if (n!=null) { 203 o = n.getValue(ClusterBuilder.getFieldNameFromField(fieldName)); 204 } else { 205 MMObjectBuilder bul = parent.mmb.getMMObject(builderName); 207 if (bul != null) { 208 o = bul.getValue(this, fieldName); 209 } else { 210 throw new RuntimeException ("Builder with name '" + builderName + "' does not exist"); 211 } 212 } 213 } 214 return o; 215 } 216 217 218 224 public String getStringValue(String fieldName) { 225 226 String tmp = Casting.toString(getValue(fieldName)); 228 229 if (tmp.equals(MMObjectNode.VALUE_SHORTED)) { 231 log.debug("getStringValue(): node=" + this + " -- fieldName " + fieldName); 232 int type = getDBType(fieldName); 236 237 log.debug("getStringValue(): fieldName " + fieldName + " has type " + type); 238 if (type == Field.TYPE_STRING) { 240 241 int number = getIntValue(getBuilderName(fieldName) + ".number"); 244 tmp = parent.getShortedText(fieldName, parent.getNode(number)); 245 246 if (tmp != null) { 248 storeValue(fieldName, tmp); 250 } 251 } 252 } 253 return tmp; 255 } 256 257 258 263 public byte[] getByteValue(String fieldName) { 264 Object obj = getValue(fieldName); 266 267 if (obj instanceof byte[]) { 269 return (byte[])obj; 271 } else { 272 int number = getIntValue(getBuilderName(fieldName) + ".number"); 275 byte[] b = parent.getShortedByte(fieldName, parent.getNode(number)); 278 279 storeValue(fieldName, b); 282 return b; 284 } 285 } 286 287 291 public boolean isChanged() { 292 throw new UnsupportedOperationException ("ClusterNode " + this.getClass().getName() + " removed since 1.8"); 293 } 294 295 300 public Enumeration getRelations() { 301 throw new RuntimeException ("Cannot follow relations on a cluster node. "); 302 } 303 304 } 305 | Popular Tags |