From 03688eeb4f3afe079d25107c3cf98a2cc260e54e Mon Sep 17 00:00:00 2001 From: Eike Stepper Date: Fri, 10 Jul 2009 06:38:31 +0000 Subject: [282481] Provide an EmbeddedSessionProtocol https://bugs.eclipse.org/bugs/show_bug.cgi?id=282481 --- .../cdo/session/CDOCollectionLoadingPolicy.java | 13 +- .../emf/cdo/session/CDORevisionManager.java | 23 ---- .../org/eclipse/emf/cdo/session/CDOSession.java | 7 +- .../emf/cdo/session/CDOSessionConfiguration.java | 5 +- .../emf/cdo/view/CDORevisionPrefetchingPolicy.java | 11 +- .../eclipse/emf/internal/cdo/CDOLegacyWrapper.java | 4 +- .../eclipse/emf/internal/cdo/CDOStateMachine.java | 4 +- .../src/org/eclipse/emf/internal/cdo/CDOStore.java | 4 +- .../internal/cdo/revision/CDOElementProxyImpl.java | 8 +- .../session/CDOCollectionLoadingPolicyImpl.java | 8 +- .../cdo/session/CDORevisionManagerImpl.java | 152 --------------------- .../emf/internal/cdo/session/CDOSessionImpl.java | 12 +- .../cdo/session/CDOXXRevisionManagerImpl.java | 152 +++++++++++++++++++++ .../cdo/view/CDORevisionPrefetchingPolicyImpl.java | 4 +- .../org/eclipse/emf/spi/cdo/CDOElementProxy.java | 7 +- .../emf/spi/cdo/InternalCDORevisionManager.java | 46 ------- .../eclipse/emf/spi/cdo/InternalCDOSession.java | 2 +- .../emf/spi/cdo/InternalCDOXXRevisionManager.java | 46 +++++++ 18 files changed, 248 insertions(+), 260 deletions(-) delete mode 100644 plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/session/CDORevisionManager.java delete mode 100644 plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/session/CDORevisionManagerImpl.java create mode 100644 plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/session/CDOXXRevisionManagerImpl.java delete mode 100644 plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/InternalCDORevisionManager.java create mode 100644 plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/InternalCDOXXRevisionManager.java (limited to 'plugins/org.eclipse.emf.cdo/src/org/eclipse') diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/session/CDOCollectionLoadingPolicy.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/session/CDOCollectionLoadingPolicy.java index 208321cca2..2daea6ebb8 100644 --- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/session/CDOCollectionLoadingPolicy.java +++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/session/CDOCollectionLoadingPolicy.java @@ -13,9 +13,10 @@ package org.eclipse.emf.cdo.session; import org.eclipse.emf.cdo.common.id.CDOID; import org.eclipse.emf.cdo.common.revision.CDORevision; +import org.eclipse.emf.cdo.common.revision.CDORevisionResolver; import org.eclipse.emf.ecore.EStructuralFeature; -import org.eclipse.emf.spi.cdo.InternalCDORevisionManager; +import org.eclipse.emf.spi.cdo.InternalCDOXXRevisionManager; /** * A strategy that specifies which list elememts must be present (loaded) in a {@link CDOID} list of a @@ -41,10 +42,10 @@ public interface CDOCollectionLoadingPolicy return CDORevision.UNCHUNKED; } - public Object resolveProxy(CDORevisionManager revisionManager, CDORevision revision, EStructuralFeature feature, + public Object resolveProxy(CDORevisionResolver revisionManager, CDORevision revision, EStructuralFeature feature, int accessIndex, int serverIndex) { - return ((InternalCDORevisionManager)revisionManager).loadChunkByRange(revision, feature, accessIndex, + return ((InternalCDOXXRevisionManager)revisionManager).loadChunkByRange(revision, feature, accessIndex, serverIndex, accessIndex, accessIndex); } }; @@ -57,9 +58,11 @@ public interface CDOCollectionLoadingPolicy /** * Defines a strategy to be used when the collection needs to resolve one element. - * {@link CDORevisionManager#loadChunkByRange(CDORevision, EStructuralFeature, int, int, int, int)} should be used to + * {@link CDORevisionResolver#loadChunkByRange(CDORevision, EStructuralFeature, int, int, int, int)} should be used to * resolve them. + * + * @since 3.0 */ - public Object resolveProxy(CDORevisionManager revisionManager, CDORevision revision, EStructuralFeature feature, + public Object resolveProxy(CDORevisionResolver revisionManager, CDORevision revision, EStructuralFeature feature, int accessIndex, int serverIndex); } diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/session/CDORevisionManager.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/session/CDORevisionManager.java deleted file mode 100644 index 297c1915a4..0000000000 --- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/session/CDORevisionManager.java +++ /dev/null @@ -1,23 +0,0 @@ -/** - * Copyright (c) 2004 - 2009 Eike Stepper (Berlin, Germany) and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Eike Stepper - initial API and implementation - * Simon McDuff - maintenance - */ -package org.eclipse.emf.cdo.session; - -import org.eclipse.emf.cdo.common.revision.CDORevisionResolver; - -/** - * @author Eike Stepper - * @since 2.0 - */ -public interface CDORevisionManager extends CDORevisionResolver -{ - public CDOSession getSession(); -} diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/session/CDOSession.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/session/CDOSession.java index d6d2ab0d5c..c41b76110a 100644 --- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/session/CDOSession.java +++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/session/CDOSession.java @@ -17,6 +17,7 @@ import org.eclipse.emf.cdo.common.model.CDOPackageRegistry; import org.eclipse.emf.cdo.common.model.CDOPackageUnit; import org.eclipse.emf.cdo.common.revision.CDORevision; import org.eclipse.emf.cdo.common.revision.CDORevisionFactory; +import org.eclipse.emf.cdo.common.revision.CDORevisionResolver; import org.eclipse.emf.cdo.session.remote.CDORemoteSessionManager; import org.eclipse.emf.cdo.transaction.CDOTimeStampContext; import org.eclipse.emf.cdo.transaction.CDOTransaction; @@ -68,10 +69,12 @@ public interface CDOSession extends CDOCommonSession, IContainer, IOpti public CDOPackageRegistry getPackageRegistry(); /** - * Returns the CDO {@link CDORevisionManager revision manager} that manages the {@link CDORevision revisions} of the + * Returns the CDO {@link CDORevisionResolver revision manager} that manages the {@link CDORevision revisions} of the * repository of this session. + * + * @since 3.0 */ - public CDORevisionManager getRevisionManager(); + public CDORevisionResolver getRevisionManager(); /** * Returns the CDO {@link CDORemoteSessionManager remote session manager} that keeps track of the other remote diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/session/CDOSessionConfiguration.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/session/CDOSessionConfiguration.java index 744b929916..7d29c2fc54 100644 --- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/session/CDOSessionConfiguration.java +++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/session/CDOSessionConfiguration.java @@ -12,6 +12,7 @@ package org.eclipse.emf.cdo.session; import org.eclipse.emf.cdo.common.model.CDOPackageRegistry; import org.eclipse.emf.cdo.common.protocol.CDOAuthenticator; +import org.eclipse.emf.cdo.common.revision.CDORevisionResolver; import org.eclipse.emf.cdo.common.revision.cache.CDORevisionCache; /** @@ -45,14 +46,14 @@ public interface CDOSessionConfiguration public void setPackageRegistry(CDOPackageRegistry packageRegistry); /** - * @see CDORevisionManager#getCache() + * @see CDORevisionResolver#getCache() */ public CDORevisionCache getRevisionCache(); /** * A special revision cache can be set before the session is opened and can not be changed thereafter. * - * @see CDORevisionManager#setCache(CDORevisionCache) + * @see CDORevisionResolver#setCache(CDORevisionCache) */ public void setRevisionCache(CDORevisionCache revisionCache); diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/view/CDORevisionPrefetchingPolicy.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/view/CDORevisionPrefetchingPolicy.java index fc302e6540..f823fb0347 100644 --- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/view/CDORevisionPrefetchingPolicy.java +++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/cdo/view/CDORevisionPrefetchingPolicy.java @@ -4,7 +4,7 @@ * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html - * + * * Contributors: * Simon McDuff - initial API and implementation * Eike Stepper - maintenance @@ -13,7 +13,7 @@ package org.eclipse.emf.cdo.view; import org.eclipse.emf.cdo.common.id.CDOID; import org.eclipse.emf.cdo.common.revision.CDOList; -import org.eclipse.emf.cdo.session.CDORevisionManager; +import org.eclipse.emf.cdo.common.revision.CDORevisionResolver; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.EStructuralFeature; @@ -29,7 +29,7 @@ public interface CDORevisionPrefetchingPolicy { public static final CDORevisionPrefetchingPolicy NO_PREFETCHING = new CDORevisionPrefetchingPolicy() { - public Collection loadAhead(CDORevisionManager revisionManager, EObject targetObject, + public Collection loadAhead(CDORevisionResolver revisionManager, EObject targetObject, EStructuralFeature feature, CDOList list, int accessIndex, CDOID accessID) { return Collections.emptyList(); @@ -38,7 +38,7 @@ public interface CDORevisionPrefetchingPolicy /** * @param revisionManager - * Lookup availability of objects in the cache with {@link CDORevisionManager#containsRevision(CDOID)}. + * Lookup availability of objects in the cache with {@link CDORevisionResolver#containsRevision(CDOID)}. * @param targetObject * Container of the list * @param feature @@ -46,7 +46,8 @@ public interface CDORevisionPrefetchingPolicy * @param accessIndex * @param accessID * @return Should return a list of id's to be fetch. + * @since 3.0 */ - public Collection loadAhead(CDORevisionManager revisionManager, EObject targetObject, + public Collection loadAhead(CDORevisionResolver revisionManager, EObject targetObject, EStructuralFeature feature, CDOList list, int accessIndex, CDOID accessID); } diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOLegacyWrapper.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOLegacyWrapper.java index 0ef7829b6b..6dafe9607a 100644 --- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOLegacyWrapper.java +++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOLegacyWrapper.java @@ -131,7 +131,7 @@ public abstract class CDOLegacyWrapper extends CDOObjectWrapper // instanceToRevision(); // if (cdoState() == CDOState.DIRTY) // NEW is handled in PrepareTransition // { - // CDORevisionManagerImpl revisionManager = (CDORevisionManagerImpl)cdoView().getSession().getRevisionManager(); + // CDOXXRevisionManagerImpl revisionManager = (CDOXXRevisionManagerImpl)cdoView().getSession().getRevisionManager(); // InternalCDORevision originRevision = revisionManager.getRevisionByVersion(revision.getID(), // CDORevision.UNCHUNKED, revision.getVersion() - 1, false); // CDORevisionDelta delta = revision.compare(originRevision); @@ -366,7 +366,7 @@ public abstract class CDOLegacyWrapper extends CDOObjectWrapper * at runtime. Note also that the proxy object might even not be cast to the concrete type of the target object. The * proxy can only guaranteed to be of any concrete subtype of the declared type of the given feature. *

