/** * Copyright 2010 JBoss Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.drools.eclipse.editors.rete.part; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.List; import org.drools.eclipse.editors.rete.figure.VertexFigure; import org.drools.eclipse.editors.rete.model.GraphicalVertex; import org.drools.eclipse.editors.rete.model.ModelElement; import org.drools.eclipse.editors.rete.model.VertexPropertySource; import org.drools.reteoo.BaseVertex; import org.eclipse.draw2d.ConnectionAnchor; import org.eclipse.draw2d.EllipseAnchor; import org.eclipse.draw2d.IFigure; import org.eclipse.draw2d.geometry.Rectangle; import org.eclipse.gef.ConnectionEditPart; import org.eclipse.gef.GraphicalEditPart; import org.eclipse.gef.Request; import org.eclipse.gef.editparts.AbstractGraphicalEditPart; import org.eclipse.ui.views.properties.IPropertySource; /** * EditPart used for Vertices */ class VertexEditPart extends AbstractGraphicalEditPart implements PropertyChangeListener, org.eclipse.gef.NodeEditPart { private IPropertySource propertySource; private ConnectionAnchor anchor; /* (non-Javadoc) * @see org.eclipse.gef.editparts.AbstractGraphicalEditPart#activate() */ public void activate() { if ( !isActive() ) { super.activate(); ((ModelElement) getModel()).addPropertyChangeListener( this ); propertySource = new VertexPropertySource( getCastedModel() ); } } /* (non-Javadoc) * @see org.eclipse.gef.editparts.AbstractEditPart#createEditPolicies() */ protected void createEditPolicies() { } /*(non-Javadoc) * @see org.eclipse.gef.editparts.AbstractGraphicalEditPart#createFigure() */ protected IFigure createFigure() { return new VertexFigure( getCastedModel().getFillColor(), getCastedModel().getDrawColor() ); } /* (non-Javadoc) * @see org.eclipse.gef.editparts.AbstractGraphicalEditPart#deactivate() */ public void deactivate() { if ( isActive() ) { super.deactivate(); ((ModelElement) getModel()).removePropertyChangeListener( this ); propertySource = null; } } private BaseVertex getCastedModel() { return (BaseVertex) getModel(); } private ConnectionAnchor getConnectionAnchor() { if ( anchor == null ) { if ( getModel() instanceof BaseVertex ) anchor = new EllipseAnchor( getFigure() ); else // if Nodes gets extended the conditions above must be updated throw new IllegalArgumentException( "unexpected model" ); } return anchor; } /* * (non-Javadoc) * @see org.eclipse.gef.editparts.AbstractGraphicalEditPart#getModelSourceConnections() */ protected List getModelSourceConnections() { return getCastedModel().getSourceConnections(); } /* * (non-Javadoc) * @see org.eclipse.gef.editparts.AbstractGraphicalEditPart#getModelTargetConnections() */ protected List getModelTargetConnections() { return getCastedModel().getTargetConnections(); } /* * (non-Javadoc) * @see org.eclipse.gef.NodeEditPart#getSourceConnectionAnchor(org.eclipse.gef.ConnectionEditPart) */ public ConnectionAnchor getSourceConnectionAnchor(ConnectionEditPart connection) { return getConnectionAnchor(); } /* * (non-Javadoc) * @see org.eclipse.gef.NodeEditPart#getSourceConnectionAnchor(org.eclipse.gef.Request) */ public ConnectionAnchor getSourceConnectionAnchor(Request request) { return getConnectionAnchor(); } /* * (non-Javadoc) * @see org.eclipse.gef.NodeEditPart#getTargetConnectionAnchor(org.eclipse.gef.ConnectionEditPart) */ public ConnectionAnchor getTargetConnectionAnchor(ConnectionEditPart connection) { return getConnectionAnchor(); } /* * (non-Javadoc) * @see org.eclipse.gef.NodeEditPart#getTargetConnectionAnchor(org.eclipse.gef.Request) */ public ConnectionAnchor getTargetConnectionAnchor(Request request) { return getConnectionAnchor(); } /* (non-Javadoc) * @see java.beans.PropertyChangeListener#propertyChange(java.beans.PropertyChangeEvent) */ public void propertyChange(PropertyChangeEvent evt) { String prop = evt.getPropertyName(); if ( GraphicalVertex.SIZE_PROP.equals( prop ) || GraphicalVertex.LOCATION_PROP.equals( prop ) ) { refreshVisuals(); } else if ( GraphicalVertex.SOURCE_CONNECTIONS_PROP.equals( prop ) ) { refreshSourceConnections(); } else if ( GraphicalVertex.TARGET_CONNECTIONS_PROP.equals( prop ) ) { refreshTargetConnections(); } } /* (non-Javadoc) * @see org.eclipse.gef.editparts.AbstractEditPart#refreshVisuals() */ protected void refreshVisuals() { Rectangle bounds = new Rectangle( getCastedModel().getLocation(), getCastedModel().getSize() ); ((GraphicalEditPart) getParent()).setLayoutConstraint( this, getFigure(), bounds ); } /* (non-Javadoc) * @see org.eclipse.gef.editparts.AbstractGraphicalEditPart#getAdapter(java.lang.Class) */ public Object getAdapter(Class key) { if ( key == IPropertySource.class ) { return propertySource; } return super.getAdapter( key ); } }