ChangedInSourceAndTargetConflict conflict = null; Map<EStructuralFeature, CDOFeatureDelta> targetMap = ((InternalCDORevisionDelta)targetDelta).getFeatureDeltaMap(); Map<EStructuralFeature, CDOFeatureDelta> sourceMap = ((InternalCDORevisionDelta)sourceDelta).getFeatureDeltaMap(); if (featureDelta != null) result.addFeatureDelta(featureDelta); if (featureDelta != null) result.addFeatureDelta(featureDelta); ((InternalCDORevisionDelta)conflict.getTargetDelta()).addFeatureDelta(targetFeatureDelta); ((InternalCDORevisionDelta)conflict.getSourceDelta()).addFeatureDelta(sourceFeatureDelta); if (featureDelta != null) result.addFeatureDelta(featureDelta); if (result.isEmpty())
/** * @since 2.0 */ protected void writeRevisionDelta(InternalCDORevisionDelta revisionDelta, CDOBranch branch, long created) { CDOID id = revisionDelta.getID(); CDOBranchVersion version = revisionDelta.getBranch().getVersion(revisionDelta.getVersion()); InternalCDORevision revision = getStore().getRevisionByVersion(id, version); if (revision.getVersion() != revisionDelta.getVersion()) { throw new ConcurrentModificationException("Trying to update object " + id //$NON-NLS-1$ + " that was already modified"); //$NON-NLS-1$ } InternalCDORevision newRevision = revision.copy(); newRevision.adjustForCommit(branch, created); revisionDelta.apply(newRevision); writeRevision(newRevision); }
public void process(IDBStoreAccessor accessor, InternalCDORevisionDelta delta, long created) { this.accessor = accessor; this.created = created; id = delta.getID(); branchId = delta.getBranch().getID(); oldVersion = delta.getVersion(); if (TRACER.isEnabled()) { TRACER.format("FeatureDeltaWriter: old version: {0}, new version: {1}", oldVersion, oldVersion + 1); //$NON-NLS-1$ } InternalCDORevision originalRevision = (InternalCDORevision)accessor.getStore().getRepository() .getRevisionManager().getRevisionByVersion(id, delta, 0, true); newRevision = originalRevision.copy(); newRevision.setVersion(oldVersion + 1); newRevision.setBranchPoint(delta.getBranch().getPoint(created)); // process revision delta tree delta.accept(this); long revised = newRevision.getTimeStamp() - 1; reviseOldRevision(accessor, id, delta.getBranch(), revised); writeValues(accessor, newRevision); }
/** Sets the effective time on the object for the desired value. */ private void setEffectiveTimeOnComponent(final InternalCDORevisionDelta revisionDelta, final Object effectiveTime) { final EStructuralFeature effectiveTimeFeature = getEffectiveTimeFeature(revisionDelta.getEClass()); revisionDelta.addFeatureDelta(createSetFeatureDelta(effectiveTimeFeature, NO_INDEX, effectiveTime)); }
CDOID id = changeDelta.getID(); InternalCDOObject object = getObjectIfExists(id); InternalCDORevisionDelta targetGoalDelta = (InternalCDORevisionDelta)changeDelta.copy(); targetGoalDelta.setBranch(currentRevision.getBranch()); targetGoalDelta.setVersion(currentRevision.getVersion()); goalRevision.setRevised(CDOBranchPoint.UNSPECIFIED_DATE); for (CDOFeatureDelta featureDelta : targetGoalDelta.getFeatureDeltas()) ((InternalCDORevisionDelta)dirtyObjectDelta).adjustReferences(idMapper);
ancestorGoalDelta.setTarget(null); CDOID id = ancestorGoalDelta.getID(); InternalCDORevision ancestorRevision = (InternalCDORevision)ancestorProvider.getRevision(id); ancestorGoalDelta.apply(goalRevision); targetGoalDelta.setTarget(null); if (!targetGoalDelta.isEmpty()) if (keepVersions && targetGoalDelta.getVersion() != ancestorRevision.getVersion())
CDOID id = resultDelta.getID(); InternalCDOObject object = (InternalCDOObject)transaction.getObject(id, false); if (object != null) resultDelta.apply(newLocalRevision); if (newLocalDelta.isEmpty()) newLocalDelta.setTarget(null); localDeltas.put(id, newLocalDelta); object.cdoInternalSetState(CDOState.DIRTY); dirtyObjects.put(id, object); newLocalDelta.accept(new CDOFeatureDeltaVisitorImpl()
delta.adjustReferences(idMapper); for (InternalCDORevisionDelta delta : revisionDeltas) InternalCDOObject object = getObject(delta.getID()); int oldVersion = object.cdoRevision().getVersion(); registerDirty(object, null); if (delta.getVersion() < oldVersion)
CDOID id = delta.getID(); InternalCDOObject object = (InternalCDOObject)transaction.getObject(id, false); if (object != null) int newVersion = delta.getVersion() + 1; delta.apply(revision); localDelta.setVersion(newVersion);
ancestorGoalDelta.setTarget(null); CDOID id = ancestorGoalDelta.getID(); InternalCDORevision baseRevision = (InternalCDORevision)baseProvider.getRevision(id); InternalCDOObject object = getObjectIfExists(id); for (CDOFeatureDelta featureDelta : ancestorGoalDelta.getFeatureDeltas()) targetGoalDelta.setTarget(null); if (!targetGoalDelta.isEmpty()) if (keepVersions && targetGoalDelta.getVersion() != baseRevision.getVersion())
if (revisionDelta.adjustReferences(idMapper)) result.getAdjustedObjects().add(revisionDelta.getID());
private void mergeChangedObject(CDORevisionKey key, Map<CDOID, CDOIDAndVersion> newMap, Map<CDOID, CDORevisionKey> changedMap) { CDOID id = key.getID(); if (key instanceof CDORevisionDelta) { CDORevisionDelta delta = (CDORevisionDelta)key; // Try to add the delta to existing new revision CDOIDAndVersion oldRevision = newMap.get(id); if (oldRevision instanceof CDORevision) { CDORevision newRevision = (CDORevision)oldRevision; delta.apply(newRevision); return; } // Try to add the delta to existing delta CDORevisionKey oldDelta = changedMap.get(id); if (oldDelta instanceof CDORevisionDelta) { InternalCDORevisionDelta newDelta = (InternalCDORevisionDelta)oldDelta; for (CDOFeatureDelta featureDelta : delta.getFeatureDeltas()) { newDelta.addFeatureDelta(featureDelta); } return; } } // Fall back changedMap.put(id, key); }
private void doCopyOnBranch(IDBStoreAccessor accessor, InternalCDORevisionDelta delta, long created, OMMonitor monitor) { monitor.begin(2); try { InternalRepository repository = (InternalRepository)accessor.getStore().getRepository(); InternalCDORevision oldRevision = (InternalCDORevision)accessor.getTransaction().getRevision(delta.getID()); if (oldRevision == null) { throw new IllegalStateException("Origin revision not found for " + delta); } // Make sure all chunks are loaded repository.ensureChunks(oldRevision, CDORevision.UNCHUNKED); InternalCDORevision newRevision = oldRevision.copy(); newRevision.adjustForCommit(accessor.getTransaction().getBranch(), created); delta.apply(newRevision); monitor.worked(); writeRevision(accessor, newRevision, false, true, monitor.fork()); } finally { monitor.done(); } } }
private void processRevisionDeltas(InternalEObject reattachedObject, InternalCDOTransaction transaction) { InternalCDOSavepoint lastSavepoint = transaction.getLastSavepoint(); Map<CDOID, CDORevisionDelta> revisionDeltas = lastSavepoint.getRevisionDeltas2(); for (Iterator<Entry<CDOID, CDORevisionDelta>> it = revisionDeltas.entrySet().iterator(); it.hasNext();) { Entry<CDOID, CDORevisionDelta> entry = it.next(); CDORevisionDelta revisionDelta = entry.getValue(); Map<EStructuralFeature, CDOFeatureDelta> map = ((InternalCDORevisionDelta)revisionDelta).getFeatureDeltaMap(); processFeatureDeltas(reattachedObject, map); if (revisionDelta.isEmpty()) { it.remove(); CDOID id = revisionDelta.getID(); InternalCDOObject cleanObject = (InternalCDOObject)lastSavepoint.getDirtyObjects().remove(id); cleanObject.cdoInternalSetState(CDOState.CLEAN); } } if (revisionDeltas.isEmpty()) { transaction.setDirty(false); } }
public void applyIDMappings(OMMonitor monitor) { boolean mapIDs = !idMappings.isEmpty(); monitor.begin(1 + (mapIDs ? newObjects.length + dirtyObjects.length + dirtyObjectDeltas.length : 0)); try { if (mapIDs) { applyIDMappings(newObjects, monitor.fork(newObjects.length)); applyIDMappings(dirtyObjects, monitor.fork(dirtyObjects.length)); for (CDORevisionDelta dirtyObjectDelta : dirtyObjectDeltas) { ((InternalCDORevisionDelta)dirtyObjectDelta).adjustReferences(idMapper); monitor.worked(); } } // Do not notify handlers before the IDs are fully mapped! notifyBeforeCommitting(monitor); } finally { monitor.done(); } }
protected void writeRevisionDelta(InternalCDORevisionDelta delta, long created, OMMonitor monitor) { CDOID id = delta.getID(); EClass eClass = getObjectType(id); IClassMappingDeltaSupport mapping = (IClassMappingDeltaSupport)getStore().getMappingStrategy().getClassMapping( eClass); mapping.writeRevisionDelta(this, delta, created, monitor); }
public void update(InternalCDORevision oldRevision, InternalCDORevisionDelta delta) { try { this.oldRevision = oldRevision; delta.accept(this); } finally { this.oldRevision = null; } }
private boolean isTreeRestructuring(InternalCommitContext commitContext) { for (InternalCDORevisionDelta delta : commitContext.getDirtyObjectDeltas()) { for (CDOFeatureDelta featureDelta : delta.getFeatureDeltas()) { EStructuralFeature feature = featureDelta.getFeature(); if (feature == CDOContainerFeatureDelta.CONTAINER_FEATURE) { return true; } } } return false; }