/** @since 3.1 */ @Override public <T extends Persistent> T localObject(T objectFromAnotherContext) { if (objectFromAnotherContext == null) { throw new NullPointerException("Null object argument"); } ObjectId id = objectFromAnotherContext.getObjectId(); // first look for the ID in the local GraphManager synchronized (getGraphManager()) { T localObject = (T) getGraphManager().getNode(id); if (localObject != null) { return localObject; } // create a hollow object, optimistically assuming that the ID we // got from // 'objectFromAnotherContext' is a valid ID either in the parent // context or in // the DB. This essentially defers possible FaultFailureExceptions. ClassDescriptor descriptor = getEntityResolver().getClassDescriptor(id.getEntityName()); Persistent persistent = (Persistent) descriptor.createObject(); persistent.setObjectContext(this); persistent.setObjectId(id); persistent.setPersistenceState(PersistenceState.HOLLOW); getGraphManager().registerNode(id, persistent); return (T) persistent; } }
public final void validate(T object) { ObjectContext workDc = object.getObjectContext(); // .createChildDataContext(); T obj = (T) workDc.localObject(object.getObjectId(), object); Set<DataObject> toDelete = new HashSet<DataObject>(); try { if (!fakes.isEmpty()) { // Simulation des fakes for (String prop : fakes.keySet()) { if (obj.readProperty(prop) != null) continue; DataObject value = (DataObject) workDc.newObject(fakes.get(prop)); obj.setToOneTarget(prop, value, false); toDelete.add(value); } } // Validation validateImpl(obj); } finally { // Annulation des modifs if (!fakes.isEmpty()) { // Suppression des fakes for (String prop : fakes.keySet()) { DataObject value = (DataObject) obj.readProperty(prop); if (!toDelete.contains(value)) continue; workDc.deleteObject(value); } } } // childDc.rollbackChangesLocally(); }
protected final <T extends TridentObjectType> T findTridentObject(List<T> list, String id) { for (T object : list) { if (object.getObjectId().equals(id)) { return object; } } return null; }