diff options
author | Eike Stepper | 2015-07-18 16:20:08 +0000 |
---|---|---|
committer | Eike Stepper | 2015-07-18 16:20:08 +0000 |
commit | ff5870ad00d84b68cc99110c41f5aaf0a7621c72 (patch) | |
tree | 6d0c34198614829db521f1f188799834be856d49 /plugins | |
parent | 3469e7b87e0db45ceeef02d6d0c6310912989dda (diff) | |
download | cdo-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')
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 Binary files differnew file mode 100644 index 0000000000..e7dc14e593 --- /dev/null +++ b/plugins/org.eclipse.emf.cdo.explorer.ui/icons/duplicate.gif 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; |