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,
// 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) {
}
}
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;
log.debug(" Realized flows : ");
return steps.toArray();
}
- // return getChildren(parent);
return null;
}
// public ExecutionModuleDescriptor getDescriptor() {
// return descriptor;
// }
- // Object o = thisJoinPoint.getArgs()[0];
+ // Object o = thisJoinPoint.getArgs()[0];
// public void cacheDescriptor(ExecutionModuleDescriptor descriptor) {
// this.descriptor = descriptor;
--- /dev/null
+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);
+ // }
+ //
+ // }
+}
--- /dev/null
+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;
+ }
+
+}
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",
<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 />
<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
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");
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",
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>
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
<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" />
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">
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;
*/
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 {
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();
--- /dev/null
+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;
+ }
+}
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;
/**
* 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;
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() {
public void retrieveResults() {
se = slcExecutionDao.getSlcExecution(uuid);
- log.debug("========= Se : " + se);
viewer.setInput(se);
- log.debug("Input SET");
}
public void setUuid(String uuid) {
public void setSlcExecutionDao(SlcExecutionDao slcExecutionDao) {
this.slcExecutionDao = slcExecutionDao;
}
-
}
\ No newline at end of file
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;
*
*/
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";
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);
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
--- /dev/null
+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
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;
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 {
viewer = new TableViewer(table);
viewer.setLabelProvider(new ViewLabelProvider());
viewer.setContentProvider(new ViewContentProvider());
-
viewer.setInput(getViewSite());
+ viewer.addDoubleClickListener(new ViewDoubleClickListener());
}
protected Table createTable(Composite parent) {
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() {
@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();
}
}
}
}
+ // 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) {