/* * JBoss, Home of Professional Open Source. * * See the LEGAL.txt file distributed with this work for information regarding copyright ownership and licensing. * * See the AUTHORS.txt file distributed with this work for a full listing of individual contributors. */ package org.teiid.designer.diagram.ui.part; import java.util.List; import org.eclipse.emf.ecore.EObject; import org.eclipse.gef.EditPart; import org.eclipse.gef.EditPartViewer; import org.eclipse.gef.NodeEditPart; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Font; import org.teiid.designer.diagram.ui.connection.AnchorManager; import org.teiid.designer.diagram.ui.editor.IDiagramSelectionHandler; import org.teiid.designer.diagram.ui.figure.DiagramFigure; import org.teiid.designer.diagram.ui.model.DiagramModelNode; /** * DiagramEditPart provides an interface for all EditParts. This interface is specialized to provide a standard set of methods * coordinated with DiagramFigure and DiagramModelNode interface methods to simplify coordinate of selection, resizing, updates * and other control-type functions. * * @since 8.0 */ public interface DiagramEditPart extends NodeEditPart { static final boolean LAYOUT_CHILDREN = true; static final boolean DO_NOT_LAYOUT_CHILDREN = false; /** * Simple boolean method to provide state during the diagram construction process. * * @return * @since 5.0 */ boolean isUnderConstruction(); /** * Simple boolean method to set state during the diagram construction process. * * @param isUnderConstruction * @since 5.0 */ void setUnderConstruction( boolean isUnderConstruction ); /** * @since 5.0 */ void constructionCompleted( boolean updateLinkedParts ); /** * Getter method whic returns a specific Figure type, i.e. DiagramFigure * * @return diagramFigure */ DiagramFigure getDiagramFigure(); /** * This method is provided to allow the edit part to be the manager of the layout of it's children and also to indicate to * it's children that they should also call layout(). Through property changes, children may be added/removed (i.e. * refreshChildren()) or things renamed. If these changes occur to the model, then the edit part needs to communicate to it's * children to layout or update their figures, then update or layout it's figure. * * @param layoutChildren */ void layout( boolean layoutChildren ); /** * This method is provided to allow the edit part to be the manager of the layout of it's children and not affect the children * (see layout(layoutChildren) method. * * @param layoutChildren */ void layout(); /** * This method provides the edit part the ability to selectively and recursively clear selection within the edit part * hiearchy. * * @param clearSubSelections */ void clearSelections( boolean clearSubSelections ); /** * This method provides the edit part the ability to tell it's edit parts to upate it's content. Rename actions, add/remove * child, change date-type, stereotype, whatever are all actions that would require the edit parts to update their Figures. * Again, the EditPart is the controller, and when it receives a property change event, it has to tell it's figure update it's * content from the model object data? */ void updateContent(); /** * Used by the edit part to update the model location with current location of "figure" */ void updateModelPosition(); /** * Used by the edit part to update the model size with current size of "figure" */ void updateModelSize(); /** * Used by the edit part to update the figure for any changes in preferences */ void updateForPreferences(); /** * Used by the edit part to access the underlying model object that the edit part, model, and figure are based on or * referenced to. This is the hook method to send back the 'real' selected item in a diagram. * * @return modelObject; */ EObject getModelObject(); /** * Used by the edit part to force a recursive resize of all it's children. */ void resizeChildren(); /** * Method to walk a edit part's ancestry, and select the primary parent. This allows a 'classifier container', for instance, * to delegate it's selection to the 'classifier'. */ void selectPrimaryParent(); /** * Method to walk a edit part's ancestry, and find the primary parent. A primary parent is defined as the edit part that * actually exists as a child of the 'diagram'. * * @return primaryParent DiagramEditPart; */ DiagramEditPart getPrimaryParent(); /** * Boolean method to indicate whether or not this EditPart exists as a direct child of a diagram. * * @return isPrimary boolean; */ boolean isPrimaryParent(); /** * Boolean method to indicate whether or not this EditPart is selectable. * * @return isSelectable boolean; */ boolean isSelectablePart(); /** * Convenience method to access the edit part's edit part factory. * * @return diagramEditPartFactory */ DiagramEditPartFactory getEditPartFactory(); /** * Method used to locate sub-editpart or child/subchild of another given an EObject * * @param childModelObject */ EditPart getEditPart( EObject childModelObject, boolean linksAllowed ); /** * Method used to locate sub-editpart or child/subchild of another given an DiagramModelNode * * @param someModelNode */ DiagramEditPart getEditPart( DiagramModelNode someModelNode ); /** * Method used to locate dependent edit parts * * @return dependencyList; */ List getDependencies(); /** * A convenience method which uses the Root to obtain the EditPartViewer. * * @throws NullPointerException if the root is not found * @return the EditPartViewer */ @Override EditPartViewer getViewer(); /** * Method used to locate get the EditPart's NotationID */ String getNotationId(); /** * Method used to locate set the EditPart's NotationID * * @param sNotationId */ void setNotationId( String sNotationId ); /** * Method used to locate get the EditPart's NotationID */ String getDiagramTypeId(); /** * Method used to locate set the EditPart's NotationID * * @param sNotationId */ void setDiagramTypeId( String sDiagramTypeId ); PropertyChangeManager getChangeManager(); void createOrUpdateAnchorsLocations( boolean updateOtherEnds ); /** * Simple method designed to allow quick call to the edit part to refresh the "name" object from the eObject and set the name * of the diagram entity to the same, if it exists. */ void refreshName(); /** * Simple method designed to allow quick call to the edit part to refresh the "font" of any object. */ void refreshFont( boolean refreshChildren ); void refreshSourceConnections( boolean forceRefresh ); void refreshTargetConnections( boolean forceRefresh ); void refreshVisuals( boolean forceRefresh ); void refreshAllLabels( boolean forceRefresh ); void refreshAnchors( boolean updateOtherEnds ); void refreshPath( boolean forceRefresh ); void refreshChildren( boolean forceRefresh ); void resizeChildren( boolean forceRefresh ); /** * Method to allow a call to edit parts to generically set a hilite backaground color. In particular, UmlAttributes... * * @param hiliteColor */ void hiliteBackground( Color hiliteColor ); /** * Method to allow a call to edit parts to generically clear all hiliting from this EditPart and any children... recursively. * In particular, for use in dependency hiliting.... * * @param hiliteColor */ void clearHiliting(); /** * Method to allow a call to edit parts to generically tell the part to render it's figure in a select state. In particular, * UmlAttributes... * * @param selected */ void showSelected( boolean selected ); /** * Method to determine whether an edit part should be hilited. * * @return */ boolean shouldHiliteBackground( List sourceEditParts ); /** * Method to set edit part's AnchorManager * * @return */ void setAnchorManager( AnchorManager anchorManager ); /** * Method to return edit part's AnchorManager * * @return */ AnchorManager getAnchorManager(); /** * Method used to return the EditPart's diagram selection handlerD */ IDiagramSelectionHandler getSelectionHandler(); /** * Method used to set the EditPart's diagram selection handler * * @param sNotationId */ void setSelectionHandler( IDiagramSelectionHandler selectionHandler ); /** * Set the resizable state of the diagram edit part. Used primarily by the createChildEditPolicy() method of the XY Layout * edit policy * * @param canResize boolean */ void setResizable( boolean canResize ); /** * get the resizable state of the diagram edit part. Used primarily by the createChildEditPolicy() method of the XY Layout * edit policy * * @return isResizable boolean */ boolean isResizable(); boolean shouldReveal(); /** * @return */ Font getCurrentDiagramFont(); /** * method to give the edit part a chance to update itself based on the current zoom factor (i.e. not everything wants to scale * with zoom) * * @since 4.2 */ void handleZoomChanged(); }