Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/branch/CDOBranchManagerImpl.java')
-rw-r--r--plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/branch/CDOBranchManagerImpl.java502
1 files changed, 251 insertions, 251 deletions
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/branch/CDOBranchManagerImpl.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/branch/CDOBranchManagerImpl.java
index 5f46a60958..94e69d80aa 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/branch/CDOBranchManagerImpl.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/branch/CDOBranchManagerImpl.java
@@ -1,251 +1,251 @@
-/*
- * Copyright (c) 2004 - 2011 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.common.branch;
-
-import org.eclipse.emf.cdo.common.branch.CDOBranch;
-import org.eclipse.emf.cdo.common.branch.CDOBranchCreatedEvent;
-import org.eclipse.emf.cdo.common.branch.CDOBranchHandler;
-import org.eclipse.emf.cdo.common.branch.CDOBranchManager;
-import org.eclipse.emf.cdo.common.branch.CDOBranchPoint;
-import org.eclipse.emf.cdo.common.util.CDOTimeProvider;
-import org.eclipse.emf.cdo.spi.common.branch.InternalCDOBranch;
-import org.eclipse.emf.cdo.spi.common.branch.InternalCDOBranchManager;
-import org.eclipse.emf.cdo.spi.common.branch.InternalCDOBranchManager.BranchLoader.BranchInfo;
-
-import org.eclipse.net4j.util.collection.Pair;
-import org.eclipse.net4j.util.container.Container;
-import org.eclipse.net4j.util.event.Event;
-import org.eclipse.net4j.util.ref.ReferenceValueMap;
-import org.eclipse.net4j.util.ref.ReferenceValueMap.Soft;
-
-import java.util.Map;
-
-/**
- * @author Eike Stepper
- */
-public class CDOBranchManagerImpl extends Container<CDOBranch> implements InternalCDOBranchManager
-{
- private BranchLoader branchLoader;
-
- private CDOTimeProvider timeProvider;
-
- private InternalCDOBranch mainBranch;
-
- private Map<Integer, InternalCDOBranch> branches = createMap();
-
- public CDOBranchManagerImpl()
- {
- }
-
- public BranchLoader getBranchLoader()
- {
- return branchLoader;
- }
-
- public void setBranchLoader(BranchLoader branchLoader)
- {
- checkInactive();
- this.branchLoader = branchLoader;
- }
-
- public CDOTimeProvider getTimeProvider()
- {
- return timeProvider;
- }
-
- public void setTimeProvider(CDOTimeProvider timeProvider)
- {
- this.timeProvider = timeProvider;
- }
-
- public void initMainBranch(boolean local, long timeStamp)
- {
- mainBranch = new CDOBranchImpl.Main(this, local, timeStamp);
- }
-
- public void handleBranchCreated(InternalCDOBranch branch)
- {
- CDOBranchPoint base = branch.getBase();
- InternalCDOBranch baseBranch = (InternalCDOBranch)base.getBranch();
- baseBranch.addChild(branch);
-
- fireEvent(new BranchCreatedEvent(branch));
- }
-
- public CDOBranch[] getElements()
- {
- return new CDOBranch[] { getMainBranch() };
- }
-
- public InternalCDOBranch getMainBranch()
- {
- checkActive();
- return mainBranch;
- }
-
- public InternalCDOBranch getBranch(int branchID)
- {
- checkActive();
- if (branchID == CDOBranch.MAIN_BRANCH_ID)
- {
- return mainBranch;
- }
-
- InternalCDOBranch branch;
- synchronized (branches)
- {
- branch = branches.get(branchID);
- if (branch == null)
- {
- branch = new CDOBranchImpl(this, branchID, null, null);
- putBranch(branch);
- }
- }
-
- return branch;
- }
-
- public InternalCDOBranch getBranch(int id, String name, InternalCDOBranch baseBranch, long baseTimeStamp)
- {
- synchronized (branches)
- {
- InternalCDOBranch branch = branches.get(id);
- if (branch == null)
- {
- branch = new CDOBranchImpl(this, id, name, baseBranch.getPoint(baseTimeStamp));
- putBranch(branch);
- }
- else if (branch.isProxy())
- {
- branch.setBranchInfo(name, baseBranch, baseTimeStamp);
- }
-
- return branch;
- }
- }
-
- public InternalCDOBranch getBranch(int id, BranchInfo branchInfo)
- {
- String name = branchInfo.getName();
- InternalCDOBranch baseBranch = getBranch(branchInfo.getBaseBranchID());
- long baseTimeStamp = branchInfo.getBaseTimeStamp();
- return getBranch(id, name, baseBranch, baseTimeStamp);
- }
-
- public InternalCDOBranch getBranch(String path)
- {
- if (path.startsWith(CDOBranch.PATH_SEPARATOR))
- {
- path = path.substring(1);
- }
-
- int sep = path.indexOf(CDOBranch.PATH_SEPARATOR);
- if (sep == -1)
- {
- if (CDOBranch.MAIN_BRANCH_NAME.equals(path))
- {
- return mainBranch;
- }
-
- return null;
- }
-
- String name = path.substring(0, sep);
- if (CDOBranch.MAIN_BRANCH_NAME.equals(name))
- {
- String rest = path.substring(sep + 1);
- return mainBranch.getBranch(rest);
- }
-
- return null;
- }
-
- public int getBranches(int startID, int endID, CDOBranchHandler handler)
- {
- checkActive();
- return branchLoader.loadBranches(startID, endID, handler);
- }
-
- public InternalCDOBranch createBranch(int branchID, String name, InternalCDOBranch baseBranch, long baseTimeStamp)
- {
- checkActive();
-
- Pair<Integer, Long> result = branchLoader.createBranch(branchID, new BranchInfo(name, baseBranch.getID(),
- baseTimeStamp));
- branchID = result.getElement1();
- baseTimeStamp = result.getElement2();
-
- CDOBranchPoint base = baseBranch.getPoint(baseTimeStamp);
- InternalCDOBranch branch = new CDOBranchImpl(this, branchID, name, base);
- synchronized (branches)
- {
- putBranch(branch);
- }
-
- handleBranchCreated(branch);
- return branch;
- }
-
- /**
- * {@link #branches} must be synchronized by caller!
- */
- private boolean putBranch(InternalCDOBranch branch)
- {
- int id = branch.getID();
- if (branches.containsKey(id))
- {
- return false;
- }
-
- branches.put(id, branch);
- return true;
- }
-
- protected Soft<Integer, InternalCDOBranch> createMap()
- {
- return new ReferenceValueMap.Soft<Integer, InternalCDOBranch>();
- }
-
- @Override
- protected void doBeforeActivate() throws Exception
- {
- super.doBeforeActivate();
- checkState(branchLoader, "branchLoader"); //$NON-NLS-1$
- checkState(timeProvider, "timeProvider"); //$NON-NLS-1$
- }
-
- /**
- * @author Eike Stepper
- */
- private static final class BranchCreatedEvent extends Event implements CDOBranchCreatedEvent
- {
- private static final long serialVersionUID = 1L;
-
- private CDOBranch branch;
-
- public BranchCreatedEvent(CDOBranch branch)
- {
- super(branch.getBranchManager());
- this.branch = branch;
- }
-
- @Override
- public CDOBranchManager getSource()
- {
- return (CDOBranchManager)super.getSource();
- }
-
- public CDOBranch getBranch()
- {
- return branch;
- }
- }
-}
+/*
+ * 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.internal.common.branch;
+
+import org.eclipse.emf.cdo.common.branch.CDOBranch;
+import org.eclipse.emf.cdo.common.branch.CDOBranchCreatedEvent;
+import org.eclipse.emf.cdo.common.branch.CDOBranchHandler;
+import org.eclipse.emf.cdo.common.branch.CDOBranchManager;
+import org.eclipse.emf.cdo.common.branch.CDOBranchPoint;
+import org.eclipse.emf.cdo.common.util.CDOTimeProvider;
+import org.eclipse.emf.cdo.spi.common.branch.InternalCDOBranch;
+import org.eclipse.emf.cdo.spi.common.branch.InternalCDOBranchManager;
+import org.eclipse.emf.cdo.spi.common.branch.InternalCDOBranchManager.BranchLoader.BranchInfo;
+
+import org.eclipse.net4j.util.collection.Pair;
+import org.eclipse.net4j.util.container.Container;
+import org.eclipse.net4j.util.event.Event;
+import org.eclipse.net4j.util.ref.ReferenceValueMap;
+import org.eclipse.net4j.util.ref.ReferenceValueMap.Soft;
+
+import java.util.Map;
+
+/**
+ * @author Eike Stepper
+ */
+public class CDOBranchManagerImpl extends Container<CDOBranch> implements InternalCDOBranchManager
+{
+ private BranchLoader branchLoader;
+
+ private CDOTimeProvider timeProvider;
+
+ private InternalCDOBranch mainBranch;
+
+ private Map<Integer, InternalCDOBranch> branches = createMap();
+
+ public CDOBranchManagerImpl()
+ {
+ }
+
+ public BranchLoader getBranchLoader()
+ {
+ return branchLoader;
+ }
+
+ public void setBranchLoader(BranchLoader branchLoader)
+ {
+ checkInactive();
+ this.branchLoader = branchLoader;
+ }
+
+ public CDOTimeProvider getTimeProvider()
+ {
+ return timeProvider;
+ }
+
+ public void setTimeProvider(CDOTimeProvider timeProvider)
+ {
+ this.timeProvider = timeProvider;
+ }
+
+ public void initMainBranch(boolean local, long timeStamp)
+ {
+ mainBranch = new CDOBranchImpl.Main(this, local, timeStamp);
+ }
+
+ public void handleBranchCreated(InternalCDOBranch branch)
+ {
+ CDOBranchPoint base = branch.getBase();
+ InternalCDOBranch baseBranch = (InternalCDOBranch)base.getBranch();
+ baseBranch.addChild(branch);
+
+ fireEvent(new BranchCreatedEvent(branch));
+ }
+
+ public CDOBranch[] getElements()
+ {
+ return new CDOBranch[] { getMainBranch() };
+ }
+
+ public InternalCDOBranch getMainBranch()
+ {
+ checkActive();
+ return mainBranch;
+ }
+
+ public InternalCDOBranch getBranch(int branchID)
+ {
+ checkActive();
+ if (branchID == CDOBranch.MAIN_BRANCH_ID)
+ {
+ return mainBranch;
+ }
+
+ InternalCDOBranch branch;
+ synchronized (branches)
+ {
+ branch = branches.get(branchID);
+ if (branch == null)
+ {
+ branch = new CDOBranchImpl(this, branchID, null, null);
+ putBranch(branch);
+ }
+ }
+
+ return branch;
+ }
+
+ public InternalCDOBranch getBranch(int id, String name, InternalCDOBranch baseBranch, long baseTimeStamp)
+ {
+ synchronized (branches)
+ {
+ InternalCDOBranch branch = branches.get(id);
+ if (branch == null)
+ {
+ branch = new CDOBranchImpl(this, id, name, baseBranch.getPoint(baseTimeStamp));
+ putBranch(branch);
+ }
+ else if (branch.isProxy())
+ {
+ branch.setBranchInfo(name, baseBranch, baseTimeStamp);
+ }
+
+ return branch;
+ }
+ }
+
+ public InternalCDOBranch getBranch(int id, BranchInfo branchInfo)
+ {
+ String name = branchInfo.getName();
+ InternalCDOBranch baseBranch = getBranch(branchInfo.getBaseBranchID());
+ long baseTimeStamp = branchInfo.getBaseTimeStamp();
+ return getBranch(id, name, baseBranch, baseTimeStamp);
+ }
+
+ public InternalCDOBranch getBranch(String path)
+ {
+ if (path.startsWith(CDOBranch.PATH_SEPARATOR))
+ {
+ path = path.substring(1);
+ }
+
+ int sep = path.indexOf(CDOBranch.PATH_SEPARATOR);
+ if (sep == -1)
+ {
+ if (CDOBranch.MAIN_BRANCH_NAME.equals(path))
+ {
+ return mainBranch;
+ }
+
+ return null;
+ }
+
+ String name = path.substring(0, sep);
+ if (CDOBranch.MAIN_BRANCH_NAME.equals(name))
+ {
+ String rest = path.substring(sep + 1);
+ return mainBranch.getBranch(rest);
+ }
+
+ return null;
+ }
+
+ public int getBranches(int startID, int endID, CDOBranchHandler handler)
+ {
+ checkActive();
+ return branchLoader.loadBranches(startID, endID, handler);
+ }
+
+ public InternalCDOBranch createBranch(int branchID, String name, InternalCDOBranch baseBranch, long baseTimeStamp)
+ {
+ checkActive();
+
+ Pair<Integer, Long> result = branchLoader.createBranch(branchID, new BranchInfo(name, baseBranch.getID(),
+ baseTimeStamp));
+ branchID = result.getElement1();
+ baseTimeStamp = result.getElement2();
+
+ CDOBranchPoint base = baseBranch.getPoint(baseTimeStamp);
+ InternalCDOBranch branch = new CDOBranchImpl(this, branchID, name, base);
+ synchronized (branches)
+ {
+ putBranch(branch);
+ }
+
+ handleBranchCreated(branch);
+ return branch;
+ }
+
+ /**
+ * {@link #branches} must be synchronized by caller!
+ */
+ private boolean putBranch(InternalCDOBranch branch)
+ {
+ int id = branch.getID();
+ if (branches.containsKey(id))
+ {
+ return false;
+ }
+
+ branches.put(id, branch);
+ return true;
+ }
+
+ protected Soft<Integer, InternalCDOBranch> createMap()
+ {
+ return new ReferenceValueMap.Soft<Integer, InternalCDOBranch>();
+ }
+
+ @Override
+ protected void doBeforeActivate() throws Exception
+ {
+ super.doBeforeActivate();
+ checkState(branchLoader, "branchLoader"); //$NON-NLS-1$
+ checkState(timeProvider, "timeProvider"); //$NON-NLS-1$
+ }
+
+ /**
+ * @author Eike Stepper
+ */
+ private static final class BranchCreatedEvent extends Event implements CDOBranchCreatedEvent
+ {
+ private static final long serialVersionUID = 1L;
+
+ private CDOBranch branch;
+
+ public BranchCreatedEvent(CDOBranch branch)
+ {
+ super(branch.getBranchManager());
+ this.branch = branch;
+ }
+
+ @Override
+ public CDOBranchManager getSource()
+ {
+ return (CDOBranchManager)super.getSource();
+ }
+
+ public CDOBranch getBranch()
+ {
+ return branch;
+ }
+ }
+}

Back to the top