package org.nightlabs.jfire.reporting.admin.parameter.ui.editpart; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import org.apache.log4j.Logger; import org.eclipse.draw2d.geometry.Rectangle; import org.eclipse.gef.GraphicalEditPart; import org.eclipse.gef.editparts.AbstractGraphicalEditPart; import org.eclipse.ui.views.properties.IPropertySource; import org.nightlabs.jdo.ObjectID; import org.nightlabs.jfire.reporting.admin.parameter.ui.notification.ModelNotificationManager; import org.nightlabs.jfire.reporting.parameter.config.IGraphicalInfoProvider; /** * The base Report Parameter EditPart * * @author Daniel.Mazurek [at] NightLabs [dot] de */ public abstract class AbstractReportParameterEditPart extends AbstractGraphicalEditPart implements PropertyChangeListener { private static final Logger logger = Logger.getLogger(AbstractReportParameterEditPart.class); public AbstractReportParameterEditPart() { super(); } // listen here for model changes public void propertyChange(PropertyChangeEvent evt) { logger.info("propertyChange "+evt.getPropertyName()+" "+evt.getNewValue()+ " for editPart "+this); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ // refreshVisuals(); refresh(); } protected IGraphicalInfoProvider getGraphicalInfoProvider() { return (IGraphicalInfoProvider) getModel(); } /** * Updates the visual aspect of this. */ @Override protected void refreshVisuals() { if (getModel() instanceof IGraphicalInfoProvider) { int x = getGraphicalInfoProvider().getX(); int y = getGraphicalInfoProvider().getY(); // int width = getGraphicalInfoProvider().getWidth(); // int height = getGraphicalInfoProvider().getHeight(); int width = -1; int height = -1; Rectangle r = new Rectangle(x, y, width, height); ((GraphicalEditPart) getParent()).setLayoutConstraint( this, getFigure(), r); } else { Rectangle r = new Rectangle(0, 0, -1, -1); ((GraphicalEditPart) getParent()).setLayoutConstraint( this, getFigure(), r); getFigure().repaint(); getFigure().revalidate(); } } @Override protected void createEditPolicies() { // installEditPolicy(EditPolicy.LAYOUT_ROLE, new ReportXYLayoutEditPolicy( // (XYLayout)getContentPane().getLayoutManager())); } protected abstract ObjectID getObjectID(); @Override public void activate() { if (isActive()) return; super.activate(); ModelNotificationManager.sharedInstance().addPropertyChangeListener(getObjectID(), this); } @Override public void deactivate() { if (!isActive()) return; super.deactivate(); ModelNotificationManager.sharedInstance().removePropertyChangeListener(getObjectID(), this); } private IPropertySource propertySource; public IPropertySource getPropertySource() { if (propertySource == null) propertySource = createPropertySource(); return propertySource; } protected abstract IPropertySource createPropertySource(); /** * @see org.eclipse.core.runtime.IAdaptable#getAdapter(java.lang.Class) */ @Override public Object getAdapter(Class key) { /* override the default behavior defined in AbstractEditPart * which would expect the model to be a property sourced. * instead the editpart can provide a property source */ if (IPropertySource.class == key) { return getPropertySource(); } return super.getAdapter(key); } }