Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/org.eclipse.emf.cdo.ui')
-rw-r--r--plugins/org.eclipse.emf.cdo.ui/META-INF/MANIFEST.MF10
-rw-r--r--plugins/org.eclipse.emf.cdo.ui/icons/full/obj16/branch.gifbin0 -> 352 bytes
-rw-r--r--plugins/org.eclipse.emf.cdo.ui/plugin.xml45
-rw-r--r--plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/actions/CreateBranchAction.java106
-rw-r--r--plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/actions/delegates/CreateBranchActionDelegate.java81
-rw-r--r--plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/bundle/OM.java29
-rw-r--r--plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/dialogs/CreateBranchDialog.java223
-rw-r--r--plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/handlers/CreateBranchHandler.java107
-rw-r--r--plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/views/CDOSessionsView.java21
-rw-r--r--plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/ui/CDOItemProvider.java3
-rw-r--r--plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/ui/OverlayImage.java44
-rw-r--r--plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/ui/widgets/CommitHistoryComposite.java25
-rw-r--r--plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/ui/widgets/SelectTimeStampComposite.java8
13 files changed, 585 insertions, 117 deletions
diff --git a/plugins/org.eclipse.emf.cdo.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.emf.cdo.ui/META-INF/MANIFEST.MF
index e0be83294a..88bb64549e 100644
--- a/plugins/org.eclipse.emf.cdo.ui/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.emf.cdo.ui/META-INF/MANIFEST.MF
@@ -43,6 +43,16 @@ Export-Package: org.eclipse.emf.cdo.internal.ui;version="4.4.0";
org.eclipse.emf.cdo.explorer.ui,
org.eclipse.emf.cdo.ui.team,
org.eclipse.emf.cdo.ui.compare",
+ org.eclipse.emf.cdo.internal.ui.handlers;version="4.4.0";
+ x-friends:="org.eclipse.emf.cdo.ui.defs,
+ org.eclipse.emf.cdo.ui.ide,
+ org.eclipse.emf.cdo.ui.location,
+ org.eclipse.emf.cdo.tests.ui,
+ org.eclipse.emf.cdo.dawn.ui,
+ org.eclipse.emf.cdo.explorer,
+ org.eclipse.emf.cdo.explorer.ui,
+ org.eclipse.emf.cdo.ui.team,
+ org.eclipse.emf.cdo.ui.compare",
org.eclipse.emf.cdo.internal.ui.actions.delegates;version="4.4.0";x-internal:=true,
org.eclipse.emf.cdo.internal.ui.bundle;version="4.4.0";x-internal:=true,
org.eclipse.emf.cdo.internal.ui.dialogs;version="4.4.0";
diff --git a/plugins/org.eclipse.emf.cdo.ui/icons/full/obj16/branch.gif b/plugins/org.eclipse.emf.cdo.ui/icons/full/obj16/branch.gif
new file mode 100644
index 0000000000..bff2b8f164
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.ui/icons/full/obj16/branch.gif
Binary files differ
diff --git a/plugins/org.eclipse.emf.cdo.ui/plugin.xml b/plugins/org.eclipse.emf.cdo.ui/plugin.xml
index 286d5357af..e6c249394f 100644
--- a/plugins/org.eclipse.emf.cdo.ui/plugin.xml
+++ b/plugins/org.eclipse.emf.cdo.ui/plugin.xml
@@ -297,4 +297,49 @@
</objectContribution>
</extension-->
+ <extension point="org.eclipse.ui.popupMenus">
+ <objectContribution
+ adaptable="true"
+ id="org.eclipse.emf.cdo.ui.contribution1"
+ objectClass="org.eclipse.emf.cdo.common.commit.CDOCommitInfo">
+ <action
+ class="org.eclipse.emf.cdo.internal.ui.actions.delegates.CreateBranchActionDelegate"
+ enablesFor="1"
+ icon="icons/full/obj16/branch.gif"
+ id="org.eclipse.emf.cdo.ui.CreateBranchAction"
+ label="Create Branch..."
+ menubarPath="additions"
+ style="push">
+ </action>
+ </objectContribution>
+ </extension>
+
+ <extension point="org.eclipse.ui.commands">
+ <command
+ id="org.eclipse.emf.cdo.ui.CreateBranch"
+ name="Create Branch"
+ defaultHandler="org.eclipse.emf.cdo.internal.ui.handlers.CreateBranchHandler"/>
+ </extension>
+
+ <extension point="org.eclipse.ui.menus">
+ <menuContribution
+ allPopups="false"
+ locationURI="popup:org.eclipse.ui.popup.any?group=group.new.branch">
+ <command
+ commandId="org.eclipse.emf.cdo.ui.CreateBranch"
+ icon="icons/full/obj16/branch.gif"
+ label="New Branch..."
+ style="push"
+ tooltip="Add a new branch">
+ <visibleWhen checkEnabled="false">
+ <with variable="activeMenuSelection">
+ <iterate>
+ <adapt type="org.eclipse.emf.cdo.common.branch.CDOBranchCreationContext"/>
+ </iterate>
+ </with>
+ </visibleWhen>
+ </command>
+ </menuContribution>
+ </extension>
+
</plugin>
diff --git a/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/actions/CreateBranchAction.java b/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/actions/CreateBranchAction.java
index fe9f3a5b91..51f7d88302 100644
--- a/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/actions/CreateBranchAction.java
+++ b/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/actions/CreateBranchAction.java
@@ -11,26 +11,21 @@
*/
package org.eclipse.emf.cdo.internal.ui.actions;
-import org.eclipse.emf.cdo.common.CDOCommonRepository.State;
import org.eclipse.emf.cdo.common.branch.CDOBranch;
import org.eclipse.emf.cdo.common.branch.CDOBranchPoint;
import org.eclipse.emf.cdo.internal.ui.dialogs.CreateBranchDialog;
+import org.eclipse.emf.cdo.internal.ui.handlers.CreateBranchHandler;
import org.eclipse.emf.cdo.internal.ui.messages.Messages;
-import org.eclipse.emf.cdo.session.CDOSession;
-import org.eclipse.emf.cdo.ui.shared.SharedIcons;
-import org.eclipse.net4j.util.StringUtil;
+import org.eclipse.net4j.util.ui.actions.LongRunningAction;
import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.jface.dialogs.Dialog;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
import org.eclipse.ui.IWorkbenchPage;
/**
* @author Eike Stepper
*/
-public class CreateBranchAction extends SessionAction
+public class CreateBranchAction extends LongRunningAction
{
public static final String ID = "create-branch"; //$NON-NLS-1$
@@ -38,100 +33,47 @@ public class CreateBranchAction extends SessionAction
private static final String TOOL_TIP = Messages.getString("CreateBranchAction.1"); //$NON-NLS-1$
- private String name;
-
private CDOBranchPoint base;
- public CreateBranchAction(IWorkbenchPage page, CDOSession session)
- {
- super(page, TITLE + INTERACTIVE, TOOL_TIP, null, session);
- setId(ID);
- }
+ private String name;
- @Override
- public boolean isEnabled()
+ public CreateBranchAction(IWorkbenchPage page, CDOBranchPoint base)
{
- if (getSession().getRepositoryInfo().getState() == State.INITIAL)
- {
- return false;
- }
-
- return super.isEnabled();
+ super(page, TITLE + INTERACTIVE, TOOL_TIP, null);
+ this.base = base;
+ setId(ID);
}
@Override
protected void preRun() throws Exception
{
- CreateBranchDialog dialog = new CreateBranchDialog(getPage(), getSession(), null, true, null)
- {
- @Override
- protected Control createDialogArea(Composite parent)
- {
- getShell().setText(TITLE);
- setTitle(TITLE);
- setTitleImage(SharedIcons.getImage(SharedIcons.WIZBAN_TARGET_SELECTION));
- setMessage("Enter the name of the new branch and compose a valid base point.\nYou may also choose a base point from existing commits, tags or views.");
- return super.createDialogArea(parent);
- }
-
- @Override
- protected String getComposeTabTitle()
- {
- return "Base Point";
- }
-
- @Override
- protected void validate()
- {
- super.validate();
- String name = getName();
- if (StringUtil.isEmpty(name))
- {
- aggregator.setValidationError(getNameText(), "Branch name is empty.");
- return;
- }
-
- CDOBranchPoint branchPoint = getBranchPoint();
- if (branchPoint != null)
- {
- CDOBranch branch = branchPoint.getBranch().getBranch(name);
- if (branch != null)
- {
- aggregator.setValidationError(getNameText(), "Branch " + branch.getPathName() + " does already exist.");
- return;
- }
- }
-
- aggregator.setValidationError(getNameText(), null);
- }
- };
+ name = CreateBranchHandler.getValidChildName(base.getBranch());
- if (dialog.open() == Dialog.OK)
+ CreateBranchDialog dialog = new CreateBranchDialog(getShell(), base, name);
+ if (dialog.open() == CreateBranchDialog.OK)
{
+ base = dialog.getBase();
name = dialog.getName();
- base = dialog.getBranchPoint();
- if (StringUtil.isEmpty(name) || base == null)
- {
- cancel();
- }
- }
- else
- {
- cancel();
+ return;
}
- super.preRun();
+ base = null;
+ name = null;
+ cancel();
}
@Override
protected void doRun(IProgressMonitor progressMonitor) throws Exception
{
- long timeStamp = base.getTimeStamp();
- if (timeStamp == CDOBranchPoint.UNSPECIFIED_DATE || timeStamp == CDOBranchPoint.INVALID_DATE)
+ try
{
- timeStamp = getSession().getRepositoryInfo().getTimeStamp();
+ CDOBranch branch = base.getBranch();
+ branch.createBranch(name, base.getTimeStamp());
+ }
+ finally
+ {
+ base = null;
+ name = null;
}
-
- base.getBranch().createBranch(name, timeStamp);
}
}
diff --git a/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/actions/delegates/CreateBranchActionDelegate.java b/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/actions/delegates/CreateBranchActionDelegate.java
new file mode 100644
index 0000000000..7552571331
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/actions/delegates/CreateBranchActionDelegate.java
@@ -0,0 +1,81 @@
+/*
+ * Copyright (c) 2011, 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
+ * Victor Roldan Betancort - maintenance
+ */
+package org.eclipse.emf.cdo.internal.ui.actions.delegates;
+
+import org.eclipse.emf.cdo.common.branch.CDOBranch;
+import org.eclipse.emf.cdo.common.branch.CDOBranchPoint;
+import org.eclipse.emf.cdo.internal.ui.dialogs.CreateBranchDialog;
+import org.eclipse.emf.cdo.internal.ui.handlers.CreateBranchHandler;
+
+import org.eclipse.net4j.util.ui.actions.LongRunningActionDelegate;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.swt.widgets.Shell;
+
+/**
+ * @author Eike Stepper
+ */
+public class CreateBranchActionDelegate extends LongRunningActionDelegate
+{
+ private CDOBranchPoint base;
+
+ private String name;
+
+ public CreateBranchActionDelegate()
+ {
+ }
+
+ @Override
+ protected void preRun() throws Exception
+ {
+ ISelection selection = getSelection();
+ if (selection instanceof IStructuredSelection)
+ {
+ IStructuredSelection ssel = (IStructuredSelection)selection;
+ Object element = ssel.getFirstElement();
+ if (element instanceof CDOBranchPoint)
+ {
+ base = (CDOBranchPoint)element;
+ name = CreateBranchHandler.getValidChildName(base.getBranch());
+
+ CreateBranchDialog dialog = new CreateBranchDialog(new Shell(), base, name);
+ if (dialog.open() == CreateBranchDialog.OK)
+ {
+ base = dialog.getBase();
+ name = dialog.getName();
+ return;
+ }
+ }
+ }
+
+ base = null;
+ name = null;
+ cancel();
+ }
+
+ @Override
+ protected void doRun(IProgressMonitor progressMonitor) throws Exception
+ {
+ try
+ {
+ CDOBranch branch = base.getBranch();
+ branch.createBranch(name, base.getTimeStamp());
+ }
+ finally
+ {
+ base = null;
+ name = null;
+ }
+ }
+}
diff --git a/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/bundle/OM.java b/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/bundle/OM.java
index f20c6b00d3..da92a4ca0b 100644
--- a/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/bundle/OM.java
+++ b/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/bundle/OM.java
@@ -12,6 +12,7 @@
package org.eclipse.emf.cdo.internal.ui.bundle;
import org.eclipse.emf.cdo.ui.CDOLabelDecorator;
+import org.eclipse.emf.cdo.ui.OverlayImage;
import org.eclipse.net4j.util.om.OMBundle;
import org.eclipse.net4j.util.om.OMPlatform;
@@ -21,6 +22,13 @@ import org.eclipse.net4j.util.om.pref.OMPreferences;
import org.eclipse.net4j.util.om.trace.OMTracer;
import org.eclipse.net4j.util.ui.UIActivator;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.edit.provider.ComposedImage;
+import org.eclipse.emf.edit.ui.provider.ExtendedImageRegistry;
+
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.swt.graphics.Image;
+
/**
* The <em>Operations & Maintenance</em> class of this bundle.
*
@@ -61,6 +69,27 @@ public abstract class OM
public static final OMPreference<Boolean> PREF_EDITOR_AUTO_RELOAD = //
PREFS.init("PREF_EDITOR_AUTO_RELOAD", true); //$NON-NLS-1$
+ public static Image getOverlayImage(Object image, Object overlayImage, int x, int y)
+ {
+ ComposedImage composedImage = new OverlayImage(image, overlayImage, x, y);
+ return ExtendedImageRegistry.INSTANCE.getImage(composedImage);
+ }
+
+ public static Image getImage(String imagePath)
+ {
+ return ExtendedImageRegistry.INSTANCE.getImage(getBundleURI(imagePath));
+ }
+
+ public static ImageDescriptor getImageDescriptor(String imagePath)
+ {
+ return ExtendedImageRegistry.INSTANCE.getImageDescriptor(getBundleURI(imagePath));
+ }
+
+ private static URI getBundleURI(String path)
+ {
+ return URI.createPlatformPluginURI(BUNDLE_ID + "/" + path, true);
+ }
+
/**
* @author Eike Stepper
*/
diff --git a/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/dialogs/CreateBranchDialog.java b/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/dialogs/CreateBranchDialog.java
index 013dd8a427..341ae51c73 100644
--- a/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/dialogs/CreateBranchDialog.java
+++ b/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/dialogs/CreateBranchDialog.java
@@ -4,85 +4,248 @@
* 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.ui.dialogs;
+import org.eclipse.emf.cdo.common.branch.CDOBranch;
import org.eclipse.emf.cdo.common.branch.CDOBranchPoint;
-import org.eclipse.emf.cdo.session.CDOSession;
+import org.eclipse.emf.cdo.ui.CDOItemProvider;
+import org.eclipse.emf.cdo.ui.shared.SharedIcons;
+import org.eclipse.emf.cdo.ui.widgets.SelectTimeStampComposite;
+import org.eclipse.net4j.util.ObjectUtil;
import org.eclipse.net4j.util.StringUtil;
-import org.eclipse.net4j.util.ui.UIUtil;
+import org.eclipse.net4j.util.ui.ValidationContext;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.dialogs.TitleAreaDialog;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.graphics.Point;
+import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
-import org.eclipse.ui.IWorkbenchPage;
/**
* @author Eike Stepper
*/
-public class CreateBranchDialog extends SelectBranchPointDialog
+public class CreateBranchDialog extends TitleAreaDialog
{
+ public static final String TITLE = "New Branch";
+
+ private CDOBranchPoint base;
+
private String name;
+ private TreeViewer branchViewer;
+
+ private SelectTimeStampComposite timeStampComposite;
+
+ private String timeStampError;
+
private Text nameText;
- public CreateBranchDialog(IWorkbenchPage page, CDOSession session, CDOBranchPoint branchPoint,
- boolean allowTimeStamp, String name)
+ public CreateBranchDialog(Shell parentShell, CDOBranchPoint base, String defaultName)
{
- super(page, session, branchPoint, allowTimeStamp);
- this.name = StringUtil.safe(name);
+ super(parentShell);
+ this.base = base;
+ name = StringUtil.safe(defaultName);
+
+ setShellStyle(SWT.CLOSE | SWT.RESIZE | SWT.TITLE | SWT.APPLICATION_MODAL);
}
- public String getName()
+ public CDOBranchPoint getBase()
{
- return name;
+ return base;
}
- public void setName(String name)
+ public String getName()
{
- this.name = name;
- validate();
+ return name;
}
- public Text getNameText()
+ @Override
+ protected Point getInitialSize()
{
- return nameText;
+ return new Point(450, 450);
}
@Override
- protected void createBranchPointArea(Composite parent)
+ protected Control createDialogArea(Composite parent)
{
- GridLayout gridLayout = UIUtil.createGridLayout(2);
- gridLayout.marginHeight = 5;
- gridLayout.horizontalSpacing = 5;
+ getShell().setText(TITLE);
+ setTitle(TITLE);
+ setTitleImage(SharedIcons.getImage(SharedIcons.WIZBAN_TARGET_SELECTION));
+ setMessage("Select a base point and enter the name of the new branch.");
+
+ Composite area = (Composite)super.createDialogArea(parent);
- Composite composite = new Composite(parent, SWT.NONE);
- composite.setLayoutData(UIUtil.createGridData(true, false));
- composite.setLayout(gridLayout);
+ GridLayout containerGridLayout = new GridLayout(2, false);
+ containerGridLayout.marginWidth = 10;
+ containerGridLayout.marginHeight = 10;
+ containerGridLayout.verticalSpacing = 10;
+
+ Composite container = new Composite(area, SWT.NONE);
+ container.setLayoutData(new GridData(GridData.FILL_BOTH));
+ container.setLayout(containerGridLayout);
+
+ CDOBranch branch = base.getBranch();
+ CDOItemProvider itemProvider = new CDOItemProvider(null);
+
+ branchViewer = new TreeViewer(container, SWT.BORDER | SWT.SINGLE);
+ branchViewer.getTree().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 2, 1));
+ branchViewer.setLabelProvider(itemProvider);
+ branchViewer.setContentProvider(itemProvider);
+ branchViewer.setInput(branch.getBranchManager());
+ branchViewer.addSelectionChangedListener(new ISelectionChangedListener()
+ {
+ public void selectionChanged(SelectionChangedEvent event)
+ {
+ IStructuredSelection selection = (IStructuredSelection)event.getSelection();
+ CDOBranch branch = (CDOBranch)selection.getFirstElement();
+
+ if (timeStampComposite != null)
+ {
+ timeStampComposite.setBranch(branch);
+ }
+
+ composeBase();
+ validate();
+ }
+ });
+
+ branchViewer.setSelection(new StructuredSelection(branch));
+ branchViewer.setExpandedState(branch, true);
+
+ Group timeStampGroup = new Group(container, SWT.NONE);
+ timeStampGroup.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 2, 1));
+ timeStampGroup.setLayout(new GridLayout(1, false));
+ timeStampGroup.setText("Time Stamp:");
+
+ timeStampComposite = new SelectTimeStampComposite(timeStampGroup, SWT.NONE, branch, base.getTimeStamp())
+ {
+ @Override
+ protected void timeStampChanged(long timeStamp)
+ {
+ composeBase();
+ }
+ };
+
+ timeStampComposite.getTimeBrowseButton().setVisible(false);
+ timeStampComposite.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
+ timeStampComposite.setValidationContext(new ValidationContext()
+ {
+ public void setValidationError(Object source, String message)
+ {
+ timeStampError = message;
+ validate();
+ }
+ });
- Label label = new Label(composite, SWT.NONE);
- label.setLayoutData(UIUtil.createGridData(false, false));
- label.setText("Name:");
+ Label newLabel = new Label(container, SWT.NONE);
+ newLabel.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false));
+ newLabel.setText("Name:");
- nameText = new Text(composite, SWT.BORDER);
- nameText.setLayoutData(UIUtil.createGridData(true, false));
+ nameText = new Text(container, SWT.BORDER);
+ nameText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));
nameText.setText(name);
+ nameText.selectAll();
+ nameText.setFocus();
nameText.addModifyListener(new ModifyListener()
{
public void modifyText(ModifyEvent e)
{
- setName(nameText.getText());
+ name = nameText.getText();
+ validate();
}
});
- super.createBranchPointArea(parent);
+ validate();
+ return area;
+ }
+
+ protected void validate()
+ {
+ String error = timeStampError;
+
+ if (error == null)
+ {
+ try
+ {
+ doValidate();
+ }
+ catch (Exception ex)
+ {
+ error = ex.getMessage();
+ }
+ }
+
+ setErrorMessage(error);
+
+ Button button = getButton(IDialogConstants.OK_ID);
+ if (button != null)
+ {
+ button.setEnabled(error == null);
+ }
+ }
+
+ private void doValidate() throws Exception
+ {
+ if (name.length() == 0)
+ {
+ throw new Exception("Name is empty.");
+ }
+
+ if (name.contains("/") || name.contains("\\"))
+ {
+ throw new Exception("Name constains a path separator.");
+ }
+
+ CDOBranch baseBranch = base.getBranch();
+ CDOBranch branch = baseBranch.getBranch(name);
+ if (branch != null)
+ {
+ throw new Exception("Name is not unique within " + baseBranch.getPathName() + ".");
+ }
+ }
+
+ protected void composeBase()
+ {
+ if (branchViewer == null || timeStampComposite == null)
+ {
+ return;
+ }
+
+ CDOBranchPoint oldBase = base;
+
+ IStructuredSelection selection = (IStructuredSelection)branchViewer.getSelection();
+ CDOBranch branch = (CDOBranch)selection.getFirstElement();
+
+ long timeStamp = timeStampComposite.getTimeStamp();
+
+ base = branch.getPoint(timeStamp);
+ if (!ObjectUtil.equals(base, oldBase))
+ {
+ baseChanged(base);
+ }
+ }
+
+ protected void baseChanged(CDOBranchPoint base)
+ {
}
}
diff --git a/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/handlers/CreateBranchHandler.java b/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/handlers/CreateBranchHandler.java
new file mode 100644
index 0000000000..512a4c2422
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/handlers/CreateBranchHandler.java
@@ -0,0 +1,107 @@
+/*
+ * Copyright (c) 2009-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.internal.ui.handlers;
+
+import org.eclipse.emf.cdo.common.branch.CDOBranch;
+import org.eclipse.emf.cdo.common.branch.CDOBranchCreationContext;
+import org.eclipse.emf.cdo.common.branch.CDOBranchPoint;
+import org.eclipse.emf.cdo.internal.ui.dialogs.CreateBranchDialog;
+
+import org.eclipse.net4j.util.ui.handlers.AbstractBaseHandler;
+
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.handlers.HandlerUtil;
+
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * @author Eike Stepper
+ */
+public class CreateBranchHandler extends AbstractBaseHandler<CDOBranchCreationContext>
+{
+ private CDOBranchPoint base;
+
+ private String name;
+
+ public CreateBranchHandler()
+ {
+ super(CDOBranchCreationContext.class, false);
+ }
+
+ @Override
+ protected void preRun(ExecutionEvent event) throws Exception
+ {
+ if (elements.size() == 1)
+ {
+ CDOBranchCreationContext context = elements.get(0);
+ base = context.getBase();
+ name = getValidChildName(base.getBranch());
+
+ Shell shell = HandlerUtil.getActiveShell(event);
+ CreateBranchDialog dialog = new CreateBranchDialog(shell, base, name);
+ if (dialog.open() == CreateBranchDialog.OK)
+ {
+ base = dialog.getBase();
+ name = dialog.getName();
+ return;
+ }
+ }
+
+ base = null;
+ name = null;
+ cancel();
+ }
+
+ @Override
+ protected void doExecute(IProgressMonitor monitor) throws Exception
+ {
+ try
+ {
+ CDOBranch branch = base.getBranch();
+ branch.createBranch(name, base.getTimeStamp());
+ }
+ finally
+ {
+ base = null;
+ name = null;
+ }
+ }
+
+ public static String getValidChildName(CDOBranch branch)
+ {
+ Set<String> names = new HashSet<String>();
+ for (CDOBranch child : branch.getBranches())
+ {
+ names.add(child.getName());
+ }
+
+ for (int i = 1; i < Integer.MAX_VALUE; i++)
+ {
+ String name = "branch" + i;
+ if (!names.contains(name))
+ {
+ return name;
+ }
+ }
+
+ throw new IllegalStateException("Too many sub branches: " + branch);
+ }
+
+ /**
+ * @author Eike Stepper
+ */
+ public static class TagHandler extends CreateBranchHandler
+ {
+ }
+}
diff --git a/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/views/CDOSessionsView.java b/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/views/CDOSessionsView.java
index e13e20e9bb..983850a4ba 100644
--- a/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/views/CDOSessionsView.java
+++ b/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/internal/ui/views/CDOSessionsView.java
@@ -27,10 +27,15 @@ import org.eclipse.net4j.util.ui.views.ContainerView;
import org.eclipse.net4j.util.ui.views.IElementFilter;
import org.eclipse.core.runtime.Path;
+import org.eclipse.jface.action.GroupMarker;
+import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.viewers.ITreeSelection;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
+import org.eclipse.ui.IWorkbenchActionConstants;
import org.eclipse.ui.IWorkbenchPage;
import java.util.Collections;
@@ -95,6 +100,22 @@ public class CDOSessionsView extends ContainerView
}
@Override
+ protected void fillContextMenu(IMenuManager manager, ITreeSelection selection)
+ {
+ super.fillContextMenu(manager, selection);
+
+ manager.add(new Separator("group.new"));
+ manager.add(new Separator("group.open"));
+ manager.add(new GroupMarker("group.openWith"));
+ manager.add(new Separator("group.edit"));
+ manager.add(new GroupMarker("group.new.branch"));
+ manager.add(new Separator("group.port"));
+ manager.add(new Separator("group.build"));
+ manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
+ manager.add(new Separator("group.properties"));
+ }
+
+ @Override
protected void doubleClicked(Object object)
{
IWorkbenchPage page = getSite().getPage();
diff --git a/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/ui/CDOItemProvider.java b/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/ui/CDOItemProvider.java
index 1354a016bc..7505300419 100644
--- a/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/ui/CDOItemProvider.java
+++ b/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/ui/CDOItemProvider.java
@@ -643,8 +643,7 @@ public class CDOItemProvider extends ContainerItemProvider<IContainer<Object>>
*/
public void fillBranch(IMenuManager manager, CDOBranch branch)
{
- CDOSession session = CDOUtil.getSession(branch);
- manager.add(new CreateBranchAction(page, session));
+ manager.add(new CreateBranchAction(page, branch.getHead()));
}
/**
diff --git a/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/ui/OverlayImage.java b/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/ui/OverlayImage.java
new file mode 100644
index 0000000000..5c7a9e3b2d
--- /dev/null
+++ b/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/ui/OverlayImage.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright (c) 2004-2014 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.ui;
+
+import org.eclipse.emf.edit.provider.ComposedImage;
+
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * @author Eike Stepper
+ * @since 4.4
+ */
+public final class OverlayImage extends ComposedImage
+{
+ private final int x;
+
+ private final int y;
+
+ public OverlayImage(Object image, Object overlayImage, int x, int y)
+ {
+ super(Arrays.asList(image, overlayImage));
+ this.x = x;
+ this.y = y;
+ }
+
+ @Override
+ public List<ComposedImage.Point> getDrawPoints(Size size)
+ {
+ List<ComposedImage.Point> result = super.getDrawPoints(size);
+ Point overLayPoint = result.get(1);
+ overLayPoint.x = x;
+ overLayPoint.y = y;
+ return result;
+ }
+}
diff --git a/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/ui/widgets/CommitHistoryComposite.java b/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/ui/widgets/CommitHistoryComposite.java
index ad68025bbb..4dc8c3496c 100644
--- a/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/ui/widgets/CommitHistoryComposite.java
+++ b/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/ui/widgets/CommitHistoryComposite.java
@@ -675,7 +675,30 @@ public class CommitHistoryComposite extends Composite
return StringUtil.EMPTY;
}
- return commitInfo.getBranch().getPathName();
+ CDOBranch commitBranch = commitInfo.getBranch();
+ long timeStamp = commitInfo.getTimeStamp();
+
+ StringBuilder builder = null;
+ for (CDOBranch childBranch : commitBranch.getBranches())
+ {
+ if (childBranch.getBase().getTimeStamp() == timeStamp)
+ {
+ if (builder == null)
+ {
+ builder = new StringBuilder(commitBranch.getPathName());
+ }
+
+ builder.append(", ");
+ builder.append(childBranch.getPathName());
+ }
+ }
+
+ if (builder != null)
+ {
+ return builder.toString();
+ }
+
+ return commitBranch.getPathName();
}
@Override
diff --git a/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/ui/widgets/SelectTimeStampComposite.java b/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/ui/widgets/SelectTimeStampComposite.java
index 51c2979cbf..ed23e5ca74 100644
--- a/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/ui/widgets/SelectTimeStampComposite.java
+++ b/plugins/org.eclipse.emf.cdo.ui/src/org/eclipse/emf/cdo/ui/widgets/SelectTimeStampComposite.java
@@ -42,7 +42,7 @@ import java.text.ParseException;
/**
* UI widget allowing users to indicate {@link org.eclipse.emf.cdo.common.branch.CDOBranchPoint timestamp} of a
* particular historical state of a {@link org.eclipse.emf.cdo.common.branch.CDOBranch branch}
- *
+ *
* @author Eike Stepper
* @since 4.0
*/
@@ -73,8 +73,12 @@ public class SelectTimeStampComposite extends Composite implements ValidationPar
super(parent, style);
setLayout(new FillLayout());
+ GridLayout layout = new GridLayout(3, false);
+ layout.marginWidth = 0;
+ layout.marginHeight = 0;
+
pointGroup = new Composite(this, SWT.NONE);
- pointGroup.setLayout(new GridLayout(3, false));
+ pointGroup.setLayout(layout);
headRadio = new Button(pointGroup, SWT.RADIO);
headRadio.setText(Messages.getString("BranchSelectionDialog.1")); //$NON-NLS-1$

Back to the top