First draft of TestResult Detail Implementation
authorBruno Sinou <bsinou@argeo.org>
Fri, 1 Oct 2010 10:50:31 +0000 (10:50 +0000)
committerBruno Sinou <bsinou@argeo.org>
Fri, 1 Oct 2010 10:50:31 +0000 (10:50 +0000)
git-svn-id: https://svn.argeo.org/slc/trunk@3814 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

20 files changed:
eclipse/plugins/org.argeo.slc.client.core/META-INF/MANIFEST.MF
eclipse/plugins/org.argeo.slc.client.core/src/main/java/org/argeo/slc/client/aspects/ContentProviderAspect.java
eclipse/plugins/org.argeo.slc.client.core/src/main/java/org/argeo/slc/client/contentprovider/ProcessDetailContentProvider.java
eclipse/plugins/org.argeo.slc.client.core/src/main/java/org/argeo/slc/client/contentprovider/ResultDetailContentProvider.java [new file with mode: 0644]
eclipse/plugins/org.argeo.slc.client.core/src/main/java/org/argeo/slc/client/contentprovider/ResultDetailLabelProvider.java [new file with mode: 0644]
eclipse/plugins/org.argeo.slc.client.hibernate/META-INF/MANIFEST.MF
eclipse/plugins/org.argeo.slc.client.hibernate/META-INF/spring/core.xml
eclipse/plugins/org.argeo.slc.client.hibernate/META-INF/spring/osgi.xml
eclipse/plugins/org.argeo.slc.client.rcp/src/org/argeo/slc/client/rcp/Perspective.java
eclipse/plugins/org.argeo.slc.client.ui/META-INF/MANIFEST.MF
eclipse/plugins/org.argeo.slc.client.ui/META-INF/spring/commands.xml
eclipse/plugins/org.argeo.slc.client.ui/META-INF/spring/osgi.xml
eclipse/plugins/org.argeo.slc.client.ui/META-INF/spring/views.xml
eclipse/plugins/org.argeo.slc.client.ui/plugin.xml
eclipse/plugins/org.argeo.slc.client.ui/src/org/argeo/slc/client/ui/commands/ProcessDetailsDisplayHandler.java
eclipse/plugins/org.argeo.slc.client.ui/src/org/argeo/slc/client/ui/commands/ResultDetailsDisplayHandler.java [new file with mode: 0644]
eclipse/plugins/org.argeo.slc.client.ui/src/org/argeo/slc/client/ui/views/ProcessDetailView.java
eclipse/plugins/org.argeo.slc.client.ui/src/org/argeo/slc/client/ui/views/ProcessListView.java
eclipse/plugins/org.argeo.slc.client.ui/src/org/argeo/slc/client/ui/views/ResultDetailView.java [new file with mode: 0644]
eclipse/plugins/org.argeo.slc.client.ui/src/org/argeo/slc/client/ui/views/ResultListView.java

index ba13ce9c7466138fac003908ea0ddc16f36106e2..a2069030569014df235baf9c0235a0737ed7a77d 100644 (file)
@@ -12,7 +12,10 @@ Import-Package: org.apache.commons.io;version="1.4.0",
  org.apache.commons.logging;version="1.1.1",
  org.argeo.eclipse.spring,
  org.argeo.eclipse.ui,
+ org.argeo.slc.core.structure.tree,
+ org.argeo.slc.core.test.tree,
  org.argeo.slc.dao.process,
+ org.argeo.slc.dao.test.tree,
  org.argeo.slc.process,
  org.aspectj.lang,
  org.aspectj.lang.annotation,
index f92d9d57174222b0114a491f5f6662ec82b5ec16..9a104b0b4a2e8750aba8c95bf2642fbb87d9d682 100644 (file)
@@ -29,7 +29,8 @@ public class ContentProviderAspect {
 
        // PointCuts
        @Pointcut("(execution (* org.argeo.slc.client.contentprovider.ProcessListTableLabelProvider.get*(..)) && args(o,..))"
-                       + " || (execution (* org.argeo.slc.client.contentprovider.ProcessDetailContentProvider.get*(..)) && args(o,..))")
+                       + " || (execution (* org.argeo.slc.client.contentprovider.ProcessDetailContentProvider.get*(..)) && args(o,..))"
+                       + " || (execution (* org.argeo.slc.client.contentprovider.ResultDetailContentProvider.get*(..)) && args(o,..))")
        void contentProviderGetterWrapper(Object o) {
        }
 
