From e2cfa9dd055a2533ff7282ffa9abcda151a4c751 Mon Sep 17 00:00:00 2001 From: Eike Stepper Date: Sun, 28 Feb 2010 10:07:36 +0000 Subject: [256936] Support for Offline Mode https://bugs.eclipse.org/bugs/show_bug.cgi?id=256936 --- .../net4j/protocol/CDOClientIndication.java | 7 +++ .../internal/net4j/protocol/CDOClientProtocol.java | 12 +++- .../internal/net4j/protocol/CDOClientRequest.java | 7 +++ .../net4j/protocol/CloneRepositoryRequest.java | 70 ---------------------- .../protocol/CommitNotificationIndication.java | 59 +----------------- .../net4j/protocol/CommitTransactionRequest.java | 7 +++ .../net4j/protocol/LoadBranchesRequest.java | 60 +++++++++++++++++++ .../net4j/protocol/SyncRepositoryRequest.java | 64 ++++++++++++++++++++ 8 files changed, 155 insertions(+), 131 deletions(-) delete mode 100644 plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CloneRepositoryRequest.java create mode 100644 plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/LoadBranchesRequest.java create mode 100644 plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/SyncRepositoryRequest.java (limited to 'plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse') diff --git a/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CDOClientIndication.java b/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CDOClientIndication.java index e7abd2bf59..fee17792aa 100644 --- a/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CDOClientIndication.java +++ b/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CDOClientIndication.java @@ -12,6 +12,7 @@ package org.eclipse.emf.cdo.internal.net4j.protocol; import org.eclipse.emf.cdo.common.branch.CDOBranchManager; +import org.eclipse.emf.cdo.common.commit.CDOCommitInfoManager; import org.eclipse.emf.cdo.common.io.CDODataInput; import org.eclipse.emf.cdo.common.model.CDOPackageRegistry; import org.eclipse.emf.cdo.common.revision.CDOListFactory; @@ -78,6 +79,12 @@ public abstract class CDOClientIndication extends Indication return getSession().getBranchManager(); } + @Override + protected CDOCommitInfoManager getCommitInfoManager() + { + return getSession().getCommitInfoManager(); + } + @Override protected CDORevisionFactory getRevisionFactory() { diff --git a/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CDOClientProtocol.java b/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CDOClientProtocol.java index 6f2f77345d..69f227cb07 100644 --- a/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CDOClientProtocol.java +++ b/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CDOClientProtocol.java @@ -13,6 +13,7 @@ package org.eclipse.emf.cdo.internal.net4j.protocol; import org.eclipse.emf.cdo.CDOObject; import org.eclipse.emf.cdo.common.CDOCommonSession.Options.PassiveUpdateMode; import org.eclipse.emf.cdo.common.branch.CDOBranch; +import org.eclipse.emf.cdo.common.branch.CDOBranchHandler; import org.eclipse.emf.cdo.common.branch.CDOBranchPoint; import org.eclipse.emf.cdo.common.branch.CDOBranchVersion; import org.eclipse.emf.cdo.common.commit.CDOCommitData; @@ -26,7 +27,7 @@ import org.eclipse.emf.cdo.internal.net4j.bundle.OM; import org.eclipse.emf.cdo.session.CDOSession; import org.eclipse.emf.cdo.session.remote.CDORemoteSession; import org.eclipse.emf.cdo.session.remote.CDORemoteSessionMessage; -import org.eclipse.emf.cdo.spi.common.CDOCloningContext; +import org.eclipse.emf.cdo.spi.common.CDOReplicationContext; import org.eclipse.emf.cdo.spi.common.model.InternalCDOPackageUnit; import org.eclipse.emf.cdo.spi.common.revision.InternalCDORevision; import org.eclipse.emf.cdo.spi.common.revision.RevisionInfo; @@ -122,6 +123,11 @@ public class CDOClientProtocol extends SignalProtocol implements CDO return send(new LoadSubBranchesRequest(this, branchID)); } + public int loadBranches(int startID, int endID, CDOBranchHandler handler) + { + return send(new LoadBranchesRequest(this, startID, endID, handler)); + } + public void loadCommitInfos(CDOBranch branch, long startTime, long endTime, CDOCommitInfoHandler handler) { send(new LoadCommitInfosRequest(this, branch, startTime, endTime, handler)); @@ -291,9 +297,9 @@ public class CDOClientProtocol extends SignalProtocol implements CDO return send(new UnsubscribeRemoteSessionsRequest(this)); } - public void cloneRepository(CDOCloningContext context) + public void syncRepository(CDOReplicationContext context) { - send(new CloneRepositoryRequest(this, context)); + send(new SyncRepositoryRequest(this, context)); } @Override diff --git a/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CDOClientRequest.java b/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CDOClientRequest.java index e875e56b4f..85f9dbc091 100644 --- a/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CDOClientRequest.java +++ b/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CDOClientRequest.java @@ -12,6 +12,7 @@ package org.eclipse.emf.cdo.internal.net4j.protocol; import org.eclipse.emf.cdo.common.branch.CDOBranchManager; +import org.eclipse.emf.cdo.common.commit.CDOCommitInfoManager; import org.eclipse.emf.cdo.common.id.CDOIDProvider; import org.eclipse.emf.cdo.common.io.CDODataInput; import org.eclipse.emf.cdo.common.io.CDODataOutput; @@ -101,6 +102,12 @@ public abstract class CDOClientRequest extends RequestWithConfirmation -{ - private CDOCloningContext context; - - public CloneRepositoryRequest(CDOClientProtocol protocol, CDOCloningContext context) - { - super(protocol, CDOProtocolConstants.SIGNAL_CLONE_REPOSITORY); - this.context = context; - } - - @Override - protected void requesting(CDODataOutput out) throws IOException - { - out.writeLong(context.getStartTime()); - out.writeLong(context.getEndTime()); - out.writeInt(context.getBranchID()); - } - - @Override - protected Boolean confirming(CDODataInput in) throws IOException - { - for (;;) - { - byte opcode = in.readByte(); - switch (opcode) - { - case CDOProtocolConstants.CLONING_FINISHED: - return true; - - case CDOProtocolConstants.CLONING_PACKAGE: - context.addPackageUnit(in.readCDOPackageURI()); - break; - - case CDOProtocolConstants.CLONING_BRANCH: - context.addBranch(in.readInt()); - break; - - case CDOProtocolConstants.CLONING_REVISION: - context.addRevision((InternalCDORevision)in.readCDORevision()); - break; - - default: - throw new IOException("Invalid cloning opcode: " + opcode); - } - } - } -} diff --git a/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CommitNotificationIndication.java b/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CommitNotificationIndication.java index b70472680c..0e1b48ff96 100644 --- a/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CommitNotificationIndication.java +++ b/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CommitNotificationIndication.java @@ -33,64 +33,7 @@ public class CommitNotificationIndication extends CDOClientIndication protected void indicating(CDODataInput in) throws IOException { InternalCDOSession session = getSession(); - CDOCommitInfo commitInfo = in.readCDOCommitInfo(session.getCommitInfoManager()); + CDOCommitInfo commitInfo = in.readCDOCommitInfo(); session.handleCommitNotification(commitInfo); - - // CDOBranchPoint branchPoint = in.readCDOBranchPoint(); - // if (TRACER.isEnabled()) - // { - // TRACER.format("Read branchpoint: {0}", branchPoint); //$NON-NLS-1$ - // } - // - // CDOPackageUnit[] packageUnits = in.readCDOPackageUnits(null); - // InternalCDOPackageRegistry packageRegistry = getSession().getPackageRegistry(); - // for (int i = 0; i < packageUnits.length; i++) - // { - // packageRegistry.putPackageUnit((InternalCDOPackageUnit)packageUnits[i]); - // } - // - // int size = in.readInt(); - // if (TRACER.isEnabled()) - // { - // TRACER.format("Reading {0} dirty IDs", size); //$NON-NLS-1$ - // } - // - // InternalCDOSession session = getSession(); - // Set dirtyOIDandVersions = new HashSet(); - // for (int i = 0; i < size; i++) - // { - // CDOIDAndVersion dirtyOIDandVersion = in.readCDOIDAndVersion(); - // if (TRACER.isEnabled()) - // { - // TRACER.format("Read dirty ID: {0}", dirtyOIDandVersion); //$NON-NLS-1$ - // } - // - // dirtyOIDandVersions.add(dirtyOIDandVersion); - // } - // - // size = in.readInt(); - // if (TRACER.isEnabled()) - // { - // TRACER.format("Reading {0} Deltas", size); //$NON-NLS-1$ - // } - // - // List deltas = new ArrayList(); - // for (int i = 0; i < size; i++) - // { - // CDORevisionDelta revisionDelta = in.readCDORevisionDelta(); - // deltas.add(revisionDelta); - // } - // - // size = in.readInt(); - // if (TRACER.isEnabled()) - // { - // TRACER.format("Reading {0} Detach Objects", size); //$NON-NLS-1$ - // } - // - // List detachedObjects = new ArrayList(); - // for (int i = 0; i < size; i++) - // { - // detachedObjects.add(in.readCDOID()); - // } } } diff --git a/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CommitTransactionRequest.java b/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CommitTransactionRequest.java index 8a9d66f594..8e6bf4d0c6 100644 --- a/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CommitTransactionRequest.java +++ b/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/CommitTransactionRequest.java @@ -16,6 +16,7 @@ package org.eclipse.emf.cdo.internal.net4j.protocol; import org.eclipse.emf.cdo.common.branch.CDOBranchManager; import org.eclipse.emf.cdo.common.commit.CDOCommitData; +import org.eclipse.emf.cdo.common.commit.CDOCommitInfoManager; import org.eclipse.emf.cdo.common.id.CDOID; import org.eclipse.emf.cdo.common.id.CDOIDAndVersion; import org.eclipse.emf.cdo.common.id.CDOIDMetaRange; @@ -219,6 +220,12 @@ public class CommitTransactionRequest extends RequestWithMonitoring +{ + private int startID; + + private int endID; + + private CDOBranchHandler handler; + + public LoadBranchesRequest(CDOClientProtocol protocol, int startID, int endID, CDOBranchHandler handler) + { + super(protocol, CDOProtocolConstants.SIGNAL_LOAD_BRANCHES); + this.startID = startID; + this.endID = endID; + this.handler = handler; + } + + @Override + protected void requesting(CDODataOutput out) throws IOException + { + out.writeInt(startID); + out.writeInt(endID); + } + + @Override + protected Integer confirming(CDODataInput in) throws IOException + { + int count = 0; + while (in.readByte() == CDOProtocolConstants.SYNC_BRANCH) + { + CDOBranch branch = in.readCDOBranch(); + handler.handleBranch(branch); + ++count; + } + + return count; + } +} diff --git a/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/SyncRepositoryRequest.java b/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/SyncRepositoryRequest.java new file mode 100644 index 0000000000..e03188175e --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.net4j/src/org/eclipse/emf/cdo/internal/net4j/protocol/SyncRepositoryRequest.java @@ -0,0 +1,64 @@ +/*************************************************************************** + * Copyright (c) 2004 - 2010 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.internal.net4j.protocol; + +import org.eclipse.emf.cdo.common.io.CDODataInput; +import org.eclipse.emf.cdo.common.io.CDODataOutput; +import org.eclipse.emf.cdo.common.protocol.CDOProtocolConstants; +import org.eclipse.emf.cdo.spi.common.CDOReplicationContext; + +import java.io.IOException; + +/** + * @author Eike Stepper + */ +public class SyncRepositoryRequest extends CDOClientRequest +{ + private CDOReplicationContext context; + + public SyncRepositoryRequest(CDOClientProtocol protocol, CDOReplicationContext context) + { + super(protocol, CDOProtocolConstants.SIGNAL_SYNC_REPOSITORY); + this.context = context; + } + + @Override + protected void requesting(CDODataOutput out) throws IOException + { + out.writeInt(context.getLastReplicatedBranchID()); + out.writeLong(context.getLastReplicatedCommitTime()); + } + + @Override + protected Boolean confirming(CDODataInput in) throws IOException + { + for (;;) + { + byte opcode = in.readByte(); + switch (opcode) + { + case CDOProtocolConstants.SYNC_FINISHED: + return true; + + case CDOProtocolConstants.SYNC_BRANCH: + context.handleBranch(in.readCDOBranch()); + break; + + case CDOProtocolConstants.SYNC_COMMIT: + context.handleCommitInfo(in.readCDOCommitInfo()); + break; + + default: + throw new IOException("Invalid sync opcode: " + opcode); + } + } + } +} -- cgit v1.2.3