[571095] Newly created connection had blue color

With the previous fix for any connection coloring also event and adapter
connections would have got the a data connection color.

Bug: https://bugs.eclipse.org/bugs/show_bug.cgi?id=571095
Change-Id: I20a9eed20b3748aeebbee4ca9c86359b25e84853
Signed-off-by: Alois Zoitl <alois.zoitl@gmx.at>
diff --git a/plugins/org.eclipse.fordiac.ide.application/src/org/eclipse/fordiac/ide/application/editparts/ConnectionEditPart.java b/plugins/org.eclipse.fordiac.ide.application/src/org/eclipse/fordiac/ide/application/editparts/ConnectionEditPart.java
index 3c65c91..acc5056 100644
--- a/plugins/org.eclipse.fordiac.ide.application/src/org/eclipse/fordiac/ide/application/editparts/ConnectionEditPart.java
+++ b/plugins/org.eclipse.fordiac.ide.application/src/org/eclipse/fordiac/ide/application/editparts/ConnectionEditPart.java
@@ -1,325 +1,335 @@
-/*******************************************************************************

- * Copyright (c) 2008 - 2018 Profactor GmbH, TU Wien ACIN, fortiss GmbH, AIT,

- * 				 2018 - 2020 Johannes Kepler University Linz

- * 				 2020 Primetals Technologies Germany GmbH,

- * 				 2021 Primetals Technologies Austria GmbH

- *

- * This program and the accompanying materials are made available under the

- * terms of the Eclipse Public License 2.0 which is available at

- * http://www.eclipse.org/legal/epl-2.0.

- *

- * SPDX-License-Identifier: EPL-2.0

- *

- * Contributors:

- *   Gerhard Ebenhofer, Alois Zoitl, Monika Wenger, Gerd Kainz,

- *   Filip Pröstl-Andren

- *   - initial API and implementation and/or initial documentation

- *   Alois Zoitl - added separate colors for different data types

- *               - fixed hide event and data connection issues

- *               - reworked connection selection and hover feedback

- *   Lukas Wais	 - reworked connection colors

- *******************************************************************************/

-package org.eclipse.fordiac.ide.application.editparts;

-

-import org.eclipse.draw2d.ConnectionLocator;

-import org.eclipse.draw2d.Graphics;

-import org.eclipse.draw2d.IFigure;

-import org.eclipse.draw2d.PolygonDecoration;

-import org.eclipse.draw2d.PolylineConnection;

-import org.eclipse.draw2d.Shape;

-import org.eclipse.draw2d.geometry.Point;

-import org.eclipse.draw2d.geometry.PointList;

-import org.eclipse.draw2d.geometry.Rectangle;

-import org.eclipse.emf.common.notify.Adapter;

-import org.eclipse.emf.common.notify.Notification;

-import org.eclipse.emf.common.notify.impl.AdapterImpl;

-import org.eclipse.fordiac.ide.application.figures.ConnectionTooltipFigure;

-import org.eclipse.fordiac.ide.application.policies.DeleteConnectionEditPolicy;

-import org.eclipse.fordiac.ide.gef.figures.HideableConnection;

-import org.eclipse.fordiac.ide.gef.handles.ScrollingConnectionEndpointHandle;

-import org.eclipse.fordiac.ide.gef.policies.FeedbackConnectionEndpointEditPolicy;

-import org.eclipse.fordiac.ide.gef.router.BendpointPolicyRouter;

-import org.eclipse.fordiac.ide.gef.router.RouterUtil;

-import org.eclipse.fordiac.ide.model.data.AnyType;

-import org.eclipse.fordiac.ide.model.data.DataType;

-import org.eclipse.fordiac.ide.model.datatype.helper.IecTypes;

-import org.eclipse.fordiac.ide.model.libraryElement.AdapterConnection;

-import org.eclipse.fordiac.ide.model.libraryElement.Connection;

-import org.eclipse.fordiac.ide.model.libraryElement.DataConnection;

-import org.eclipse.fordiac.ide.model.libraryElement.EventConnection;

-import org.eclipse.fordiac.ide.model.libraryElement.IInterfaceElement;

-import org.eclipse.fordiac.ide.model.libraryElement.LibraryElementPackage;

-import org.eclipse.fordiac.ide.ui.UIPlugin;

-import org.eclipse.fordiac.ide.ui.preferences.ConnectionPreferenceValues;

