/****************************************************************************** * Copyright (c) 2011-2013, Linagora * * 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: * Linagora - initial API and implementation *******************************************************************************/ package com.ebmwebsourcing.petals.services.eip.designer.edit.parts; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.ArrayList; import java.util.Collections; import java.util.List; import org.eclipse.core.runtime.IStatus; import org.eclipse.draw2d.ChopboxAnchor; import org.eclipse.draw2d.ConnectionAnchor; import org.eclipse.gef.ConnectionEditPart; import org.eclipse.gef.EditPolicy; import org.eclipse.gef.NodeEditPart; import org.eclipse.gef.Request; import org.eclipse.gef.RequestConstants; import org.eclipse.gef.editparts.AbstractGraphicalEditPart; import org.eclipse.ui.IPageLayout; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.PartInitException; import org.eclipse.ui.PlatformUI; import com.ebmwebsourcing.petals.services.eip.PetalsEipPlugin; import com.ebmwebsourcing.petals.services.eip.designer.edit.policies.DeleteAbstractNodeEditPolicy; import com.ebmwebsourcing.petals.services.eip.designer.edit.policies.EipConnectionPolicy; import com.ebmwebsourcing.petals.services.eip.designer.model.AbstractNode; import com.ebmwebsourcing.petals.services.eip.designer.model.EipConnection; /** * An edit part for EIP nodes. * @author Vincent Zurczak - EBM WebSourcing */ public abstract class AbstractNodeEditPart extends AbstractGraphicalEditPart implements PropertyChangeListener, NodeEditPart { /* * (non-Jsdoc) * @see org.eclipse.gef.editparts.AbstractEditPart * #createEditPolicies() */ @Override protected void createEditPolicies() { // Allow removal of the associated model element installEditPolicy( EditPolicy.COMPONENT_ROLE, new DeleteAbstractNodeEditPolicy()); installEditPolicy( EditPolicy.GRAPHICAL_NODE_ROLE, new EipConnectionPolicy()); } /* * (non-Jsdoc) * @see org.eclipse.gef.editparts.AbstractGraphicalEditPart * #activate() */ @Override public void activate() { super.activate(); ((AbstractNode) getModel()).addPropertyChangeListener( this ); } /* * (non-Jsdoc) * @see org.eclipse.gef.editparts.AbstractGraphicalEditPart * #deactivate() */ @Override public void deactivate() { ((AbstractNode) getModel()).removePropertyChangeListener( this ); super.deactivate(); } /* * (non-Jsdoc) * @see org.eclipse.gef.editparts.AbstractEditPart * #isSelectable() */ @Override public boolean isSelectable() { return true; } /* * (non-Jsdoc) * @see java.beans.PropertyChangeListener * #propertyChange(java.beans.PropertyChangeEvent) */ public void propertyChange( PropertyChangeEvent evt ) { if( AbstractNode.PROPERTY_LAYOUT.equals( evt.getPropertyName())) refreshVisuals(); else if( AbstractNode.PROPERTY_SERVICE_NAME.equals( evt.getPropertyName())) refreshVisuals(); else if( AbstractNode.PROPERTY_ERROR.equals( evt.getPropertyName())) refreshVisuals(); else if( AbstractNode.PROPERTY_INCOMING_CONNECTION.equals( evt.getPropertyName())) refreshTargetConnections(); } /* * (non-Jsdoc) * @see org.eclipse.gef.editparts.AbstractGraphicalEditPart * #getModelSourceConnections() */ @SuppressWarnings( "rawtypes" ) @Override public List getModelSourceConnections() { return Collections.emptyList(); } /* * (non-Jsdoc) * @see org.eclipse.gef.editparts.AbstractGraphicalEditPart * #getModelTargetConnections() */ @SuppressWarnings( "rawtypes" ) @Override public List getModelTargetConnections() { List<Object> result = new ArrayList<Object> (); EipConnection conn = ((AbstractNode) getModel()).getIncomingConnection(); if( conn != null ) result.add( conn ); return result; } /* * (non-Jsdoc) * @see org.eclipse.gef.editparts.AbstractEditPart * #performRequest(org.eclipse.gef.Request) */ @Override public void performRequest( Request req ) { // Double-click a node => show the properties view if( RequestConstants.REQ_OPEN.equals( req.getType())) { try { IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); page.showView( IPageLayout.ID_PROP_SHEET ); } catch( PartInitException e ) { PetalsEipPlugin.log( e, IStatus.WARNING ); } } // Otherwise => nothing else { super.performRequest( req ); } } /* * (non-Jsdoc) * @see org.eclipse.gef.NodeEditPart * #getSourceConnectionAnchor(org.eclipse.gef.ConnectionEditPart) */ public ConnectionAnchor getSourceConnectionAnchor( ConnectionEditPart connection ) { return new ChopboxAnchor( getFigure()); } /* * (non-Jsdoc) * @see org.eclipse.gef.NodeEditPart * #getSourceConnectionAnchor(org.eclipse.gef.Request) */ public ConnectionAnchor getSourceConnectionAnchor( Request request ) { return new ChopboxAnchor( getFigure()); } /* * (non-Jsdoc) * @see org.eclipse.gef.NodeEditPart * #getTargetConnectionAnchor(org.eclipse.gef.ConnectionEditPart) */ public ConnectionAnchor getTargetConnectionAnchor( ConnectionEditPart connection ) { return new ChopboxAnchor( getFigure()); } /* * (non-Jsdoc) * @see org.eclipse.gef.NodeEditPart * #getTargetConnectionAnchor(org.eclipse.gef.Request) */ public ConnectionAnchor getTargetConnectionAnchor( Request request ) { return new ChopboxAnchor( getFigure()); } }