// ============================================================================ // // Copyright (C) 2006-2012 Talend Inc. - www.talend.com // // This source code is available under agreement available at // %InstallDIR%\features\org.talend.rcp.branding.%PRODUCTNAME%\%PRODUCTNAME%license.txt // // You should have received a copy of the agreement // along with this program; if not, write to Talend SA // 9 rue Pages 92150 Suresnes, France // // ============================================================================ package org.talend.designer.core.ui.editor.connections; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.ArrayList; import java.util.List; import org.eclipse.draw2d.IFigure; import org.eclipse.gef.EditPart; import org.eclipse.gef.EditPolicy; import org.eclipse.gef.GraphicalEditPart; import org.eclipse.gef.commands.Command; import org.eclipse.gef.editparts.AbstractConnectionEditPart; import org.eclipse.gef.editpolicies.ConnectionEditPolicy; import org.eclipse.gef.editpolicies.ConnectionEndpointEditPolicy; import org.eclipse.gef.requests.GroupRequest; import org.eclipse.ui.IViewPart; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.PlatformUI; import org.talend.core.model.process.Element; import org.talend.core.model.process.IConnection; import org.talend.designer.core.model.components.EParameterName; import org.talend.designer.core.ui.editor.cmd.ConnectionDeleteCommand; import org.talend.designer.core.ui.editor.nodes.NodeFigure; import org.talend.designer.core.ui.views.CodeView; import org.talend.designer.core.ui.views.properties.ComponentSettingsView; /** * Graphical part of the connection of Gef. <br/> * * $Id: ConnectionPart.java 77219 2012-01-24 01:14:15Z mhirt $ * */ public class ConnectionPart extends AbstractConnectionEditPart implements PropertyChangeListener { /* * (non-Javadoc) * * @see org.eclipse.gef.editparts.AbstractGraphicalEditPart#activate() */ public void activate() { if (!isActive()) { super.activate(); ((Element) getModel()).addPropertyChangeListener(this); } } @Override protected void addChildVisual(EditPart childEditPart, int index) { IFigure child = ((GraphicalEditPart) childEditPart).getFigure(); getContentPane().add(child, index); } @Override protected void unregisterVisuals() { super.unregisterVisuals(); ((ConnectionFigure) getFigure()).disposeColors(); } /* * (non-Javadoc) * * @see org.eclipse.gef.editparts.AbstractGraphicalEditPart#deactivate() */ public void deactivate() { if (isActive()) { super.deactivate(); ((Element) getModel()).removePropertyChangeListener(this); } } /* * (non-Javadoc) * * @see org.eclipse.gef.editparts.AbstractConnectionEditPart#deactivateFigure() */ @Override protected void deactivateFigure() { ConnectionFigure connFig = (ConnectionFigure) this.getFigure(); IFigure targetFig = connFig.getTargetAnchor().getOwner(); if (targetFig != null && targetFig instanceof NodeFigure) { ((NodeFigure) targetFig).removeTargetConnection(connFig); } IFigure sourceFig = connFig.getSourceAnchor().getOwner(); if (sourceFig != null && sourceFig instanceof NodeFigure) { ((NodeFigure) sourceFig).removeSourceConnection(connFig); } super.deactivateFigure(); } /* * (non-Javadoc) * * @see org.eclipse.gef.editparts.AbstractEditPart#setSelected(int) */ public void setSelected(final int value) { super.setSelected(value); List cl = this.getChildren(); for (int i = 0; i < cl.size(); i++) { if (((EditPart) cl.get(i)).getSelected() != value) { ((EditPart) cl.get(i)).setSelected(value); } } IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); if (value == SELECTED_PRIMARY) { IViewPart view = page.findView(ComponentSettingsView.ID); //$NON-NLS-1$ if (view != null) { ComponentSettingsView compSettings = (ComponentSettingsView) view; compSettings.setElement((Connection) getModel()); CodeView.refreshCodeView((Connection) getModel()); } } else if (value == SELECTED_NONE) { IViewPart view = page.findView(ComponentSettingsView.ID); //$NON-NLS-1$ if (view != null) { ComponentSettingsView compSettings = (ComponentSettingsView) view; compSettings.cleanDisplay(); } } } /* * (non-Javadoc) * * @see org.eclipse.gef.editparts.AbstractEditPart#createEditPolicies() */ protected void createEditPolicies() { // Selection handle edit policy. // Makes the connection show a feedback, when selected by the user. installEditPolicy(EditPolicy.CONNECTION_ENDPOINTS_ROLE, new ConnectionEndpointEditPolicy()); // Allows the removal of the connection model element installEditPolicy(EditPolicy.CONNECTION_ROLE, new ConnectionEditPolicy() { protected Command getDeleteCommand(GroupRequest request) { if (((Connection) getModel()).isReadOnly()) { return null; } List<Connection> connectionList = new ArrayList<Connection>(); for (int i = 0; i < request.getEditParts().size(); i++) { if (request.getEditParts().get(i) instanceof ConnectionPart) { connectionList.add(((Connection) ((ConnectionPart) request.getEditParts().get(i)).getModel())); } } return new ConnectionDeleteCommand(connectionList); } }); } /* * (non-Javadoc) * * @see org.eclipse.gef.editparts.AbstractConnectionEditPart#createFigure() */ protected IFigure createFigure() { IConnection conn = (IConnection) getModel(); ConnectionFigure connection = new ConnectionFigure(conn, conn.getSourceNodeConnector().getConnectionProperty( conn.getLineStyle()), conn.getSource()); if (((Connection) getModel()).isActivate()) { ((ConnectionFigure) connection).setAlpha(-1); } else { ((ConnectionFigure) connection).setAlpha(Connection.ALPHA_VALUE); } return connection; } /* * (non-Javadoc) * * @see java.beans.PropertyChangeListener#propertyChange(java.beans.PropertyChangeEvent) */ public void propertyChange(final PropertyChangeEvent event) { String property = event.getPropertyName(); ConnectionFigure connectionFigure = (ConnectionFigure) figure; if (Connection.LINESTYLE_PROP.equals(property)) { connectionFigure.setConnectionProperty(((Connection) getModel()).getSourceNodeConnector().getConnectionProperty( ((Connection) getModel()).getLineStyle())); refreshChildren(); } if (Connection.NAME.equals(property)) { refreshChildren(); } if (EParameterName.MONITOR_CONNECTION.getName().equals(property)) { connectionFigure.repaint(); refreshChildren(); } if (property.equals(EParameterName.ACTIVATE.getName())) { if (((Connection) getModel()).isActivate()) { connectionFigure.setAlpha(-1); connectionFigure.repaint(); refreshVisuals(); } else { connectionFigure.setAlpha(Connection.ALPHA_VALUE); connectionFigure.repaint(); refreshVisuals(); } } } /* * (non-Javadoc) * * @see org.eclipse.gef.editparts.AbstractEditPart#getModelChildren() */ protected List getModelChildren() { List<Element> elements; elements = new ArrayList<Element>(); elements.add(((Connection) getModel()).getConnectionLabel()); elements.add(((Connection) getModel()).getPerformance()); if (((Connection) getModel()).getResuming() != null) { elements.add(((Connection) getModel()).getResuming()); } if (((Connection) getModel()).getConnectionTrace() != null) { elements.add(((Connection) getModel()).getConnectionTrace()); } // Add monitor label if (((Connection) getModel()).isMonitorConnection()) { elements.add(((Connection) getModel()).getMonitorLabel()); } return elements; } }