-import org.eclipse.fordiac.ide.ui.preferences.PreferenceConstants;

-import org.eclipse.fordiac.ide.ui.preferences.PreferenceGetter;

-import org.eclipse.gef.EditPolicy;

-import org.eclipse.gef.editparts.AbstractConnectionEditPart;

-import org.eclipse.gef.handles.ConnectionEndpointHandle;

-import org.eclipse.jface.util.IPropertyChangeListener;

-import org.eclipse.swt.SWT;

-import org.eclipse.swt.graphics.Color;

-

-public class ConnectionEditPart extends AbstractConnectionEditPart {

-

-	private static final class FBNConnectionEndPointHandle extends ScrollingConnectionEndpointHandle {

-		private FBNConnectionEndPointHandle(final org.eclipse.gef.ConnectionEditPart owner, final int endPoint) {

-			super(owner, endPoint);

-			setLocator(new ConnectionLocator(getConnection(), endPoint) {

-				@Override

-				protected Point getLocation(final PointList points) {

-					final Point p = super.getLocation(points);

-					// ensure that the returned point is such that the endpoint handle is on the

-					// connection

-					switch (getAlignment()) {

-					case SOURCE:

-						p.x += ((getPreferredSize().width / 2) - 4); // TODO replace with connection

-						// border size

-						break;

-					case TARGET:

-						p.x += ((-getPreferredSize().width / 2) + 4);

-						break;

-					default:

-						break;

-					}

-					return p;

-				}

-			});

-		}

-

-		@Override

-		protected void init() {

-			super.init();

-			setPreferredSize((ConnectionPreferenceValues.HANDLE_SIZE * 4) / 3, ConnectionPreferenceValues.HANDLE_SIZE);

-		}

-

-		@Override

-		protected void paintHandleCenter(final Graphics g, final Rectangle r) {

-			final int xbuf = r.x;

-			final int wbuf = r.width;

-

-			final int shrinkVal = getInnerShrinkVal();

-			r.shrink(shrinkVal, shrinkVal + 1);

-			switch (getEndPoint()) {

-			case ConnectionLocator.SOURCE:

-				r.x = xbuf;

-				break;

-			case ConnectionLocator.TARGET:

-				r.x = (xbuf + wbuf) - r.width;

-				break;

-			default:

-				break;

-			}

-			g.fillRoundRectangle(r, r.height / 2, r.height / 2);

-

-		}

-	}

-

-	private static final float[] BROKEN_CONNECTION_DASH_PATTERN = new float[] { 5.0f, 5.0f };

-	private static final String HIDDEN = "HIDDEN"; //$NON-NLS-1$

-	private static final String HIDEN_CON = "HIDEN_CON"; //$NON-NLS-1$

-

-	public ConnectionEditPart() {

-		super();

-	}

-

-	@Override

-	public Connection getModel() {

-		return (Connection) super.getModel();

-	}

-

-	private final IPropertyChangeListener propertyChangeListener = event -> {

-		if (event.getProperty().equals(PreferenceConstants.P_EVENT_CONNECTOR_COLOR)

-				&& (getModel() instanceof EventConnection)) {

-			getFigure().setForegroundColor(PreferenceGetter.getColor(PreferenceConstants.P_EVENT_CONNECTOR_COLOR));

-		}

-		if (event.getProperty().equals(PreferenceConstants.P_ADAPTER_CONNECTOR_COLOR)

-				&& (getModel() instanceof AdapterConnection)) {

-			getFigure().setForegroundColor(PreferenceGetter.getColor(PreferenceConstants.P_ADAPTER_CONNECTOR_COLOR));

-		}

-		if (PreferenceConstants.isDataConnectorProperty(event.getProperty())

-				&& (getModel() instanceof DataConnection)) {

-			getFigure().setForegroundColor(getDataConnectioncolor());

-		}

-		if (event.getProperty().equals(PreferenceConstants.P_HIDE_DATA_CON) && (getModel() instanceof DataConnection)) {

-			getFigure().setVisible(!((Boolean) event.getNewValue()));

-		}

-		if (event.getProperty().equals(PreferenceConstants.P_HIDE_EVENT_CON)

-				&& (getModel() instanceof EventConnection)) {

-			getFigure().setVisible(!((Boolean) event.getNewValue()));

-		}

-	};

-

-	@Override

-	protected void createEditPolicies() {

-		// Selection handle edit policy.

-		// Makes the connection show a feedback, when selected by the user.

-		// installEditPolicy(EditPolicy.CONNECTION_ENDPOINTS_ROLE, new DisableConnectionHandleRoleEditPolicy());

-		installEditPolicy(EditPolicy.CONNECTION_ENDPOINTS_ROLE, new FeedbackConnectionEndpointEditPolicy() {

-			@Override

-			protected ConnectionEndpointHandle createConnectionEndPointHandle(

-					final org.eclipse.gef.ConnectionEditPart connectionEditPart, final int connectionLocator) {

-				return new FBNConnectionEndPointHandle(connectionEditPart, connectionLocator);

-			}

-		});

-

-		// Allows the removal of the connection model element

-		installEditPolicy(EditPolicy.CONNECTION_ROLE, new DeleteConnectionEditPolicy());

-

-		if (getConnectionFigure().getConnectionRouter() instanceof BendpointPolicyRouter) {

-			installEditPolicy(EditPolicy.CONNECTION_BENDPOINTS_ROLE,

-					((BendpointPolicyRouter) getConnectionFigure().getConnectionRouter())

-					.getBendpointPolicy(getModel()));

-		}

-	}

-

-	@Override

-	protected IFigure createFigure() {

-		final PolylineConnection connection = RouterUtil.getConnectionRouterFactory(null).createConnectionFigure();

-

-		final String status = getModel().getAttributeValue(HIDEN_CON);

-		if (connection instanceof HideableConnection) {

-			((HideableConnection) connection).setHidden((status != null) && status.equalsIgnoreCase(HIDDEN));

-			if ((getModel() != null) && (getModel().getSourceElement() != null)) {

-				((HideableConnection) connection)

-				.setLabel(getModel().getSourceElement().getName() + "." + getModel().getSource().getName()); //$NON-NLS-1$

-			}

-			((HideableConnection) connection).setModel(getModel());

-		}

-

-		final PolygonDecoration arrow = new PolygonDecoration();

-		arrow.setTemplate(PolygonDecoration.TRIANGLE_TIP);

-		arrow.setScale(7, 4);

-		connection.setTargetDecoration(arrow);

-

-		if (getModel() instanceof EventConnection) {

-			connection.setForegroundColor(PreferenceGetter.getColor(PreferenceConstants.P_EVENT_CONNECTOR_COLOR));

-			connection.setVisible(

-					!UIPlugin.getDefault().getPreferenceStore().getBoolean(PreferenceConstants.P_HIDE_EVENT_CON));

-		}

-

-		if (getModel() instanceof AdapterConnection) {

-			connection.setForegroundColor(PreferenceGetter.getColor(PreferenceConstants.P_ADAPTER_CONNECTOR_COLOR));

-			connection.setTargetDecoration(null);

-			connection.setSourceDecoration(null);

-

-		}

-

-		if (getModel() instanceof DataConnection) {

-			connection.setForegroundColor(getDataConnectioncolor());

-			connection.setVisible(

-					!UIPlugin.getDefault().getPreferenceStore().getBoolean(PreferenceConstants.P_HIDE_DATA_CON));

-

-		}

-		connection.setToolTip(new ConnectionTooltipFigure(getModel()));

-		connection.setLineWidth(ConnectionPreferenceValues.NORMAL_LINE_WIDTH);

-		return connection;

-	}

-

-	@Override

-	public PolylineConnection getFigure() {

-		return (PolylineConnection) super.getFigure();

-	}

-

-	private Color getDataConnectioncolor() {

-		// if the connections end point fb type could not be loaded it source or

-		// destination may be null

-		IInterfaceElement refElement = getModel().getSource();

-

-		// if one end point is ANY then it the connection should be colored the other way

-		if ((null == refElement)) {

-			refElement = getModel().getDestination();

-		}

-

-		final DataType dataType = refElement.getType();

-		if (dataType instanceof AnyType) {

-			// if we have a more concrete type we use its colour

-			if (dataType == IecTypes.GenericTypes.ANY) {

-				refElement = getModel().getDestination();

-			} else {

-				refElement = getModel().getSource();

-			}

-		}

-

-		if (null != refElement) {

-			return PreferenceGetter.getDataColor(refElement.getType().getName());

-		}

-

-		return PreferenceGetter.getDefaultDataColor();

-	}

-

-	@Override

-	protected void refreshVisuals() {

-		super.refreshVisuals();

-

-		if ((getConnectionFigure() instanceof PolylineConnection) && (getModel() != null)) {

-			if (getModel().isBrokenConnection()) {

-				((PolylineConnection) getConnectionFigure()).setLineStyle(SWT.LINE_CUSTOM);

-				((PolylineConnection) getConnectionFigure()).setLineDash(BROKEN_CONNECTION_DASH_PATTERN);

-

-			} else {

-				((PolylineConnection) getConnectionFigure()).setLineStyle(SWT.LINE_SOLID);

-				((PolylineConnection) getConnectionFigure()).setLineDash(null);

-			}

-		}

-	}

-

-	@Override

-	public void activate() {

-		if (!isActive()) {

-			super.activate();

-			UIPlugin.getDefault().getPreferenceStore().addPropertyChangeListener(propertyChangeListener);

-			getModel().eAdapters().add(getContentAdapter());

-		}

-	}

-

-	private Adapter contentAdapter;

-

-	private Adapter getContentAdapter() {

-		if (contentAdapter == null) {

-			contentAdapter = new AdapterImpl() {

-				@Override

-				public void notifyChanged(final Notification notification) {

-					final Object feature = notification.getFeature();

-					refreshVisuals();

-					if (LibraryElementPackage.eINSTANCE.getINamedElement_Comment().equals(feature)

-							|| LibraryElementPackage.eINSTANCE.getConnection_Destination().equals(feature)

-							|| LibraryElementPackage.eINSTANCE.getConnection_Source().equals(feature)) {

-						refreshComment();

-					}

-					if (LibraryElementPackage.eINSTANCE.getConnection_Destination().equals(feature)) {

-						getFigure().setForegroundColor(getDataConnectioncolor());

-						// reset the line width so that any to struct connections have the right width

-						getFigure().setLineWidth(ConnectionPreferenceValues.NORMAL_LINE_WIDTH);

-					}

-				}

-			};

-		}

-		return contentAdapter;

-	}

-

-	private void refreshComment() {

-		getFigure().setToolTip(new ConnectionTooltipFigure(getModel()));

-	}

-

-	@Override

-	public void deactivate() {

-		if (isActive()) {

-			super.deactivate();

-			UIPlugin.getDefault().getPreferenceStore().removePropertyChangeListener(propertyChangeListener);

-			getModel().eAdapters().remove(getContentAdapter());

-		}

-	}

-

-	public void setTransparency(final int value) {

-		if (getFigure() instanceof PolylineConnection) {

-			final PolylineConnection connection = (getFigure());

-			connection.setAlpha(value);

-			for (final Object fig : connection.getChildren()) {

-				if (fig instanceof Shape) {

-					((Shape) fig).setAlpha(value);

-				}

-			}

-		}

-	}

-}

