/* * This file is part of the OSMembrane project. * More informations under www.osmembrane.de * * The project is licensed under the GNU GENERAL PUBLIC LICENSE 3.0. * for more details about the license see http://www.osmembrane.de/license/ * * Source: $HeadURL$ ($Revision$) * Last changed: $Date$ */ package de.osmembrane.model.pipeline; import java.io.ObjectStreamException; import java.util.ArrayList; import java.util.List; import de.osmembrane.model.Identifier; import de.osmembrane.model.ModelProxy; import de.osmembrane.model.xml.XMLPipe; import de.osmembrane.tools.I18N; /** * Implements {@link AbstractConnector} * * @author jakob_jarosch */ public class Connector extends AbstractConnector { private static final long serialVersionUID = 2011010722340001L; private List<AbstractConnector> connectors = new ArrayList<AbstractConnector>(); private ConnectorType type; private ConnectorPosition position; private AbstractFunction parent; transient private XMLPipe xmlPipe; private Identifier xmlPipeIdentifier; /** * Constructor for a new Connector with given {@link XMLPipe} and * {@link AbstractFunction} as parent. */ public Connector(AbstractFunction parent, ConnectorPosition position, XMLPipe xmlPipe) { this.parent = parent; this.position = position; this.type = ConnectorType.parseString(xmlPipe.getType()); this.xmlPipe = xmlPipe; /* set the identifier */ AbstractFunctionPrototype afp = ModelProxy.getInstance().getFunctions(); this.xmlPipeIdentifier = afp.getMatchingXMLPipeIdentifier(this.xmlPipe); } @Override public AbstractFunction getParent() { return parent; } @Override public String getDescription() { return I18N.getInstance().getDescription(xmlPipe); } @Override public ConnectorType getType() { return type; } @Override public int getMaxConnections() { if (position == ConnectorPosition.IN) { return getType().getMaxInConnections(); } else { return getType().getMaxOutConnections(); } } @Override public boolean isFull() { return (connectors.size() >= getMaxConnections()); } @Override public Connector[] getConnections() { Connector[] connectors = new Connector[this.connectors.size()]; connectors = this.connectors.toArray(connectors); return connectors; } @Override public int getConnectorIndex() { return xmlPipe.getIndex().intValue(); } @Override protected boolean addConnection(AbstractConnector connector) { /* * check if the connector is not full and both connector-types does * equal. */ if (!isFull() && getType() == connector.getType()) { connectors.add(connector); return true; } else { return false; } } @Override protected boolean removeConnection(AbstractConnector connector) { return connectors.remove(connector); } @Override protected void unlink(boolean isOutConnector) { for (AbstractConnector connector : getConnections()) { connector.removeConnection(this); this.removeConnection(connector); } } private Object readResolve() throws ObjectStreamException { AbstractFunctionPrototype afp = ModelProxy.getInstance().getFunctions(); this.xmlPipe = afp.getMatchingXMLPipe(this.xmlPipeIdentifier); return this; } }