[jbpm-commits] JBoss JBPM SVN: r5598 - in projects/jopr-integration/trunk/src/main: java/org/rhq/plugins/jbpm4/connector and 1 other directories.

do-not-reply at jboss.org do-not-reply at jboss.org
Mon Aug 31 05:34:28 EDT 2009


Author: jim.ma
Date: 2009-08-31 05:34:27 -0400 (Mon, 31 Aug 2009)
New Revision: 5598

Modified:
   projects/jopr-integration/trunk/src/main/java/org/rhq/plugins/jbpm4/ProcessDefComponent.java
   projects/jopr-integration/trunk/src/main/java/org/rhq/plugins/jbpm4/ProcessDeploymentComponent.java
   projects/jopr-integration/trunk/src/main/java/org/rhq/plugins/jbpm4/ProcessInstanceHistoryComponent.java
   projects/jopr-integration/trunk/src/main/java/org/rhq/plugins/jbpm4/ProcessInstanceHistoryDiscoveryComponent.java
   projects/jopr-integration/trunk/src/main/java/org/rhq/plugins/jbpm4/connector/JBPMEngineConnection.java
   projects/jopr-integration/trunk/src/main/java/org/rhq/plugins/jbpm4/connector/LocalJBPMEngineConnector.java
   projects/jopr-integration/trunk/src/main/resources/META-INF/rhq-plugin.xml
Log:
Added the operation to query the HistoryProcessInstances

Modified: projects/jopr-integration/trunk/src/main/java/org/rhq/plugins/jbpm4/ProcessDefComponent.java
===================================================================
--- projects/jopr-integration/trunk/src/main/java/org/rhq/plugins/jbpm4/ProcessDefComponent.java	2009-08-31 09:00:32 UTC (rev 5597)
+++ projects/jopr-integration/trunk/src/main/java/org/rhq/plugins/jbpm4/ProcessDefComponent.java	2009-08-31 09:34:27 UTC (rev 5598)
@@ -29,6 +29,11 @@
 import org.jbpm.api.ProcessDefinition;
 import org.jbpm.api.ProcessInstance;
 import org.jbpm.api.history.HistoryProcessInstance;
+import org.jbpm.pvm.internal.query.Page;
+import org.rhq.core.domain.configuration.Configuration;
+import org.rhq.core.domain.configuration.PropertyList;
+import org.rhq.core.domain.configuration.PropertyMap;
+import org.rhq.core.domain.configuration.PropertySimple;
 import org.rhq.core.domain.measurement.AvailabilityType;
 import org.rhq.core.domain.measurement.MeasurementDataTrait;
 import org.rhq.core.domain.measurement.MeasurementReport;
@@ -39,29 +44,38 @@
 import org.rhq.core.pluginapi.inventory.ResourceComponent;
 import org.rhq.core.pluginapi.inventory.ResourceContext;
 import org.rhq.core.pluginapi.measurement.MeasurementFacet;
+import org.rhq.core.pluginapi.operation.OperationFacet;
+import org.rhq.core.pluginapi.operation.OperationResult;
 import org.rhq.plugins.jbpm4.connector.JBPMEngineConnection;
 import org.rhq.plugins.jbpm4.util.StringUtil;
+
 /**
  * @author <a href mailto="ema at redhat.com">Jim Ma</a>
- *
+ * 
  */
