private int getHighestVersion(List<InternalCDORevision> list) { int version = CDOBranchVersion.UNSPECIFIED_VERSION; for (InternalCDORevision revision : list) { if (revision.getVersion() > version) { version = revision.getVersion(); } } return version; }
private InternalCDORevision getRevisionByVersion(List<InternalCDORevision> list, int version) { for (InternalCDORevision revision : list) { if (revision.getVersion() == version) { return revision; } } return null; }
public int getVersion() { return getDelegate().getVersion(); }
public InternalCDORevision getRevisionByVersion(CDOID id, CDOBranchVersion branchVersion) { synchronized (revisions) { Reference<InternalCDORevision> ref = revisions.get(id); if (ref != null) { InternalCDORevision revision = ref.get(); if (revision != null && revision.getVersion() == branchVersion.getVersion()) { return revision; } } return null; } }
public synchronized void rawDelete(CDOID id, int version, CDOBranch branch) { Object listKey = getListKey(id, branch); List<InternalCDORevision> list = revisions.get(listKey); if (list != null) { for (Iterator<InternalCDORevision> it = list.iterator(); it.hasNext();) { InternalCDORevision rev = it.next(); if (rev.getVersion() == version) { it.remove(); break; } } } }
public InternalCDORevision removeRevision(CDOID id, CDOBranchVersion branchVersion) { synchronized (revisions) { Reference<InternalCDORevision> ref = revisions.get(id); if (ref != null) { InternalCDORevision revision = ref.get(); if (revision != null) { if (revision.getVersion() == branchVersion.getVersion()) // No branch check needed in non-auditing { revisions.remove(id); return revision; } } else { revisions.remove(id); } } } return null; }
public synchronized InternalCDORevision getRevisionByVersion(int version) { for (Iterator<Reference<InternalCDORevision>> it = iterator(); it.hasNext();) { Reference<InternalCDORevision> ref = it.next(); InternalCDORevision revision = ref.get(); if (revision != null) { int v = revision.getVersion(); if (v == version) { return revision; } else if (v < version) { break; } } else { it.remove(); } } return null; }
public CacheSoftReference(InternalCDORevision revision, ReferenceQueue<InternalCDORevision> queue) { super(revision, queue); id = revision.getID(); branch = revision.getBranch(); version = revision.getVersion(); }
public CacheStrongReference(InternalCDORevision revision) { super(revision); id = revision.getID(); branch = revision.getBranch(); version = revision.getVersion(); }
@Override public void execute(InternalCDOObject object, CDOState state, CDOEvent event, CDORevisionKey key) { InternalCDORevision oldRevision = object.cdoRevision(); if (key == null || key.getVersion() >= oldRevision.getVersion() - 1) { changeState(object, CDOState.CONFLICT); InternalCDOTransaction transaction = object.cdoView().toTransaction(); transaction.setConflict(object); } } }
@Override public void execute(InternalCDOObject object, CDOState state, CDOEvent event, Pair<CDORevisionKey, Long> keyAndTime) { CDORevisionKey key = keyAndTime.getElement1(); InternalCDORevision oldRevision = object.cdoRevision(); if (key == null || key.getVersion() >= oldRevision.getVersion() - 1) { changeState(object, CDOState.CONFLICT); InternalCDOTransaction transaction = object.cdoView().toTransaction(); transaction.setConflict(object); } } }
public void reviseLatest(CDOID id, CDOBranch branch) { acquireAtomicRequestLock(reviseLock); try { InternalCDORevision revision = (InternalCDORevision)cache.getRevision(id, branch.getHead()); if (revision != null) { cache.removeRevision(id, branch.getVersion(revision.getVersion())); } } finally { releaseAtomicRequestLock(reviseLock); } }
/** * @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); }
/** * TODO See {@link CDOObjectMerger}!!! */ public static void changeObject(CDOObject object, CDORevisionDelta revisionDelta) { readObject(object); InternalCDORevision revision = (InternalCDORevision)object.cdoRevision().copy(); ((InternalCDORevisionDelta)revisionDelta).setVersion(revision.getVersion()); CDORevisionMerger merger = new CDORevisionMerger(); merger.merge(revision, revisionDelta); ((InternalCDOObject)object).cdoInternalSetRevision(revision); ((InternalCDOObject)object).cdoInternalSetState(CDOState.DIRTY); ((InternalCDOObject)object).cdoInternalPostLoad(); }
/** * TODO See {@link CDOObjectMerger}!!! */ public static void changeObject(CDOObject object, CDORevisionDelta revisionDelta) { readObject(object); InternalCDORevision revision = (InternalCDORevision)object.cdoRevision().copy(); ((InternalCDORevisionDelta)revisionDelta).setVersion(revision.getVersion()); CDORevisionMerger merger = new CDORevisionMerger(); merger.merge(revision, revisionDelta); ((InternalCDOObject)object).cdoInternalSetRevision(revision); ((InternalCDOObject)object).cdoInternalSetState(CDOState.DIRTY); ((InternalCDOObject)object).cdoInternalPostLoad(); }
public void objectDetached(IDBStoreAccessor accessor, CDOID id, long revised) { ITransaction transaction = accessor.getTransaction(); InternalCDORevision revision = (InternalCDORevision)transaction.getRevision(id); int branchID = transaction.getBranch().getID(); if (TRACER.isEnabled()) { TRACER.format("objectDetached {1}", revision); //$NON-NLS-1$ } clearList(accessor, id, branchID, revision.getVersion(), FINAL_VERSION, revision.getList(getFeature()).size() - 1); }
public void objectDetached(IDBStoreAccessor accessor, CDOID id, long revised) { InternalCDORevision revision = (InternalCDORevision)accessor.getTransaction().getRevision(id); int branchId = accessor.getTransaction().getBranch().getID(); if (TRACER.isEnabled()) { TRACER.format("objectDetached {1}", revision); //$NON-NLS-1$ } clearList(accessor, id, branchId, revision.getVersion(), FINAL_VERSION, revision.getList(getFeature()).size() - 1, revised); }
public boolean readRevisionByVersion(IDBStoreAccessor accessor, InternalCDORevision revision, int listChunk) { IIDHandler idHandler = getMappingStrategy().getStore().getIDHandler(); IDBPreparedStatement stmt = accessor.getDBConnection().prepareStatement(sqlSelectAttributesByVersion, ReuseProbability.HIGH); try { idHandler.setCDOID(stmt, 1, revision.getID()); stmt.setInt(2, revision.getVersion()); // Read singleval-attribute table always (even without modeled attributes!) boolean success = readValuesFromStatement(stmt, revision, accessor); // Read multival tables only if revision exists if (success) { readLists(accessor, revision, listChunk); } return success; } catch (SQLException ex) { throw new DBException(ex); } finally { DBUtil.close(stmt); } }
public InternalCDORevision readRevision(CDOID id, CDOBranchPoint branchPoint, int listChunk, CDORevisionCacheAdder cache) { if (TRACER.isEnabled()) { TRACER.format("Selecting revision {0} from {1}", id, branchPoint); //$NON-NLS-1$ } IMappingStrategy mappingStrategy = getStore().getMappingStrategy(); EClass eClass = getObjectType(id); if (eClass != null) { InternalCDORevision revision = getStore().createRevision(eClass, id); revision.setBranchPoint(branchPoint); // This is part of the search criterion, being replaced later IClassMapping mapping = mappingStrategy.getClassMapping(eClass); if (mapping.readRevision(this, revision, listChunk)) { int version = revision.getVersion(); if (version < CDOBranchVersion.UNSPECIFIED_VERSION) { return new DetachedCDORevision(eClass, id, revision.getBranch(), -version, revision.getTimeStamp(), revision.getRevised()); } return revision; } } // Reading failed - revision does not exist. return null; }
public void process(IDBStoreAccessor accessor, InternalCDORevisionDelta delta, long created) { this.accessor = accessor; this.created = created; id = delta.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.getTransaction().getRevision(id); newRevision = originalRevision.copy(); targetBranch = accessor.getTransaction().getBranch(); newRevision.adjustForCommit(targetBranch, created); newVersion = newRevision.getVersion(); // process revision delta tree delta.accept(this); if (newVersion != CDORevision.FIRST_VERSION) { reviseOldRevision(accessor, id, delta.getBranch(), newRevision.getTimeStamp() - 1); } writeValues(accessor, newRevision); }