index da2a793eeaeec035a77dff6572e6b7c0d3984dfc..a89c907527b2a42e3a02cee4cf32d13330b23277 100644 (file)
@@ -108,6 +108,9 @@ public class ProcessDetailContentProvider implements ITreeContentProvider {
        }
 
        public Object[] getElements(Object parent) {
+               // return getChildren(parent);
+               // Here we must dupplicate the code otherwise the inner call to method
+               // getChildren(parent); is not intercepted by AspectJ
                if (parent instanceof SlcExecution) {
                        slcExecution = (SlcExecution) parent;
 
@@ -125,7 +128,6 @@ public class ProcessDetailContentProvider implements ITreeContentProvider {
                        log.debug(" Realized flows : ");
                        return steps.toArray();
                }
-               // return getChildren(parent);
                return null;
        }
 
@@ -162,7 +164,7 @@ public class ProcessDetailContentProvider implements ITreeContentProvider {
        // public ExecutionModuleDescriptor getDescriptor() {
        // return descriptor;
        // }
-       //              Object o = thisJoinPoint.getArgs()[0];
+       // Object o = thisJoinPoint.getArgs()[0];
 
        // public void cacheDescriptor(ExecutionModuleDescriptor descriptor) {
        // this.descriptor = descriptor;
diff --git a/eclipse/plugins/org.argeo.slc.client.core/src/main/java/org/argeo/slc/client/contentprovider/ResultDetailContentProvider.java b/eclipse/plugins/org.argeo.slc.client.core/src/main/java/org/argeo/slc/client/contentprovider/ResultDetailContentProvider.java
new file mode 100644 (file)
index 0000000..c9f1818
--- /dev/null
@@ -0,0 +1,265 @@
+package org.argeo.slc.client.contentprovider;
+
+import java.util.SortedMap;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.argeo.slc.core.structure.tree.TreeSPath;
+import org.argeo.slc.core.test.tree.PartSubList;
+import org.argeo.slc.core.test.tree.TreeTestResult;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.Viewer;
+
+/**
+ * Basic tree view of the chosen process details
+ */
+public class ResultDetailContentProvider implements ITreeContentProvider {
+       private final static Log log = LogFactory
+                       .getLog(ResultDetailContentProvider.class);
+
+       private TreeTestResult treeTestResult;
+
+       public Object[] getChildren(Object parent) {
+               if (parent instanceof TreeTestResult) {
+                       treeTestResult = (TreeTestResult) parent;
+
+                       SortedMap<TreeSPath, PartSubList> parts = treeTestResult
+                                       .getResultParts();
+
+                       for (TreeSPath key : parts.keySet()) {
+                               log.debug("Test[" + key.toString() + "] isPassed = "
+                                               + parts.get(key).getIsPassed());
+                       }
+
+                       return parts.keySet().toArray();
+               }
+               // if (parent instanceof ExecutionModuleNode) {
+               // ExecutionModuleNode executionModuleNode = (ExecutionModuleNode)
+               // parent;
+               // ExecutionModuleDescriptor emd =
+               // executionModuleNode.getDescriptor();
+               // emd = executionModuleNode.getAgentNode().getAgent()
+               // .getExecutionModuleDescriptor(emd.getName(),
+               // emd.getVersion());
+               // executionModuleNode.cacheDescriptor(emd);
+               // // for (String flowName :
+               // executionModuleNode.getFlowDescriptors()
+               // // .keySet()) {
+               // // executionModuleNode.addChild(new FlowNode(flowName,
+               // // executionModuleNode));
+               // // }
+               // return executionModuleNode.getChildren();
+               // } else if (parent instanceof AgentNode) {
+               // AgentNode agentNode = (AgentNode) parent;
+               //
+               // if (log.isTraceEnabled())
+               // log.trace("Scan agent " + agentNode);
+               //
+               // agentNode.clearChildren();
+               // for (ExecutionModuleDescriptor desc : agentNode.getAgent()
+               // .listExecutionModuleDescriptors()) {
+               // agentNode.addChild(new ExecutionModuleNode(agentNode, desc));
+               // }
+               //
+               // return agentNode.getChildren();
+               // } else if (parent instanceof TreeParent) {
+               // return ((TreeParent) parent).getChildren();
+               // } else if (parent instanceof FlowNode) {
+               // return new Object[0];
+               // } else {
+               // List<AgentNode> agentNodes = new ArrayList<AgentNode>();
+               // for (SlcAgent slcAgent : slcAgents) {
+               // agentNodes.add(new AgentNode(slcAgent));
+               // }
+               // return agentNodes.toArray();
+               // }
+               return null;
+       }
+
+       public Object getParent(Object node) {
+               // if (node instanceof TreeObject) {
+               // return ((TreeObject) node).getParent();
+               // }
+               return null;
+       }
+
+       public boolean hasChildren(Object parent) {
+               // if (parent instanceof TreeParent && ((TreeParent) parent).isLoaded())
+               // {
+               // return ((TreeParent) parent).hasChildren();
+               // } else if (parent instanceof AgentNode) {
+               // return true;
+               // } else if (parent instanceof ExecutionModuleNode) {
+               // return true;
+               // }
+               return false;
+       }
+
+       public void inputChanged(Viewer v, Object oldInput, Object newInput) {
+       }
+
+       public void dispose() {
+       }
+
+       public Object[] getElements(Object parent) {
+               if (parent instanceof TreeTestResult) {
+                       treeTestResult = (TreeTestResult) parent;
+
+                       SortedMap<TreeSPath, PartSubList> parts = treeTestResult
+                                       .getResultParts();
+
+                       for (TreeSPath key : parts.keySet()) {
+                               log.debug("Test[" + key.toString() + "] isPassed = "
+                                               + parts.get(key).getIsPassed());
+                       }
+
+                       return parts.keySet().toArray();
+               }
+               // return getChildren(parent);
+               return null;
+       }
+
+       // public class AgentNode extends TreeParent {
+       // private final SlcAgent agent;
+       //
+       // public AgentNode(SlcAgent agent) {
+       // super(agent.toString());
+       // this.agent = agent;
+       // }
+
+       // public SlcAgent getAgent() {
+       // return agent;
+       // }
+       // }
+
+       // public class ExecutionModuleNode extends TreeParent {
+       // private final AgentNode agentNode;
+       // private ExecutionModuleDescriptor descriptor;
+       // private Map<String, ExecutionFlowDescriptor> flowDescriptors;
+       //
+       // public ExecutionModuleNode(AgentNode agentNode,
+       // ExecutionModuleDescriptor descriptor) {
+       // super(descriptor.toString());
+       // this.agentNode = agentNode;
+       // this.descriptor = descriptor;
+       //
+       // }
+       //
+       // public AgentNode getAgentNode() {
+       // return agentNode;
+       // }
+       //
+       // public ExecutionModuleDescriptor getDescriptor() {
+       // return descriptor;
+       // }
+       // Object o = thisJoinPoint.getArgs()[0];
+
+       // public void cacheDescriptor(ExecutionModuleDescriptor descriptor) {
+       // this.descriptor = descriptor;
+       //
+       // SortedMap<String, FolderNode> folderNodes = new TreeMap<String,
+       // FolderNode>();
+       //
+       // flowDescriptors = new HashMap<String, ExecutionFlowDescriptor>();
+       // for (ExecutionFlowDescriptor fd : descriptor.getExecutionFlows()) {
+       // // if (log.isTraceEnabled())
+       // // log.trace("fd.path=" + fd.getPath() + ", fd.name="
+       // // + fd.getName());
+       //
+       // // find path and label
+       // String path;
+       // String label;
+       // int lastSlash = fd.getName().lastIndexOf('/');
+       // if ((fd.getPath() == null || fd.getPath().trim().equals(""))
+       // && lastSlash >= 0) {
+       // path = fd.getName().substring(0, lastSlash);
+       // label = fd.getName().substring(lastSlash + 1);
+       // } else {
+       // path = fd.getPath();
+       // label = fd.getName();
+       // }
+       // // if (log.isTraceEnabled())
+       // // log.trace("path=" + path + ", label=" + label);
+       //
+       // if (path == null || path.trim().equals("")
+       // || path.trim().equals("/")) {
+       // // directChildren.put(name, new FlowNode(name, this));
+       // addChild(new FlowNode(label, fd.getName(), this));
+       // } else {
+       // FolderNode folderNode = mkdirs(this, path, folderNodes);
+       // folderNode
+       // .addChild(new FlowNode(label, fd.getName(), this));
+       // }
+       //
+       // flowDescriptors.put(fd.getName(), fd);
+       // }
+       // // TODO: make it readonly
+       // }
+       //
+       // protected FolderNode mkdirs(TreeParent root, String path,
+       // SortedMap<String, FolderNode> folderNodes) {
+       // // Normalize
+       // if (path.charAt(0) != '/')
+       // path = '/' + path;
+       // if (path.charAt(path.length() - 1) == '/')
+       // path = path.substring(0, path.length() - 1);
+       //
+       // if (folderNodes.containsKey(path))
+       // return folderNodes.get(path);
+       //
+       // int lastIndx = path.lastIndexOf('/');
+       // String folderName;
+       // String parentPath;
+       // if (lastIndx >= 0) {
+       // folderName = path.substring(lastIndx + 1);
+       // parentPath = path.substring(0, lastIndx);
+       // } else {
+       // folderName = path;
+       // parentPath = "";
+       // }
+       //
+       // TreeParent parent;
+       // if (parentPath.equals(""))
+       // parent = root;
+       // else
+       // parent = mkdirs(root, parentPath, folderNodes);
+       // FolderNode newFolder = new FolderNode(folderName);
+       // parent.addChild(newFolder);
+       // folderNodes.put(path, newFolder);
+       // return newFolder;
+       // }
+       //
+       // public Map<String, ExecutionFlowDescriptor> getFlowDescriptors() {
+       // return flowDescriptors;
+       // }
+       //
+       // }
+       //
+       // public class FlowNode extends TreeObject {
+       // private final String flowName;
+       // private final ExecutionModuleNode executionModuleNode;
+       //
+       // public FlowNode(String label, String flowName,
+       // ExecutionModuleNode executionModuleNode) {
+       // super(label);
+       // this.flowName = flowName;
+       // this.executionModuleNode = executionModuleNode;
+       // }
+       //
+       // public String getFlowName() {
+       // return flowName;
+       // }
+       //
+       // public ExecutionModuleNode getExecutionModuleNode() {
+       // return executionModuleNode;
+       // }
+       //
+       // }
+       //
+       // public class FolderNode extends TreeParent {
+       // public FolderNode(String name) {
+       // super(name);
+       // }
+       //
+       // }
+}
diff --git a/eclipse/plugins/org.argeo.slc.client.core/src/main/java/org/argeo/slc/client/contentprovider/ResultDetailLabelProvider.java b/eclipse/plugins/org.argeo.slc.client.core/src/main/java/org/argeo/slc/client/contentprovider/ResultDetailLabelProvider.java
new file mode 100644 (file)
index 0000000..e32e493
--- /dev/null
@@ -0,0 +1,37 @@
+package org.argeo.slc.client.contentprovider;
+
+import org.argeo.slc.process.SlcExecution;
+import org.eclipse.jface.viewers.ITableLabelProvider;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.swt.graphics.Image;
+
+/**
+ * @author bsinou
+ * 
+ *         Fill ResultDetail view. Deported in an external bundle so that main
+ *         slc ui bundle does not depend on DB implementation.
+ */
+public class ResultDetailLabelProvider extends LabelProvider implements
+               ITableLabelProvider {
+       public String getColumnText(Object obj, int index) {
+               
+               SlcExecution se = (SlcExecution) obj;
+               switch (index) {
+
+               case 0:
+                       return getText(se.getStartDate());
+               case 1:
+                       return se.getHost();
+               case 2:
+                       return se.getUuid();
+               case 3:
+                       return se.currentStep().getType();
+               }
+               return getText(obj);
+       }
+
+       public Image getColumnImage(Object obj, int index) {
+               return null;
+       }
+
+}
index 9102d24b3627f4d9b301753bf53b2ed531890f7b..3326e747056bacdd81677ceba1b1fa24b64622d9 100644 (file)
@@ -7,7 +7,10 @@ Require-Bundle: org.eclipse.ui;resolution:=optional
 Import-Package: org.aopalliance.aop;version="1.0.0",
  org.argeo.slc.client.aspects,
  org.argeo.slc.client.contentprovider,
- org.argeo.slc.dao.process;version="0.13.0.SNAPSHOT-r3777",
+ org.argeo.slc.core.structure.tree,
+ org.argeo.slc.core.test.tree,
+ org.argeo.slc.dao.process,
+ org.argeo.slc.dao.test.tree,
  org.hibernate,
  org.hibernate.classic,
  org.springframework.aop;version="2.5.6.SEC01",
index 62f8cbbd4d0eb75b3e6dbc175708e810cd9d73a3..027c50d41ce7a37dd12f42f9eabb483bd0d9b74f 100644 (file)
        <bean id="processDetailContentProvider"
                class="org.argeo.slc.client.contentprovider.ProcessDetailContentProvider"
                scope="prototype" />
+       <bean id="resultDetailContentProvider"
+               class="org.argeo.slc.client.contentprovider.ResultDetailContentProvider"
+               scope="prototype" />
+       <bean id="resultDetailLabelProvider"
+               class="org.argeo.slc.client.contentprovider.ResultDetailLabelProvider"
+               scope="prototype" />
 
        <!-- Aspects -->
        <aop:aspectj-autoproxy />
index 97e6e54749eaf00b7d4a5fdf7f81dea2c8e3ed52..51602be3b0886aa06480a65c2ea086580f582d4a 100644 (file)
@@ -21,6 +21,8 @@
        <service ref="processListStructuredContentProvider"\r
                interface="org.eclipse.jface.viewers.IStructuredContentProvider" />\r
        <service ref="processDetailContentProvider" interface="org.eclipse.jface.viewers.ITreeContentProvider" />\r
+       <service ref="resultDetailLabelProvider" interface="org.eclipse.jface.viewers.ITableLabelProvider" />\r
+       <service ref="resultDetailContentProvider" interface="org.eclipse.jface.viewers.ITreeContentProvider" />\r
 \r
        <!-- References Needed -->\r
        <reference id="slcExecutionDao" interface="org.argeo.slc.dao.process.SlcExecutionDao"\r
index 31f1b404c1b2a764118648aaccb7e931734be9a2..66d392491a2bc4d672c355e4c478da2f86ec51ed 100644 (file)
@@ -18,16 +18,15 @@ public class Perspective implements IPerspectiveFactory {
                IFolderLayout topRight = layout.createFolder("topRight",
                                IPageLayout.RIGHT, 0.5f, editorArea);
                topRight.addView("org.argeo.slc.client.ui.resultListView");
+               topRight
+                               .addPlaceholder("org.argeo.slc.client.ui.resultDetailView:UUID-*");
 
                IFolderLayout bottomRight = layout.createFolder("bottomRight",
                                IPageLayout.BOTTOM, 0.6f, "topRight");
                bottomRight.addView("org.argeo.slc.client.ui.processListView");
-               // bottomRight.addView("org.argeo.slc.client.ui.processDetailView");
                bottomRight
                                .addPlaceholder("org.argeo.slc.client.ui.processDetailView:UUID-*");
 
-               // bottomRight.addView("org.argeo.slc.client.ui.resultListView");
-
                IFolderLayout bottomLeft = layout.createFolder("bottomLeft",
                                IPageLayout.BOTTOM, 0.6f, "topLeft");
                bottomLeft.addView("org.argeo.slc.client.ui.processBuilderView");
index 59cb76d7bb1916d28fb93741ea2d168f080828f7..7b7177b0dcf19bfb9418ef1e1ba55735df148ea1 100644 (file)
@@ -19,6 +19,7 @@ Import-Package: org.apache.commons.io;version="1.4.0",
  org.argeo.slc.build;version="0.13.0.SNAPSHOT-r3685",
  org.argeo.slc.core.attachment,
  org.argeo.slc.core.runtime;version="0.13.0.SNAPSHOT-r3701",
+ org.argeo.slc.core.structure.tree,
  org.argeo.slc.core.test.tree;version="0.13.0.SNAPSHOT-r3768",
  org.argeo.slc.dao.process,
  org.argeo.slc.dao.test.tree;version="0.13.0.SNAPSHOT-r3768",
index 083eb4beeb27f555510b03c31054f33ab41f79b7..c25bba7ef2e4dc4c80666e74ef285ba4ada94be5 100644 (file)
@@ -16,4 +16,8 @@
                class="org.argeo.slc.client.ui.commands.ProcessDetailsDisplayHandler"
                scope="prototype">
        </bean>
+       <bean id="org.argeo.slc.client.ui.displayResultDetails"
+               class="org.argeo.slc.client.ui.commands.ResultDetailsDisplayHandler"
+               scope="prototype">
+       </bean>
 </beans>
index 89fb801c19037131a36359e5c20d37f59d0ff2c9..8f5dcaba6e9312683e20fb08ff8a3de5c1d5dbde 100644 (file)
@@ -16,7 +16,6 @@
                interface="org.argeo.slc.core.test.tree.TreeTestResultListener" />\r
        <service ref="slcExecutionServiceAdapter" interface="org.argeo.slc.process.SlcExecutionNotifier" />\r
 \r
-\r
        <!-- References needed by the current bundle -->\r
        <reference id="slcExecutionService" interface="org.argeo.slc.services.SlcExecutionService" />\r
        <reference id="testManagerService" interface="org.argeo.slc.services.TestManagerService" />\r
        <reference id="testResultCollectionDao"\r
                interface="org.argeo.slc.dao.test.tree.TreeTestResultCollectionDao"\r
                context-class-loader="service-provider" />\r
+\r
+       <reference id="treeTestResultDao"\r
+               interface="org.argeo.slc.dao.test.tree.TreeTestResultDao"\r
+               context-class-loader="service-provider" />\r
+               \r
+               \r
        <reference id="slcExecutionDao" interface="org.argeo.slc.dao.process.SlcExecutionDao"\r
                context-class-loader="service-provider" />\r
 \r
                bean-name="processListStructuredContentProvider" />\r
        <reference id="processDetailContentProvider"\r
                interface="org.eclipse.jface.viewers.ITreeContentProvider" bean-name="processDetailContentProvider" />\r
-\r
+       <reference id="resultDetailContentProvider"\r
+               interface="org.eclipse.jface.viewers.ITreeContentProvider" bean-name="resultDetailContentProvider" />\r
+       <reference id="resultDetailLabelProvider" interface="org.eclipse.jface.viewers.ITableLabelProvider"\r
+               bean-name="resultDetailLabelProvider" />\r
 \r
 \r
        <!-- TODO : what is it for ? -->\r
index 5ad45642ae96a5cb9a0bd738b9a833d68527ff09..0d2b0a3acd193bfaa5cad4f0fb4c5457e5cc2f4d 100644 (file)
                <property name="testResultCollectionDao" ref="testResultCollectionDao" />
        </bean>
 
+       <bean id="org.argeo.slc.client.ui.resultDetailView" class="org.argeo.slc.client.ui.views.ResultDetailView"
+               scope="prototype">
+               <property name="treeTestResultDao" ref="treeTestResultDao" />
+               <property name="contentProvider" ref="resultDetailContentProvider" />
+               <property name="labelProvider" ref="resultDetailLabelProvider" />
+       </bean>
+
+
        <bean id="org.argeo.slc.client.ui.processListView" class="org.argeo.slc.client.ui.views.ProcessListView"
                scope="prototype">
                <property name="slcExecutionDao" ref="slcExecutionDao" />
index 4c822efc52e6f717620e9d9f37aab9f8c91ce99c..743dc915fab618ccf0ec43b7acee7eb377785359 100644 (file)
          name="Results"
          restorable="true">
    </view>
+   <view
+         id="org.argeo.slc.client.ui.resultDetailView"
+         class="org.argeo.eclipse.spring.SpringExtensionFactory"
+         name="Result Detail"
+         allowMultiple="true"
+         restorable="true">
+   </view>
    <view
          id="org.argeo.slc.client.ui.processListView"
          class="org.argeo.eclipse.spring.SpringExtensionFactory"
                        name="Process UUID">
                        </commandParameter>
        </command>
+   <command 
+               defaultHandler="org.argeo.eclipse.spring.SpringCommandHandler"
+               id="org.argeo.slc.client.ui.displayResultDetails"
+               name="DisplayResultDetails">
+                       <commandParameter
+                       id="org.argeo.slc.client.commands.resultUuid"
+                       name="Result UUID">
+                       </commandParameter>
+       </command>
    </extension>
    <extension
         point="org.eclipse.ui.bindings">
index a538ca0291ceed0f77ea7e2f4b94b72ee7fb90a5..cdc28812b33e561b6cf6702e2060b15f18df3c16 100644 (file)
@@ -1,7 +1,5 @@
 package org.argeo.slc.client.ui.commands;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
 import org.argeo.slc.client.ui.views.ProcessDetailView;
 import org.eclipse.core.commands.AbstractHandler;
 import org.eclipse.core.commands.ExecutionEvent;
@@ -17,8 +15,8 @@ import org.eclipse.ui.handlers.HandlerUtil;
  */
 
 public class ProcessDetailsDisplayHandler extends AbstractHandler {
-       private static final Log log = LogFactory
-                       .getLog(ProcessDetailsDisplayHandler.class);
+       // private static final Log log = LogFactory
+       // .getLog(ProcessDetailsDisplayHandler.class);
 
        public Object execute(ExecutionEvent event) throws ExecutionException {
 
@@ -27,15 +25,14 @@ public class ProcessDetailsDisplayHandler extends AbstractHandler {
                String uuid = event
                                .getParameter("org.argeo.slc.client.commands.processUuid");
 
-               // mode = 2 : VIEW_VISIBLE, Show view mode that indicates the view
-               // should be created or made visible if already created .
+               // mode = 1 : VIEW_ACTIVATE, Show view mode that indicates the view
+               // should be made visible and activated. Use of this mode has the same
+               // effect as calling showView.
                try {
                        ProcessDetailView pView = (ProcessDetailView) HandlerUtil
                                        .getActiveWorkbenchWindow(event).getActivePage()
-                                       .showView(ProcessDetailView.ID, "UUID-" + uuid, 2);
-                       log.debug("Newly created pView :  " + pView);
+                                       .showView(ProcessDetailView.ID, "UUID-" + uuid, 1);
                        pView.setUuid(uuid);
-                       log.debug("uuid set");
                        pView.retrieveResults();
                } catch (Exception e) {
                        e.printStackTrace();
diff --git a/eclipse/plugins/org.argeo.slc.client.ui/src/org/argeo/slc/client/ui/commands/ResultDetailsDisplayHandler.java b/eclipse/plugins/org.argeo.slc.client.ui/src/org/argeo/slc/client/ui/commands/ResultDetailsDisplayHandler.java
new file mode 100644 (file)
index 0000000..8947335
--- /dev/null
@@ -0,0 +1,48 @@
+package org.argeo.slc.client.ui.commands;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.argeo.slc.client.ui.views.ResultDetailView;
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.ui.handlers.HandlerUtil;
+
+/**
+ * Command handler to set visible or create a ResultDetailView. UUID of the
+ * testResult is passed via command parameters.
+ * 
+ * @author bsinou
+ * 
+ */
+
+public class ResultDetailsDisplayHandler extends AbstractHandler {
+       private static final Log log = LogFactory
+                       .getLog(ResultDetailsDisplayHandler.class);
+
+       public Object execute(ExecutionEvent event) throws ExecutionException {
+
+               // We pass the UUID of the test result we want to display via command
+               // parameters.
+               String uuid = event
+                               .getParameter("org.argeo.slc.client.commands.resultUuid");
+
+               // mode = 2 : VIEW_VISIBLE, Show view mode that indicates the view
+               // should be created or made visible if already created .
+               // mode = 1 : VIEW_ACTIVATE, Show view mode that indicates the view
+               // should be made visible and activated. Use of this mode has the same
+               // effect as calling
+               try {
+                       ResultDetailView rView = (ResultDetailView) HandlerUtil
+                                       .getActiveWorkbenchWindow(event).getActivePage()
+                                       .showView(ResultDetailView.ID, "UUID-" + uuid, 1);
+                       if (log.isTraceEnabled())
+                               log.trace("Newly created rView :  " + rView);
+                       rView.setUuid(uuid);
+                       rView.retrieveResults();
+               } catch (Exception e) {
+                       e.printStackTrace();
+               }
+               return null;
+       }
+}
index 51b8f26051854b60093473dee65796ee147f079f..d08a4540700bf6f5488f6d054fa816d58455aa8f 100644 (file)
@@ -1,7 +1,5 @@
 package org.argeo.slc.client.ui.views;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
 import org.argeo.slc.dao.process.SlcExecutionDao;
 import org.argeo.slc.process.SlcExecution;
 import org.eclipse.jface.viewers.IContentProvider;
@@ -13,14 +11,15 @@ import org.eclipse.ui.part.ViewPart;
 
 /**
  * Multi-instance view that enables to browse the details of a given
- * TreeTestResult
+ * SlcExecution
  * 
  * @author bsinou
  * 
  */
 
 public class ProcessDetailView extends ViewPart {
-       private final static Log log = LogFactory.getLog(ProcessDetailView.class);
+       // private final static Log log =
+       // LogFactory.getLog(ProcessDetailView.class);
        public static final String ID = "org.argeo.slc.client.ui.processDetailView";
 
        private TreeViewer viewer;
@@ -34,12 +33,10 @@ public class ProcessDetailView extends ViewPart {
        private SlcExecutionDao slcExecutionDao;
 
        public void createPartControl(Composite parent) {
-               // log.debug("In  create part Control &&& uuid = " + uuid);
                viewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
                viewer.setContentProvider(contentProvider);
                viewer.setLabelProvider(labelProvider);
                // viewer.setInput(getViewSite());
-               log.debug("PartControl CREATED.");
        }
 
        public void setFocus() {
@@ -52,9 +49,7 @@ public class ProcessDetailView extends ViewPart {
 
        public void retrieveResults() {
                se = slcExecutionDao.getSlcExecution(uuid);
-               log.debug("========= Se : " + se);
                viewer.setInput(se);
-               log.debug("Input SET");
        }
 
        public void setUuid(String uuid) {
@@ -73,5 +68,4 @@ public class ProcessDetailView extends ViewPart {
        public void setSlcExecutionDao(SlcExecutionDao slcExecutionDao) {
                this.slcExecutionDao = slcExecutionDao;
        }
-
 }
\ No newline at end of file
index 63d017b7964ae648b5961f3e5e4546ae418143d3..83194d603fad761323d81b947fc055b2a77e1c3d 100644 (file)
@@ -2,8 +2,6 @@ package org.argeo.slc.client.ui.views;
 
 import java.util.ArrayList;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
 import org.argeo.slc.SlcException;
 import org.argeo.slc.client.ui.ClientUiPlugin;
 import org.argeo.slc.dao.process.SlcExecutionDao;
@@ -37,7 +35,7 @@ import org.eclipse.ui.part.ViewPart;
  * 
  */
 public class ProcessListView extends ViewPart {
-       private final static Log log = LogFactory.getLog(ProcessListView.class);
+       // private final static Log log = LogFactory.getLog(ProcessListView.class);
 
        public static final String ID = "org.argeo.slc.client.ui.processListView";
 
@@ -108,11 +106,7 @@ public class ProcessListView extends ViewPart {
 
                        if (obj instanceof SlcExecution) {
                                SlcExecution se = (SlcExecution) obj;
-                               log.debug("DOUBLE CLICK ON process d'UUID" + se.getUuid());
 
-                               // ClientUiPlugin.getDefault().getWorkbench().getDisplay()
-                               // .syncExec(new Runnable() {
-                               // public void run() {
                                IWorkbench iw = ClientUiPlugin.getDefault().getWorkbench();
                                IHandlerService handlerService = (IHandlerService) iw
                                                .getService(IHandlerService.class);
@@ -124,14 +118,13 @@ public class ProcessListView extends ViewPart {
                                        Command cmd = cmdService
                                                        .getCommand("org.argeo.slc.client.ui.displayProcessDetails");
 
-                                       // log.debug("cmd : " + cmd);
                                        ArrayList<Parameterization> parameters = new ArrayList<Parameterization>();
 
                                        // get the parameter
                                        IParameter iparam = cmd
                                                        .getParameter("org.argeo.slc.client.commands.processUuid");
-                                       Parameterization params = new Parameterization(iparam,
-                                                       se.getUuid()); // "testUUID");//
+                                       Parameterization params = new Parameterization(iparam, se
+                                                       .getUuid()); // "testUUID");//
                                        parameters.add(params);
 
                                        // build the parameterized command
diff --git a/eclipse/plugins/org.argeo.slc.client.ui/src/org/argeo/slc/client/ui/views/ResultDetailView.java b/eclipse/plugins/org.argeo.slc.client.ui/src/org/argeo/slc/client/ui/views/ResultDetailView.java
new file mode 100644 (file)
index 0000000..755e4d9
--- /dev/null
@@ -0,0 +1,79 @@
+package org.argeo.slc.client.ui.views;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.argeo.slc.core.test.tree.TreeTestResult;
+import org.argeo.slc.dao.test.tree.TreeTestResultDao;
+import org.eclipse.jface.viewers.IContentProvider;
+import org.eclipse.jface.viewers.ITableLabelProvider;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.part.ViewPart;
+
+/**
+ * Multi-instance view that enables to browse the details of a given
+ * TreeTestResult
+ * 
+ * @author bsinou
+ * 
+ */
+
+public class ResultDetailView extends ViewPart {
+       private final static Log log = LogFactory.getLog(ResultDetailView.class);
+       public static final String ID = "org.argeo.slc.client.ui.resultDetailView";
+
+       private TreeViewer viewer;
+
+       private String uuid;
+       private TreeTestResult ttr;
+
+       // IoC
+       private IContentProvider contentProvider;
+       private ITableLabelProvider labelProvider;
+       private TreeTestResultDao treeTestResultDao;
+
+       public void createPartControl(Composite parent) {
+               // log.debug("In  create part Control &&& uuid = " + uuid);
+               viewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
+               viewer.setContentProvider(contentProvider);
+               viewer.setLabelProvider(labelProvider);
+               // viewer.setInput(getViewSite());
+               if (log.isDebugEnabled())
+                       log.debug("PartControl CREATED.");
+       }
+
+       public void setFocus() {
+               viewer.getControl().setFocus();
+       }
+
+       public TreeViewer getViewer() {
+               return viewer;
+       }
+
+       public void retrieveResults() {
+               ttr = treeTestResultDao.getTestResult(uuid);
+               log.debug("========= ttr: " + ttr);
+               viewer.setInput(ttr);
+               log.debug("Input SET");
+               setFocus();
+       }
+
+       public void setUuid(String uuid) {
+               this.uuid = uuid;
+       }
+
+       // IoC
+       public void setContentProvider(IContentProvider contentProvider) {
+               this.contentProvider = contentProvider;
+       }
+
+       public void setLabelProvider(ITableLabelProvider labelProvider) {
+               this.labelProvider = labelProvider;
+       }
+
+       public void setTreeTestResultDao(TreeTestResultDao treeTestResultDao) {
+               this.treeTestResultDao = treeTestResultDao;
+       }
+
+}
\ No newline at end of file
index 1ca5909a5e053790c12d3729c4281b72e83b4105..c61f8de348de45e2c35628b32989c772b145a43f 100644 (file)
@@ -1,12 +1,22 @@
 package org.argeo.slc.client.ui.views;
 
+import java.util.ArrayList;
 import java.util.List;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
+import org.argeo.slc.SlcException;
+import org.argeo.slc.client.ui.ClientUiPlugin;
 import org.argeo.slc.core.test.tree.ResultAttributes;
 import org.argeo.slc.dao.test.tree.TreeTestResultCollectionDao;
+import org.eclipse.core.commands.Command;
+import org.eclipse.core.commands.IParameter;
+import org.eclipse.core.commands.Parameterization;
+import org.eclipse.core.commands.ParameterizedCommand;
+import org.eclipse.jface.viewers.DoubleClickEvent;
+import org.eclipse.jface.viewers.IDoubleClickListener;
 import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.viewers.ITableLabelProvider;
 import org.eclipse.jface.viewers.LabelProvider;
 import org.eclipse.jface.viewers.TableViewer;
@@ -17,6 +27,10 @@ import org.eclipse.swt.layout.GridData;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Table;
 import org.eclipse.swt.widgets.TableColumn;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.commands.ICommandService;
+import org.eclipse.ui.handlers.IHandlerService;
 import org.eclipse.ui.part.ViewPart;
 
 public class ResultListView extends ViewPart {
@@ -33,8 +47,8 @@ public class ResultListView extends ViewPart {
                viewer = new TableViewer(table);
                viewer.setLabelProvider(new ViewLabelProvider());
                viewer.setContentProvider(new ViewContentProvider());
-
                viewer.setInput(getViewSite());
+               viewer.addDoubleClickListener(new ViewDoubleClickListener());
        }
 
        protected Table createTable(Composite parent) {
@@ -63,15 +77,11 @@ public class ResultListView extends ViewPart {
                return table;
        }
 
+       // View Specific inner class
        protected static class ViewContentProvider implements
                        IStructuredContentProvider {
-               // private List<ResultAttributes> lst;
 
                public void inputChanged(Viewer arg0, Object arg1, Object arg2) {
-                       // if (arg2 instanceof List) {
-                       // lst = (List<ResultAttributes>) arg2;
-                       // log.trace("result count: " + lst.size());
-                       // }
                }
 
                public void dispose() {
@@ -79,17 +89,11 @@ public class ResultListView extends ViewPart {
 
                @SuppressWarnings("unchecked")
                public Object[] getElements(Object obj) {
-                       // if (lst == null)
-                       // return new Object[0];
-                       // else
-                       // return lst.toArray();
                        if (obj instanceof List) {
                                return ((List<ResultAttributes>) obj).toArray();
                        } else {
                                return new Object[0];
                        }
-                       // return
-                       // testResultCollectionDao.listResultAttributes(null).toArray();
                }
        }
 
@@ -130,6 +134,61 @@ public class ResultListView extends ViewPart {
                }
        }
 
+       // Handle Events
+       /**
+        * The ResultAttributes expose a part of the information contained in the
+        * TreeTestResult, It has the same UUID as the corresponding treeTestResult.
+        */
+       class ViewDoubleClickListener implements IDoubleClickListener {
+               public void doubleClick(DoubleClickEvent evt) {
+                       Object obj = ((IStructuredSelection) evt.getSelection())
+                                       .getFirstElement();
+
+                       if (obj instanceof ResultAttributes) {
+                               ResultAttributes ra = (ResultAttributes) obj;
+                               log.debug("Double-clic on result with UUID" + ra.getUuid());
+
+                               IWorkbench iw = ClientUiPlugin.getDefault().getWorkbench();
+                               IHandlerService handlerService = (IHandlerService) iw
+                                               .getService(IHandlerService.class);
+                               try {
+                                       // get the command from plugin.xml
+                                       IWorkbenchWindow window = iw.getActiveWorkbenchWindow();
+                                       ICommandService cmdService = (ICommandService) window
+                                                       .getService(ICommandService.class);
+                                       Command cmd = cmdService
+                                                       .getCommand("org.argeo.slc.client.ui.displayResultDetails");
+
+                                       // log.debug("cmd : " + cmd);
+                                       ArrayList<Parameterization> parameters = new ArrayList<Parameterization>();
+
+                                       // get the parameter
+                                       IParameter iparam = cmd
+                                                       .getParameter("org.argeo.slc.client.commands.resultUuid");
+
+                                       Parameterization params = new Parameterization(iparam,
+                                                       ra.getUuid());
+                                       parameters.add(params);
+
+                                       // build the parameterized command
+                                       ParameterizedCommand pc = new ParameterizedCommand(cmd,
+                                                       parameters.toArray(new Parameterization[parameters
+                                                                       .size()]));
+
+                                       // execute the command
+                                       handlerService = (IHandlerService) window
+                                                       .getService(IHandlerService.class);
+                                       handlerService.executeCommand(pc, null);
+
+                               } catch (Exception e) {
+                                       e.printStackTrace();
+                                       throw new SlcException("Problem while rendering result. "
+                                                       + e.getMessage());
+                               }
+                       }
+               }
+       }
+
        // Ioc
        public void setTestResultCollectionDao(
                        TreeTestResultCollectionDao testResultCollectionDao) {