-public class ProcessDefComponent implements ResourceComponent<ProcessEngineComponent> , MeasurementFacet, CreateChildResourceFacet {
+public class ProcessDefComponent implements
+		ResourceComponent<ProcessEngineComponent>, MeasurementFacet,
+		CreateChildResourceFacet, OperationFacet {
 	private ResourceContext<ProcessEngineComponent> resourceContext;
 	private Log log = LogFactory.getLog(this.getClass());
 	ProcessDefinition processDef = null;
-    private JBPMEngineConnection jbpmConnection = null;
+	private JBPMEngineConnection jbpmConnection = null;
+
 	public void start(ResourceContext<ProcessEngineComponent> resourceContext) {
 		this.resourceContext = resourceContext;
-		jbpmConnection = resourceContext.getParentResourceComponent().getJBPMConnection();
-		processDef = jbpmConnection.getProcessDefById(resourceContext.getResourceKey());
+		jbpmConnection = resourceContext.getParentResourceComponent()
+				.getJBPMConnection();
+		processDef = jbpmConnection.getProcessDefById(resourceContext
+				.getResourceKey());
 	}
 
 	public void stop() {
 	}
 
-	public void getValues(MeasurementReport report, Set<MeasurementScheduleRequest> metrics) {
+	public void getValues(MeasurementReport report,
+			Set<MeasurementScheduleRequest> metrics) {
 		for (MeasurementScheduleRequest request : metrics) {
-		if (request.getName().equals("version")) {
+			if (request.getName().equals("version")) {
 				MeasurementDataTrait value = new MeasurementDataTrait(request,
 						StringUtil.replaceNull((processDef.getVersion())));
 				report.addData(value);
@@ -72,39 +86,44 @@
 						StringUtil.replaceNull(processDef.getId()));
 				report.addData(value);
 			}
-			
+
 			if (request.getName().equals("description")) {
-				MeasurementDataTrait value = new MeasurementDataTrait(request, StringUtil.replaceNull(processDef.getDescription()));
+				MeasurementDataTrait value = new MeasurementDataTrait(request,
+						StringUtil.replaceNull(processDef.getDescription()));
 				report.addData(value);
 			}
-			
+
 			if (request.getName().equals("avgPerProcessInstanceDuration")) {
-			    String duration = StringUtil.replaceNull(getAverageProcessInstanceDuration());
-				MeasurementDataTrait value = new MeasurementDataTrait(request, duration);
+				String duration = StringUtil
+						.replaceNull(getAverageProcessInstanceDuration());
+				MeasurementDataTrait value = new MeasurementDataTrait(request,
+						duration);
 				report.addData(value);
-			}				
+			}
 		}
 	}
-	
-	
+
 	public AvailabilityType getAvailability() {
-		ProcessDefinition processDef = jbpmConnection.getProcessDefById(resourceContext.getResourceKey());
+		ProcessDefinition processDef = jbpmConnection
+				.getProcessDefById(resourceContext.getResourceKey());
 		if (processDef != null) {
 			return AvailabilityType.UP;
 		}
-		return AvailabilityType.DOWN;	   
+		return AvailabilityType.DOWN;
 	}
 
 	public JBPMEngineConnection getJBPMConnection() {
 		return resourceContext.getParentResourceComponent().getJBPMConnection();
-	}	
-	
-    //---------------CreateChildResourceFacet implementation -----------------// 
+	}
+
+	// ---------------CreateChildResourceFacet implementation
+	// -----------------//
 	public CreateResourceReport createResource(CreateResourceReport report) {
 		String resourceTypeName = report.getResourceType().getName();
 		report.setResourceKey(resourceTypeName);
 		report.setResourceName(resourceTypeName);
-		ProcessInstance instance = jbpmConnection.startProcessInstance(resourceContext.getResourceKey());
+		ProcessInstance instance = jbpmConnection
+				.startProcessInstance(resourceContext.getResourceKey());
 		if (instance == null) {
 			report.setStatus(CreateResourceStatus.FAILURE);
 			report.setErrorMessage("Failed to start process instance");
@@ -113,21 +132,72 @@
 		}
 		return report;
 	}
-	
+
 	public String getResourceKey() {
 		return this.resourceContext.getResourceKey();
-	}	
+	}
+
+	public Long getAverageProcessInstanceDuration() {
+		List<HistoryProcessInstance> instances = this.jbpmConnection
+				.getHistoryProcessInstances(this.getResourceKey(), null,
+						ProcessInstance.STATE_ENDED, null);
+		Long sumDuration = 0L;
+		for (HistoryProcessInstance instance : instances) {
+			sumDuration = sumDuration + instance.getDuration();
+		}
+		if (sumDuration > 0) {
+			return sumDuration / instances.size();
+		}
+		return null;
+	}
+
+	public OperationResult invokeOperation(String name, Configuration parameters) throws InterruptedException, Exception {
+		OperationResult result = null;
+		if (name.equals("historyProcessInstanceSelector")) {
+			result = queryHistoryProcessInstances(parameters);
+		}
+		return result;
+	}
 	
