use of org.alfresco.service.cmr.workflow.WorkflowTaskQuery in project alfresco-repository by Alfresco.
the class WorkflowInterpreter method executeCommand.
/**
* Execute a single command using the BufferedReader passed in for any data needed.
*
* TODO: Use decent parser!
*
* @param line The unparsed command
* @return The textual output of the command.
*/
@Override
protected String executeCommand(String line) throws IOException {
String[] command = line.split(" ");
if (command.length == 0) {
command = new String[1];
command[0] = line;
}
ByteArrayOutputStream bout = new ByteArrayOutputStream();
PrintStream out = new PrintStream(bout);
// repeat last command?
if (command[0].equals("r")) {
if (lastCommand == null) {
return "No command entered yet.";
}
return "repeating command " + lastCommand + "\n\n" + executeCommand(lastCommand);
}
// remember last command
lastCommand = line;
// execute command
if (command[0].equals("help")) {
String helpFile = I18NUtil.getMessage("workflow_console.help");
ClassPathResource helpResource = new ClassPathResource(helpFile);
byte[] helpBytes = new byte[500];
InputStream helpStream = helpResource.getInputStream();
try {
int read = helpStream.read(helpBytes);
while (read != -1) {
bout.write(helpBytes, 0, read);
read = helpStream.read(helpBytes);
}
} finally {
helpStream.close();
}
} else if (command[0].equals("show")) {
if (command.length < 2) {
return "Syntax Error.\n";
} else if (command[1].equals("file")) {
if (command.length != 3) {
return "Syntax Error.\n";
}
ClassPathResource file = new ClassPathResource(command[2]);
InputStream fileStream = file.getInputStream();
byte[] fileBytes = new byte[500];
try {
int read = fileStream.read(fileBytes);
while (read != -1) {
bout.write(fileBytes, 0, read);
read = fileStream.read(fileBytes);
}
} finally {
fileStream.close();
}
out.println();
} else if (command[1].equals("definitions")) {
List<WorkflowDefinition> defs = null;
if (command.length == 3) {
if (command[2].equals("all")) {
defs = workflowService.getAllDefinitions();
} else {
return "Syntax Error.\n";
}
} else {
defs = workflowService.getDefinitions();
}
for (WorkflowDefinition def : defs) {
out.println("id: " + def.getId() + " , name: " + def.getName() + " , title: " + def.getTitle() + " , version: " + def.getVersion());
}
} else if (command[1].equals("workflows")) {
String id = (currentWorkflowDef != null) ? currentWorkflowDef.getId() : null;
if (id == null && command.length == 2) {
return "workflow definition not in use. Enter command 'show workflows all' or 'use <workflowDefId>'.\n";
}
if (command.length == 3) {
if (command[2].equals("all")) {
id = "all";
} else {
return "Syntax Error.\n";
}
}
if ("all".equals(id)) {
for (WorkflowDefinition def : workflowService.getAllDefinitions()) {
List<WorkflowInstance> workflows = workflowService.getActiveWorkflows(def.getId());
for (WorkflowInstance workflow : workflows) {
out.println("id: " + workflow.getId() + " , desc: " + workflow.getDescription() + " , start date: " + workflow.getStartDate() + " , def: " + workflow.getDefinition().getName() + " v" + workflow.getDefinition().getVersion());
}
}
} else {
List<WorkflowInstance> workflows = workflowService.getActiveWorkflows(id);
for (WorkflowInstance workflow : workflows) {
out.println("id: " + workflow.getId() + " , desc: " + workflow.getDescription() + " , start date: " + workflow.getStartDate() + " , def: " + workflow.getDefinition().getName());
}
}
} else if (command[1].equals("paths")) {
String workflowId = (command.length == 3) ? command[2] : (currentPath == null) ? null : currentPath.getInstance().getId();
if (workflowId == null) {
return "Syntax Error. Workflow Id not specified.\n";
}
List<WorkflowPath> paths = workflowService.getWorkflowPaths(workflowId);
for (WorkflowPath path : paths) {
out.println("path id: " + path.getId() + " , node: " + path.getNode().getName());
}
} else if (command[1].equals("tasks")) {
String pathId = (command.length == 3) ? command[2] : (currentPath == null) ? null : currentPath.getId();
if (pathId == null) {
return "Syntax Error. Path Id not specified.\n";
}
List<WorkflowTask> tasks = workflowService.getTasksForWorkflowPath(pathId);
for (WorkflowTask task : tasks) {
out.println("task id: " + task.getId() + " , name: " + task.getName() + " , properties: " + task.getProperties().size());
}
} else if (command[1].equals("transitions")) {
String workflowId = (command.length == 3) ? command[2] : (currentPath == null) ? null : currentPath.getInstance().getId();
if (workflowId == null) {
return "Syntax Error. Workflow Id not specified.\n";
}
List<WorkflowPath> paths = workflowService.getWorkflowPaths(workflowId);
if (paths.size() == 0) {
out.println("no further transitions");
}
for (WorkflowPath path : paths) {
out.println("path: " + path.getId() + " , node: " + path.getNode().getName() + " , active: " + path.isActive());
List<WorkflowTask> tasks = workflowService.getTasksForWorkflowPath(path.getId());
for (WorkflowTask task : tasks) {
out.println(" task id: " + task.getId() + " , name: " + task.getName() + ", title: " + task.getTitle() + " , desc: " + task.getDescription() + " , properties: " + task.getProperties().size());
}
for (WorkflowTransition transition : path.getNode().getTransitions()) {
out.println(" transition id: " + ((transition.getId() == null || transition.getId().equals("")) ? "[default]" : transition.getId()) + " , title: " + transition.getTitle());
}
}
} else if (command[1].equals("timers")) {
String id = (currentWorkflowDef != null) ? currentWorkflowDef.getId() : null;
if (id == null && command.length == 2) {
return "workflow definition not in use. Enter command 'show timers all' or 'use <workflowDefId>'.\n";
}
if (command.length == 3) {
if (command[2].equals("all")) {
id = "all";
} else {
return "Syntax Error.\n";
}
}
List<WorkflowTimer> timers = new ArrayList<WorkflowTimer>();
if ("all".equals(id)) {
for (WorkflowDefinition def : workflowService.getAllDefinitions()) {
List<WorkflowInstance> workflows = workflowService.getActiveWorkflows(def.getId());
for (WorkflowInstance workflow : workflows) {
timers.addAll(workflowService.getTimers(workflow.getId()));
}
}
} else {
List<WorkflowInstance> workflows = workflowService.getActiveWorkflows(id);
for (WorkflowInstance workflow : workflows) {
timers.addAll(workflowService.getTimers(workflow.getId()));
}
}
for (WorkflowTimer timer : timers) {
out.print("id: " + timer.getId() + " , name: " + timer.getName() + " , due date: " + timer.getDueDate() + " , path: " + timer.getPath().getId() + " , node: " + timer.getPath().getNode().getName() + " , process: " + timer.getPath().getInstance().getId());
if (timer.getTask() != null) {
out.print(" , task: " + timer.getTask().getName() + "(" + timer.getTask().getId() + ")");
}
out.println();
if (timer.getError() != null) {
out.println("error executing timer id " + timer.getId());
out.println(timer.getError());
}
}
} else if (command[1].equals("my")) {
if (command.length != 3) {
return "Syntax Error.\n";
}
if (command[2].equals("tasks")) {
out.println(AuthenticationUtil.getRunAsUser() + ":");
List<WorkflowTask> tasks = workflowService.getAssignedTasks(AuthenticationUtil.getRunAsUser(), WorkflowTaskState.IN_PROGRESS);
for (WorkflowTask task : tasks) {
out.println("id: " + task.getId() + " , name: " + task.getName() + " , properties: " + task.getProperties().size() + " , workflow: " + task.getPath().getInstance().getId() + " , path: " + task.getPath().getId());
}
} else if (command[2].equals("completed")) {
out.println(AuthenticationUtil.getRunAsUser() + ":");
List<WorkflowTask> tasks = workflowService.getAssignedTasks(AuthenticationUtil.getRunAsUser(), WorkflowTaskState.COMPLETED);
for (WorkflowTask task : tasks) {
out.println("id: " + task.getId() + " , name " + task.getName() + " , properties: " + task.getProperties().size() + " , workflow: " + task.getPath().getInstance().getId() + " , path: " + task.getPath().getId());
}
} else if (command[2].equals("pooled")) {
out.println(AuthenticationUtil.getRunAsUser() + ":");
List<WorkflowTask> tasks = workflowService.getPooledTasks(AuthenticationUtil.getRunAsUser());
for (WorkflowTask task : tasks) {
out.println("id: " + task.getId() + " , name " + task.getName() + " , properties: " + task.getProperties().size() + " , workflow: " + task.getPath().getInstance().getId() + " , path: " + task.getPath().getId());
}
} else {
return "Syntax Error.\n";
}
} else {
return "Syntax Error.\n";
}
} else if (command[0].equals("desc")) {
if (command.length < 2) {
return "Syntax Error.\n";
}
if (command[1].equals("task")) {
if (command.length != 3) {
return "Syntax Error.\n";
}
WorkflowTask task = workflowService.getTaskById(command[2]);
out.println("id: " + task.getId());
out.println("name: " + task.getName());
out.println("title: " + task.getTitle());
out.println("description: " + task.getDescription());
out.println("state: " + task.getState());
out.println("path: " + task.getPath().getId());
out.println("transitions: " + task.getDefinition().getNode().getTransitions().length);
for (WorkflowTransition transition : task.getDefinition().getNode().getTransitions()) {
out.println(" transition: " + ((transition.getId() == null || transition.getId().equals("")) ? "[default]" : transition.getId()) + " , title: " + transition.getTitle() + " , desc: " + transition.getDescription());
}
out.println("properties: " + task.getProperties().size());
for (Map.Entry<QName, Serializable> prop : task.getProperties().entrySet()) {
out.println(" " + prop.getKey() + " = " + prop.getValue());
}
} else if (command[1].equals("workflow")) {
if (command.length != 3) {
return "Syntax Error.\n";
}
WorkflowInstance workflow = workflowService.getWorkflowById(command[2]);
out.println("definition: " + workflow.getDefinition().getName());
out.println("id: " + workflow.getId());
out.println("description: " + workflow.getDescription());
out.println("active: " + workflow.isActive());
out.println("start date: " + workflow.getStartDate());
out.println("end date: " + workflow.getEndDate());
out.println("initiator: " + workflow.getInitiator());
out.println("context: " + workflow.getContext());
out.println("package: " + workflow.getWorkflowPackage());
} else if (command[1].equals("path")) {
if (command.length != 3) {
return "Syntax Error.\n";
}
Map<QName, Serializable> properties = workflowService.getPathProperties(command[2]);
out.println("path: " + command[1]);
out.println("properties: " + properties.size());
for (Map.Entry<QName, Serializable> prop : properties.entrySet()) {
out.println(" " + prop.getKey() + " = " + prop.getValue());
}
} else {
return "Syntax Error.\n";
}
} else if (command[0].equals("query")) {
if (command.length < 2) {
return "Syntax Error.\n";
}
if (command[1].equals("task")) {
// build query
WorkflowTaskQuery query = new WorkflowTaskQuery();
Map<QName, Object> taskProps = new HashMap<QName, Object>();
Map<QName, Object> procProps = new HashMap<QName, Object>();
for (int i = 2; i < command.length; i++) {
String[] predicate = command[i].split("=");
if (predicate.length == 1) {
return "Syntax Error.\n";
}
String[] predicateName = predicate[0].split("\\.");
if (predicateName.length == 1) {
if (predicate[0].equals("taskId")) {
query.setTaskId(predicate[1]);
} else if (predicate[0].equals("taskState")) {
WorkflowTaskState state = WorkflowTaskState.valueOf(predicate[1]);
if (state == null) {
return "Syntax Error. Unknown task state\n";
}
query.setTaskState(state);
} else if (predicate[0].equals("taskName")) {
query.setTaskName(QName.createQName(predicate[1], namespaceService));
} else if (predicate[0].equals("taskActor")) {
query.setActorId(predicate[1]);
} else if (predicate[0].equals("processId")) {
query.setProcessId(predicate[1]);
} else if (predicate[0].equals("processName")) {
query.setProcessName(QName.createQName(predicate[1], namespaceService));
} else if (predicate[0].equals("workflowDefinitionName")) {
query.setWorkflowDefinitionName(predicate[1]);
} else if (predicate[0].equals("processActive")) {
Boolean active = Boolean.valueOf(predicate[1]);
query.setActive(active);
} else if (predicate[0].equals("orderBy")) {
String[] orderBy = predicate[1].split(",");
WorkflowTaskQuery.OrderBy[] queryOrderBy = new WorkflowTaskQuery.OrderBy[orderBy.length];
for (int iOrderBy = 0; iOrderBy < orderBy.length; iOrderBy++) {
queryOrderBy[iOrderBy] = WorkflowTaskQuery.OrderBy.valueOf(orderBy[iOrderBy]);
if (queryOrderBy[iOrderBy] == null) {
return "Syntax Error. Unknown orderBy.\n";
}
}
query.setOrderBy(queryOrderBy);
} else {
return "Syntax Error. Unknown query predicate.\n";
}
} else if (predicateName.length == 2) {
if (predicateName[0].equals("task")) {
taskProps.put(QName.createQName(predicateName[1], namespaceService), predicate[1]);
} else if (predicateName[0].equals("process")) {
procProps.put(QName.createQName(predicateName[1], namespaceService), predicate[1]);
} else {
return "Syntax Error. Unknown query predicate.\n";
}
} else {
return "Syntax Error.\n";
}
}
if (taskProps.size() > 0) {
query.setTaskCustomProps(taskProps);
}
if (procProps.size() > 0) {
query.setProcessCustomProps(procProps);
}
// execute query
List<WorkflowTask> tasks = workflowService.queryTasks(query);
out.println("found " + tasks.size() + " tasks.");
for (WorkflowTask task : tasks) {
out.println("task id: " + task.getId() + " , name: " + task.getName() + " , properties: " + task.getProperties().size() + ", process id: " + task.getPath().getInstance());
}
} else {
return "Syntax Error.\n";
}
} else if (command[0].equals("deploy")) {
if (command.length != 3) {
return "Syntax Error.\n";
}
ClassPathResource workflowDef = new ClassPathResource(command[2]);
WorkflowDeployment deployment = workflowService.deployDefinition(command[1], workflowDef.getInputStream(), MimetypeMap.MIMETYPE_XML);
WorkflowDefinition def = deployment.getDefinition();
for (String problem : deployment.getProblems()) {
out.println(problem);
}
out.println("deployed definition id: " + def.getId() + " , name: " + def.getName() + " , title: " + def.getTitle() + " , version: " + def.getVersion());
currentDeployEngine = command[1];
currentDeployResource = command[2];
out.print(executeCommand("use definition " + def.getId()));
} else if (command[0].equals("redeploy")) {
if (currentDeployResource == null) {
return "nothing to redeploy\n";
}
out.print(executeCommand("deploy " + currentDeployEngine + " " + currentDeployResource));
} else if (command[0].equals("undeploy")) {
if (command.length < 2) {
return "Syntax Error.\n";
}
if (command[1].equals("definition")) {
if (command.length == 3) {
workflowService.undeployDefinition(command[2]);
currentWorkflowDef = null;
currentPath = null;
out.print(executeCommand("show definitions"));
} else if (command.length == 4) {
if (command[2].equals("name")) {
out.print("undeploying...");
List<WorkflowDefinition> defs = workflowService.getAllDefinitionsByName(command[3]);
for (WorkflowDefinition def : defs) {
workflowService.undeployDefinition(def.getId());
out.print(" v" + def.getVersion());
}
out.println("");
currentWorkflowDef = null;
currentPath = null;
out.print(executeCommand("show definitions all"));
} else {
return "Syntax Error.\n";
}
} else {
return "Syntax Error.\n";
}
} else {
return "Syntax Error.\n";
}
} else if (command[0].equals("use")) {
if (command.length == 1) {
out.println("definition: " + ((currentWorkflowDef == null) ? "None" : currentWorkflowDef.getId() + " , name: " + currentWorkflowDef.getTitle() + " , version: " + currentWorkflowDef.getVersion()));
out.println("workflow: " + ((currentPath == null) ? "None" : currentPath.getInstance().getId() + " , active: " + currentPath.getInstance().isActive()));
out.println("path: " + ((currentPath == null) ? "None" : currentPath.getId() + " , node: " + currentPath.getNode().getTitle()));
} else if (command.length > 1) {
if (command[1].equals("definition")) {
if (command.length != 3) {
return "Syntax Error.\n";
}
WorkflowDefinition def = workflowService.getDefinitionById(command[2]);
if (def == null) {
return "Not found.\n";
}
currentWorkflowDef = def;
currentPath = null;
out.print(executeCommand("use"));
} else if (command[1].equals("workflow")) {
if (command.length != 3) {
return "Syntax Error.\n";
}
WorkflowInstance instance = workflowService.getWorkflowById(command[2]);
currentWorkflowDef = instance.getDefinition();
currentPath = workflowService.getWorkflowPaths(instance.getId()).get(0);
out.print(executeCommand("use"));
} else {
return "Syntax Error.\n";
}
}
} else if (command[0].equals("user")) {
if (command.length == 2) {
if (tenantService.isEnabled()) {
tenantService.checkDomainUser(command[1]);
}
NodeRef personRef = personService.getPerson(command[1]);
if (personRef == null) {
throw new WorkflowException("User " + command[1] + " does not exist.");
}
PersonInfo info = personService.getPerson(personRef);
String userName = info.getUserName();
setCurrentUserName(userName);
}
out.println("using user " + getCurrentUserName());
} else if (command[0].equals("start")) {
Map<QName, Serializable> params = new HashMap<QName, Serializable>();
for (int i = 1; i < command.length; i++) {
String[] param = command[i].split("=");
QName qname = QName.createQName(param[0], namespaceService);
if (param.length == 1) {
if (!vars.containsKey(qname)) {
return "var " + qname + " not found.\n";
}
params.put(qname, vars.get(qname));
} else if (param.length == 2) {
params.put(qname, param[1]);
} else {
return "Syntax Error.\n";
}
}
if (currentWorkflowDef == null) {
return "Workflow definition not selected.\n";
}
setupStartTaskParameters(currentWorkflowDef.getStartTaskDefinition().metadata, params);
WorkflowPath path = workflowService.startWorkflow(currentWorkflowDef.getId(), params);
endStartTaskForPath(path);
out.println("started workflow id: " + path.getInstance().getId() + " , def: " + path.getInstance().getDefinition().getTitle());
currentPath = path;
out.print(interpretCommand("show transitions"));
} else if (command[0].equals("update")) {
if (command.length < 3) {
return "Syntax Error.\n";
}
if (command[1].equals("task")) {
if (command.length < 4) {
return "Syntax Error.\n";
}
Map<QName, Serializable> params = new HashMap<QName, Serializable>();
for (int i = 3; i < command.length; i++) {
String[] param = command[i].split("=");
QName qname = QName.createQName(param[0], namespaceService);
if (param.length == 1) {
if (!vars.containsKey(qname)) {
return "var " + qname + " not found.\n";
}
params.put(qname, vars.get(qname));
} else if (param.length == 2) {
params.put(qname, param[1]);
} else {
return "Syntax Error.\n";
}
}
WorkflowTask task = workflowService.updateTask(command[2], params, null, null);
out.println("updated task id: " + command[2] + ", properties: " + task.getProperties().size());
} else {
return "Syntax Error.\n";
}
} else if (command[0].equals("signal")) {
if (command.length < 2) {
return "Syntax Error.\n";
}
WorkflowPath path = workflowService.signal(command[1], getTransition(command));
out.println("signal sent - path id: " + path.getId());
out.print(interpretCommand("show transitions"));
} else if (command[0].equals("event")) {
if (command.length < 3) {
return "Syntax Error.\n";
}
WorkflowPath path = workflowService.fireEvent(command[1], command[2]);
out.println("event " + command[2] + " fired - path id: " + path.getId());
out.print(interpretCommand("show transitions"));
} else if (command[0].equals("end")) {
if (command.length < 3) {
return "Syntax Error.\n";
}
if (command[1].equals("task")) {
WorkflowTask task = workflowService.endTask(command[2], (command.length == 4) ? command[3] : null);
out.println("signal sent - path id: " + task.getPath().getId());
// ACE-3137: "show transitions" will fail if we don't set the workflow path first.
currentPath = task.getPath();
out.print(interpretCommand("show transitions"));
} else if (command[1].equals("workflow")) {
String workflowId = (command.length == 3) ? command[2] : (currentPath == null) ? null : currentPath.getInstance().getId();
if (workflowId == null) {
return "Syntax Error. Workflow Id not specified.\n";
}
workflowService.cancelWorkflow(workflowId);
out.println("workflow " + workflowId + " cancelled.");
} else {
return "Syntax Error.\n";
}
} else if (command[0].equals("delete")) {
if (command.length < 2) {
return "Syntax Error.\n";
}
if (command[1].equals("workflow")) {
String workflowId = (command.length == 3) ? command[2] : (currentPath == null) ? null : currentPath.getInstance().getId();
if (workflowId == null) {
return "Syntax Error. Workflow Id not specified.\n";
}
workflowService.deleteWorkflow(workflowId);
out.println("workflow " + workflowId + " deleted.");
} else if (command[1].equals("all")) {
if (command.length < 3) {
return "Syntax Error.\n";
}
if (command[2].equals("workflows")) {
if (command.length < 4) {
return "Enter the command 'delete all workflows imeanit' to really delete all workflows\n";
}
if (command[3].equals("imeanit")) {
for (WorkflowDefinition def : workflowService.getAllDefinitions()) {
List<WorkflowInstance> workflows = workflowService.getActiveWorkflows(def.getId());
for (WorkflowInstance workflow : workflows) {
workflowService.deleteWorkflow(workflow.getId());
out.println("workflow " + workflow.getId() + " deleted.");
}
}
} else {
return "Syntax Error.\n";
}
} else {
return "Syntax Error.\n";
}
} else {
return "Syntax Error.\n";
}
} else if (command[0].equals("var")) {
if (command.length == 1) {
for (Map.Entry<QName, Serializable> entry : vars.entrySet()) {
out.println(entry.getKey() + " = " + entry.getValue());
}
} else if (command.length == 2) {
String[] param = command[1].split("=");
if (param.length == 0) {
return "Syntax Error.\n";
}
if (param.length == 1) {
QName qname = QName.createQName(param[0], namespaceService);
vars.remove(qname);
out.println("deleted var " + qname);
} else if (param.length == 2) {
boolean multi = false;
if (param[0].endsWith("*")) {
param[0] = param[0].substring(0, param[0].length() - 1);
multi = true;
}
QName qname = QName.createQName(param[0], namespaceService);
String[] strValues = param[1].split(",");
if (!multi && strValues.length > 1) {
return "Syntax Error.\n";
}
if (!multi) {
vars.put(qname, strValues[0]);
} else {
List<String> values = new ArrayList<String>();
for (String strValue : strValues) {
values.add(strValue);
}
vars.put(qname, (Serializable) values);
}
out.println("set var " + qname + " = " + vars.get(qname));
} else {
return "Syntax Error.\n";
}
} else if (command.length == 4) {
if (command[2].equals("person")) {
boolean multi = false;
if (command[1].endsWith("*")) {
command[1] = command[1].substring(0, command[1].length() - 1);
multi = true;
}
QName qname = QName.createQName(command[1], namespaceService);
String[] strValues = command[3].split(",");
if (!multi && strValues.length > 1) {
return "Syntax Error.\n";
}
if (!multi) {
NodeRef auth = personService.getPerson(strValues[0]);
vars.put(qname, auth);
} else {
List<NodeRef> values = new ArrayList<NodeRef>();
for (String strValue : strValues) {
NodeRef auth = personService.getPerson(strValue);
values.add(auth);
}
vars.put(qname, (Serializable) values);
}
out.println("set var " + qname + " = " + vars.get(qname));
} else if (command[2].equals("group")) {
boolean multi = false;
if (command[1].endsWith("*")) {
command[1] = command[1].substring(0, command[1].length() - 1);
multi = true;
}
QName qname = QName.createQName(command[1], namespaceService);
String[] strValues = command[3].split(",");
if (!multi && strValues.length > 1) {
return "Syntax Error.\n";
}
if (!multi) {
NodeRef auth = authorityDAO.getAuthorityNodeRefOrNull(strValues[0]);
if (auth == null) {
throw new WorkflowException("Group " + strValues[0] + " does not exist.");
}
vars.put(qname, auth);
} else {
List<NodeRef> values = new ArrayList<NodeRef>();
for (String strValue : strValues) {
NodeRef auth = authorityDAO.getAuthorityNodeRefOrNull(strValue);
if (auth == null) {
throw new WorkflowException("Group " + strValue + " does not exist.");
}
values.add(auth);
}
vars.put(qname, (Serializable) values);
}
out.println("set var " + qname + " = " + vars.get(qname));
} else if (command[2].equals("package")) {
QName qname = QName.createQName(command[1], namespaceService);
int number = new Integer(command[3]);
NodeRef packageNodeRef = workflowService.createPackage(null);
for (int i = 0; i < number; i++) {
FileInfo fileInfo = fileFolderService.create(packageNodeRef, "Content" + i, ContentModel.TYPE_CONTENT);
ContentWriter writer = fileFolderService.getWriter(fileInfo.getNodeRef());
writer.putContent("Content" + i);
}
vars.put(qname, packageNodeRef);
out.println("set var " + qname + " = " + vars.get(qname));
} else {
return "Syntax Error.\n";
}
} else {
return "Syntax Error.\n";
}
} else {
return "Syntax Error.\n";
}
out.flush();
String retVal = new String(bout.toByteArray());
out.close();
return retVal;
}
use of org.alfresco.service.cmr.workflow.WorkflowTaskQuery in project alfresco-repository by Alfresco.
the class AbstractMultitenantWorkflowTest method testQueryTasks.
public void testQueryTasks() throws Exception {
WorkflowTaskQuery query = new WorkflowTaskQuery();
query.setTaskName(ADHOC_TASK);
// Run as User1 so tenant domain 1
AuthenticationUtil.setFullyAuthenticatedUser(user1);
TenantContextHolder.setTenantDomain(tenant1);
// Check no tasks to start with
List<WorkflowTask> tasks = workflowService.queryTasks(query);
assertEquals(0, tasks.size());
String adhocKey = getAdhocDefinitionKey();
WorkflowDefinition adhocDef1 = workflowService.getDefinitionByName(adhocKey);
// Check Adhoc definition exists
assertNotNull(adhocDef1);
// Start Adhoc workflow on tenant1.
NodeRef assignee1 = personService.getPerson(user1);
NodeRef pckg1 = workflowService.createPackage(null);
Map<QName, Serializable> parameters1 = new HashMap<QName, Serializable>();
parameters1.put(WorkflowModel.ASSOC_PACKAGE, pckg1);
parameters1.put(WorkflowModel.ASSOC_ASSIGNEE, assignee1);
WorkflowPath path = workflowService.startWorkflow(adhocDef1.getId(), parameters1);
// End start task
String instanceId = path.getInstance().getId();
WorkflowTask startTask = workflowService.getStartTask(instanceId);
workflowService.endTask(startTask.getId(), null);
// Should have found the new task.
tasks = workflowService.queryTasks(query);
assertEquals(1, tasks.size());
// Switch to tenant2
AuthenticationUtil.setFullyAuthenticatedUser(user2);
TenantContextHolder.setTenantDomain(tenant2);
// Tenant2 should not find the task
tasks = workflowService.queryTasks(query);
assertEquals(0, tasks.size());
// Start Adhoc workflow on tenant2.
WorkflowDefinition adhocDef2 = workflowService.getDefinitionByName(adhocKey);
NodeRef assignee2 = personService.getPerson(user2);
NodeRef pckg2 = workflowService.createPackage(null);
Map<QName, Serializable> parameters2 = new HashMap<QName, Serializable>();
parameters2.put(WorkflowModel.ASSOC_PACKAGE, pckg2);
parameters2.put(WorkflowModel.ASSOC_ASSIGNEE, assignee2);
WorkflowPath path2 = workflowService.startWorkflow(adhocDef2.getId(), parameters2);
String path2Id = path2.getId();
// End start task
String instanceId2 = path2.getInstance().getId();
WorkflowTask startTask2 = workflowService.getStartTask(instanceId2);
workflowService.endTask(startTask2.getId(), null);
// Tenant2 should find the new task
tasks = workflowService.queryTasks(query);
assertEquals(1, tasks.size());
assertEquals(path2Id, tasks.get(0).getPath().getId());
}
use of org.alfresco.service.cmr.workflow.WorkflowTaskQuery in project alfresco-repository by Alfresco.
the class AbstractWorkflowServiceIntegrationTest method checkProcessIdQuery.
protected void checkProcessIdQuery(String workflowInstanceId, List<String> expectedTaskIds, WorkflowTaskState state) {
WorkflowTaskQuery taskQuery = createWorkflowTaskQuery(state);
taskQuery.setProcessId(workflowInstanceId);
checkTasksFoundUsingQuery(expectedTaskIds, taskQuery);
taskQuery = createWorkflowTaskQuery(state);
taskQuery.setProcessId(BPMEngineRegistry.createGlobalId(getEngine(), "99999999999"));
checkNoTasksFoundUsingQuery(taskQuery);
}
use of org.alfresco.service.cmr.workflow.WorkflowTaskQuery in project alfresco-repository by Alfresco.
the class AbstractWorkflowServiceIntegrationTest method checkActorIdQuery.
protected void checkActorIdQuery(String actorId, List<String> expectedTaskIds, WorkflowTaskState state, String optionalProcessId) {
WorkflowTaskQuery taskQuery = createWorkflowTaskQuery(state);
taskQuery.setActorId(actorId);
if (optionalProcessId != null) {
taskQuery.setProcessId(optionalProcessId);
}
checkTasksFoundUsingQuery(expectedTaskIds, taskQuery);
taskQuery = createWorkflowTaskQuery(state);
taskQuery.setActorId(USER3);
if (optionalProcessId != null) {
taskQuery.setProcessId(optionalProcessId);
}
checkNoTasksFoundUsingQuery(taskQuery);
}
use of org.alfresco.service.cmr.workflow.WorkflowTaskQuery in project alfresco-repository by Alfresco.
the class AbstractWorkflowServiceIntegrationTest method checkTaskNameQuery.
protected void checkTaskNameQuery(QName taskName, List<String> expectedTaskIds, WorkflowTaskState state, String optionalProcessId) {
WorkflowTaskQuery taskQuery = createWorkflowTaskQuery(state);
taskQuery.setTaskName(taskName);
if (optionalProcessId != null) {
taskQuery.setProcessId(optionalProcessId);
}
checkTasksFoundUsingQuery(expectedTaskIds, taskQuery);
QName unexistingTaskName = QName.createQName(NamespaceService.WORKFLOW_MODEL_1_0_URI, "unexistingTask");
taskQuery = createWorkflowTaskQuery(state);
taskQuery.setTaskName(unexistingTaskName);
if (optionalProcessId != null) {
taskQuery.setProcessId(optionalProcessId);
}
checkNoTasksFoundUsingQuery(taskQuery);
}
Aggregations