public CDOID getID() { return key.getID(); }
public void addRevision(CDORevisionKey key) { availableRevisions.put(key.getID(), key); }
@Override protected synchronized CDOID getXRefTargetID(CDOObject target) { CDORevisionKey key = cleanRevisions.get(target); if (key != null) { return key.getID(); } return super.getXRefTargetID(target); }
@Override protected synchronized CDOID getXRefTargetID(CDOObject target) { CDORevisionKey key = cleanRevisions.get(target); if (key != null) { return key.getID(); } return super.getXRefTargetID(target); }
private CDORevision getRevision(CDORevisionKey key, CDORevisionAvailabilityInfo info) { CDORevisionKey revision = info.getRevision(key.getID()); if (revision instanceof CDORevision) { if (key.equals(revision)) { return (CDORevision)revision; } } return null; } }
public static List<Object> revisionKeysToObjects(List<CDORevisionKey> revisionKeys, CDOBranch viewedBranch, boolean isSupportingBranches) { List<Object> lockables = new ArrayList<Object>(); for (CDORevisionKey revKey : revisionKeys) { CDOID id = revKey.getID(); if (isSupportingBranches) { lockables.add(CDOIDUtil.createIDAndBranch(id, viewedBranch)); } else { lockables.add(id); } } return lockables; }
/** * @since 4.0 */ public static String formatRevisionKey(CDORevisionKey key) { StringBuilder builder = new StringBuilder(); CDOIDUtil.write(builder, key.getID()); builder.append(":"); builder.append(key.getBranch().getID()); builder.append(":"); builder.append(key.getVersion()); return builder.toString(); }
@Override protected synchronized CDOID getID(InternalCDOObject object, boolean onlyPersistedID) { CDOID id = super.getID(object, onlyPersistedID); // If super returned a good result, return immediately if (id != null) { return id; } // Don't perform the trickery that follows later in this method, if we are being called // indirectly through provideCDOID. This occurs when deltas or revisions are // being written out to a stream; in which case null must be returned (for transients) so that // the caller will detect a dangling reference if (providingCDOID.get()) { return null; } // The super implementation will return null for a transient (unattached) object; // but in a tx, an transient object may previously have been attached. So we consult // the cleanRevisions if that's the case. CDORevisionKey revKey = cleanRevisions.get(object); if (revKey != null && getDetachedObjects().containsValue(object)) { id = revKey.getID(); } return id; }
@Override public boolean equals(Object obj) { if (obj == this) { return true; } if (obj instanceof CDORevisionKey) { CDORevisionKey that = (CDORevisionKey)obj; return id.equals(that.getID()) && getBranch().equals(that.getBranch()) && getVersion() == that.getVersion(); } return false; }
/** * @since 4.0 */ public static CDORevisionKey copyRevisionKey(CDORevisionKey source) { return new CDORevisionKeyImpl(source.getID(), source.getBranch(), source.getVersion()); }
public synchronized void removeRevision(int version) { for (Iterator<Reference<InternalCDORevision>> it = iterator(); it.hasNext();) { Reference<InternalCDORevision> ref = it.next(); CDORevisionKey key = (CDORevisionKey)ref; int v = key.getVersion(); if (v == version) { it.remove(); if (TRACER.isEnabled()) { TRACER.format("Removed version {0} from cache list of {1}", version, key.getID()); //$NON-NLS-1$ } break; } else if (v < version) { break; } } }
private Map<CDOID, Object> createMap(CDOChangeSetData changeSetData) { Map<CDOID, Object> map = new HashMap<CDOID, Object>(); for (CDOIDAndVersion data : changeSetData.getNewObjects()) { map.put(data.getID(), data); } for (CDORevisionKey data : changeSetData.getChangedObjects()) { map.put(data.getID(), data); } for (CDOIDAndVersion data : changeSetData.getDetachedObjects()) { map.put(data.getID(), data.getID()); } return map; }
private Map<CDOID, CDORevisionDelta> getRemoteDeltas(CDOChangeSet remoteChangeSet) { Map<CDOID, CDORevisionDelta> remoteDeltas = CDOIDUtil.createMap(); for (CDORevisionKey key : remoteChangeSet.getChangedObjects()) { if (key instanceof CDORevisionDelta) { CDORevisionDelta delta = (CDORevisionDelta)key; remoteDeltas.put(key.getID(), delta); } else if (TRACER.isEnabled()) { TRACER.format("Not a CDORevisionDelta: {0}", key); //$NON-NLS-1$ } } return remoteDeltas; }
private Map<CDOID, Object> createMap(CDOChangeSetData changeSetData) { Map<CDOID, Object> map = CDOIDUtil.createMap(); for (CDOIDAndVersion data : changeSetData.getNewObjects()) { map.put(data.getID(), data); } for (CDORevisionKey data : changeSetData.getChangedObjects()) { map.put(data.getID(), data); } for (CDOIDAndVersion data : changeSetData.getDetachedObjects()) { map.put(data.getID(), data.getID()); } return map; }
public void writeCDORevisionKey(CDORevisionKey revisionKey) throws IOException { writeCDOID(revisionKey.getID()); writeCDOBranch(revisionKey.getBranch()); writeInt(revisionKey.getVersion()); }
/** * @since 4.0 */ protected void showRevision(PrintStream pout, CDOServerBrowser browser, Map<CDOBranch, List<CDORevision>> allRevisions, Map<CDOID, List<CDORevision>> ids, String key, InternalRepository repository) { CDORevisionKey revisionKey = CDORevisionUtil.parseRevisionKey(key, repository.getBranchManager()); for (CDORevision revision : allRevisions.get(revisionKey.getBranch())) { if (revision.getVersion() == revisionKey.getVersion() && revision.getID().equals(revisionKey.getID())) { showRevision(pout, browser, ids, (InternalCDORevision)revision); return; } } }
protected Collection<? extends IHistoryInfoDetails> processChangedObjects(final List<CDORevisionKey> changedObjects, final CDOView beforeView, final CDOView currentView) { final List<IHistoryInfoDetails> infoDetails = new ArrayList<IHistoryInfoDetails>(); for (final CDORevisionKey revisionKey : changedObjects) { if (revisionKey instanceof CDORevisionDelta) { final CDORevisionDelta revisionDelta = (CDORevisionDelta) revisionKey; for (final CDOFeatureDelta featureDelta : revisionDelta.getFeatureDeltas()) { if (Type.SET.equals(featureDelta.getType()) && filter(featureDelta.getFeature())) { // TODO: change to instanceof CDOSetFeatureDelta? final CDOObject object = currentView.getObject(revisionKey.getID()); final IHistoryInfoDetails details = generateInfoForChangedObject(object, currentView, beforeView, (CDOSetFeatureDelta) featureDelta); if (IHistoryInfoDetails.IGNORED_DETAILS != details) { infoDetails.add(details); } } } } } return infoDetails; }
private void writeRevisions(CDODataOutput out) throws IOException { InternalCDORevisionManager revisionManager = getRepository().getRevisionManager(); SyntheticCDORevision[] synthetics = new SyntheticCDORevision[1]; for (Entry<CDOBranch, List<CDORevisionKey>> entry : viewedRevisions.entrySet()) { CDOBranch branch = entry.getKey(); CDOBranchPoint head = branch.getHead(); for (CDORevisionKey key : entry.getValue()) { CDOID id = key.getID(); synthetics[0] = null; InternalCDORevision revision = revisionManager.getRevision(id, head, CDORevision.UNCHUNKED, CDORevision.DEPTH_NONE, true, synthetics); if (revision == null) { writeDetachedObject(out, synthetics[0]); } else if (hasChanged(key, revision)) { writeChangedObject(out, revision, head); } } } out.writeByte(CDOProtocolConstants.REFRESH_FINISHED); }
@Override protected void work(Reference<? extends InternalCDORevision> reference) { CDORevisionKey key = (CDORevisionKey)reference; CDOID id = key.getID(); CDOBranch branch = key.getBranch(); int version = key.getVersion(); InternalCDORevision revision = (InternalCDORevision)removeRevision(id, branch.getVersion(version)); if (revision == null) { // Use revision in eviction event key = revision; } IListener[] listeners = getListeners(); if (listeners != null) { fireEvent(new EvictionEventImpl(this, key), listeners); } }