diff options
author | Eike Stepper | 2015-02-22 08:25:54 +0000 |
---|---|---|
committer | Eike Stepper | 2015-02-22 11:50:21 +0000 |
commit | 0ab73bbb566e009d4f31655eefd3e505f8d0b47d (patch) | |
tree | 2b8b9cfbf78afde9643dba4a5a80f85fa0d07993 /plugins/org.eclipse.emf.cdo.explorer/src/org/eclipse/emf/cdo/internal/explorer/checkouts/CDOCheckoutImpl.java | |
parent | c727d78b1eeb220f1d521e64c34079f95ffd1544 (diff) | |
download | cdo-0ab73bbb566e009d4f31655eefd3e505f8d0b47d.tar.gz cdo-0ab73bbb566e009d4f31655eefd3e505f8d0b47d.tar.xz cdo-0ab73bbb566e009d4f31655eefd3e505f8d0b47d.zip |
[458349] Consolidate UI
Task-Url: https://bugs.eclipse.org/bugs/show_bug.cgi?id=458349
Diffstat (limited to 'plugins/org.eclipse.emf.cdo.explorer/src/org/eclipse/emf/cdo/internal/explorer/checkouts/CDOCheckoutImpl.java')
-rw-r--r-- | plugins/org.eclipse.emf.cdo.explorer/src/org/eclipse/emf/cdo/internal/explorer/checkouts/CDOCheckoutImpl.java | 160 |
1 files changed, 148 insertions, 12 deletions
diff --git a/plugins/org.eclipse.emf.cdo.explorer/src/org/eclipse/emf/cdo/internal/explorer/checkouts/CDOCheckoutImpl.java b/plugins/org.eclipse.emf.cdo.explorer/src/org/eclipse/emf/cdo/internal/explorer/checkouts/CDOCheckoutImpl.java index 406a78ae39..70d901a7e6 100644 --- a/plugins/org.eclipse.emf.cdo.explorer/src/org/eclipse/emf/cdo/internal/explorer/checkouts/CDOCheckoutImpl.java +++ b/plugins/org.eclipse.emf.cdo.explorer/src/org/eclipse/emf/cdo/internal/explorer/checkouts/CDOCheckoutImpl.java @@ -11,6 +11,7 @@ package org.eclipse.emf.cdo.internal.explorer.checkouts; import org.eclipse.emf.cdo.common.branch.CDOBranch; +import org.eclipse.emf.cdo.common.branch.CDOBranchManager; import org.eclipse.emf.cdo.common.branch.CDOBranchPoint; import org.eclipse.emf.cdo.common.id.CDOID; import org.eclipse.emf.cdo.common.id.CDOIDUtil; @@ -37,6 +38,8 @@ import org.eclipse.net4j.util.lifecycle.ILifecycleEvent.Kind; import org.eclipse.emf.ecore.EObject; import java.io.File; +import java.util.ArrayList; +import java.util.List; import java.util.Map; import java.util.Properties; import java.util.WeakHashMap; @@ -56,10 +59,20 @@ public abstract class CDOCheckoutImpl extends AbstractElement implements CDOChec public static final String PROP_BRANCH_PATH = "branchPath"; + public static final String PROP_BRANCH_POINTS = "branchPoints"; + public static final String PROP_REPOSITORY = "repository"; public static final String EDITOR_PROPERTIES = "editor.properties"; + private static final CDOBranchPoint[] NO_BRANCH_POINTS = {}; + + private static final int BRANCH_POINTS_MAX = 10; + + private static final String BRANCH_POINT_SEPARATOR = ","; + + private static final String BRANCH_AND_POINT_SEPARATOR = "_"; + private final Map<CDOID, String> editorIDs = new WeakHashMap<CDOID, String>(); private final IListener viewListener = new IListener() @@ -83,6 +96,8 @@ public abstract class CDOCheckoutImpl extends AbstractElement implements CDOChec private String branchPath; + private String branchPoints; + private long timeStamp; private boolean readOnly; @@ -115,8 +130,39 @@ public abstract class CDOCheckoutImpl extends AbstractElement implements CDOChec return branchID; } + public final void setBranchID(int branchID) + { + setBranchPoint(branchID, timeStamp); + } + + public String getBranchPath() + { + return branchPath; + } + + public final void setBranchPath(String branchPath) + { + if (!ObjectUtil.equals(this.branchPath, branchPath)) + { + this.branchPath = branchPath; + save(); + } + } + + public final CDOBranchPoint getBranchPoint() + { + return view; + } + + public final void setBranchPoint(CDOBranchPoint branchPoint) + { + setBranchPoint(branchPoint.getBranch().getID(), branchPoint.getTimeStamp()); + } + public final void setBranchPoint(int branchID, long timeStamp) { + boolean changed = addBranchPoint(this.branchID, this.timeStamp); + if (this.branchID != branchID || this.timeStamp != timeStamp) { this.branchID = branchID; @@ -124,38 +170,122 @@ public abstract class CDOCheckoutImpl extends AbstractElement implements CDOChec if (isOpen()) { - CDOBranch branch = view.getSession().getBranchManager().getBranch(branchID); - CDOBranchPoint branchPoint = branch.getPoint(timeStamp); - view.setBranchPoint(branchPoint); - - branchPath = branch.getPathName(); + branchPath = doSetBranchPoint(branchID, timeStamp); } else { branchPath = null; } + changed = true; + } + + if (changed) + { save(); } } - public final void setBranchID(int branchID) + protected String doSetBranchPoint(int branchID, long timeStamp) { - setBranchPoint(branchID, timeStamp); + CDOBranch branch = view.getSession().getBranchManager().getBranch(branchID); + CDOBranchPoint branchPoint = branch.getPoint(timeStamp); + view.setBranchPoint(branchPoint); + + String pathName = branch.getPathName(); + return pathName; } - public String getBranchPath() + public CDOBranchPoint[] getBranchPoints() { - return branchPath; + if (branchPoints != null && isOpen()) + { + List<CDOBranchPoint> result = new ArrayList<CDOBranchPoint>(); + CDOBranchManager branchManager = view.getSession().getBranchManager(); + + for (String token : branchPoints.split(BRANCH_POINT_SEPARATOR)) + { + String[] branchAndPoint = token.split(BRANCH_AND_POINT_SEPARATOR); + int branchID = Integer.parseInt(branchAndPoint[0]); + CDOBranch branch = branchManager.getBranch(branchID); + if (branch != null) + { + long timeStamp; + if (branchAndPoint.length >= 2) + { + timeStamp = Long.parseLong(branchAndPoint[1]); + } + else + { + timeStamp = CDOBranchPoint.UNSPECIFIED_DATE; + } + + result.add(branch.getPoint(timeStamp)); + } + } + + return result.toArray(new CDOBranchPoint[result.size()]); + } + + return NO_BRANCH_POINTS; } - public final void setBranchPath(String branchPath) + public boolean addBranchPoint(CDOBranchPoint branchPoint) { - if (!ObjectUtil.equals(this.branchPath, branchPath)) + int branchID = branchPoint.getBranch().getID(); + long timeStamp = branchPoint.getTimeStamp(); + + boolean changed = addBranchPoint(branchID, timeStamp); + if (changed) { - this.branchPath = branchPath; save(); } + + return changed; + } + + private boolean addBranchPoint(int branchID, long timeStamp) + { + String oldBranchPoints = branchPoints; + + String newToken = Integer.toString(branchID); + if (timeStamp != CDOBranchPoint.UNSPECIFIED_DATE) + { + newToken += BRANCH_AND_POINT_SEPARATOR + timeStamp; + } + + if (branchPoints != null) + { + StringBuilder builder = new StringBuilder(newToken); + int count = 1; + + for (String token : branchPoints.split(BRANCH_POINT_SEPARATOR)) + { + if (count++ == BRANCH_POINTS_MAX) + { + break; + } + + if (!token.equals(newToken)) + { + builder.append(BRANCH_POINT_SEPARATOR); + builder.append(token); + } + } + + branchPoints = builder.toString(); + } + else + { + branchPoints = newToken; + } + + if (!ObjectUtil.equals(branchPoints, oldBranchPoints)) + { + return true; + } + + return false; } public final long getTimeStamp() @@ -456,6 +586,7 @@ public abstract class CDOCheckoutImpl extends AbstractElement implements CDOChec repository = OM.getRepositoryManager().getElement(properties.getProperty(PROP_REPOSITORY)); branchID = Integer.parseInt(properties.getProperty(PROP_BRANCH_ID)); branchPath = properties.getProperty(PROP_BRANCH_PATH); + branchPoints = properties.getProperty(PROP_BRANCH_POINTS); timeStamp = Long.parseLong(properties.getProperty(PROP_TIME_STAMP)); readOnly = Boolean.parseBoolean(properties.getProperty(PROP_READ_ONLY)); rootID = CDOIDUtil.read(properties.getProperty(PROP_ROOT_ID)); @@ -477,6 +608,11 @@ public abstract class CDOCheckoutImpl extends AbstractElement implements CDOChec properties.put(PROP_BRANCH_PATH, branchPath); } + if (branchPoints != null) + { + properties.put(PROP_BRANCH_POINTS, branchPoints); + } + String string = getCDOIDString(rootID); properties.put(PROP_ROOT_ID, string); } |