Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/org.eclipse.emf.cdo.ui.team/src/org/eclipse/emf/cdo/ui/internal/team/history/CDOHistoryPage.java')
-rw-r--r--plugins/org.eclipse.emf.cdo.ui.team/src/org/eclipse/emf/cdo/ui/internal/team/history/CDOHistoryPage.java273
1 files changed, 216 insertions, 57 deletions
diff --git a/plugins/org.eclipse.emf.cdo.ui.team/src/org/eclipse/emf/cdo/ui/internal/team/history/CDOHistoryPage.java b/plugins/org.eclipse.emf.cdo.ui.team/src/org/eclipse/emf/cdo/ui/internal/team/history/CDOHistoryPage.java
index d7abdaabfc..e198004d9e 100644
--- a/plugins/org.eclipse.emf.cdo.ui.team/src/org/eclipse/emf/cdo/ui/internal/team/history/CDOHistoryPage.java
+++ b/plugins/org.eclipse.emf.cdo.ui.team/src/org/eclipse/emf/cdo/ui/internal/team/history/CDOHistoryPage.java
@@ -11,11 +11,16 @@
package org.eclipse.emf.cdo.ui.internal.team.history;
import org.eclipse.emf.cdo.common.branch.CDOBranch;
+import org.eclipse.emf.cdo.common.branch.CDOBranchPoint;
import org.eclipse.emf.cdo.common.commit.CDOCommitInfo;
import org.eclipse.emf.cdo.common.commit.CDOCommitInfoHandler;
import org.eclipse.emf.cdo.common.commit.CDOCommitInfoManager;
import org.eclipse.emf.cdo.eresource.CDOResourceFolder;
+import org.eclipse.emf.cdo.internal.ui.history.Net;
+import org.eclipse.emf.cdo.internal.ui.history.NetRenderer;
+import org.eclipse.emf.cdo.internal.ui.history.Track;
import org.eclipse.emf.cdo.session.CDOSession;
+import org.eclipse.emf.cdo.spi.common.branch.CDOBranchUtil;
import org.eclipse.emf.cdo.transaction.CDOTransaction;
import org.eclipse.emf.cdo.ui.widgets.CommitHistoryComposite;
import org.eclipse.emf.cdo.ui.widgets.CommitHistoryComposite.Input;
@@ -24,20 +29,32 @@ import org.eclipse.emf.cdo.ui.widgets.CommitHistoryComposite.LabelProvider;
import org.eclipse.emf.cdo.util.CDOUtil;
import org.eclipse.net4j.util.AdapterUtil;
+import org.eclipse.net4j.util.ReflectUtil;
import org.eclipse.net4j.util.event.IListener;
import org.eclipse.net4j.util.lifecycle.ILifecycle;
import org.eclipse.net4j.util.lifecycle.LifecycleEventAdapter;
import org.eclipse.net4j.util.lifecycle.LifecycleUtil;
+import org.eclipse.net4j.util.om.OMPlatform;
import org.eclipse.net4j.util.ui.UIUtil;
import org.eclipse.net4j.util.ui.widgets.StackComposite;
+import org.eclipse.emf.spi.cdo.DefaultCDOMerger;
+
import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IAction;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.util.LocalSelectionTransfer;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.ViewerDropAdapter;
import org.eclipse.swt.SWT;
+import org.eclipse.swt.dnd.DND;
+import org.eclipse.swt.dnd.Transfer;
+import org.eclipse.swt.dnd.TransferData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
@@ -54,14 +71,18 @@ public class CDOHistoryPage extends HistoryPage
{
private static final String POPUP_ID = "#PopupMenu";
+ private static final boolean DEBUG = Boolean
+ .parseBoolean(OMPlatform.INSTANCE.getProperty("org.eclipse.emf.cdo.ui.team.history.debug", "false"));
+
+ private static final boolean TEST = Boolean
+ .parseBoolean(OMPlatform.INSTANCE.getProperty("org.eclipse.emf.cdo.ui.team.history.test", "false"));
+
private StackComposite stackComposite;
private Control offlineControl;
private CommitHistoryComposite commitHistoryComposite;
- private boolean commitOnDoubleClick;
-
private Input input;
private IListener inputListener = new LifecycleEventAdapter()
@@ -117,52 +138,17 @@ public class CDOHistoryPage extends HistoryPage
@Override
protected void doubleClicked(CDOCommitInfo commitInfo)
{
- if (commitOnDoubleClick)
+ if (TEST)
{
- testCommit(commitInfo);
- }
- }
-
- private void testCommit(CDOCommitInfo commitInfo)
- {
- CDOTransaction transaction = null;
-
- try
- {
- CDOSession session = input.getSession();
- CDOBranch branch = commitInfo.getBranch();
-
- final long[] lastCommitTime = { 0 };
- CDOCommitInfoManager commitInfoManager = session.getCommitInfoManager();
- commitInfoManager.getCommitInfos(branch, Long.MAX_VALUE, null, null, -1, new CDOCommitInfoHandler()
+ new TransactionalBranchPointOperation()
{
- public void handleCommitInfo(CDOCommitInfo commitInfo)
+ @Override
+ protected void run(CDOTransaction transaction)
{
- lastCommitTime[0] = commitInfo.getTimeStamp();
+ CDOResourceFolder folder = transaction.getOrCreateResourceFolder("test");
+ folder.addResource("resource-" + folder.getNodes().size());
}
- });
-
- long timeStamp = commitInfo.getTimeStamp();
- if (timeStamp != lastCommitTime[0])
- {
- String name = "branch-" + (timeStamp - session.getRepositoryInfo().getCreationTime()) / 1000;
- branch = branch.createBranch(name, timeStamp);
- }
-
- transaction = session.openTransaction(branch);
- CDOUtil.configureView(transaction);
-
- CDOResourceFolder folder = transaction.getOrCreateResourceFolder("test");
- folder.addResource("resource-" + folder.getNodes().size());
- transaction.commit();
- }
- catch (Exception ex)
- {
- ex.printStackTrace();
- }
- finally
- {
- LifecycleUtil.deactivate(transaction);
+ }.execute(commitInfo);
}
}
};
@@ -170,10 +156,77 @@ public class CDOHistoryPage extends HistoryPage
stackComposite.setTopControl(commitHistoryComposite);
IPageSite site = getSite();
- TableViewer tableViewer = commitHistoryComposite.getTableViewer();
+ final TableViewer tableViewer = commitHistoryComposite.getTableViewer();
UIUtil.addDragSupport(tableViewer);
+ if (TEST)
+ {
+ tableViewer.addDropSupport(DND.DROP_MOVE, new Transfer[] { LocalSelectionTransfer.getTransfer() },
+ new ViewerDropAdapter(tableViewer)
+ {
+ {
+ // We don't want it to look like you can insert new elements, only drop onto existing elements
+ setFeedbackEnabled(false);
+ }
+
+ @Override
+ public boolean validateDrop(Object target, int operation, TransferData transferType)
+ {
+ if (target instanceof CDOBranchPoint
+ && LocalSelectionTransfer.getTransfer().isSupportedType(transferType))
+ {
+ CDOBranchPoint objectToDrop = getObjectToDrop(transferType);
+ if (objectToDrop != null)
+ {
+ if (CDOBranchUtil.isContainedBy(objectToDrop, (CDOBranchPoint)target))
+ {
+ return false;
+ }
+
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ @Override
+ public boolean performDrop(Object data)
+ {
+ final CDOBranchPoint objectToDrop = UIUtil.getElement((ISelection)data, CDOBranchPoint.class);
+ final CDOBranchPoint dropTarget = (CDOBranchPoint)getCurrentTarget();
+
+ boolean result = new TransactionalBranchPointOperation()
+ {
+ @Override
+ protected void run(CDOTransaction transaction)
+ {
+ transaction.merge(objectToDrop, new DefaultCDOMerger.PerFeature.ManyValued());
+ }
+ }.execute(dropTarget);
+
+ if (result)
+ {
+ tableViewer.getControl().setFocus();
+ tableViewer.setSelection(new StructuredSelection(dropTarget));
+ }
+
+ return result;
+ }
+
+ private CDOBranchPoint getObjectToDrop(TransferData transferType)
+ {
+ return UIUtil.getElement(LocalSelectionTransfer.getTransfer().getSelection(), CDOBranchPoint.class);
+ }
+ });
+ }
+
+ if (TEST)
+ {
+ ((LabelProvider)tableViewer.getLabelProvider()).setFormatTimeStamps(false);
+ }
+
MenuManager menuManager = new MenuManager(POPUP_ID);
menuManager.add(new Separator("compare"));
menuManager.add(new Separator("branching"));
@@ -198,7 +251,7 @@ public class CDOHistoryPage extends HistoryPage
public void refresh()
{
- commitHistoryComposite.refreshLayout();
+ commitHistoryComposite.refreshLayout(true);
}
@SuppressWarnings({ "rawtypes", "unchecked" })
@@ -265,34 +318,55 @@ public class CDOHistoryPage extends HistoryPage
protected void setupToolBar(IToolBarManager manager)
{
+ if (DEBUG)
+ {
+ manager.add(new Action("DEBUG", IAction.AS_PUSH_BUTTON)
+ {
+ @SuppressWarnings("unused")
+ @Override
+ public void run()
+ {
+ NetRenderer netRenderer = (NetRenderer)ReflectUtil
+ .getValue(ReflectUtil.getField(CommitHistoryComposite.class, "netRenderer"), commitHistoryComposite);
+
+ Net net = netRenderer.getNet();
+ Track[] tracks = net.getTracks();
+ CDOSession session = net.getSession();
+ System.out.println("Debug " + net); // Set a breakpoint on this line to inspect the net.
+ }
+ });
+ }
}
protected void setupViewMenu(IMenuManager manager)
{
- manager.add(new Action("Format Time Stamps", SWT.CHECK)
+ manager.add(new TableRedrawingAction("Format Time Stamps", SWT.CHECK)
{
+ @Override
+ protected boolean getInitialCheckState(LabelProvider labelProvider)
{
- LabelProvider labelProvider = commitHistoryComposite.getLabelProvider();
- setChecked(labelProvider.isFormatTimeStamps());
+ return labelProvider.isFormatTimeStamps();
}
@Override
- public void run()
+ protected void doRun(LabelProvider labelProvider)
{
- LabelProvider labelProvider = commitHistoryComposite.getLabelProvider();
labelProvider.setFormatTimeStamps(!labelProvider.isFormatTimeStamps());
-
- TableViewer tableViewer = commitHistoryComposite.getTableViewer();
- tableViewer.refresh(true);
}
});
- manager.add(new Action("Test Commit on Double Click", SWT.CHECK)
+ manager.add(new TableRedrawingAction("Shorten Branch Paths", SWT.CHECK)
{
@Override
- public void run()
+ protected boolean getInitialCheckState(LabelProvider labelProvider)
{
- commitOnDoubleClick = !commitOnDoubleClick;
+ return labelProvider.isShortenBranchPaths();
+ }
+
+ @Override
+ protected void doRun(LabelProvider labelProvider)
+ {
+ labelProvider.setShortenBranchPaths(!labelProvider.isShortenBranchPaths());
}
});
}
@@ -314,4 +388,89 @@ public class CDOHistoryPage extends HistoryPage
return false;
}
}
+
+ /**
+ * @author Eike Stepper
+ */
+ private abstract class TableRedrawingAction extends Action
+ {
+ private final LabelProvider labelProvider = commitHistoryComposite.getLabelProvider();
+
+ public TableRedrawingAction(String text, int style)
+ {
+ super(text, style);
+ setChecked(getInitialCheckState(labelProvider));
+ }
+
+ @Override
+ public void run()
+ {
+ doRun(labelProvider);
+ commitHistoryComposite.getTableViewer().getTable().redraw();
+ }
+
+ protected abstract void doRun(LabelProvider labelProvider);
+
+ protected abstract boolean getInitialCheckState(LabelProvider labelProvider);
+ }
+
+ /**
+ * @author Eike Stepper
+ */
+ private abstract class TransactionalBranchPointOperation
+ {
+ public boolean execute(CDOBranchPoint branchPoint)
+ {
+ CDOTransaction transaction = null;
+
+ try
+ {
+ CDOSession session = input.getSession();
+ CDOBranch branch = branchPoint.getBranch();
+
+ final long[] lastCommitTime = { 0 };
+ CDOCommitInfoManager commitInfoManager = session.getCommitInfoManager();
+ commitInfoManager.getCommitInfos(branch, Long.MAX_VALUE, null, null, -1, new CDOCommitInfoHandler()
+ {
+ public void handleCommitInfo(CDOCommitInfo commitInfo)
+ {
+ lastCommitTime[0] = commitInfo.getTimeStamp();
+ }
+ });
+
+ long timeStamp = branchPoint.getTimeStamp();
+ if (timeStamp != lastCommitTime[0])
+ {
+ String name = "branch" + (timeStamp - session.getRepositoryInfo().getCreationTime()) / 1000;
+ branch = branch.createBranch(name, timeStamp);
+ }
+
+ transaction = session.openTransaction(branch);
+ CDOUtil.configureView(transaction);
+
+ try
+ {
+ run(transaction);
+ transaction.commit();
+ return true;
+ }
+ catch (Throwable ex)
+ {
+ ex.printStackTrace();
+ }
+ }
+ catch (Exception ex)
+ {
+ ex.printStackTrace();
+ }
+ finally
+ {
+ LifecycleUtil.deactivate(transaction);
+ }
+
+ return false;
+ }
+
+ protected abstract void run(CDOTransaction transaction) throws Exception;
+ }
}

Back to the top