/******************************************************************************* * Copyright (c) 2004, 2005 Elias Volanakis and others. �* All rights reserved. This program and the accompanying materials �* are made available under the terms of the Eclipse Public License v1.0 �* which accompanies this distribution, and is available at �* http://www.eclipse.org/legal/epl-v10.html �* �* Contributors: �*����Elias Volanakis - initial API and implementation �*******************************************************************************/ package com.windowtester.internal.customer.cat.shapes.model; import org.eclipse.ui.views.properties.ComboBoxPropertyDescriptor; import org.eclipse.ui.views.properties.IPropertyDescriptor; import org.eclipse.draw2d.Graphics; /** * A connection between two distinct shapes. * @author Elias Volanakis */ public class Connection extends ModelElement { /** * Used for indicating that a Connection with solid line style should be created. * @see com.windowtester.internal.customer.cat.shapes.parts.ShapeEditPart#createEditPolicies() */ public static final Integer SOLID_CONNECTION = new Integer(Graphics.LINE_SOLID); /** * Used for indicating that a Connection with dashed line style should be created. * @see com.windowtester.internal.customer.cat.shapes.parts.ShapeEditPart#createEditPolicies() */ public static final Integer DASHED_CONNECTION = new Integer(Graphics.LINE_DASH); /** Property ID to use when the line style of this connection is modified. */ public static final String LINESTYLE_PROP = "LineStyle"; private static final IPropertyDescriptor[] descriptors = new IPropertyDescriptor[1]; private static final String SOLID_STR = "Solid"; private static final String DASHED_STR = "Dashed"; private static final long serialVersionUID = 1; /** True, if the connection is attached to its endpoints. */ private boolean isConnected; /** Line drawing style for this connection. */ private int lineStyle = Graphics.LINE_SOLID; /** Connection's source endpoint. */ private Shape source; /** Connection's target endpoint. */ private Shape target; static { descriptors[0] = new ComboBoxPropertyDescriptor(LINESTYLE_PROP, LINESTYLE_PROP, new String[] {SOLID_STR, DASHED_STR}); } /** * Create a (solid) connection between two distinct shapes. * @param source a source endpoint for this connection (non null) * @param target a target endpoint for this connection (non null) * @throws IllegalArgumentException if any of the parameters are null or source == target * @see #setLineStyle(int) */ public Connection(Shape source, Shape target) { reconnect(source, target); } /** * Disconnect this connection from the shapes it is attached to. */ public void disconnect() { if (isConnected) { source.removeConnection(this); target.removeConnection(this); isConnected = false; } } /** * Returns the line drawing style of this connection. * @return an int value (Graphics.LINE_DASH or Graphics.LINE_SOLID) */ public int getLineStyle() { return lineStyle; } /** * Returns the descriptor for the lineStyle property * @see org.eclipse.ui.views.properties.IPropertySource#getPropertyDescriptors() */ public IPropertyDescriptor[] getPropertyDescriptors() { return descriptors; } /** * Returns the lineStyle as String for the Property Sheet * @see org.eclipse.ui.views.properties.IPropertySource#getPropertyValue(java.lang.Object) */ public Object getPropertyValue(Object id) { if (id.equals(LINESTYLE_PROP)) { if (getLineStyle() == Graphics.LINE_DASH) // Dashed is the second value in the combo dropdown return new Integer(1); // Solid is the first value in the combo dropdown return new Integer(0); } return super.getPropertyValue(id); } /** * Returns the source endpoint of this connection. * @return a non-null Shape instance */ public Shape getSource() { return source; } /** * Returns the target endpoint of this connection. * @return a non-null Shape instance */ public Shape getTarget() { return target; } /** * Reconnect this connection. * The connection will reconnect with the shapes it was previously attached to. */ public void reconnect() { if (!isConnected) { source.addConnection(this); target.addConnection(this); isConnected = true; } } /** * Reconnect to a different source and/or target shape. * The connection will disconnect from its current attachments and reconnect to * the new source and target. * @param newSource a new source endpoint for this connection (non null) * @param newTarget a new target endpoint for this connection (non null) * @throws IllegalArgumentException if any of the paramers are null or newSource == newTarget */ public void reconnect(Shape newSource, Shape newTarget) { if (newSource == null || newTarget == null || newSource == newTarget) { throw new IllegalArgumentException(); } disconnect(); this.source = newSource; this.target = newTarget; reconnect(); } /** * Set the line drawing style of this connection. * @param lineStyle one of following values: Graphics.LINE_DASH or Graphics.LINE_SOLID * @see Graphics#LINE_DASH * @see Graphics#LINE_SOLID * @throws IllegalArgumentException if lineStyle does not have one of the above values */ public void setLineStyle(int lineStyle) { if (lineStyle != Graphics.LINE_DASH && lineStyle != Graphics.LINE_SOLID) { throw new IllegalArgumentException(); } this.lineStyle = lineStyle; firePropertyChange(LINESTYLE_PROP, null, new Integer(this.lineStyle)); } /** * Sets the lineStyle based on the String provided by the PropertySheet * @see org.eclipse.ui.views.properties.IPropertySource#setPropertyValue(java.lang.Object, java.lang.Object) */ public void setPropertyValue(Object id, Object value) { if (id.equals(LINESTYLE_PROP)) setLineStyle(new Integer(1).equals(value) ? Graphics.LINE_DASH : Graphics.LINE_SOLID); else super.setPropertyValue(id, value); } }