1 10 package org.mmbase.applications.xmlimporter; 11 12 import java.util.*; 13 import org.mmbase.module.Module; 14 import org.mmbase.module.core.*; 15 import org.mmbase.module.corebuilders.*; 16 import org.mmbase.util.*; 17 import org.mmbase.util.logging.*; 18 19 28 public class TmpObject { 29 30 final static String NUMBER = "number"; 32 final static String RNUMBER = "rnumber"; 33 final static String SNUMBER = "snumber"; 34 final static String DNUMBER = "dnumber"; 35 final static String _SNUMBER = "_snumber"; 36 final static String _DNUMBER = "_dnumber"; 37 38 39 private static Logger log 40 = Logging.getLoggerInstance(TmpObject.class.getName()); 41 42 43 private static MMBase mmbase; 44 45 46 private static TemporaryNodeManagerInterface tmpNodeManager; 47 48 49 private UserTransactionInfo uti; 50 51 52 private String id; 53 54 55 private MMObjectNode node; 56 57 58 private boolean relationFlag; 59 60 62 private boolean disposeWhenNotReferenced = false; 63 64 68 private static MMBase getMMBase() { 69 if (mmbase == null) { 70 mmbase=(MMBase) Module.getModule("MMBASEROOT"); 71 } 72 return mmbase; 73 } 74 75 79 private static synchronized TemporaryNodeManagerInterface getTmpNodeManager() { 80 if (tmpNodeManager == null) { 81 tmpNodeManager = new TemporaryNodeManager(getMMBase()); 82 } 83 return tmpNodeManager; 84 } 85 86 97 TmpObject(UserTransactionInfo uti, String objectId, 98 boolean relationFlag, boolean disposeWhenNotReferenced) { 99 this.uti = uti; 100 this.id = objectId; 101 this.node = getTmpNodeManager().getNode(uti.user.getName(), objectId); 102 this.relationFlag = relationFlag; 103 this.disposeWhenNotReferenced = disposeWhenNotReferenced; 104 } 105 106 114 TmpObject(UserTransactionInfo uti, String objectId, int mmbaseId) { 115 this.uti = uti; 117 this.id = objectId; 118 this.node = getTmpNodeManager().getNode(uti.user.getName(), objectId); 119 this.relationFlag = (node.getBuilder() instanceof InsRel); 120 } 121 122 127 public Object getField(String name) { 128 return node.getValue(name); 129 } 130 131 139 public void setField(String name, Object value) { 140 if (node.getDBType(name) == FieldDefs.TYPE_BYTE 142 && value instanceof String ) { 143 String strValue = (String ) value; 144 value = new Encode("BASE64").decodeBytes(strValue); 145 } 146 node.setValue(name, value); 147 } 148 149 156 public Vector getRelationsInPersistentCloud() { 157 Vector relations; 158 int mmbaseId = getMMBaseId(); 159 if (mmbaseId != -1) { 160 relations = getMMBase().getInsRel().getRelations_main(mmbaseId); 162 if (log.isDebugEnabled()) { 163 log.debug("Relations in persistent cloud of " + this 164 + ": " + relations); 165 } 166 } else { 167 relations = new Vector(); 169 } 170 return relations; 171 } 172 173 177 public MMObjectNode getNode() { 178 return node; 179 } 180 181 186 public String getKey() { 187 return uti.user.getName() + "_" + id; 189 } 190 191 195 public String getId() { 196 return id; 197 } 198 199 205 public boolean isAccessObject() { 206 return getMMBaseId() != -1; 207 } 208 209 213 public int getMMBaseId() { 214 return node.getIntValue(NUMBER); 215 } 216 217 221 public boolean isRelation() { 222 return relationFlag; 223 } 224 225 230 public boolean getDisposeWhenNotReferenced() { 231 return disposeWhenNotReferenced; 232 } 233 234 239 public boolean isSourceOf(TmpObject tempRel) { 240 MMObjectNode relation = tempRel.node; 241 String sourceId = relation.getStringValue(_SNUMBER); 242 if (!sourceId.equals("")) { 243 return getKey().equals(sourceId); 245 } 246 int sourceMmbaseId = relation.getIntValue(SNUMBER); 247 if (sourceMmbaseId != -1) { 248 return isAccessObject() && getMMBaseId() == sourceMmbaseId; 250 } 251 return false; 252 } 253 254 259 public boolean isDestinationOf(TmpObject tempRel) { 260 MMObjectNode relation = tempRel.node; 261 String destinationId = relation.getStringValue(_DNUMBER); 262 if (!destinationId.equals("")) { 263 return getKey().equals(destinationId); 265 } 266 int destinationMmbaseId = relation.getIntValue(DNUMBER); 267 if (destinationMmbaseId != -1) { 268 return isAccessObject() && getMMBaseId() == destinationMmbaseId; 270 } 271 return false; 272 } 273 274 278 public void setSource(TmpObject tmpObj) { 279 setField(_SNUMBER, tmpObj.getKey()); 280 setField(SNUMBER, Integer.toString(tmpObj.getMMBaseId())); 281 } 282 283 287 public void setDestination(TmpObject tmpObj) { 288 setField(_DNUMBER, tmpObj.getKey()); 289 setField(DNUMBER, Integer.toString(tmpObj.getMMBaseId())); 290 } 291 292 296 public void copySourceOf(TmpObject tmpObj) { 297 setField(_SNUMBER, tmpObj.getField(_SNUMBER)); 298 setField(SNUMBER, tmpObj.getField(SNUMBER)); 299 } 300 301 305 public void copyDestinationOf(TmpObject tmpObj) { 306 setField(_DNUMBER, tmpObj.getField(_DNUMBER)); 307 setField(DNUMBER, tmpObj.getField(DNUMBER)); 308 } 309 310 317 private boolean compareField(TmpObject tmpObj, String name) { 318 Object value = getField(name); 319 if (value != null) { 320 return value.equals(tmpObj.getField(name)); 321 } else { 322 return tmpObj.getField(name) == null; 323 } 324 } 325 326 330 public String toString() { 331 return "TmpObject(id=\"" + id + "\", user=\"" + uti.user.getName() 332 + "\", key=\"" + getKey() + "\", node={" + node 333 + "}, disposeWhenNotReferenced=" + disposeWhenNotReferenced + ")"; 334 } 335 336 341 public String toXML() { 342 StringBuffer sb = new StringBuffer (); 343 if (isAccessObject()) { 344 sb.append("<accessObject id=\"" + getId() 345 + "\" mmbaseId=\"" + getMMBaseId() 346 + "\">\n"); 347 } else { 348 sb.append("<createObject id=\"" + getId() 349 + "\" type=\"" + getNode().getName() 350 + "\" disposeWhenNotReferenced=\"" + disposeWhenNotReferenced 351 + "\">\n"); 352 } 353 Iterator i = node.getValues().entrySet().iterator(); 354 while (i.hasNext()) { 355 Map.Entry entry = (Map.Entry) i.next(); 356 String name = (String ) entry.getKey(); 357 String value = entry.getValue().toString(); 358 if (!name.equals("otype") && !name.equals("owner") 359 && !name.equals("number") && !name.equals("_number")) { 360 sb.append("<setField name=\"" + name + "\">" 361 + value + "</setField>\n"); 362 } 363 } 364 if (isAccessObject()) { 365 sb.append("</accessObject>\n"); 366 } else { 367 sb.append("</createObject>\n"); 368 } 369 370 return sb.toString(); 371 } 372 373 } 374 | Popular Tags |