-	public Long getAverageProcessInstanceDuration() {
-		List<HistoryProcessInstance> instances = this.jbpmConnection.getHistoryProcessInstances(this.getResourceKey(), null, ProcessInstance.STATE_ENDED);
-	    Long sumDuration = 0L;
-	    for (HistoryProcessInstance instance : instances) {
-	    	sumDuration = sumDuration + instance.getDuration();
+	public OperationResult queryHistoryProcessInstances(Configuration parameters) {
+		OperationResult result = new OperationResult();
+		PropertySimple simple = parameters.getSimple("duration");
+		Long duration = simple.getLongValue() == null ? 0 : simple.getLongValue();
+		PropertySimple state = parameters.getSimple("state");
+		String insState = state != null ? state.getStringValue() : HistoryProcessInstance.STATE_ENDED;
+		
+		PropertySimple firstResult = parameters.getSimple("firstResult");
+		Page page = null;
+		if (firstResult.getIntegerValue() != null) {
+			PropertySimple maxResults = parameters.getSimple("maxResults");
+			int first = firstResult.getIntegerValue();
+			int max = maxResults.getIntegerValue() != null ? maxResults.getIntegerValue() : 50;
+			page = new Page(first, max);				
+		}
+		
+		List<HistoryProcessInstance> instances =  jbpmConnection.getHistoryProcessInstances(this.getResourceKey(), null, insState, page);
+		PropertyList resultInstances = new PropertyList("resultInstances");
+		result.getComplexResults().put(resultInstances);
+		
+		for (HistoryProcessInstance instance : instances) {
+	    	if (instance.getDuration() > duration) {
+	    		PropertyMap map = new PropertyMap("instance");
+	    		PropertySimple id = new PropertySimple("id", instance.getProcessInstanceId());
+	    		PropertySimple insDuration = new PropertySimple("duration", instance.getDuration());
+	    		PropertySimple endTime = new PropertySimple("endTime", instance.getEndTime());
+	    		PropertySimple startTime = new PropertySimple("startTime", instance.getStartTime());
+	    		PropertySimple definitionId = new PropertySimple("definitionId", instance.getProcessDefinitionId());
+	    		PropertySimple stateProp = new PropertySimple("state", instance.getState());		    		
+	    		map.put(id);
+	    		map.put(startTime);
+	    		map.put(endTime);
+	    		map.put(insDuration);
+	    		map.put(definitionId);
+	    		map.put(stateProp);
+	    		resultInstances.add(map);		    		
+	    	}
 	    }
-	    if (sumDuration > 0) {
-	    	return sumDuration/instances.size();
-	    }
-	    return null;
+		return result;
 	}
-	
+
 }

Modified: projects/jopr-integration/trunk/src/main/java/org/rhq/plugins/jbpm4/ProcessDeploymentComponent.java
===================================================================
--- projects/jopr-integration/trunk/src/main/java/org/rhq/plugins/jbpm4/ProcessDeploymentComponent.java	2009-08-31 09:00:32 UTC (rev 5597)
+++ projects/jopr-integration/trunk/src/main/java/org/rhq/plugins/jbpm4/ProcessDeploymentComponent.java	2009-08-31 09:34:27 UTC (rev 5598)
@@ -29,6 +29,7 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.jbpm.api.Deployment;
+import org.rhq.core.domain.configuration.Configuration;
 import org.rhq.core.domain.content.PackageDetailsKey;
 import org.rhq.core.domain.content.PackageType;
 import org.rhq.core.domain.content.transfer.ContentResponseResult;
@@ -46,13 +47,15 @@
 import org.rhq.core.pluginapi.inventory.ResourceComponent;
 import org.rhq.core.pluginapi.inventory.ResourceContext;
 import org.rhq.core.pluginapi.measurement.MeasurementFacet;
+import org.rhq.core.pluginapi.operation.OperationFacet;
+import org.rhq.core.pluginapi.operation.OperationResult;
 import org.rhq.plugins.jbpm4.connector.JBPMEngineConnection;
 import org.rhq.plugins.jbpm4.util.StringUtil;
 /**
  * @author <a href mailto="ema at redhat.com">Jim Ma</a>
  *
  */
-public class ProcessDeploymentComponent implements ResourceComponent<ProcessEngineComponent> , MeasurementFacet, ContentFacet, DeleteResourceFacet {
+public class ProcessDeploymentComponent implements ResourceComponent<ProcessEngineComponent> ,OperationFacet, MeasurementFacet, ContentFacet, DeleteResourceFacet {
 	private ResourceContext<ProcessEngineComponent> resourceContext;
 	private Log log = LogFactory.getLog(this.getClass());
 	private Deployment deployment = null;
@@ -145,6 +148,20 @@
 		this.jbpmConnection.deleteDeployment(resourceContext.getResourceKey());
 	}
 
+	public OperationResult invokeOperation(String name, Configuration parameters)
+			throws InterruptedException, Exception {
+		OperationResult result = new OperationResult();
+		if (name.toUpperCase().equals("SUSPEND")) {
+			this.jbpmConnection.suspendDeployment(this.resourceContext.getResourceKey());
+		}
+		
+		if (name.toUpperCase().equals("RESUME")) {
+			this.jbpmConnection.resumeDeployment(this.resourceContext.getResourceKey());
+		}
+		result.setSimpleResult("Success");
+		return result;
+	}
 
 
+
 }

Modified: projects/jopr-integration/trunk/src/main/java/org/rhq/plugins/jbpm4/ProcessInstanceHistoryComponent.java
===================================================================
--- projects/jopr-integration/trunk/src/main/java/org/rhq/plugins/jbpm4/ProcessInstanceHistoryComponent.java	2009-08-31 09:00:32 UTC (rev 5597)
+++ projects/jopr-integration/trunk/src/main/java/org/rhq/plugins/jbpm4/ProcessInstanceHistoryComponent.java	2009-08-31 09:34:27 UTC (rev 5598)
@@ -48,7 +48,7 @@
 	public void start(ResourceContext<ProcessDefComponent> resourceContext) {
 		instanceId = resourceContext.getResourceKey();
 		jbpmConnection = resourceContext.getParentResourceComponent().getJBPMConnection();
-		List<HistoryProcessInstance> instanceList = jbpmConnection.getHistoryProcessInstances(null,instanceId,HistoryProcessInstance.STATE_ENDED);
+		List<HistoryProcessInstance> instanceList = jbpmConnection.getHistoryProcessInstances(null,instanceId,HistoryProcessInstance.STATE_ENDED, null);
 		instance = instanceList.get(0);		
 	}
 

Modified: projects/jopr-integration/trunk/src/main/java/org/rhq/plugins/jbpm4/ProcessInstanceHistoryDiscoveryComponent.java
===================================================================
--- projects/jopr-integration/trunk/src/main/java/org/rhq/plugins/jbpm4/ProcessInstanceHistoryDiscoveryComponent.java	2009-08-31 09:00:32 UTC (rev 5597)
+++ projects/jopr-integration/trunk/src/main/java/org/rhq/plugins/jbpm4/ProcessInstanceHistoryDiscoveryComponent.java	2009-08-31 09:34:27 UTC (rev 5598)
@@ -41,7 +41,7 @@
 
 		Set<DiscoveredResourceDetails> historyInstances = new java.util.HashSet<DiscoveredResourceDetails>();
         ProcessDefComponent defComponent = context.getParentResourceComponent();
-        List<HistoryProcessInstance> historyProcessInstances = defComponent.getJBPMConnection().getHistoryProcessInstances(defComponent.getResourceKey(), null, ProcessInstance.STATE_ENDED);
+        List<HistoryProcessInstance> historyProcessInstances = defComponent.getJBPMConnection().getHistoryProcessInstances(defComponent.getResourceKey(), null, ProcessInstance.STATE_ENDED, null);
         for (HistoryProcessInstance instance: historyProcessInstances) {
 			DiscoveredResourceDetails details = new DiscoveredResourceDetails(context.getResourceType(), String.valueOf(instance.getProcessInstanceId()), "ProcessInstance-" + instance.getProcessInstanceId(), null, null, null, null);
 			historyInstances.add(details);

Modified: projects/jopr-integration/trunk/src/main/java/org/rhq/plugins/jbpm4/connector/JBPMEngineConnection.java
===================================================================
--- projects/jopr-integration/trunk/src/main/java/org/rhq/plugins/jbpm4/connector/JBPMEngineConnection.java	2009-08-31 09:00:32 UTC (rev 5597)
+++ projects/jopr-integration/trunk/src/main/java/org/rhq/plugins/jbpm4/connector/JBPMEngineConnection.java	2009-08-31 09:34:27 UTC (rev 5598)
@@ -29,8 +29,10 @@
 import org.jbpm.api.ProcessDefinition;
 import org.jbpm.api.ProcessInstance;
 import org.jbpm.api.history.HistoryProcessInstance;
+import org.jbpm.api.history.HistoryProcessInstanceQuery;
 import org.jbpm.api.job.Job;
 import org.jbpm.api.task.Task;
+import org.jbpm.pvm.internal.query.Page;
 /**
  * @author <a href mailto="ema at redhat.com">Jim Ma</a>
  *
@@ -51,6 +53,8 @@
 	Job getJob(String jobId);
 	Map<String, Long> avgDurationPerActivity(String processDefinitionId);
 	Job executeJob(String jobDbid);
-	List<HistoryProcessInstance> getHistoryProcessInstances(String definitionId, String processInstanceId, String state); 
+	List<HistoryProcessInstance> getHistoryProcessInstances(String definitionId, String processInstanceId, String state, Page page);
 	List<Task> getTasks(String definitionId, String processInstanceId);
+	void suspendDeployment(String deploymentId);
+	void resumeDeployment(String deploymentId);
 }

Modified: projects/jopr-integration/trunk/src/main/java/org/rhq/plugins/jbpm4/connector/LocalJBPMEngineConnector.java
===================================================================
--- projects/jopr-integration/trunk/src/main/java/org/rhq/plugins/jbpm4/connector/LocalJBPMEngineConnector.java	2009-08-31 09:00:32 UTC (rev 5597)
+++ projects/jopr-integration/trunk/src/main/java/org/rhq/plugins/jbpm4/connector/LocalJBPMEngineConnector.java	2009-08-31 09:34:27 UTC (rev 5598)
@@ -47,6 +47,7 @@
 import org.jbpm.api.task.Task;
 import org.jbpm.pvm.internal.cmd.CommandService;
 import org.jbpm.pvm.internal.cmd.ExecuteJobCmd;
+import org.jbpm.pvm.internal.query.Page;
 /**
  * @author <a href mailto="ema at redhat.com">Jim Ma</a>
  *
@@ -92,7 +93,15 @@
 		processEngine.getRepositoryService().deleteDeploymentCascade(deploymentId);
 	}
 	
+	public void suspendDeployment(String deploymentId) {
+		processEngine.getRepositoryService().suspendDeployment(deploymentId);
+	}
 	
+	public void resumeDeployment(String deploymentId) {
+		processEngine.getRepositoryService().resumeDeployment(deploymentId);
+	}
+	
+	
 	public Deployment getDeployment(String deploymentId) {
 		
 		return processEngine.getRepositoryService().createDeploymentQuery().deploymentDbid(Long.valueOf(deploymentId)).uniqueResult();
@@ -184,7 +193,7 @@
 		 return commandService.execute(new ExecuteJobCmd(jobDbid));
 	}
 	
-  	public List<HistoryProcessInstance> getHistoryProcessInstances(String definitionId, String processInstanceId, String state) {
+  	public List<HistoryProcessInstance> getHistoryProcessInstances(String definitionId, String processInstanceId, String state, Page page) {
 	   HistoryProcessInstanceQuery historyQuery = processEngine.getHistoryService().createHistoryProcessInstanceQuery();
 	   if (definitionId != null) {
 		   historyQuery.processDefinitionId(definitionId);
@@ -196,8 +205,16 @@
 	   if (state != null) {
 		   historyQuery.state(state);
 	   }
+	   
+	   if (page != null) {
+		   historyQuery.page(page.firstResult, page.maxResults);
+	   }
        return historyQuery.list();	   
 	}
+  
+    public List<HistoryProcessInstance> queryHistoryProcessIncences(HistoryProcessInstanceQuery query) {
+    	return query.list();
+    }
   	
   	public List<Task> getTasks(String definitionId, String processInstanceId) {
   		TaskQuery taskQuery = processEngine.getTaskService().createTaskQuery();

Modified: projects/jopr-integration/trunk/src/main/resources/META-INF/rhq-plugin.xml
===================================================================
--- projects/jopr-integration/trunk/src/main/resources/META-INF/rhq-plugin.xml	2009-08-31 09:00:32 UTC (rev 5597)
+++ projects/jopr-integration/trunk/src/main/resources/META-INF/rhq-plugin.xml	2009-08-31 09:34:27 UTC (rev 5598)
@@ -94,6 +94,8 @@
 		<service name="Process Deployments" discovery="ProcessDeploymentDiscoveryComponent"
 			class="ProcessDeploymentComponent" createDeletePolicy="both"
 			creationDataType="content" description="JBPM Process Deployment">
+			<operation name="suspend" displayName="suspend" description="Suspend this deployment" />
+			<operation name="resume" displayName="resume" description="Resume this deployment" />
 			<metric property="id" displayName="id" dataType="trait"
 				displayType="summary" defaultOn="true" description="deployment id" />
 			<metric property="name" displayName="name" dataType="trait"
@@ -109,6 +111,66 @@
 		</service>
 		<service name="Process Definitions" discovery="ProcessDefDiscoveryComponent"
 			class="ProcessDefComponent" description="JBPM Process Definitions">
+            <operation name="historyProcessInstanceSelector" displayName="historyProcessInstanceSelector"
+                        description="Lists the ended process instance which duration is large than the value">
+                <parameters>
+                   <c:simple-property name="duration" displayName="durationLargeThan" type="long" required="false" description="the duration value large than this"/>
+                   <c:simple-property name="state" displayName="state" type="string" required="false" default="ended"
+                               description="the process instance state">
+                    <c:property-options>
+                       <c:option value="ended"  name="Ended" default="true"/>
+                       <c:option value="active" name="Active"/>
+                     </c:property-options>
+                  </c:simple-property>
+                 <c:simple-property name="firstResult" displayName="firstResult" type="integer" required="false" description="the index of first result"/>
+                 <c:simple-property name="maxResults" displayName="maxResults" type="integer" required="false" description="the max results"/>                
+                </parameters>
+                
+                <results>
+                        <c:list-property name="resultInstances" readOnly="true" required="false" displayName="Process Instances Result"
+                                         description="In this list you can review the process instance which duration is large than the select value">
+                                <c:map-property name="instance" readOnly="true">
+                                    <c:simple-property readOnly="true" name="id" displayName="id" description="ID"/>
+                                    <c:simple-property readOnly="true" name="definitionId" required="false" displayName="DefinitionId" description="Process DefinitionId"/>
+                                    <c:simple-property readOnly="true" name="startTime" required="false" displayName="StartTime" description="Time of the process instance starts"/>
+                                    <c:simple-property readOnly="true" name="endTime" required="false" displayName="EndTime" description="Time of the process instance ends"/>
+                                    <c:simple-property readOnly="true" name="duration" required="false" displayName="Duration" description="Process instance duration"/>
+                                    <c:simple-property readOnly="true" name="state" required="false" displayName="State" description="The process Instance State"/>
+                                </c:map-property>
+                        </c:list-property>
+                </results>
+             </operation>			
+
+          <operation name="processInstanceSelector" displayName="processInstanceSelector"
+                        description="lists the process instances">
+                <parameters>
+                   <c:simple-property name="duration" displayName="durationLargeThan" type="long" required="false" description="the duration value large than this"/>
+                   <c:simple-property name="state" displayName="state" type="string" required="false" default="ended"
+                               description="the process instance state">
+                    <c:property-options>
+                       <c:option value="ended"  name="Ended" default="true"/>
+                       <c:option value="active" name="Active"/>
+                     </c:property-options>
+                  </c:simple-property>
+                 <c:simple-property name="firstResult" displayName="firstResult" type="integer" required="false" description="the index of first result"/>
+                 <c:simple-property name="maxResults" displayName="maxResults" type="integer" required="false" description="the max results"/>                
+                </parameters>
+                
+                <results>
+                        <c:list-property name="resultInstances" readOnly="true" required="false" displayName="Process Instances Result"
+                                         description="In this list you can review the process instance which duration is large than the select value">
+                                <c:map-property name="instance" readOnly="true">
+                                    <c:simple-property readOnly="true" name="id" displayName="id" description="ID"/>
+                                    <c:simple-property readOnly="true" name="definitionId" required="false" displayName="DefinitionId" description="Process DefinitionId"/>
+                                    <c:simple-property readOnly="true" name="startTime" required="false" displayName="StartTime" description="Time of the process instance starts"/>
+                                    <c:simple-property readOnly="true" name="endTime" required="false" displayName="EndTime" description="Time of the process instance ends"/>
+                                    <c:simple-property readOnly="true" name="duration" required="false" displayName="Duration" description="Process instance duration"/>
+                                    <c:simple-property readOnly="true" name="state" required="false" displayName="State" description="The process Instance State"/>
+                                </c:map-property>
+                        </c:list-property>
+                </results>
+             </operation>
+			
 			<metric property="version" displayName="version" dataType="trait"
 				displayType="summary" defaultOn="true" description="Process definition version" />
 			<metric property="id" displayName="id" dataType="trait"



More information about the jbpm-commits mailing list