public static void linkConnections(NodeContainer nodeContainer, List<SequenceFlow> connections) {
if (connections != null) {
for (SequenceFlow connection: connections) {
String sourceRef = connection.getSourceRef();
String targetRef = connection.getTargetRef();
Node source = null;
Node target = null;
try {
// remove starting _
sourceRef = sourceRef.substring(1);
// remove ids of parent nodes
sourceRef = sourceRef.substring(sourceRef.lastIndexOf("-") + 1);
source = nodeContainer.getNode(new Integer(sourceRef));
} catch (NumberFormatException e) {
// try looking for a node with same "UniqueId" (in metadata)
for (Node node: nodeContainer.getNodes()) {
if (connection.getSourceRef().equals(node.getMetaData().get("UniqueId"))) {
source = node;
break;
}
}
if (source == null) {
throw new IllegalArgumentException("Could not find source node for connection:" + connection.getSourceRef());
}
}
try {
// remove starting _
targetRef = targetRef.substring(1);
// remove ids of parent nodes
targetRef = targetRef.substring(targetRef.lastIndexOf("-") + 1);
target = nodeContainer.getNode(new Integer(targetRef));
} catch (NumberFormatException e) {
// try looking for a node with same "UniqueId" (in metadata)
for (Node node: nodeContainer.getNodes()) {
if (connection.getTargetRef().equals(node.getMetaData().get("UniqueId"))) {
target = node;
break;
}
}
if (target == null) {
throw new IllegalArgumentException("Could not find target node for connection:" + connection.getTargetRef());
}
}
Connection result = new ConnectionImpl(
source, NodeImpl.CONNECTION_DEFAULT_TYPE,
target, NodeImpl.CONNECTION_DEFAULT_TYPE);
result.setMetaData("bendpoints", connection.getBendpoints());
if (source instanceof Split) {
Split split = (Split) source;
Constraint constraint = new ConstraintImpl();
String defaultConnection = (String) split.getMetaData("Default");
if (defaultConnection != null && defaultConnection.equals(connection.getId())) {
constraint.setDefault(true);
}
if (connection.getName() != null) {
constraint.setName(connection.getName());
} else {
constraint.setName("");
}
if (connection.getType() != null) {
constraint.setType(connection.getType());
} else {
constraint.setType("code");
}
if (connection.getLanguage() != null) {
constraint.setDialect(connection.getLanguage());
}
if (connection.getExpression() != null) {
constraint.setConstraint(connection.getExpression());
}
split.addConstraint(
new ConnectionRef(target.getId(), NodeImpl.CONNECTION_DEFAULT_TYPE),
constraint);
}
}
}
}