+/*******************************************************************************
+ * Copyright (c) 2008 - 2018 Profactor GmbH, TU Wien ACIN, fortiss GmbH, AIT,
+ * 				 2018 - 2020 Johannes Kepler University Linz
+ * 				 2020 Primetals Technologies Germany GmbH,
+ * 				 2021 Primetals Technologies Austria GmbH
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License 2.0 which is available at
+ * http://www.eclipse.org/legal/epl-2.0.
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ *   Gerhard Ebenhofer, Alois Zoitl, Monika Wenger, Gerd Kainz,
+ *   Filip Pröstl-Andren
+ *   - initial API and implementation and/or initial documentation
+ *   Alois Zoitl - added separate colors for different data types
+ *               - fixed hide event and data connection issues
+ *               - reworked connection selection and hover feedback
+ *   Lukas Wais	 - reworked connection colors
+ *******************************************************************************/
+package org.eclipse.fordiac.ide.application.editparts;
+
+import org.eclipse.draw2d.ConnectionLocator;
+import org.eclipse.draw2d.Graphics;
+import org.eclipse.draw2d.IFigure;
+import org.eclipse.draw2d.PolygonDecoration;
+import org.eclipse.draw2d.PolylineConnection;
+import org.eclipse.draw2d.Shape;
+import org.eclipse.draw2d.geometry.Point;
+import org.eclipse.draw2d.geometry.PointList;
+import org.eclipse.draw2d.geometry.Rectangle;
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.impl.AdapterImpl;
+import org.eclipse.fordiac.ide.application.figures.ConnectionTooltipFigure;
+import org.eclipse.fordiac.ide.application.policies.DeleteConnectionEditPolicy;
+import org.eclipse.fordiac.ide.gef.figures.HideableConnection;
+import org.eclipse.fordiac.ide.gef.handles.ScrollingConnectionEndpointHandle;
+import org.eclipse.fordiac.ide.gef.policies.FeedbackConnectionEndpointEditPolicy;
+import org.eclipse.fordiac.ide.gef.router.BendpointPolicyRouter;
+import org.eclipse.fordiac.ide.gef.router.RouterUtil;
+import org.eclipse.fordiac.ide.model.data.AnyType;
+import org.eclipse.fordiac.ide.model.data.DataType;
+import org.eclipse.fordiac.ide.model.datatype.helper.IecTypes;
+import org.eclipse.fordiac.ide.model.libraryElement.AdapterConnection;
+import org.eclipse.fordiac.ide.model.libraryElement.Connection;
+import org.eclipse.fordiac.ide.model.libraryElement.DataConnection;
+import org.eclipse.fordiac.ide.model.libraryElement.EventConnection;
+import org.eclipse.fordiac.ide.model.libraryElement.IInterfaceElement;
+import org.eclipse.fordiac.ide.model.libraryElement.LibraryElementPackage;
+import org.eclipse.fordiac.ide.ui.UIPlugin;
+import org.eclipse.fordiac.ide.ui.preferences.ConnectionPreferenceValues;
+import org.eclipse.fordiac.ide.ui.preferences.PreferenceConstants;
+import org.eclipse.fordiac.ide.ui.preferences.PreferenceGetter;
+import org.eclipse.gef.EditPolicy;
+import org.eclipse.gef.editparts.AbstractConnectionEditPart;
+import org.eclipse.gef.handles.ConnectionEndpointHandle;
+import org.eclipse.jface.util.IPropertyChangeListener;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Color;
+
+public class ConnectionEditPart extends AbstractConnectionEditPart {
+
+	private static final class FBNConnectionEndPointHandle extends ScrollingConnectionEndpointHandle {
+		private FBNConnectionEndPointHandle(final org.eclipse.gef.ConnectionEditPart owner, final int endPoint) {
+			super(owner, endPoint);
+			setLocator(new ConnectionLocator(getConnection(), endPoint) {
+				@Override
+				protected Point getLocation(final PointList points) {
+					final Point p = super.getLocation(points);
+					// ensure that the returned point is such that the endpoint handle is on the
+					// connection
+					switch (getAlignment()) {
+					case SOURCE:
+						p.x += ((getPreferredSize().width / 2) - 4); // TODO replace with connection
+						// border size
+						break;
+					case TARGET:
+						p.x += ((-getPreferredSize().width / 2) + 4);
+						break;
+					default:
+						break;
+					}
+					return p;
+				}
+			});
+		}
+
+		@Override
+		protected void init() {
+			super.init();
+			setPreferredSize((ConnectionPreferenceValues.HANDLE_SIZE * 4) / 3, ConnectionPreferenceValues.HANDLE_SIZE);
+		}
+
+		@Override
+		protected void paintHandleCenter(final Graphics g, final Rectangle r) {
+			final int xbuf = r.x;
+			final int wbuf = r.width;
+
+			final int shrinkVal = getInnerShrinkVal();
+			r.shrink(shrinkVal, shrinkVal + 1);
+			switch (getEndPoint()) {
+			case ConnectionLocator.SOURCE:
+				r.x = xbuf;
+				break;
+			case ConnectionLocator.TARGET:
+				r.x = (xbuf + wbuf) - r.width;
+				break;
+			default:
+				break;
+			}
+			g.fillRoundRectangle(r, r.height / 2, r.height / 2);
+
+		}
+	}
+
+	private static final float[] BROKEN_CONNECTION_DASH_PATTERN = new float[] { 5.0f, 5.0f };
+	private static final String HIDDEN = "HIDDEN"; //$NON-NLS-1$
+	private static final String HIDEN_CON = "HIDEN_CON"; //$NON-NLS-1$
+
+	public ConnectionEditPart() {
+		super();
+	}
+
+	@Override
+	public Connection getModel() {
+		return (Connection) super.getModel();
+	}
+
+	private final IPropertyChangeListener propertyChangeListener = event -> {
+		if (event.getProperty().equals(PreferenceConstants.P_EVENT_CONNECTOR_COLOR)
+				&& (getModel() instanceof EventConnection)) {
+			getFigure().setForegroundColor(PreferenceGetter.getColor(PreferenceConstants.P_EVENT_CONNECTOR_COLOR));
+		}
+		if (event.getProperty().equals(PreferenceConstants.P_ADAPTER_CONNECTOR_COLOR)
+				&& (getModel() instanceof AdapterConnection)) {
+			getFigure().setForegroundColor(PreferenceGetter.getColor(PreferenceConstants.P_ADAPTER_CONNECTOR_COLOR));
+		}
+		if (PreferenceConstants.isDataConnectorProperty(event.getProperty())
+				&& (getModel() instanceof DataConnection)) {
+			getFigure().setForegroundColor(getDataConnectioncolor());
+		}
+		if (event.getProperty().equals(PreferenceConstants.P_HIDE_DATA_CON) && (getModel() instanceof DataConnection)) {
+			getFigure().setVisible(!((Boolean) event.getNewValue()));
+		}
+		if (event.getProperty().equals(PreferenceConstants.P_HIDE_EVENT_CON)
+				&& (getModel() instanceof EventConnection)) {
+			getFigure().setVisible(!((Boolean) event.getNewValue()));
+		}
+	};
+
+	@Override
+	protected void createEditPolicies() {
+		// Selection handle edit policy.
+		// Makes the connection show a feedback, when selected by the user.
+		// installEditPolicy(EditPolicy.CONNECTION_ENDPOINTS_ROLE, new DisableConnectionHandleRoleEditPolicy());
+		installEditPolicy(EditPolicy.CONNECTION_ENDPOINTS_ROLE, new FeedbackConnectionEndpointEditPolicy() {
+			@Override
+			protected ConnectionEndpointHandle createConnectionEndPointHandle(
+					final org.eclipse.gef.ConnectionEditPart connectionEditPart, final int connectionLocator) {
+				return new FBNConnectionEndPointHandle(connectionEditPart, connectionLocator);
+			}
+		});
+
+		// Allows the removal of the connection model element
+		installEditPolicy(EditPolicy.CONNECTION_ROLE, new DeleteConnectionEditPolicy());
+
+		if (getConnectionFigure().getConnectionRouter() instanceof BendpointPolicyRouter) {
+			installEditPolicy(EditPolicy.CONNECTION_BENDPOINTS_ROLE,
+					((BendpointPolicyRouter) getConnectionFigure().getConnectionRouter())
+					.getBendpointPolicy(getModel()));
+		}
+	}
+
+	@Override
+	protected IFigure createFigure() {
+		final PolylineConnection connection = RouterUtil.getConnectionRouterFactory(null).createConnectionFigure();
+
+		final String status = getModel().getAttributeValue(HIDEN_CON);
+		if (connection instanceof HideableConnection) {
+			((HideableConnection) connection).setHidden((status != null) && status.equalsIgnoreCase(HIDDEN));
+			if ((getModel() != null) && (getModel().getSourceElement() != null)) {
+				((HideableConnection) connection)
+				.setLabel(getModel().getSourceElement().getName() + "." + getModel().getSource().getName()); //$NON-NLS-1$
+			}
+			((HideableConnection) connection).setModel(getModel());
+		}
+
+		final PolygonDecoration arrow = new PolygonDecoration();
+		arrow.setTemplate(PolygonDecoration.TRIANGLE_TIP);
+		arrow.setScale(7, 4);
+		connection.setTargetDecoration(arrow);
+
+		if (getModel() instanceof EventConnection) {
+			connection.setVisible(
+					!UIPlugin.getDefault().getPreferenceStore().getBoolean(PreferenceConstants.P_HIDE_EVENT_CON));
+		}
+
+		if (getModel() instanceof AdapterConnection) {
+			connection.setTargetDecoration(null);
+			connection.setSourceDecoration(null);
+
+		}
+
+		if (getModel() instanceof DataConnection) {
+			connection.setVisible(
+					!UIPlugin.getDefault().getPreferenceStore().getBoolean(PreferenceConstants.P_HIDE_DATA_CON));
+
+		}
+		setConnectionColor(connection);
+		connection.setToolTip(new ConnectionTooltipFigure(getModel()));
+		connection.setLineWidth(ConnectionPreferenceValues.NORMAL_LINE_WIDTH);
+		return connection;
+	}
+
+	@Override
+	public PolylineConnection getFigure() {
+		return (PolylineConnection) super.getFigure();
+	}
+
+	private void setConnectionColor(final PolylineConnection connection) {
+		if (getModel() instanceof EventConnection) {
+			connection.setForegroundColor(PreferenceGetter.getColor(PreferenceConstants.P_EVENT_CONNECTOR_COLOR));
+		}
+
+		if (getModel() instanceof AdapterConnection) {
+			connection.setForegroundColor(PreferenceGetter.getColor(PreferenceConstants.P_ADAPTER_CONNECTOR_COLOR));
+		}
+
+		if (getModel() instanceof DataConnection) {
+			connection.setForegroundColor(getDataConnectioncolor());
+		}
+	}
+
+	private Color getDataConnectioncolor() {
+		// if the connections end point fb type could not be loaded it source or
+		// destination may be null
+		IInterfaceElement refElement = getModel().getSource();
+
+		// if one end point is ANY then it the connection should be colored the other way
+		if ((null == refElement)) {
+			refElement = getModel().getDestination();
+		}
+
+		final DataType dataType = refElement.getType();
+		if (dataType instanceof AnyType) {
+			// if we have a more concrete type we use its colour
+			if (dataType == IecTypes.GenericTypes.ANY) {
+				refElement = getModel().getDestination();
+			} else {
+				refElement = getModel().getSource();
+			}
+		}
+
+		if (null != refElement) {
+			return PreferenceGetter.getDataColor(refElement.getType().getName());
+		}
+
+		return PreferenceGetter.getDefaultDataColor();
+	}
+
+	@Override
+	protected void refreshVisuals() {
+		super.refreshVisuals();
+
+		if ((getConnectionFigure() instanceof PolylineConnection) && (getModel() != null)) {
+			if (getModel().isBrokenConnection()) {
+				((PolylineConnection) getConnectionFigure()).setLineStyle(SWT.LINE_CUSTOM);
+				((PolylineConnection) getConnectionFigure()).setLineDash(BROKEN_CONNECTION_DASH_PATTERN);
+
+			} else {
+				((PolylineConnection) getConnectionFigure()).setLineStyle(SWT.LINE_SOLID);
+				((PolylineConnection) getConnectionFigure()).setLineDash(null);
+			}
+		}
+	}
+
+	@Override
+	public void activate() {
+		if (!isActive()) {
+			super.activate();
+			UIPlugin.getDefault().getPreferenceStore().addPropertyChangeListener(propertyChangeListener);
+			getModel().eAdapters().add(getContentAdapter());
+		}
+	}
+
+	private Adapter contentAdapter;
+
+	private Adapter getContentAdapter() {
+		if (contentAdapter == null) {
+			contentAdapter = new AdapterImpl() {
+				@Override
+				public void notifyChanged(final Notification notification) {
+					final Object feature = notification.getFeature();
+					refreshVisuals();
+					if (LibraryElementPackage.eINSTANCE.getINamedElement_Comment().equals(feature)
+							|| LibraryElementPackage.eINSTANCE.getConnection_Destination().equals(feature)
+							|| LibraryElementPackage.eINSTANCE.getConnection_Source().equals(feature)) {
+						refreshComment();
+					}
+					if (LibraryElementPackage.eINSTANCE.getConnection_Destination().equals(feature)) {
+						setConnectionColor(getFigure());
+						// reset the line width so that any to struct connections have the right width
+						getFigure().setLineWidth(ConnectionPreferenceValues.NORMAL_LINE_WIDTH);
+					}
+				}
+			};
+		}
+		return contentAdapter;
+	}
+
+	private void refreshComment() {
+		getFigure().setToolTip(new ConnectionTooltipFigure(getModel()));
+	}
+
+	@Override
+	public void deactivate() {
+		if (isActive()) {
+			super.deactivate();
+			UIPlugin.getDefault().getPreferenceStore().removePropertyChangeListener(propertyChangeListener);
+			getModel().eAdapters().remove(getContentAdapter());
+		}
+	}
+
+	public void setTransparency(final int value) {
+		final PolylineConnection connection = getFigure();
+		connection.setAlpha(value);
+		for (final Object fig : connection.getChildren()) {
+			if (fig instanceof Shape) {
+				((Shape) fig).setAlpha(value);
+			}
+		}
+	}
+}