package org.camunda.bpm.extension.osgi.commands;
import org.camunda.bpm.engine.ProcessEngine;
import org.camunda.bpm.engine.history.HistoricActivityInstance;
import org.camunda.bpm.engine.history.HistoricProcessInstance;
import org.camunda.bpm.extension.osgi.commands.asciitable.ASCIITable;
import org.apache.felix.gogo.commands.Argument;
import org.apache.felix.gogo.commands.Command;
import org.apache.karaf.shell.console.OsgiCommandSupport;
import java.util.List;
/**
* List activities of an instance.
*/
@Command(scope = "camunda", name = "activity-list", description = "List activities")
public class ActivityList extends OsgiCommandSupport {
private static final String[] HEADER = new String[]{"ID", "DURATION", "ACTIVITY_ID", "ACTIVITY_NAME", "ACTIVITY_TYPE"};
private final ProcessEngine engine;
@Argument(index = 0, name = "instanceId",
description = "Process instance id",
required = true, multiValued = false)
private String instanceId;
public ActivityList(ProcessEngine engine) {
this.engine = engine;
}
@Override
protected Object doExecute() throws Exception {
HistoricProcessInstance processInstance = engine.getHistoryService().createHistoricProcessInstanceQuery().processInstanceId(instanceId).singleResult();
System.out.println("Process instance : " + processInstance.getId());
System.out.println("Process definition : " + processInstance.getProcessDefinitionId());
System.out.println("");
List<HistoricActivityInstance> activities = engine.getHistoryService().createHistoricActivityInstanceQuery().
processInstanceId(instanceId).orderByHistoricActivityInstanceStartTime().asc().list();
String[][] data = new String[activities.size()][HEADER.length];
int i = 0;
for (HistoricActivityInstance activity : activities) {
data[i++] = new String[]{
activity.getId(),
activity.getDurationInMillis() + " ms",
activity.getActivityId(),
activity.getActivityName(),
activity.getActivityType()
};
}
ASCIITable.getInstance().printTable(HEADER, data);
return null;
}
}