From 9aa71322cd6bc61cd7da179ed21e3bcbefb21cff Mon Sep 17 00:00:00 2001 From: Bruno Sinou Date: Tue, 6 Nov 2012 18:00:44 +0000 Subject: [PATCH] Various enhancements of the result tree viewer git-svn-id: https://svn.argeo.org/slc/trunk@5715 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- .../icons/executionError.gif | Bin 0 -> 178 bytes .../icons/myResult.png | Bin 0 -> 421 bytes .../org/argeo/slc/client/ui/SlcImages.java | 1 + .../argeo/slc/client/ui/SlcUiConstants.java | 5 + .../slc/client/ui/commands/DeleteResult.java | 1 - .../ui/decorators/ResultFailedDecorator.java | 30 +++- .../client/ui/model/ResultParentUtils.java | 5 +- .../ui/providers/ResultTreeLabelProvider.java | 13 +- .../client/ui/views/JcrResultTreeView.java | 138 +++++++++++++----- 9 files changed, 147 insertions(+), 46 deletions(-) create mode 100644 plugins/org.argeo.slc.client.ui/icons/executionError.gif create mode 100644 plugins/org.argeo.slc.client.ui/icons/myResult.png diff --git a/plugins/org.argeo.slc.client.ui/icons/executionError.gif b/plugins/org.argeo.slc.client.ui/icons/executionError.gif new file mode 100644 index 0000000000000000000000000000000000000000..e861399088bee69bccd8875ab1dcd5a2bd58cc7b GIT binary patch literal 178 zcmZ?wbhEHbWMklEXpv(0VPNvh*!-ul`5!aOzm`_Ni_890RQ;}~`nhZOXLbEg>iXZb zjlSs^{mCi%om=#$xcs%G`fDlmcXC>9||ioU!c|}jQE%inZ4pgiy(*AH`!qOa-N`HrW@v>`kRQiJ?_tYD`zkh5`tI^?BGoYPR z2fwa!#Q_avED7=pW^j0RBMrn!@^*Kzw@WrC1#&nGJR*yMv folders = new ArrayList(); diff --git a/plugins/org.argeo.slc.client.ui/src/main/java/org/argeo/slc/client/ui/providers/ResultTreeLabelProvider.java b/plugins/org.argeo.slc.client.ui/src/main/java/org/argeo/slc/client/ui/providers/ResultTreeLabelProvider.java index 251f066ea..bae1c9dc0 100644 --- a/plugins/org.argeo.slc.client.ui/src/main/java/org/argeo/slc/client/ui/providers/ResultTreeLabelProvider.java +++ b/plugins/org.argeo.slc.client.ui/src/main/java/org/argeo/slc/client/ui/providers/ResultTreeLabelProvider.java @@ -2,6 +2,7 @@ package org.argeo.slc.client.ui.providers; import org.argeo.eclipse.ui.TreeParent; import org.argeo.slc.client.ui.SlcImages; +import org.argeo.slc.client.ui.SlcUiConstants; import org.argeo.slc.client.ui.model.ResultParent; import org.argeo.slc.client.ui.model.SingleResultNode; import org.eclipse.jface.viewers.LabelProvider; @@ -9,6 +10,8 @@ import org.eclipse.swt.graphics.Image; /** Basic label provider for a tree of result */ public class ResultTreeLabelProvider extends LabelProvider { + // private final static Log log = LogFactory + // .getLog(ResultTreeLabelProvider.class); @Override public String getText(Object element) { @@ -22,9 +25,13 @@ public class ResultTreeLabelProvider extends LabelProvider { // Node resultNode = ((SingleResultNode) obj).getNode(); // int status = SlcJcrUtils.aggregateTestStatus(resultNode); return SlcImages.PROCESS_COMPLETED; - } else if (obj instanceof ResultParent) - return SlcImages.FOLDER; - else + } else if (obj instanceof ResultParent) { + ResultParent rParent = (ResultParent) obj; + if (SlcUiConstants.DEFAULT_MY_RESULTS_FOLDER_LABEL.equals(rParent.getName())) + return SlcImages.MY_RESULTS_FOLDER; + else + return SlcImages.FOLDER; + } else return null; } } diff --git a/plugins/org.argeo.slc.client.ui/src/main/java/org/argeo/slc/client/ui/views/JcrResultTreeView.java b/plugins/org.argeo.slc.client.ui/src/main/java/org/argeo/slc/client/ui/views/JcrResultTreeView.java index 1dbeb6c57..bef8f2082 100644 --- a/plugins/org.argeo.slc.client.ui/src/main/java/org/argeo/slc/client/ui/views/JcrResultTreeView.java +++ b/plugins/org.argeo.slc.client.ui/src/main/java/org/argeo/slc/client/ui/views/JcrResultTreeView.java @@ -24,7 +24,10 @@ import org.argeo.jcr.JcrUtils; import org.argeo.jcr.UserJcrUtils; import org.argeo.slc.SlcException; import org.argeo.slc.client.ui.ClientUiPlugin; +import org.argeo.slc.client.ui.SlcUiConstants; import org.argeo.slc.client.ui.commands.AddResultFolder; +import org.argeo.slc.client.ui.editors.ProcessEditor; +import org.argeo.slc.client.ui.editors.ProcessEditorInput; import org.argeo.slc.client.ui.model.ParentNodeFolder; import org.argeo.slc.client.ui.model.ResultFolder; import org.argeo.slc.client.ui.model.ResultParent; @@ -41,6 +44,8 @@ import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.viewers.ColumnLabelProvider; import org.eclipse.jface.viewers.DecoratingLabelProvider; +import org.eclipse.jface.viewers.DoubleClickEvent; +import org.eclipse.jface.viewers.IDoubleClickListener; import org.eclipse.jface.viewers.ILabelDecorator; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.IStructuredContentProvider; @@ -66,7 +71,9 @@ import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Menu; import org.eclipse.ui.ISharedImages; +import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.IWorkbenchWindow; +import org.eclipse.ui.PlatformUI; import org.eclipse.ui.part.ViewPart; /** SLC generic JCR Result tree view. */ @@ -90,8 +97,9 @@ public class JcrResultTreeView extends ViewPart { NodeType.NT_UNSTRUCTURED }; // FIXME cache to ease refresh after D&D - private ResultParent lastSelectedElement; - private ResultParent lastSelectedElementParent; + private ResultParent lastSelectedTargetElement; + private ResultParent lastSelectedTargetElementParent; + private ResultParent lastSelectedSourceElementParent; /** * To be overridden to adapt size of form and result frames. @@ -141,6 +149,8 @@ public class JcrResultTreeView extends ViewPart { .getDecoratorManager().getLabelDecorator(); viewer.setLabelProvider(new DecoratingLabelProvider(rtLblProvider, decorator)); + viewer.addDoubleClickListener(new ViewDoubleClickListener()); + // viewer.setLabelProvider(rtLblProvider); getSite().setSelectionProvider(viewer); @@ -175,8 +185,8 @@ public class JcrResultTreeView extends ViewPart { .getNode()); else propertiesViewer.setInput(null); - lastSelectedElement = (ResultParent) firstItem; - lastSelectedElementParent = (ResultParent) ((ResultParent) firstItem) + lastSelectedTargetElement = (ResultParent) firstItem; + lastSelectedTargetElementParent = (ResultParent) ((ResultParent) firstItem) .getParent(); } } @@ -250,6 +260,33 @@ public class JcrResultTreeView extends ViewPart { return propertiesViewer; } + /** + * Override to provide specific behaviour. Typically to enable the display + * of a result file. + * + * @param evt + */ + protected void processDoubleClick(DoubleClickEvent evt) { + Object obj = ((IStructuredSelection) evt.getSelection()) + .getFirstElement(); + try { + if (obj instanceof SingleResultNode) { + SingleResultNode srNode = (SingleResultNode) obj; + Node node = srNode.getNode(); + // FIXME: open a default result editor + if (node.isNodeType(SlcTypes.SLC_PROCESS)) { + IWorkbenchPage activePage = PlatformUI.getWorkbench() + .getActiveWorkbenchWindow().getActivePage(); + activePage.openEditor( + new ProcessEditorInput(node.getPath()), + ProcessEditor.ID); + } + } + } catch (Exception e) { + throw new SlcException("Cannot open " + obj, e); + } + } + @Override public void setFocus() { } @@ -322,7 +359,7 @@ public class JcrResultTreeView extends ViewPart { ResultFolder currFolder = (ResultFolder) resultParent; jcrRefresh(currFolder.getNode()); currFolder.forceFullRefresh(); - resultTreeViewer.refresh(lastSelectedElement); + resultTreeViewer.refresh(lastSelectedTargetElement); } } } @@ -336,7 +373,7 @@ public class JcrResultTreeView extends ViewPart { // My results roots[0] = new ParentNodeFolder(null, SlcJcrResultUtils.getMyResultParentNode(session), - "My results"); + SlcUiConstants.DEFAULT_MY_RESULTS_FOLDER_LABEL); // today Calendar cal = Calendar.getInstance(); @@ -428,7 +465,6 @@ public class JcrResultTreeView extends ViewPart { public void dragStart(DragSourceEvent event) { // Check if the drag action should start. - IStructuredSelection selection = (IStructuredSelection) resultTreeViewer .getSelection(); boolean doIt = false; @@ -438,12 +474,16 @@ public class JcrResultTreeView extends ViewPart { if (obj instanceof SingleResultNode) { Node tNode = ((SingleResultNode) obj).getNode(); try { + // if (tNode.getPrimaryNodeType().isNodeType( + // SlcTypes.SLC_TEST_RESULT) + // && (tNode.getPath() + // .startsWith(SlcJcrResultUtils + // .getSlcResultsBasePath(session)))) if (tNode.getPrimaryNodeType().isNodeType( - SlcTypes.SLC_TEST_RESULT) - && (tNode.getPath() - .startsWith(SlcJcrResultUtils - .getSlcResultsBasePath(session)))) + SlcTypes.SLC_TEST_RESULT)) doIt = true; + lastSelectedSourceElementParent = (ResultParent) ((SingleResultNode) obj) + .getParent(); } catch (RepositoryException re) { throw new SlcException( "unexpected error while validating drag source", @@ -462,6 +502,7 @@ public class JcrResultTreeView extends ViewPart { Node first = ((SingleResultNode) obj).getNode(); try { event.data = first.getIdentifier(); + } catch (RepositoryException re) { throw new SlcException( "unexpected error while setting data", re); @@ -478,6 +519,7 @@ public class JcrResultTreeView extends ViewPart { protected class ViewDropListener extends ViewerDropAdapter { private Node currParentNode = null; + private boolean copyNode = true; public ViewDropListener(Viewer viewer) { super(viewer); @@ -512,10 +554,20 @@ public class JcrResultTreeView extends ViewPart { currParentNode = targetParentNode; validDrop = true; // FIXME - lastSelectedElement = (ResultParent) target; - lastSelectedElementParent = (ResultParent) ((ResultParent) target) + lastSelectedTargetElement = (ResultParent) target; + lastSelectedTargetElementParent = (ResultParent) ((ResultParent) target) .getParent(); } + // Check if it's a move or a copy + if (validDrop) { + String pPath = ""; + if (lastSelectedSourceElementParent instanceof ResultFolder) + pPath = ((ResultFolder) lastSelectedSourceElementParent) + .getNode().getPath(); + if ((pPath.startsWith(SlcJcrResultUtils + .getMyResultsBasePath(session)))) + copyNode = false; + } } catch (RepositoryException re) { throw new SlcException( "unexpected error while validating drop target", re); @@ -528,15 +580,31 @@ public class JcrResultTreeView extends ViewPart { try { Node source = session.getNodeByIdentifier((String) data); - Node target = currParentNode.addNode(source.getName(), source - .getPrimaryNodeType().getName()); - JcrUtils.copy(source, target); - ResultParentUtils - .updatePassedStatus(target, - target.getNode(SlcNames.SLC_STATUS) - .getProperty(SlcNames.SLC_SUCCESS) - .getBoolean()); - target.getSession().save(); + if (copyNode) { + Node target = currParentNode.addNode(source.getName(), + source.getPrimaryNodeType().getName()); + JcrUtils.copy(source, target); + ResultParentUtils.updatePassedStatus( + target, + target.getNode(SlcNames.SLC_STATUS) + .getProperty(SlcNames.SLC_SUCCESS) + .getBoolean()); + target.getSession().save(); + } else // move only + { + String sourcePath = source.getPath(); + String destPath = currParentNode.getPath() + "/" + + source.getName(); + session.move(sourcePath, destPath); + session.save(); + Node target = session.getNode(destPath); + ResultParentUtils.updatePassedStatus( + target, + target.getNode(SlcNames.SLC_STATUS) + .getProperty(SlcNames.SLC_SUCCESS) + .getBoolean()); + session.save(); + } } catch (RepositoryException re) { throw new SlcException( "unexpected error while copying dropped node", re); @@ -589,7 +657,7 @@ public class JcrResultTreeView extends ViewPart { jcrRefresh(currNode); resultTreeViewer.refresh(true); resultTreeViewer.expandToLevel( - lastSelectedElementParent, 1); + lastSelectedTargetElementParent, 1); } } @@ -601,29 +669,16 @@ public class JcrResultTreeView extends ViewPart { || currNode .isNodeType(SlcTypes.SLC_RESULT_FOLDER)) { refresh(null); - resultTreeViewer.expandToLevel(lastSelectedElement, - 1); + resultTreeViewer.expandToLevel( + lastSelectedTargetElement, 1); } } } - // String path = event.getPath(); - // int index = path.lastIndexOf('/'); - // String propertyName = path.substring(index + 1); - // if (propertyName.equals(SlcNames.SLC_COMPLETED) - // || propertyName.equals(SlcNames.SLC_UUID)) { - // } } - - // FIXME implement correct behaviour. treeViewer selection is - // disposed by the drag & drop. - // resultTreeViewer.refresh(); - // refresh(null); - // log.warn("Implement refresh."); } } class PropertiesContentProvider implements IStructuredContentProvider { - // private JcrItemsComparator itemComparator = new JcrItemsComparator(); public void dispose() { } @@ -649,6 +704,13 @@ public class JcrResultTreeView extends ViewPart { } } + class ViewDoubleClickListener implements IDoubleClickListener { + public void doubleClick(DoubleClickEvent evt) { + processDoubleClick(evt); + } + + } + /* DEPENDENCY INJECTION */ public void setSession(Session session) { this.session = session; -- 2.39.2