diff options
author | Eike Stepper | 2012-10-06 17:00:50 +0000 |
---|---|---|
committer | Eike Stepper | 2012-10-06 17:00:50 +0000 |
commit | 1fdc592c46f01f5059cef4b5ee536c2fe7b9e395 (patch) | |
tree | 3e055dd6eef5359e8ce92488e4b9486756205ccf | |
parent | 37a154024bfd5ce49557e18675cbd79cb44acd99 (diff) | |
download | cdo-1fdc592c46f01f5059cef4b5ee536c2fe7b9e395.tar.gz cdo-1fdc592c46f01f5059cef4b5ee536c2fe7b9e395.tar.xz cdo-1fdc592c46f01f5059cef4b5ee536c2fe7b9e395.zip |
[391295] Call CDOCommitInfoHandlers from CDOCommitInfoManager
https://bugs.eclipse.org/bugs/show_bug.cgi?id=391295
12 files changed, 123 insertions, 50 deletions
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/commit/CDOCommitInfoManager.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/commit/CDOCommitInfoManager.java index 9ca8039528..b0fda11af9 100644 --- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/commit/CDOCommitInfoManager.java +++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/commit/CDOCommitInfoManager.java @@ -22,7 +22,7 @@ import org.eclipse.emf.cdo.common.branch.CDOBranch; * @apiviz.landmark * @apiviz.uses {@link CDOCommitInfo} - - manages */ -public interface CDOCommitInfoManager +public interface CDOCommitInfoManager extends CDOCommitInfoProvider { /** * @since 4.2 diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/commit/CDOCommitInfoProvider.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/commit/CDOCommitInfoProvider.java new file mode 100644 index 0000000000..9d97234555 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/common/commit/CDOCommitInfoProvider.java @@ -0,0 +1,26 @@ +/* + * Copyright (c) 2004 - 2012 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.cdo.common.commit; + +/** + * Calls registered {@link CDOCommitInfoHandler commit info handlers}. + * + * @author Eike Stepper + * @since 4.2 + */ +public interface CDOCommitInfoProvider +{ + public CDOCommitInfoHandler[] getCommitInfoHandlers(); + + public void addCommitInfoHandler(CDOCommitInfoHandler handler); + + public void removeCommitInfoHandler(CDOCommitInfoHandler handler); +} diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/commit/CDOCommitInfoManagerImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/commit/CDOCommitInfoManagerImpl.java index bce1515e68..0983bc32ed 100644 --- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/commit/CDOCommitInfoManagerImpl.java +++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/commit/CDOCommitInfoManagerImpl.java @@ -16,11 +16,14 @@ import org.eclipse.emf.cdo.common.commit.CDOCommitData; import org.eclipse.emf.cdo.common.commit.CDOCommitHistory; import org.eclipse.emf.cdo.common.commit.CDOCommitInfo; import org.eclipse.emf.cdo.common.commit.CDOCommitInfoHandler; +import org.eclipse.emf.cdo.internal.common.bundle.OM; import org.eclipse.emf.cdo.spi.common.commit.CDOCommitInfoUtil; import org.eclipse.emf.cdo.spi.common.commit.InternalCDOCommitInfoManager; import org.eclipse.net4j.util.lifecycle.Lifecycle; +import java.util.ArrayList; +import java.util.List; import java.util.Map; import java.util.WeakHashMap; @@ -31,6 +34,8 @@ public class CDOCommitInfoManagerImpl extends Lifecycle implements InternalCDOCo { private CommitInfoLoader commitInfoLoader; + private List<CDOCommitInfoHandler> commitInfoHandlers = new ArrayList<CDOCommitInfoHandler>(); + private Map<CDOCommitHistory, Boolean> histories = new WeakHashMap<CDOCommitHistory, Boolean>(); public CDOCommitInfoManagerImpl() @@ -48,6 +53,51 @@ public class CDOCommitInfoManagerImpl extends Lifecycle implements InternalCDOCo this.commitInfoLoader = commitInfoLoader; } + public CDOCommitInfoHandler[] getCommitInfoHandlers() + { + synchronized (commitInfoHandlers) + { + return commitInfoHandlers.toArray(new CDOCommitInfoHandler[commitInfoHandlers.size()]); + } + } + + /** + * @since 4.0 + */ + public void addCommitInfoHandler(CDOCommitInfoHandler handler) + { + synchronized (commitInfoHandlers) + { + commitInfoHandlers.add(handler); + } + } + + /** + * @since 4.0 + */ + public void removeCommitInfoHandler(CDOCommitInfoHandler handler) + { + synchronized (commitInfoHandlers) + { + commitInfoHandlers.remove(handler); + } + } + + public void notifyCommitInfoHandlers(CDOCommitInfo commitInfo) + { + for (CDOCommitInfoHandler handler : getCommitInfoHandlers()) + { + try + { + handler.handleCommitInfo(commitInfo); + } + catch (Exception ex) + { + OM.LOG.error(ex); + } + } + } + public CDOCommitInfo createCommitInfo(CDOBranch branch, long timeStamp, long previousTimeStamp, String userID, String comment, CDOCommitData commitData) { @@ -68,12 +118,14 @@ public class CDOCommitInfoManagerImpl extends Lifecycle implements InternalCDOCo { if (history.getBranch() == branch) { + history.activate(); return history; } } CDOCommitHistory history = new CDOCommitHistory(this, branch); histories.put(history, Boolean.TRUE); + history.activate(); return history; } } diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/commit/InternalCDOCommitInfoManager.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/commit/InternalCDOCommitInfoManager.java index 0e2d1ab8ae..5d33eeb9d6 100644 --- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/commit/InternalCDOCommitInfoManager.java +++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/spi/common/commit/InternalCDOCommitInfoManager.java @@ -33,6 +33,11 @@ public interface InternalCDOCommitInfoManager extends CDOCommitInfoManager, ILif public void setCommitInfoLoader(CommitInfoLoader commitInfoLoader); /** + * @since 4.2 + */ + public void notifyCommitInfoHandlers(CDOCommitInfo commitInfo); + + /** * @since 4.0 */ public CDOCommitInfo createCommitInfo(CDOBranch branch, long timeStamp, long previousTimeStamp, String userID, diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/DelegatingRepository.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/DelegatingRepository.java index 5eca7e55f3..6fa2412769 100644 --- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/DelegatingRepository.java +++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/DelegatingRepository.java @@ -391,16 +391,19 @@ public abstract class DelegatingRepository implements InternalRepository return getDelegate().getPackageRegistryCommitLock(); } + @Deprecated public CDOCommitInfoHandler[] getCommitInfoHandlers() { return getDelegate().getCommitInfoHandlers(); } + @Deprecated public void addCommitInfoHandler(CDOCommitInfoHandler handler) { getDelegate().addCommitInfoHandler(handler); } + @Deprecated public void removeCommitInfoHandler(CDOCommitInfoHandler handler) { getDelegate().removeCommitInfoHandler(handler); diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/Repository.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/Repository.java index 81ae2e0b40..52bbe71196 100644 --- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/Repository.java +++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/internal/server/Repository.java @@ -188,8 +188,6 @@ public class Repository extends Container<Object> implements InternalRepository private List<WriteAccessHandler> writeAccessHandlers = new ArrayList<WriteAccessHandler>(); - private List<CDOCommitInfoHandler> commitInfoHandlers = new ArrayList<CDOCommitInfoHandler>(); - private EPackage[] initialPackages; // Bugzilla 297940 @@ -913,59 +911,36 @@ public class Repository extends Container<Object> implements InternalRepository distributor.run(InternalCommitContext.OPS, commitContext, monitor); } - public CDOCommitInfoHandler[] getCommitInfoHandlers() + @Deprecated + public void sendCommitNotification(InternalSession sender, CDOCommitInfo commitInfo) { - synchronized (commitInfoHandlers) - { - return commitInfoHandlers.toArray(new CDOCommitInfoHandler[commitInfoHandlers.size()]); - } + sendCommitNotification(sender, commitInfo, true); } - /** - * @since 4.0 - */ - public void addCommitInfoHandler(CDOCommitInfoHandler handler) + @Deprecated + public CDOCommitInfoHandler[] getCommitInfoHandlers() { - synchronized (commitInfoHandlers) - { - if (!commitInfoHandlers.contains(handler)) - { - commitInfoHandlers.add(handler); - } - } + return commitInfoManager.getCommitInfoHandlers(); } - /** - * @since 4.0 - */ - public void removeCommitInfoHandler(CDOCommitInfoHandler handler) + @Deprecated + public void addCommitInfoHandler(CDOCommitInfoHandler handler) { - synchronized (commitInfoHandlers) - { - commitInfoHandlers.remove(handler); - } + commitInfoManager.addCommitInfoHandler(handler); } @Deprecated - public void sendCommitNotification(InternalSession sender, CDOCommitInfo commitInfo) + public void removeCommitInfoHandler(CDOCommitInfoHandler handler) { - sendCommitNotification(sender, commitInfo, true); + commitInfoManager.removeCommitInfoHandler(handler); } public void sendCommitNotification(InternalSession sender, CDOCommitInfo commitInfo, boolean clearResourcePathCache) { - sessionManager.sendCommitNotification(sender, commitInfo, clearResourcePathCache); - - for (CDOCommitInfoHandler handler : getCommitInfoHandlers()) + if (!commitInfo.isEmpty()) { - try - { - handler.handleCommitInfo(commitInfo); - } - catch (Exception ex) - { - OM.LOG.error(ex); - } + sessionManager.sendCommitNotification(sender, commitInfo, clearResourcePathCache); + commitInfoManager.notifyCommitInfoHandlers(commitInfo); } } diff --git a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/server/IRepository.java b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/server/IRepository.java index 70faf84169..1d5bb1a543 100644 --- a/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/server/IRepository.java +++ b/plugins/org.eclipse.emf.cdo.server/src/org/eclipse/emf/cdo/server/IRepository.java @@ -13,6 +13,7 @@ package org.eclipse.emf.cdo.server; import org.eclipse.emf.cdo.common.CDOCommonRepository; import org.eclipse.emf.cdo.common.branch.CDOBranchManager; import org.eclipse.emf.cdo.common.commit.CDOCommitInfoHandler; +import org.eclipse.emf.cdo.common.commit.CDOCommitInfoManager; import org.eclipse.emf.cdo.common.lock.IDurableLockingManager; import org.eclipse.emf.cdo.common.model.CDOPackageRegistry; import org.eclipse.emf.cdo.common.revision.CDORevision; @@ -120,17 +121,23 @@ public interface IRepository extends CDOCommonRepository, IQueryHandlerProvider, /** * @since 4.1 + * @deprecated As of 4.2 call {@link CDOCommitInfoManager#getCommitInfoHandlers()} */ + @Deprecated public CDOCommitInfoHandler[] getCommitInfoHandlers(); /** * @since 4.0 + * @deprecated As of 4.2 call {@link CDOCommitInfoManager#addCommitInfoHandler(CDOCommitInfoHandler)} */ + @Deprecated public void addCommitInfoHandler(CDOCommitInfoHandler handler); /** * @since 4.0 + * @deprecated As of 4.2 call {@link CDOCommitInfoManager#removeCommitInfoHandler(CDOCommitInfoHandler)} */ + @Deprecated public void removeCommitInfoHandler(CDOCommitInfoHandler handler); /** diff --git a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/CommitInfoTest.java b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/CommitInfoTest.java index f9fa373569..1cf034564f 100644 --- a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/CommitInfoTest.java +++ b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/CommitInfoTest.java @@ -982,7 +982,7 @@ public class CommitInfoTest extends AbstractCDOTest public void testLogThroughCommitInfoHandler() throws Exception { ByteArrayOutputStream baos = new ByteArrayOutputStream(); - getRepository().addCommitInfoHandler(new TextCommitInfoLog(baos)); + getRepository().getCommitInfoManager().addCommitInfoHandler(new TextCommitInfoLog(baos)); CDOSession session = openSession(); CDOTransaction transaction = session.openTransaction(); @@ -1005,7 +1005,7 @@ public class CommitInfoTest extends AbstractCDOTest ByteArrayOutputStream baos = new ByteArrayOutputStream(); AsyncCommitInfoHandler log = new AsyncCommitInfoHandler(new TextCommitInfoLog(baos)); log.activate(); - getRepository().addCommitInfoHandler(log); + getRepository().getCommitInfoManager().addCommitInfoHandler(log); CDOSession session = openSession(); CDOTransaction transaction = session.openTransaction(); diff --git a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/SessionTest.java b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/SessionTest.java index 741d9c074c..6df36ff5a7 100644 --- a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/SessionTest.java +++ b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/SessionTest.java @@ -280,7 +280,9 @@ public class SessionTest extends AbstractCDOTest CDOSession session = openSession("authrepo2"); assertEquals(USER_ID, session.getUserID()); - assertEquals(USER_ID, repository.getSessionManager().getSessions()[0].getUserID()); + + ISession serverSession = repository.getSessionManager().getSession(session.getSessionID()); + assertEquals(USER_ID, serverSession.getUserID()); session.close(); } diff --git a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/TransactionTest.java b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/TransactionTest.java index dc95536b80..bdc4bd1e84 100644 --- a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/TransactionTest.java +++ b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/TransactionTest.java @@ -14,10 +14,10 @@ package org.eclipse.emf.cdo.tests; import org.eclipse.emf.cdo.CDOObject; import org.eclipse.emf.cdo.common.commit.CDOCommitInfo; import org.eclipse.emf.cdo.common.commit.CDOCommitInfoHandler; +import org.eclipse.emf.cdo.common.commit.CDOCommitInfoManager; import org.eclipse.emf.cdo.eresource.CDOResource; import org.eclipse.emf.cdo.internal.net4j.protocol.CommitTransactionRequest; import org.eclipse.emf.cdo.net4j.CDONet4jSession; -import org.eclipse.emf.cdo.server.IRepository; import org.eclipse.emf.cdo.session.CDOSession; import org.eclipse.emf.cdo.spi.common.commit.CDOCommitInfoUtil; import org.eclipse.emf.cdo.tests.model1.Category; @@ -50,7 +50,7 @@ import java.util.concurrent.TimeUnit; /** * See bug 213782, bug 201366 - * + * * @author Simon McDuff */ public class TransactionTest extends AbstractCDOTest @@ -476,8 +476,8 @@ public class TransactionTest extends AbstractCDOTest } }; - IRepository repository = getRepository(); - repository.addCommitInfoHandler(handler); + CDOCommitInfoManager commitInfoManager = getRepository().getCommitInfoManager(); + commitInfoManager.addCommitInfoHandler(handler); try { @@ -495,7 +495,7 @@ public class TransactionTest extends AbstractCDOTest } finally { - repository.removeCommitInfoHandler(handler); + commitInfoManager.removeCommitInfoHandler(handler); } } diff --git a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/config/impl/RepositoryConfig.java b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/config/impl/RepositoryConfig.java index 9f41e84552..955d547ee4 100644 --- a/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/config/impl/RepositoryConfig.java +++ b/plugins/org.eclipse.emf.cdo.tests/src/org/eclipse/emf/cdo/tests/config/impl/RepositoryConfig.java @@ -15,6 +15,7 @@ import org.eclipse.emf.cdo.common.CDOCommonRepository.IDGenerationLocation; import org.eclipse.emf.cdo.common.CDOCommonView; import org.eclipse.emf.cdo.common.commit.CDOCommitInfo; import org.eclipse.emf.cdo.common.commit.CDOCommitInfoHandler; +import org.eclipse.emf.cdo.common.commit.CDOCommitInfoManager; import org.eclipse.emf.cdo.common.revision.CDORevisionUtil; import org.eclipse.emf.cdo.internal.common.revision.NOOPRevisionCache; import org.eclipse.emf.cdo.internal.net4j.CDONet4jSessionConfigurationImpl; @@ -478,9 +479,10 @@ public abstract class RepositoryConfig extends Config implements IRepositoryConf repository.removeHandler(handler); } - for (CDOCommitInfoHandler handler : repository.getCommitInfoHandlers()) + CDOCommitInfoManager commitInfoManager = repository.getCommitInfoManager(); + for (CDOCommitInfoHandler handler : commitInfoManager.getCommitInfoHandlers()) { - repository.removeCommitInfoHandler(handler); + commitInfoManager.removeCommitInfoHandler(handler); } } } 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 6a0ed8cf4b..6be2ac5a09 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 @@ -1150,6 +1150,7 @@ public abstract class CDOSessionImpl extends CDOTransactionContainerImpl impleme if (success) { fireInvalidationEvent(sender, commitInfo); + commitInfoManager.notifyCommitInfoHandlers(commitInfo); } for (InternalCDOView view : getViews()) |