Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Stepper2015-07-18 16:20:08 +0000
committerEike Stepper2015-07-18 16:20:08 +0000
commitff5870ad00d84b68cc99110c41f5aaf0a7621c72 (patch)
tree6d0c34198614829db521f1f188799834be856d49 /plugins
parent3469e7b87e0db45ceeef02d6d0c6310912989dda (diff)
downloadcdo-ff5870ad00d84b68cc99110c41f5aaf0a7621c72.tar.gz
cdo-ff5870ad00d84b68cc99110c41f5aaf0a7621c72.tar.xz
cdo-ff5870ad00d84b68cc99110c41f5aaf0a7621c72.zip
[458349] Consolidate UI - CheckoutDuplicateHandler
Task-Url: https://bugs.eclipse.org/bugs/show_bug.cgi?id=458349
Diffstat (limited to 'plugins')
-rw-r--r--plugins/org.eclipse.emf.cdo.explorer.ui/icons/duplicate.gifbin0 -> 350 bytes
-rw-r--r--plugins/org.eclipse.emf.cdo.explorer.ui/plugin.xml18
-rw-r--r--plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/wizards/CheckoutLabelPage.java28
-rw-r--r--plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/wizards/CheckoutWizard.java4
-rw-r--r--plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/handlers/CheckoutDuplicateHandler.java36
-rw-r--r--plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/handlers/RepositoryCheckoutHandlerQuick.java16
-rw-r--r--plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/repositories/wizards/AbstractRepositoryPage.java28
-rw-r--r--plugins/org.eclipse.emf.cdo.explorer/src/org/eclipse/emf/cdo/explorer/CDOExplorerManager.java5
-rw-r--r--plugins/org.eclipse.emf.cdo.explorer/src/org/eclipse/emf/cdo/explorer/checkouts/CDOCheckout.java5
-rw-r--r--plugins/org.eclipse.emf.cdo.explorer/src/org/eclipse/emf/cdo/internal/explorer/AbstractManager.java33
-rw-r--r--plugins/org.eclipse.emf.cdo.explorer/src/org/eclipse/emf/cdo/internal/explorer/checkouts/CDOCheckoutImpl.java26
11 files changed, 135 insertions, 64 deletions
diff --git a/plugins/org.eclipse.emf.cdo.explorer.ui/icons/duplicate.gif b/plugins/org.eclipse.emf.cdo.explorer.ui/icons/duplicate.gif
new file mode 100644
index 0000000000..e7dc14e593
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.explorer.ui/icons/duplicate.gif
Binary files differ
diff --git a/plugins/org.eclipse.emf.cdo.explorer.ui/plugin.xml b/plugins/org.eclipse.emf.cdo.explorer.ui/plugin.xml
index fc795a0ae5..b9c785bc11 100644
--- a/plugins/org.eclipse.emf.cdo.explorer.ui/plugin.xml
+++ b/plugins/org.eclipse.emf.cdo.explorer.ui/plugin.xml
@@ -441,6 +441,10 @@
name="Close Checkout"
defaultHandler="org.eclipse.emf.cdo.explorer.ui.handlers.CheckoutCloseHandler"/>
<command
+ id="org.eclipse.emf.cdo.explorer.ui.CheckoutDuplicate"
+ name="Duplicate Checkout"
+ defaultHandler="org.eclipse.emf.cdo.explorer.ui.handlers.CheckoutDuplicateHandler"/>
+ <command
id="org.eclipse.emf.cdo.explorer.ui.WorkspaceUpdate"
name="Update Workspace"
defaultHandler="org.eclipse.emf.cdo.explorer.ui.handlers.WorkspaceUpdateHandler"/>
@@ -677,6 +681,20 @@
</with>
</visibleWhen>
</command>
+ <command
+ commandId="org.eclipse.emf.cdo.explorer.ui.CheckoutDuplicate"
+ icon="icons/duplicate.gif"
+ label="Duplicate Checkout"
+ style="push"
+ tooltip="Duplicate the checkout">
+ <visibleWhen checkEnabled="false">
+ <with variable="activeMenuSelection">
+ <iterate ifEmpty="false">
+ <instanceof value="org.eclipse.emf.cdo.explorer.checkouts.CDOCheckout"/>
+ </iterate>
+ </with>
+ </visibleWhen>
+ </command>
</menuContribution>
<menuContribution
allPopups="false"
diff --git a/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/wizards/CheckoutLabelPage.java b/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/wizards/CheckoutLabelPage.java
index 66a4947dd2..60533e461a 100644
--- a/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/wizards/CheckoutLabelPage.java
+++ b/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/wizards/CheckoutLabelPage.java
@@ -14,8 +14,6 @@ import org.eclipse.emf.cdo.common.branch.CDOBranchPoint;
import org.eclipse.emf.cdo.common.id.CDOID;
import org.eclipse.emf.cdo.common.util.CDOCommonUtil;
import org.eclipse.emf.cdo.explorer.CDOExplorerUtil;
-import org.eclipse.emf.cdo.explorer.checkouts.CDOCheckout;
-import org.eclipse.emf.cdo.explorer.checkouts.CDOCheckoutManager;
import org.eclipse.emf.cdo.explorer.repositories.CDORepository;
import org.eclipse.emf.cdo.internal.explorer.AbstractElement;
import org.eclipse.emf.cdo.internal.explorer.checkouts.CDOCheckoutImpl;
@@ -33,9 +31,7 @@ import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Layout;
import org.eclipse.swt.widgets.Text;
-import java.util.HashSet;
import java.util.Properties;
-import java.util.Set;
/**
* @author Eike Stepper
@@ -172,7 +168,7 @@ public class CheckoutLabelPage extends CheckoutWizardPage
if (StringUtil.isEmpty(label))
{
String label = StringUtil.capAll(type.replace('-', ' ')) + " Checkout";
- setLabel(getUniqueLabel(label));
+ setLabel(CDOExplorerUtil.getCheckoutManager().getUniqueLabel(label));
}
labelText.setFocus();
@@ -222,26 +218,4 @@ public class CheckoutLabelPage extends CheckoutWizardPage
labelText.setText("");
}
}
-
- public static String getUniqueLabel(String label)
- {
- Set<String> names = new HashSet<String>();
-
- CDOCheckoutManager checkoutManager = CDOExplorerUtil.getCheckoutManager();
- for (CDOCheckout checkout : checkoutManager.getCheckouts())
- {
- names.add(checkout.getLabel());
- }
-
- for (int i = 1; i < Integer.MAX_VALUE; i++)
- {
- String name = i == 1 ? label : label + " (" + i + ")";
- if (!names.contains(name))
- {
- return name;
- }
- }
-
- throw new IllegalStateException("Too many checkouts");
- }
}
diff --git a/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/wizards/CheckoutWizard.java b/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/wizards/CheckoutWizard.java
index 966592904c..5542bbecef 100644
--- a/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/wizards/CheckoutWizard.java
+++ b/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/checkouts/wizards/CheckoutWizard.java
@@ -203,7 +203,7 @@ public class CheckoutWizard extends Wizard implements IImportWizard, IPageChange
return true;
}
- public static void showInProjectExplorer(final CDOCheckout checkout)
+ public static void showInProjectExplorer(final Object... objects)
{
UIUtil.getDisplay().asyncExec(new Runnable()
{
@@ -229,7 +229,7 @@ public class CheckoutWizard extends Wizard implements IImportWizard, IPageChange
.getInstance(CDOCheckoutContentProvider.PROJECT_EXPLORER_ID);
if (checkoutContentProvider != null)
{
- checkoutContentProvider.selectObjects(checkout);
+ checkoutContentProvider.selectObjects(objects);
}
}
catch (Exception ex)
diff --git a/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/handlers/CheckoutDuplicateHandler.java b/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/handlers/CheckoutDuplicateHandler.java
new file mode 100644
index 0000000000..87467558ca
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/handlers/CheckoutDuplicateHandler.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2015 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.explorer.ui.handlers;
+
+import org.eclipse.emf.cdo.explorer.checkouts.CDOCheckout;
+
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.runtime.IProgressMonitor;
+
+/**
+ * @author Eike Stepper
+ */
+public class CheckoutDuplicateHandler extends AbstractCheckoutHandler
+{
+ public CheckoutDuplicateHandler()
+ {
+ super(null, true);
+ }
+
+ @Override
+ protected void doExecute(ExecutionEvent event, IProgressMonitor monitor) throws Exception
+ {
+ for (CDOCheckout checkout : elements)
+ {
+ checkout.duplicate();
+ }
+ }
+}
diff --git a/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/handlers/RepositoryCheckoutHandlerQuick.java b/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/handlers/RepositoryCheckoutHandlerQuick.java
index 53c08b917a..bbc5a2429c 100644
--- a/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/handlers/RepositoryCheckoutHandlerQuick.java
+++ b/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/handlers/RepositoryCheckoutHandlerQuick.java
@@ -14,7 +14,6 @@ import org.eclipse.emf.cdo.explorer.CDOExplorerUtil;
import org.eclipse.emf.cdo.explorer.checkouts.CDOCheckout;
import org.eclipse.emf.cdo.explorer.repositories.CDORepository;
import org.eclipse.emf.cdo.explorer.repositories.CDORepositoryElement;
-import org.eclipse.emf.cdo.explorer.ui.checkouts.wizards.CheckoutLabelPage;
import org.eclipse.emf.cdo.explorer.ui.checkouts.wizards.CheckoutWizard;
import org.eclipse.emf.cdo.internal.explorer.checkouts.CDOCheckoutImpl;
@@ -50,13 +49,14 @@ public class RepositoryCheckoutHandlerQuick extends AbstractBaseHandler<CDORepos
String label = StringUtil.capAll(type.replace('-', ' ')) + " Checkout";
Properties properties = new Properties();
- properties.setProperty("type", type);
- properties.setProperty("label", CheckoutLabelPage.getUniqueLabel(label));
- properties.setProperty("repository", repository.getID());
- properties.setProperty("branchID", Integer.toString(repositoryElement.getBranchID()));
- properties.setProperty("timeStamp", Long.toString(repositoryElement.getTimeStamp()));
- properties.setProperty("readOnly", readOnly);
- properties.setProperty("rootID", CDOCheckoutImpl.getCDOIDString(repositoryElement.getObjectID()));
+ properties.setProperty(CDOCheckoutImpl.PROP_TYPE, type);
+ properties.setProperty(CDOCheckoutImpl.PROP_LABEL, CDOExplorerUtil.getCheckoutManager().getUniqueLabel(label));
+ properties.setProperty(CDOCheckoutImpl.PROP_REPOSITORY, repository.getID());
+ properties.setProperty(CDOCheckoutImpl.PROP_BRANCH_ID, Integer.toString(repositoryElement.getBranchID()));
+ properties.setProperty(CDOCheckoutImpl.PROP_TIME_STAMP, Long.toString(repositoryElement.getTimeStamp()));
+ properties.setProperty(CDOCheckoutImpl.PROP_READ_ONLY, readOnly);
+ properties.setProperty(CDOCheckoutImpl.PROP_ROOT_ID,
+ CDOCheckoutImpl.getCDOIDString(repositoryElement.getObjectID()));
CDOCheckout checkout = CDOExplorerUtil.getCheckoutManager().addCheckout(properties);
checkout.open();
diff --git a/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/repositories/wizards/AbstractRepositoryPage.java b/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/repositories/wizards/AbstractRepositoryPage.java
index ad6adf6696..57413bf0f9 100644
--- a/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/repositories/wizards/AbstractRepositoryPage.java
+++ b/plugins/org.eclipse.emf.cdo.explorer.ui/src/org/eclipse/emf/cdo/explorer/ui/repositories/wizards/AbstractRepositoryPage.java
@@ -11,8 +11,6 @@
package org.eclipse.emf.cdo.explorer.ui.repositories.wizards;
import org.eclipse.emf.cdo.explorer.CDOExplorerUtil;
-import org.eclipse.emf.cdo.explorer.repositories.CDORepository;
-import org.eclipse.emf.cdo.explorer.repositories.CDORepositoryManager;
import org.eclipse.emf.cdo.explorer.ui.bundle.OM;
import org.eclipse.emf.cdo.explorer.ui.checkouts.wizards.CheckoutWizardPage.ValidationProblem;
import org.eclipse.emf.cdo.internal.explorer.AbstractElement;
@@ -31,9 +29,7 @@ import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
-import java.util.HashSet;
import java.util.Properties;
-import java.util.Set;
/**
* @author Eike Stepper
@@ -50,7 +46,7 @@ public abstract class AbstractRepositoryPage extends WizardPage implements Selec
{
super(pageName);
setImageDescriptor(OM.getImageDescriptor("icons/wiz/new_repo.gif"));
- this.defaultLabel = getUniqueLabel(defaultLabel);
+ this.defaultLabel = CDOExplorerUtil.getRepositoryManager().getUniqueLabel(defaultLabel);
}
@Override
@@ -177,26 +173,4 @@ public abstract class AbstractRepositoryPage extends WizardPage implements Selec
text.setLayoutData(gridData);
return text;
}
-
- public static String getUniqueLabel(String label)
- {
- Set<String> names = new HashSet<String>();
-
- CDORepositoryManager repositoryManager = CDOExplorerUtil.getRepositoryManager();
- for (CDORepository repository : repositoryManager.getRepositories())
- {
- names.add(repository.getLabel());
- }
-
- for (int i = 1; i < Integer.MAX_VALUE; i++)
- {
- String name = i == 1 ? label : label + " (" + i + ")";
- if (!names.contains(name))
- {
- return name;
- }
- }
-
- throw new IllegalStateException("Too many repositories");
- }
}
diff --git a/plugins/org.eclipse.emf.cdo.explorer/src/org/eclipse/emf/cdo/explorer/CDOExplorerManager.java b/plugins/org.eclipse.emf.cdo.explorer/src/org/eclipse/emf/cdo/explorer/CDOExplorerManager.java
index 09df5a814f..e4b9f6ae29 100644
--- a/plugins/org.eclipse.emf.cdo.explorer/src/org/eclipse/emf/cdo/explorer/CDOExplorerManager.java
+++ b/plugins/org.eclipse.emf.cdo.explorer/src/org/eclipse/emf/cdo/explorer/CDOExplorerManager.java
@@ -24,6 +24,11 @@ import org.eclipse.core.runtime.IAdaptable;
public interface CDOExplorerManager<T extends CDOExplorerElement> extends IContainer<T>, IAdaptable
{
/**
+ * @since 4.5
+ */
+ public String getUniqueLabel(String label);
+
+ /**
* @author Eike Stepper
*/
public interface ElementsChangedEvent extends IEvent
diff --git a/plugins/org.eclipse.emf.cdo.explorer/src/org/eclipse/emf/cdo/explorer/checkouts/CDOCheckout.java b/plugins/org.eclipse.emf.cdo.explorer/src/org/eclipse/emf/cdo/explorer/checkouts/CDOCheckout.java
index 3811506cfe..331ac787ec 100644
--- a/plugins/org.eclipse.emf.cdo.explorer/src/org/eclipse/emf/cdo/explorer/checkouts/CDOCheckout.java
+++ b/plugins/org.eclipse.emf.cdo.explorer/src/org/eclipse/emf/cdo/explorer/checkouts/CDOCheckout.java
@@ -82,6 +82,11 @@ public interface CDOCheckout extends CDOExplorerElement, CDOTimeProvider, StateP
public void setRootID(CDOID rootID);
+ /**
+ * @since 4.5
+ */
+ public CDOCheckout duplicate();
+
public State getState();
public boolean isOpen();
diff --git a/plugins/org.eclipse.emf.cdo.explorer/src/org/eclipse/emf/cdo/internal/explorer/AbstractManager.java b/plugins/org.eclipse.emf.cdo.explorer/src/org/eclipse/emf/cdo/internal/explorer/AbstractManager.java
index a458b4c011..77be55c28c 100644
--- a/plugins/org.eclipse.emf.cdo.explorer/src/org/eclipse/emf/cdo/internal/explorer/AbstractManager.java
+++ b/plugins/org.eclipse.emf.cdo.explorer/src/org/eclipse/emf/cdo/internal/explorer/AbstractManager.java
@@ -29,8 +29,12 @@ import org.eclipse.emf.ecore.EObject;
import java.io.File;
import java.io.FileInputStream;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.Map;
import java.util.Properties;
+import java.util.Set;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
/**
* @author Eike Stepper
@@ -38,6 +42,8 @@ import java.util.Properties;
public abstract class AbstractManager<T extends CDOExplorerElement> extends SetContainer<T>
implements CDOExplorerManager<T>
{
+ private static final Pattern LABEL_PATTERN = Pattern.compile("(.+?) *\\([0-9]+\\)");
+
private final File folder;
private final Map<String, T> elementMap = new HashMap<String, T>();
@@ -75,6 +81,33 @@ public abstract class AbstractManager<T extends CDOExplorerElement> extends SetC
return folder;
}
+ public String getUniqueLabel(String label)
+ {
+ Set<String> names = new HashSet<String>();
+
+ for (T element : getElements())
+ {
+ names.add(element.getLabel());
+ }
+
+ Matcher matcher = LABEL_PATTERN.matcher(label);
+ if (matcher.matches())
+ {
+ label = matcher.group(1);
+ }
+
+ for (int i = 1; i < Integer.MAX_VALUE; i++)
+ {
+ String name = i == 1 ? label : label + " (" + i + ")";
+ if (!names.contains(name))
+ {
+ return name;
+ }
+ }
+
+ throw new IllegalStateException("Too many elements");
+ }
+
public T getElement(String id)
{
return elementMap.get(id);
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 4f20591c09..fa6635c529 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
@@ -15,6 +15,7 @@ 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;
+import org.eclipse.emf.cdo.explorer.CDOExplorerUtil;
import org.eclipse.emf.cdo.explorer.checkouts.CDOCheckout;
import org.eclipse.emf.cdo.explorer.repositories.CDORepository;
import org.eclipse.emf.cdo.internal.explorer.AbstractElement;
@@ -350,6 +351,31 @@ public abstract class CDOCheckoutImpl extends AbstractElement implements CDOChec
this.rootID = rootID;
}
+ public CDOCheckout duplicate()
+ {
+ Properties properties = new Properties();
+ collectDuplicationProperties(properties);
+
+ CDOCheckout copy = CDOExplorerUtil.getCheckoutManager().addCheckout(properties);
+ if (isOpen())
+ {
+ copy.open();
+ }
+
+ return copy;
+ }
+
+ protected void collectDuplicationProperties(Properties properties)
+ {
+ properties.setProperty(PROP_TYPE, getType());
+ properties.setProperty(PROP_LABEL, getManager().getUniqueLabel(getLabel()));
+ properties.setProperty(PROP_REPOSITORY, getRepository().getID());
+ properties.setProperty(PROP_BRANCH_ID, Integer.toString(getBranchID()));
+ properties.setProperty(PROP_TIME_STAMP, Long.toString(getTimeStamp()));
+ properties.setProperty(PROP_READ_ONLY, Boolean.toString(isReadOnly()));
+ properties.setProperty(PROP_ROOT_ID, getCDOIDString(getRootID()));
+ }
+
public final State getState()
{
return state;

Back to the top