- * TODO {@link InternalEObject#eResolveProxy(InternalEObject) + * TODO {@link InternalEObject#eResolveProxy(InternalEObject) */ protected InternalEObject createProxy(InternalCDOView view, EStructuralFeature feature, CDOID id) { diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOStateMachine.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOStateMachine.java index e031f60fe7..fa706c3a87 100644 --- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOStateMachine.java +++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/CDOStateMachine.java @@ -36,10 +36,10 @@ import org.eclipse.emf.ecore.InternalEObject; import org.eclipse.emf.ecore.impl.EStoreEObjectImpl; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.emf.spi.cdo.InternalCDOObject; -import org.eclipse.emf.spi.cdo.InternalCDORevisionManager; import org.eclipse.emf.spi.cdo.InternalCDOSession; import org.eclipse.emf.spi.cdo.InternalCDOTransaction; import org.eclipse.emf.spi.cdo.InternalCDOView; +import org.eclipse.emf.spi.cdo.InternalCDOXXRevisionManager; import org.eclipse.emf.spi.cdo.CDOSessionProtocol.CommitTransactionResult; import java.util.ArrayList; @@ -725,7 +725,7 @@ public final class CDOStateMachine extends FiniteStateMachine listOfIDs = policy.loadAhead(revisionManager, eObject, feature, list, index, id); if (!listOfIDs.isEmpty()) diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/revision/CDOElementProxyImpl.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/revision/CDOElementProxyImpl.java index 2188706eec..437e1bba0b 100644 --- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/revision/CDOElementProxyImpl.java +++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/revision/CDOElementProxyImpl.java @@ -12,11 +12,11 @@ package org.eclipse.emf.internal.cdo.revision; import org.eclipse.emf.cdo.common.revision.CDORevision; -import org.eclipse.emf.cdo.session.CDORevisionManager; +import org.eclipse.emf.cdo.common.revision.CDORevisionResolver; import org.eclipse.emf.ecore.EStructuralFeature; import org.eclipse.emf.spi.cdo.CDOElementProxy; -import org.eclipse.emf.spi.cdo.InternalCDORevisionManager; +import org.eclipse.emf.spi.cdo.InternalCDOXXRevisionManager; import java.text.MessageFormat; @@ -42,9 +42,9 @@ public final class CDOElementProxyImpl implements CDOElementProxy this.index = index; } - public Object resolve(CDORevisionManager revisionManager, CDORevision revision, EStructuralFeature feature, int index) + public Object resolve(CDORevisionResolver revisionManager, CDORevision revision, EStructuralFeature feature, int index) { - return ((InternalCDORevisionManager)revisionManager).resolveElementProxy(revision, feature, index, getIndex()); + return ((InternalCDOXXRevisionManager)revisionManager).resolveElementProxy(revision, feature, index, getIndex()); } @Override diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/session/CDOCollectionLoadingPolicyImpl.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/session/CDOCollectionLoadingPolicyImpl.java index 3b4ac99fbc..5f12f34d7b 100644 --- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/session/CDOCollectionLoadingPolicyImpl.java +++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/session/CDOCollectionLoadingPolicyImpl.java @@ -12,15 +12,15 @@ package org.eclipse.emf.internal.cdo.session; import org.eclipse.emf.cdo.common.revision.CDORevision; +import org.eclipse.emf.cdo.common.revision.CDORevisionResolver; import org.eclipse.emf.cdo.session.CDOCollectionLoadingPolicy; -import org.eclipse.emf.cdo.session.CDORevisionManager; import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision; import org.eclipse.net4j.util.collection.MoveableList; import org.eclipse.emf.ecore.EStructuralFeature; import org.eclipse.emf.spi.cdo.CDOElementProxy; -import org.eclipse.emf.spi.cdo.InternalCDORevisionManager; +import org.eclipse.emf.spi.cdo.InternalCDOXXRevisionManager; /** * @author Simon McDuff @@ -48,7 +48,7 @@ public class CDOCollectionLoadingPolicyImpl implements CDOCollectionLoadingPolic return resolveChunkSize; } - public Object resolveProxy(CDORevisionManager revisionManager, CDORevision rev, EStructuralFeature feature, + public Object resolveProxy(CDORevisionResolver revisionManager, CDORevision rev, EStructuralFeature feature, int accessIndex, int serverIndex) { // Get proxy values @@ -110,7 +110,7 @@ public class CDOCollectionLoadingPolicyImpl implements CDOCollectionLoadingPolic } } - return ((InternalCDORevisionManager)revisionManager).loadChunkByRange(revision, feature, accessIndex, fetchIndex, + return ((InternalCDOXXRevisionManager)revisionManager).loadChunkByRange(revision, feature, accessIndex, fetchIndex, fromIndex, toIndex); } } diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/session/CDORevisionManagerImpl.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/session/CDORevisionManagerImpl.java deleted file mode 100644 index ac2075dc1c..0000000000 --- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/session/CDORevisionManagerImpl.java +++ /dev/null @@ -1,152 +0,0 @@ -/** - * Copyright (c) 2004 - 2009 Eike Stepper (Berlin, Germany) and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Eike Stepper - initial API and implementation - * Simon McDuff - maintenance - */ -package org.eclipse.emf.internal.cdo.session; - -import org.eclipse.emf.cdo.common.id.CDOID; -import org.eclipse.emf.cdo.common.id.CDOIDObjectFactory; -import org.eclipse.emf.cdo.common.revision.CDORevision; -import org.eclipse.emf.cdo.internal.common.revision.CDORevisionResolverImpl; -import org.eclipse.emf.cdo.session.CDORevisionManager; -import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision; -import org.eclipse.emf.cdo.view.CDOFetchRuleManager; - -import org.eclipse.net4j.util.WrappedException; -import org.eclipse.net4j.util.concurrent.RWLockManager; -import org.eclipse.net4j.util.concurrent.IRWLockManager.LockType; - -import org.eclipse.emf.ecore.EStructuralFeature; -import org.eclipse.emf.spi.cdo.InternalCDORevisionManager; -import org.eclipse.emf.spi.cdo.InternalCDOSession; - -import java.util.Collection; -import java.util.Collections; -import java.util.List; -import java.util.Set; - -/** - * @author Eike Stepper - */ -public class CDORevisionManagerImpl extends CDORevisionResolverImpl implements InternalCDORevisionManager -{ - private InternalCDOSession session; - - private CDOFetchRuleManager ruleManager = CDOFetchRuleManager.NOOP; - - private RWLockManager lockmanager = new RWLockManager(); - - private Set singletonCollection = Collections.singleton(this); - - /** - * @since 2.0 - */ - public CDORevisionManagerImpl(InternalCDOSession session) - { - this.session = session; - } - - /** - * @since 2.0 - */ - public InternalCDOSession getSession() - { - return session; - } - - /** - * @since 2.0 - */ - public CDOFetchRuleManager getRuleManager() - { - return ruleManager; - } - - /** - * @since 2.0 - */ - public void setRuleManager(CDOFetchRuleManager ruleManager) - { - this.ruleManager = ruleManager; - } - - public CDOIDObjectFactory getCDOIDObjectFactory() - { - return session; - } - - /** - * @since 2.0 - */ - public Object resolveElementProxy(CDORevision revision, EStructuralFeature feature, int accessIndex, int serverIndex) - { - return session.options().getCollectionLoadingPolicy().resolveProxy(this, revision, feature, accessIndex, - serverIndex); - } - - /** - * @since 2.0 - */ - public Object loadChunkByRange(CDORevision revision, EStructuralFeature feature, int accessIndex, int fetchIndex, - int fromIndex, int toIndex) - { - return session.getSessionProtocol().loadChunk((InternalCDORevision)revision, feature, accessIndex, fetchIndex, - fromIndex, toIndex); - } - - @Override - protected InternalCDORevision loadRevision(CDOID id, int referenceChunk) - { - return loadRevisions(Collections.singleton(id), referenceChunk).get(0); - } - - @Override - protected InternalCDORevision loadRevisionByTime(CDOID id, int referenceChunk, long timeStamp) - { - return loadRevisionsByTime(Collections.singleton(id), referenceChunk, timeStamp).get(0); - } - - @Override - protected InternalCDORevision loadRevisionByVersion(CDOID id, int referenceChunk, int version) - { - return session.getSessionProtocol().loadRevisionByVersion(id, referenceChunk, version); - } - - @Override - protected List loadRevisions(Collection ids, int referenceChunk) - { - return session.getSessionProtocol().loadRevisions(ids, referenceChunk); - } - - @Override - protected List loadRevisionsByTime(Collection ids, int referenceChunk, long timeStamp) - { - return session.getSessionProtocol().loadRevisionsByTime(ids, referenceChunk, timeStamp); - } - - @Override - protected void acquireAtomicRequestLock(Object key) - { - try - { - lockmanager.lock(LockType.WRITE, key, this, RWLockManager.WAIT); - } - catch (InterruptedException ex) - { - throw WrappedException.wrap(ex); - } - } - - @Override - protected void releaseAtomicRequestLock(Object key) - { - lockmanager.unlock(LockType.WRITE, key, singletonCollection); - } -} diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/session/CDOSessionImpl.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/session/CDOSessionImpl.java index 5d05b29ee2..a475e311f9 100644 --- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/session/CDOSessionImpl.java +++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/session/CDOSessionImpl.java @@ -83,11 +83,11 @@ import org.eclipse.emf.spi.cdo.AbstractQueryIterator; import org.eclipse.emf.spi.cdo.CDOSessionProtocol; import org.eclipse.emf.spi.cdo.InternalCDOObject; import org.eclipse.emf.spi.cdo.InternalCDORemoteSessionManager; -import org.eclipse.emf.spi.cdo.InternalCDORevisionManager; import org.eclipse.emf.spi.cdo.InternalCDOSession; import org.eclipse.emf.spi.cdo.InternalCDOTransaction; import org.eclipse.emf.spi.cdo.InternalCDOView; import org.eclipse.emf.spi.cdo.InternalCDOViewSet; +import org.eclipse.emf.spi.cdo.InternalCDOXXRevisionManager; import org.eclipse.emf.spi.cdo.CDOSessionProtocol.OpenSessionResult; import org.eclipse.emf.spi.cdo.CDOSessionProtocol.RepositoryTimeResult; import org.eclipse.emf.spi.cdo.InternalCDOTransaction.InternalCDOCommitContext; @@ -138,7 +138,7 @@ public abstract class CDOSessionImpl extends Container implements Inter private InternalCDOPackageRegistry packageRegistry; - private InternalCDORevisionManager revisionManager; + private InternalCDOXXRevisionManager revisionManager; private CDOAuthenticator authenticator; @@ -292,12 +292,12 @@ public abstract class CDOSessionImpl extends Container implements Inter return getSessionProtocol().loadPackages(packageUnit); } - public InternalCDORevisionManager getRevisionManager() + public InternalCDOXXRevisionManager getRevisionManager() { return revisionManager; } - public void setRevisionManager(InternalCDORevisionManager revisionManager) + public void setRevisionManager(InternalCDOXXRevisionManager revisionManager) { this.revisionManager = revisionManager; } @@ -637,9 +637,9 @@ public abstract class CDOSessionImpl extends Container implements Inter return new CDOPackageRegistryImpl(); } - protected InternalCDORevisionManager createRevisionManager() + protected InternalCDOXXRevisionManager createRevisionManager() { - return new CDORevisionManagerImpl(this); + return new CDOXXRevisionManagerImpl(this); } protected InternalCDORemoteSessionManager createRemoteSessionManager() diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/session/CDOXXRevisionManagerImpl.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/session/CDOXXRevisionManagerImpl.java new file mode 100644 index 0000000000..f1f54ddf4d --- /dev/null +++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/session/CDOXXRevisionManagerImpl.java @@ -0,0 +1,152 @@ +/** + * Copyright (c) 2004 - 2009 Eike Stepper (Berlin, Germany) and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Eike Stepper - initial API and implementation + * Simon McDuff - maintenance + */ +package org.eclipse.emf.internal.cdo.session; + +import org.eclipse.emf.cdo.common.id.CDOID; +import org.eclipse.emf.cdo.common.id.CDOIDObjectFactory; +import org.eclipse.emf.cdo.common.revision.CDORevision; +import org.eclipse.emf.cdo.common.revision.CDORevisionResolver; +import org.eclipse.emf.cdo.internal.common.revision.CDORevisionResolverImpl; +import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision; +import org.eclipse.emf.cdo.view.CDOFetchRuleManager; + +import org.eclipse.net4j.util.WrappedException; +import org.eclipse.net4j.util.concurrent.RWLockManager; +import org.eclipse.net4j.util.concurrent.IRWLockManager.LockType; + +import org.eclipse.emf.ecore.EStructuralFeature; +import org.eclipse.emf.spi.cdo.InternalCDOSession; +import org.eclipse.emf.spi.cdo.InternalCDOXXRevisionManager; + +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import java.util.Set; + +/** + * @author Eike Stepper + */ +public class CDOXXRevisionManagerImpl extends CDORevisionResolverImpl implements InternalCDOXXRevisionManager +{ + private InternalCDOSession session; + + private CDOFetchRuleManager ruleManager = CDOFetchRuleManager.NOOP; + + private RWLockManager lockmanager = new RWLockManager(); + + private Set singletonCollection = Collections.singleton(this); + + /** + * @since 2.0 + */ + public CDOXXRevisionManagerImpl(InternalCDOSession session) + { + this.session = session; + } + + /** + * @since 2.0 + */ + public InternalCDOSession getSession() + { + return session; + } + + /** + * @since 2.0 + */ + public CDOFetchRuleManager getRuleManager() + { + return ruleManager; + } + + /** + * @since 2.0 + */ + public void setRuleManager(CDOFetchRuleManager ruleManager) + { + this.ruleManager = ruleManager; + } + + public CDOIDObjectFactory getCDOIDObjectFactory() + { + return session; + } + + /** + * @since 2.0 + */ + public Object resolveElementProxy(CDORevision revision, EStructuralFeature feature, int accessIndex, int serverIndex) + { + return session.options().getCollectionLoadingPolicy().resolveProxy(this, revision, feature, accessIndex, + serverIndex); + } + + /** + * @since 2.0 + */ + public Object loadChunkByRange(CDORevision revision, EStructuralFeature feature, int accessIndex, int fetchIndex, + int fromIndex, int toIndex) + { + return session.getSessionProtocol().loadChunk((InternalCDORevision)revision, feature, accessIndex, fetchIndex, + fromIndex, toIndex); + } + + @Override + protected InternalCDORevision loadRevision(CDOID id, int referenceChunk) + { + return loadRevisions(Collections.singleton(id), referenceChunk).get(0); + } + + @Override + protected InternalCDORevision loadRevisionByTime(CDOID id, int referenceChunk, long timeStamp) + { + return loadRevisionsByTime(Collections.singleton(id), referenceChunk, timeStamp).get(0); + } + + @Override + protected InternalCDORevision loadRevisionByVersion(CDOID id, int referenceChunk, int version) + { + return session.getSessionProtocol().loadRevisionByVersion(id, referenceChunk, version); + } + + @Override + protected List loadRevisions(Collection ids, int referenceChunk) + { + return session.getSessionProtocol().loadRevisions(ids, referenceChunk); + } + + @Override + protected List loadRevisionsByTime(Collection ids, int referenceChunk, long timeStamp) + { + return session.getSessionProtocol().loadRevisionsByTime(ids, referenceChunk, timeStamp); + } + + @Override + protected void acquireAtomicRequestLock(Object key) + { + try + { + lockmanager.lock(LockType.WRITE, key, this, RWLockManager.WAIT); + } + catch (InterruptedException ex) + { + throw WrappedException.wrap(ex); + } + } + + @Override + protected void releaseAtomicRequestLock(Object key) + { + lockmanager.unlock(LockType.WRITE, key, singletonCollection); + } +} diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/CDORevisionPrefetchingPolicyImpl.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/CDORevisionPrefetchingPolicyImpl.java index ca09d86db6..19d4c234bb 100644 --- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/CDORevisionPrefetchingPolicyImpl.java +++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/internal/cdo/view/CDORevisionPrefetchingPolicyImpl.java @@ -13,7 +13,7 @@ package org.eclipse.emf.internal.cdo.view; import org.eclipse.emf.cdo.common.id.CDOID; import org.eclipse.emf.cdo.common.revision.CDOList; -import org.eclipse.emf.cdo.session.CDORevisionManager; +import org.eclipse.emf.cdo.common.revision.CDORevisionResolver; import org.eclipse.emf.cdo.view.CDORevisionPrefetchingPolicy; import org.eclipse.emf.ecore.EObject; @@ -37,7 +37,7 @@ public class CDORevisionPrefetchingPolicyImpl implements CDORevisionPrefetchingP this.chunkSize = chunkSize; } - public Collection loadAhead(CDORevisionManager revisionManager, EObject eObject, EStructuralFeature feature, + public Collection loadAhead(CDORevisionResolver revisionManager, EObject eObject, EStructuralFeature feature, CDOList list, int accessIndex, CDOID accessID) { if (chunkSize > 1 && !revisionManager.containsRevision(accessID)) diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/CDOElementProxy.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/CDOElementProxy.java index 96d1a6a3d9..551101da50 100644 --- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/CDOElementProxy.java +++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/CDOElementProxy.java @@ -12,7 +12,7 @@ package org.eclipse.emf.spi.cdo; import org.eclipse.emf.cdo.common.revision.CDORevision; -import org.eclipse.emf.cdo.session.CDORevisionManager; +import org.eclipse.emf.cdo.common.revision.CDORevisionResolver; import org.eclipse.emf.ecore.EStructuralFeature; @@ -25,5 +25,8 @@ public interface CDOElementProxy { public int getIndex(); - public Object resolve(CDORevisionManager revisionManager, CDORevision revision, EStructuralFeature feature, int index); + /** + * @since 3.0 + */ + public Object resolve(CDORevisionResolver revisionManager, CDORevision revision, EStructuralFeature feature, int index); } diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/InternalCDORevisionManager.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/InternalCDORevisionManager.java deleted file mode 100644 index e7fb130d46..0000000000 --- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/InternalCDORevisionManager.java +++ /dev/null @@ -1,46 +0,0 @@ -/** - * Copyright (c) 2004 - 2009 Eike Stepper (Berlin, Germany) and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * Eike Stepper - initial API and implementation - */ -package org.eclipse.emf.spi.cdo; - -import org.eclipse.emf.cdo.common.revision.CDORevision; -import org.eclipse.emf.cdo.session.CDORevisionManager; -import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevisionResolver; -import org.eclipse.emf.cdo.view.CDOFetchRuleManager; - -import org.eclipse.emf.ecore.EStructuralFeature; - -/** - * @author Eike Stepper - * @since 3.0 - */ -public interface InternalCDORevisionManager extends CDORevisionManager, InternalCDORevisionResolver -{ - public CDOFetchRuleManager getRuleManager(); - - public void setRuleManager(CDOFetchRuleManager ruleManager); - - /** - * @param revision - * @param feature - * @param accessIndex - * Index of the item access at the client (with modifications) - * @param fetchIndex - * Index of the item access at the server (without any modifications) - * @param fromIndex - * Load objects at the client from fromIndex (inclusive) - * @param toIndex - * Load objects at the client to toIndex (inclusive) - */ - public Object loadChunkByRange(CDORevision revision, EStructuralFeature feature, int accessIndex, int fetchIndex, - int fromIndex, int toIndex); - - public Object resolveElementProxy(CDORevision revision, EStructuralFeature feature, int accessIndex, int serverIndex); -} diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/InternalCDOSession.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/InternalCDOSession.java index 4d1e3e0523..255ad54640 100644 --- a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/InternalCDOSession.java +++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/InternalCDOSession.java @@ -34,7 +34,7 @@ public interface InternalCDOSession extends CDOSession, CDOIDObjectFactory, /** * @since 3.0 */ - public InternalCDORevisionManager getRevisionManager(); + public InternalCDOXXRevisionManager getRevisionManager(); public void setExceptionHandler(CDOSession.ExceptionHandler exceptionHandler); diff --git a/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/InternalCDOXXRevisionManager.java b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/InternalCDOXXRevisionManager.java new file mode 100644 index 0000000000..921b76f2f0 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo/src/org/eclipse/emf/spi/cdo/InternalCDOXXRevisionManager.java @@ -0,0 +1,46 @@ +/** + * Copyright (c) 2004 - 2009 Eike Stepper (Berlin, Germany) and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Eike Stepper - initial API and implementation + */ +package org.eclipse.emf.spi.cdo; + +import org.eclipse.emf.cdo.common.revision.CDORevision; +import org.eclipse.emf.cdo.common.revision.CDORevisionResolver; +import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevisionResolver; +import org.eclipse.emf.cdo.view.CDOFetchRuleManager; + +import org.eclipse.emf.ecore.EStructuralFeature; + +/** + * @author Eike Stepper + * @since 3.0 + */ +public interface InternalCDOXXRevisionManager extends CDORevisionResolver, InternalCDORevisionResolver +{ + public CDOFetchRuleManager getRuleManager(); + + public void setRuleManager(CDOFetchRuleManager ruleManager); + + /** + * @param revision + * @param feature + * @param accessIndex + * Index of the item access at the client (with modifications) + * @param fetchIndex + * Index of the item access at the server (without any modifications) + * @param fromIndex + * Load objects at the client from fromIndex (inclusive) + * @param toIndex + * Load objects at the client to toIndex (inclusive) + */ + public Object loadChunkByRange(CDORevision revision, EStructuralFeature feature, int accessIndex, int fetchIndex, + int fromIndex, int toIndex); + + public Object resolveElementProxy(CDORevision revision, EStructuralFeature feature, int accessIndex, int serverIndex); +} -- cgit v1.2.3