![JAR search and dependency download from the Maven repository](/logo.png)
org.jbpm.command.CompositeCommand Maven / Gradle / Ivy
package org.jbpm.command;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.jbpm.JbpmContext;
import org.jbpm.JbpmException;
import org.jbpm.util.ClassUtil;
public class CompositeCommand implements Command {
private static final long serialVersionUID = 1L;
List commands = null;
public CompositeCommand(List commands) {
this.commands = commands;
}
public Object execute(JbpmContext jbpmContext) throws Exception {
List results = null;
if (commands != null) {
Object lastResult = null;
results = new ArrayList(commands.size());
Iterator iter = commands.iterator();
while (iter.hasNext()) {
Command command = (Command) iter.next();
if (lastResult != null) {
tryToInject(lastResult, command);
}
lastResult = command.execute(jbpmContext);
results.add(lastResult);
}
}
return results;
}
protected void tryToInject(Object lastResult, Command command) {
Field field = findField(lastResult.getClass());
if (field != null) {
field.setAccessible(true);
try {
field.set(command, lastResult);
}
catch (Exception e) {
throw new JbpmException("couldn't propagate composite command context", e);
}
}
}
protected Field findField(Class clazz) {
Field field = null;
int i = 0;
Field[] fields = clazz.getDeclaredFields();
while ((i < fields.length) && (field == null)) {
Field candidate = fields[i];
if ((candidate.getType().isAssignableFrom(clazz))
&& (candidate.getName().startsWith("previous"))) {
field = candidate;
}
i++;
}
return field;
}
public String toString() {
return ClassUtil.getSimpleName(getClass()) + commands;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy