/* * Copyright 2005 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. * You may obtain a copy of the License at * * 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.workflow.core.impl; import java.io.Serializable; import java.util.HashMap; import java.util.List; import java.util.Map; import org.kie.api.definition.process.Node; import org.jbpm.workflow.core.Connection; /** * Default implementation of a connection. * */ public class ConnectionImpl implements Connection, Serializable { private static final long serialVersionUID = 510l; private Node from; private Node to; private String fromType; private String toType; private Map<String, Object> metaData = new HashMap<String, Object>(); public ConnectionImpl() { } /** * This constructor calls {@link #connect()} itself! That means * that simply creating the object also adds it to the appropriate * {@link List} fields in other objects. * </p> * Creates a new connection, given a from node, a to node * and a type. * * @param from The from node * @param fromType The node type * @param to The to node * @param toType The connection type */ public ConnectionImpl(final Node from, final String fromType, final Node to, final String toType) { if (from == null) { throw new IllegalArgumentException("From node is null!"); } if (fromType == null) { throw new IllegalArgumentException("From type is null!"); } if (to == null) { throw new IllegalArgumentException("To node is null!"); } if (toType == null) { throw new IllegalArgumentException("To type is null!"); } this.from = from; this.fromType = fromType; this.to = to; this.toType = toType; connect(); } public void connect() { ((org.jbpm.workflow.core.Node) this.from).addOutgoingConnection(fromType, this); ((org.jbpm.workflow.core.Node) this.to).addIncomingConnection(toType, this); } public synchronized void terminate() { ((org.jbpm.workflow.core.Node) this.from).removeOutgoingConnection(fromType, this); ((org.jbpm.workflow.core.Node) this.to).removeIncomingConnection(toType, this); this.from = null; this.fromType = null; this.to = null; this.toType = null; } public Node getFrom() { return this.from; } public Node getTo() { return this.to; } public String getFromType() { return this.fromType; } public String getToType() { return this.toType; } public void setFrom(Node from) { this.from = from; } public void setTo(Node to) { this.to = to; } public void setFromType(String fromType) { this.fromType = fromType; } public void setToType(String toType) { this.toType = toType; } public Map<String, Object> getMetaData() { return this.metaData; } public void setMetaData(String name, Object value) { this.metaData.put(name, value); } public Object getMetaData(String name) { return this.metaData.get(name); } public String toString() { final StringBuilder sb = new StringBuilder("Connection "); sb.append(getFrom() == null ? "null" : getFrom().getName()); sb.append(" [type="); sb.append(getFromType()); sb.append("]"); sb.append(" - "); sb.append(getTo() == null ? "null" : getTo().getName()); sb.append(" [type="); sb.append(getToType()); sb.append("]"); return sb.toString(); } }