Import-Package: javax.jcr;version="2.0.0",
javax.jcr.nodetype;version="2.0.0",
javax.jcr.observation;version="2.0.0",
+ javax.jcr.query;version="2.0.0",
org.apache.commons.io;version="1.4.0",
org.apache.commons.logging;version="1.1.1",
org.argeo,
<!-- Views -->
<bean id="jcrExecutionModulesView" class="org.argeo.slc.client.ui.views.JcrExecutionModulesView"
scope="prototype">
- <property name="processController" ref="processController" />
<property name="session" ref="session" />
</bean>
+ <bean id="jcrProcessListView" class="org.argeo.slc.client.ui.views.JcrProcessListView"
+ scope="prototype">
+ <property name="session" ref="session" />
+ </bean>
<bean id="session" class="org.argeo.jcr.spring.ThreadBoundSession">
<property name="repository" ref="repository" />
icon="icons/processes.gif"
restorable="true">
</view>
+ <view
+ id="org.argeo.slc.client.ui.jcrProcessListView"
+ class="org.argeo.eclipse.spring.SpringExtensionFactory"
+ name="Processes"
+ icon="icons/processes.gif"
+ restorable="true">
+ </view>
<view
allowMultiple="true"
class="org.argeo.eclipse.spring.SpringExtensionFactory"
IFolderLayout bottom = layout.createFolder("bottom",
IPageLayout.BOTTOM, 0.65f, editorArea);
- bottom.addView("org.argeo.slc.client.ui.processListView");
+ bottom.addView("org.argeo.slc.client.ui.jcrProcessListView");
// IFolderLayout topRight = layout.createFolder("topRight",
// IPageLayout.RIGHT, 0.6f, "main");
import javax.jcr.observation.EventListener;
import javax.jcr.observation.ObservationManager;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
import org.argeo.ArgeoException;
+import org.argeo.jcr.JcrUtils;
import org.argeo.slc.SlcException;
import org.argeo.slc.client.ui.SlcImages;
import org.argeo.slc.execution.ExecutionProcess;
import org.eclipse.swt.layout.RowLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.forms.AbstractFormPart;
public class ProcessBuilderPage extends FormPage implements SlcNames, SlcTypes {
public final static String ID = "processBuilderPage";
- private final static Log log = LogFactory.getLog(ProcessBuilderPage.class);
+ //private final static Log log = LogFactory.getLog(ProcessBuilderPage.class);
private Node processNode;
@Override
public void dispose() {
- try {
- if (statusObserver != null) {
- processNode.getSession().getWorkspace().getObservationManager()
- .removeEventListener(statusObserver);
- }
- } catch (Exception e) {
- log.error("Cannot dispose observer for " + processNode + ": " + e);
- }
+ JcrUtils.unregisterQuietly(processNode, statusObserver);
super.dispose();
}
import org.argeo.slc.jcr.SlcNames;
import org.argeo.slc.jcr.SlcTypes;
import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.swt.widgets.Label;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorSite;
import org.eclipse.ui.PartInitException;
package org.argeo.slc.client.ui.listeners;
-import org.argeo.slc.SlcException;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
import org.argeo.slc.client.ui.ClientUiPlugin;
import org.argeo.slc.core.attachment.Attachment;
import org.argeo.slc.core.attachment.SimpleAttachment;
/** In memory access to a test manager service */
public class TestManagerServiceAdapter implements TreeTestResultListener {
- // private static final Log log = LogFactory
- // .getLog(TestManagerServiceAdapter.class);
+ private static final Log log = LogFactory
+ .getLog(TestManagerServiceAdapter.class);
private Boolean onlyOnClose = false;
null);
} catch (Exception e) {
- e.printStackTrace();
- throw new SlcException(
- "Problem while rendering result. "
- + e.getMessage());
+ log.error("Cannot refresh views: " + e);
}
}
}
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
-import java.util.Properties;
import javax.jcr.Node;
import javax.jcr.NodeIterator;
import org.argeo.eclipse.ui.jcr.WrappedNode;
import org.argeo.slc.SlcException;
import org.argeo.slc.client.ui.SlcImages;
-import org.argeo.slc.client.ui.controllers.ProcessController;
import org.argeo.slc.client.ui.editors.ProcessEditor;
import org.argeo.slc.client.ui.editors.ProcessEditorInput;
-import org.argeo.slc.client.ui.providers.ExecutionModulesContentProvider.FlowNode;
import org.argeo.slc.jcr.SlcJcrConstants;
import org.argeo.slc.jcr.SlcNames;
import org.argeo.slc.jcr.SlcTypes;
-import org.argeo.slc.process.RealizedFlow;
import org.eclipse.jface.viewers.ColumnViewerToolTipSupport;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.swt.dnd.Transfer;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.part.ViewPart;
private Session session;
- private ProcessController processController;
-
public void createPartControl(Composite parent) {
viewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL);
ColumnViewerToolTipSupport.enableFor(viewer);
if (node.isNodeType(SLC_EXECUTION_FLOW)) {
List<String> paths = new ArrayList<String>();
paths.add(node.getPath());
- PlatformUI
- .getWorkbench()
- .getActiveWorkbenchWindow()
- .getActivePage()
- .openEditor(
- new ProcessEditorInput(paths, true),
- ProcessEditor.ID);
+ IWorkbenchPage activePage = PlatformUI.getWorkbench()
+ .getActiveWorkbenchWindow().getActivePage();
+ activePage.openEditor(new ProcessEditorInput(paths,
+ true), ProcessEditor.ID);
}
}
} catch (Exception e) {
throw new SlcException("Cannot open " + obj, e);
}
-
- // if (obj instanceof ExecutionModulesContentProvider.FlowNode) {
- // ExecutionModulesContentProvider.FlowNode fn =
- // (ExecutionModulesContentProvider.FlowNode) obj;
- //
- // List<RealizedFlow> realizedFlows = new ArrayList<RealizedFlow>();
- // RealizedFlow realizedFlow = new RealizedFlow();
- // realizedFlow.setModuleName(fn.getExecutionModuleNode()
- // .getDescriptor().getName());
- // realizedFlow.setModuleVersion(fn.getExecutionModuleNode()
- // .getDescriptor().getVersion());
- // realizedFlow.setFlowDescriptor(fn.getExecutionModuleNode()
- // .getFlowDescriptors().get(fn.getFlowName()));
- // realizedFlows.add(realizedFlow);
- //
- // SlcExecution slcExecution = new SlcExecution();
- // slcExecution.setUuid(UUID.randomUUID().toString());
- // slcExecution.setRealizedFlows(realizedFlows);
- // slcExecution.setHost(fn.getExecutionModuleNode().getAgentNode()
- // .getAgent().toString());
- // processController.execute(fn.getExecutionModuleNode()
- // .getAgentNode().getAgent(), slcExecution);
- // }
}
}
// TODO Auto-generated catch block
e1.printStackTrace();
}
- //
- // // ExecutionModulesContentProvider.FlowNode flowNode =
- // (ExecutionModulesContentProvider.FlowNode) selection
- // // .getFirstElement();
- // //
- // // Properties props = new Properties();
- // // flowNodeAsProperties(props, flowNode);
- // // props.setProperty("agentId", flowNode
- // // .getExecutionModuleNode().getAgentNode().getAgent()
- // // .getAgentUuid());
- // // props.setProperty("host",
- // flowNode.getExecutionModuleNode()
- // // .getAgentNode().getAgent().toString());
- // //
- // // ByteArrayOutputStream out = new
- // ByteArrayOutputStream();
- // // try {
- // // props.store(out, "");
- // // event.data = new String(out.toByteArray());
- // // } catch (IOException e) {
- // // throw new SlcException(
- // // "Cannot transform realized flow", e);
- // // } finally {
- // // IOUtils.closeQuietly(out);
- // // }
}
}
}
log.debug("Finished Drag " + event);
}
- protected void flowNodeAsProperties(Properties props, FlowNode fn) {
-
- RealizedFlow realizedFlow = new RealizedFlow();
- realizedFlow.setModuleName(fn.getExecutionModuleNode()
- .getDescriptor().getName());
- realizedFlow.setModuleVersion(fn.getExecutionModuleNode()
- .getDescriptor().getVersion());
- realizedFlow.setFlowDescriptor(fn.getExecutionFlowDescriptor());
-
- // As we want to have the effective ExecutionSpec and not a
- // reference; we store it at the RealizeFlow level : thus the
- // marshaller will store the object and not only a reference.
- realizedFlow.setExecutionSpec(fn.getExecutionFlowDescriptor()
- .getExecutionSpec());
-
- // props.setProperty("RealizedFlowAsXml",
- // oxmBean.marshal(realizedFlow));
- // System.out
- // .println(oxmBean.marshal(fn.getExecutionFlowDescriptor()));
-
- }
-
- }
-
- public void setProcessController(ProcessController processController) {
- this.processController = processController;
}
public void setSession(Session session) {
--- /dev/null
+package org.argeo.slc.client.ui.views;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.jcr.Node;
+import javax.jcr.NodeIterator;
+import javax.jcr.Property;
+import javax.jcr.RepositoryException;
+import javax.jcr.Session;
+import javax.jcr.observation.Event;
+import javax.jcr.observation.EventIterator;
+import javax.jcr.observation.EventListener;
+import javax.jcr.observation.ObservationManager;
+import javax.jcr.query.Query;
+
+import org.argeo.eclipse.ui.jcr.AsyncUiEventListener;
+import org.argeo.jcr.JcrUtils;
+import org.argeo.slc.SlcException;
+import org.argeo.slc.client.ui.editors.ProcessEditor;
+import org.argeo.slc.client.ui.editors.ProcessEditorInput;
+import org.argeo.slc.jcr.SlcJcrConstants;
+import org.argeo.slc.jcr.SlcNames;
+import org.argeo.slc.jcr.SlcTypes;
+import org.eclipse.jface.viewers.ColumnLabelProvider;
+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.TableViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableColumn;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.part.ViewPart;
+
+/**
+ * This class display the list of all processes that have run in the
+ * corresponding agent. Currently, the local agent.
+ */
+public class JcrProcessListView extends ViewPart {
+ public static final String ID = "org.argeo.slc.client.ui.jcrProcessListView";
+
+ private TableViewer viewer;
+
+ private Session session;
+
+ private EventListener processesObserver;
+
+ public void createPartControl(Composite parent) {
+ Table table = createTable(parent);
+ viewer = new TableViewer(table);
+ viewer.setLabelProvider(new LabelProvider());
+ viewer.setContentProvider(new ContentProvider());
+ viewer.setInput(getViewSite());
+ viewer.addDoubleClickListener(new ViewDoubleClickListener());
+
+ processesObserver = new AsyncUiEventListener() {
+ protected void onEventInUiThread(EventIterator events) {
+ viewer.refresh();
+ }
+ };
+ try {
+ ObservationManager observationManager = session.getWorkspace()
+ .getObservationManager();
+ observationManager.addEventListener(processesObserver,
+ Event.NODE_ADDED | Event.NODE_REMOVED
+ | Event.PROPERTY_CHANGED,
+ SlcJcrConstants.PROCESSES_BASE_PATH, true, null, null,
+ false);
+ } catch (RepositoryException e) {
+ throw new SlcException("Cannot register listeners", e);
+ }
+
+ }
+
+ protected Table createTable(Composite parent) {
+ int style = SWT.SINGLE | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL
+ | SWT.FULL_SELECTION;
+ // does not function with RAP, commented for the time being
+ // | SWT.HIDE_SELECTION;
+
+ Table table = new Table(parent, style);
+
+ table.setLinesVisible(true);
+ table.setHeaderVisible(true);
+
+ TableColumn column = new TableColumn(table, SWT.LEFT, 0);
+ column.setText("Date");
+ column.setWidth(200);
+
+ column = new TableColumn(table, SWT.LEFT, 1);
+ column.setText("Host");
+ column.setWidth(100);
+
+ column = new TableColumn(table, SWT.LEFT, 2);
+ column.setText("Id");
+ column.setWidth(300);
+
+ column = new TableColumn(table, SWT.LEFT, 3);
+ column.setText("Status");
+ column.setWidth(100);
+
+ return table;
+ }
+
+ public void setFocus() {
+ viewer.getControl().setFocus();
+ }
+
+ @Override
+ public void dispose() {
+ JcrUtils.unregisterQuietly(session.getWorkspace(), processesObserver);
+ super.dispose();
+ }
+
+ class ContentProvider implements IStructuredContentProvider {
+
+ public Object[] getElements(Object inputElement) {
+ try {
+ // TODO filter, optimize with virtual table, ...
+ String sql = "SELECT * from [slc:process] ORDER BY [jcr:lastModified] DESC";
+ Query query = session.getWorkspace().getQueryManager()
+ .createQuery(sql, Query.JCR_SQL2);
+ List<Node> nodes = new ArrayList<Node>();
+ for (NodeIterator nit = query.execute().getNodes(); nit
+ .hasNext();) {
+ nodes.add(nit.nextNode());
+ }
+ return nodes.toArray();
+ } catch (RepositoryException e) {
+ throw new SlcException("Cannot retrieve processes", e);
+ }
+ }
+
+ public void dispose() {
+ }
+
+ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+ }
+
+ }
+
+ class LabelProvider extends ColumnLabelProvider implements
+ ITableLabelProvider {
+
+ public Image getColumnImage(Object element, int columnIndex) {
+ // TODO Auto-generated method stub
+ return null;
+ }
+
+ public String getColumnText(Object obj, int index) {
+ try {
+ Node node = (Node) obj;
+ switch (index) {
+
+ case 0:
+ return node.getProperty(Property.JCR_CREATED).getString();
+ case 1:
+ return "local";
+ case 2:
+ return node.getProperty(SlcNames.SLC_UUID).getString();
+ case 3:
+ return node.getProperty(SlcNames.SLC_STATUS).getString();
+ }
+ return getText(obj);
+ } catch (RepositoryException e) {
+ throw new SlcException("Cannot get column text", e);
+ }
+ }
+
+ }
+
+ class ViewDoubleClickListener implements IDoubleClickListener {
+ public void doubleClick(DoubleClickEvent evt) {
+ Object obj = ((IStructuredSelection) evt.getSelection())
+ .getFirstElement();
+ try {
+ if (obj instanceof Node) {
+ Node node = (Node) obj;
+ 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);
+ }
+ }
+
+ }
+
+ public void setSession(Session session) {
+ this.session = session;
+ }
+
+}
\ No newline at end of file