/*
* Copyright 2015 Red Hat, Inc. and/or its affiliates.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jbpm.examples.checklist.impl;
import java.util.ArrayList;
import java.util.List;
import org.jbpm.examples.checklist.ChecklistItem;
import org.jbpm.examples.checklist.ChecklistManager;
import org.jbpm.test.JBPMHelper;
import org.kie.api.KieServices;
import org.kie.api.io.ResourceType;
import org.kie.api.runtime.manager.RuntimeEnvironment;
import org.kie.api.runtime.manager.RuntimeEnvironmentBuilder;
import org.kie.api.task.UserGroupCallback;
public class ChecklistExample {
public static void main(String[] args) {
try {
JBPMHelper.startH2Server();
JBPMHelper.setupDataSource();
RuntimeEnvironment environment = RuntimeEnvironmentBuilder.Factory.get().newDefaultBuilder()
.userGroupCallback(new UserGroupCallback() {
public List<String> getGroupsForUser(String userId) {
List<String> result = new ArrayList<String>();
if ("actor4".equals(userId)) {
result.add("group1");
}
return result;
}
public boolean existsUser(String arg0) {
return true;
}
public boolean existsGroup(String arg0) {
return true;
}
})
.addAsset(KieServices.Factory.get().getResources().newClassPathResource("checklist/SampleChecklistProcess.bpmn"), ResourceType.BPMN2)
.get();
ChecklistManager checklistManager = new DefaultChecklistManager(environment);
long c1 = checklistManager.createContext("org.jbpm.examples.checklist.sample1", "actor1");
List<ChecklistItem> items = checklistManager.getTasks(c1, null);
printChecklistItems(items, c1);
System.out.println("Completing Task1");
ChecklistItem item1 = findChecklistItem(items, "Task1");
checklistManager.completeTask("actor1", item1.getTaskId());
items = checklistManager.getTasks(c1, null);
printChecklistItems(items, c1);
System.out.println("Adding Extra Task");
String[] actorIds = new String[] {
"actor5"
};
ChecklistItem itemExtra = checklistManager.addTask("actor5", actorIds, new String[0], "TaskExtra", "2+", c1);
items = checklistManager.getTasks(c1, null);
printChecklistItems(items, c1);
System.out.println("Completing Task2");
ChecklistItem item2 = findChecklistItem(items, "Task2");
checklistManager.claimTask("actor4", item2.getTaskId());
checklistManager.completeTask("actor4", item2.getTaskId());
items = checklistManager.getTasks(c1, null);
printChecklistItems(items, c1);
System.out.println("Completing Task3b");
ChecklistItem item3b = findChecklistItem(items, "Task3b");
checklistManager.claimTask("actor3", item3b.getTaskId());
checklistManager.completeTask("actor3", item3b.getTaskId());
items = checklistManager.getTasks(c1, null);
printChecklistItems(items, c1);
System.out.println("Completing Task3a");
ChecklistItem item3a = findChecklistItem(items, "Task3a");
checklistManager.completeTask("actor1", item3a.getTaskId());
items = checklistManager.getTasks(c1, null);
printChecklistItems(items, c1);
System.out.println("Completing Extra Task");
itemExtra = findChecklistItem(items, "TaskExtra");
checklistManager.completeTask("actor5", itemExtra.getTaskId());
items = checklistManager.getTasks(c1, null);
printChecklistItems(items, c1);
System.out.println("Completing Task4");
ChecklistItem item4 = findChecklistItem(items, "Task4");
checklistManager.completeTask("actor1", item4.getTaskId());
items = checklistManager.getTasks(c1, null);
printChecklistItems(items, c1);
} catch (Throwable t) {
t.printStackTrace();
}
System.exit(0);
}
private static void printChecklistItems(List<ChecklistItem> items, long processInstanceId) {
System.out.println("Checklist " + processInstanceId);
for (ChecklistItem item: items) {
String orderingNb = item.getOrderingNb();
if (orderingNb == null) {
orderingNb = "";
} else if (orderingNb.endsWith("+")) {
orderingNb = "*";
}
System.out.println(
fixedLength(orderingNb, 4) + " "
+ fixedLength(item.getName(), 20) + " "
+ fixedLength(item.getStatus().toString(), 10) + " "
+ fixedLength(item.getActors(), 25)
+ fixedLength(item.getTaskId() == null ? "" : item.getTaskId() + "", 3));
}
}
private static ChecklistItem findChecklistItem(List<ChecklistItem> items, String name) {
for (ChecklistItem item: items) {
if (name.equals(item.getName())) {
return item;
}
}
return null;
}
private static String fixedLength(String s, int length) {
if (s == null) {
s = "";
}
if (s.length() > length) {
return s.substring(0, length - 1);
} else {
int l = s.length();
for (int i = l; i <= length; i++) {
s += " ";
}
return s;
}
}
}