Coverage Report - org.argouml.uml.diagram.ArgoDiagram
 
Classes in this File Line Coverage Branch Coverage Complexity
ArgoDiagram
N/A
N/A
1
 
 1  
 /* $Id: ArgoDiagram.java 17850 2010-01-12 19:53:35Z linus $
 2  
  *****************************************************************************
 3  
  * Copyright (c) 2009 Contributors - see below
 4  
  * All rights reserved. This program and the accompanying materials
 5  
  * are made available under the terms of the Eclipse Public License v1.0
 6  
  * which accompanies this distribution, and is available at
 7  
  * http://www.eclipse.org/legal/epl-v10.html
 8  
  *
 9  
  * Contributors:
 10  
  *    bobtarling
 11  
  *****************************************************************************
 12  
  *
 13  
  * Some portions of this file was previously release using the BSD License:
 14  
  */
 15  
 
 16  
 // Copyright (c) 2007-2008 The Regents of the University of California. All
 17  
 // Rights Reserved. Permission to use, copy, modify, and distribute this
 18  
 // software and its documentation without fee, and without a written
 19  
 // agreement is hereby granted, provided that the above copyright notice
 20  
 // and this paragraph appear in all copies. This software program and
 21  
 // documentation are copyrighted by The Regents of the University of
 22  
 // California. The software program and documentation are supplied "AS
 23  
 // IS", without any accompanying services from The Regents. The Regents
 24  
 // does not warrant that the operation of the program will be
 25  
 // uninterrupted or error-free. The end-user understands that the program
 26  
 // was developed for research purposes and is advised not to rely
 27  
 // exclusively on the program for any reason. IN NO EVENT SHALL THE
 28  
 // UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT,
 29  
 // SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS,
 30  
 // ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF
 31  
 // THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF
 32  
 // SUCH DAMAGE. THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY
 33  
 // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 34  
 // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE
 35  
 // PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF
 36  
 // CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT,
 37  
 // UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
 38  
 
 39  
 package org.argouml.uml.diagram;
 40  
 
 41  
 import java.awt.Rectangle;
 42  
 import java.beans.PropertyChangeEvent;
 43  
 import java.beans.PropertyChangeListener;
 44  
 import java.beans.PropertyVetoException;
 45  
 import java.beans.VetoableChangeListener;
 46  
 import java.util.Iterator;
 47  
 import java.util.List;
 48  
 
 49  
 import org.argouml.application.events.ArgoDiagramAppearanceEventListener;
 50  
 import org.argouml.application.events.ArgoNotationEventListener;
 51  
 import org.argouml.kernel.Project;
 52  
 import org.argouml.util.ItemUID;
 53  
 import org.tigris.gef.base.LayerPerspective;
 54  
 import org.tigris.gef.graph.GraphModel;
 55  
 import org.tigris.gef.presentation.Fig;
 56  
 import org.tigris.gef.presentation.FigNode;
 57  
 
 58  
 /**
 59  
  * An interface to decouple ArgoUML from GEF and to untangle the Project <->
 60  
  * ArgoDiagram ball of string.
 61  
  * <p>
 62  
  * Although this interface is implemented by {@link ArgoDiagramImpl}, it does
 63  
  * <em>NOT</em> extend any GEF interfaces (since GEF is made up entirely of
 64  
  * concrete classes), so any new methods which are added to
 65  
  * {@link org.tigris.gef.base.Diagram} and which are needed by ArgoUML will need
 66  
  * to be added to this interface manually.
 67  
  * 
 68  
  * @author Tom Morris <tfmorris@gmail.com>
 69  
  * @since 0.25.4 when it replaced the implementation class of the same name
 70  
  */
 71  
 public interface ArgoDiagram extends ArgoNotationEventListener,
 72  
     ArgoDiagramAppearanceEventListener {
 73  
 
 74  
     /**
 75  
      * Set the rendering settings for this diagram.
 76  
      * 
 77  
      * @param settings the new diagram settings
 78  
      */
 79  
     public void setDiagramSettings(DiagramSettings settings);
 80  
     
 81  
     /**
 82  
      * @return the current DiagramSettings object
 83  
      */
 84  
     public DiagramSettings getDiagramSettings();
 85  
     
 86  
     /*
 87  
      * @see org.tigris.gef.base.Diagram#setName(java.lang.String)
 88  
      */
 89  
     public void setName(String n) throws PropertyVetoException;
 90  
 
 91  
     /**
 92  
      * @param i the new id
 93  
      */
 94  
     public void setItemUID(ItemUID i);
 95  
 
 96  
     /**
 97  
      * USED BY pgml.tee!!
 98  
      * @return the item UID
 99  
      */
 100  
     public ItemUID getItemUID();
 101  
 
 102  
     /**
 103  
      * The bean property name denoting the diagram's namespace. Value is a
 104  
      * String.
 105  
      */
 106  
     public static final String NAMESPACE_KEY = "namespace";
 107  
  
 108  
     /**
 109  
      * The bean property name denoting the diagram's name. Value is a
 110  
      * String.
 111  
      */
 112  
     public static final String NAME_KEY = "name";
 113  
 
 114  
     /**
 115  
      * TODO: The reference to the method
 116  
      * org.argouml.uml.ui.VetoablePropertyChange#getVetoMessage(String)
 117  
      * was here but the class does exist anymore. Where is it?
 118  
      * This method is never used!
 119  
      *
 120  
      * @param propertyName is the name of the property
 121  
      * @return a message or null if not applicable.
 122  
      */
 123  
     public String getVetoMessage(String propertyName);
 124  
 
 125  
     /**
 126  
      * Finds the presentation (the Fig) for some object. If the object
 127  
      * is a modelelement that is contained in some other modelelement
 128  
      * that has its own fig, that fig is returned. It extends
 129  
      * presentationFor that only gets the fig belonging to the node
 130  
      * obj.<p>
 131  
      *
 132  
      * @author jaap.branderhorst@xs4all.nl
 133  
      * @return the Fig for the object
 134  
      * @param obj is th object
 135  
      */
 136  
     public Fig getContainingFig(Object obj);
 137  
 
 138  
     /**
 139  
      * This will mark the entire visible area of all Editors to be repaired
 140  
      *  from any damage - i.e. repainted.
 141  
      */
 142  
     public void damage();
 143  
 
 144  
     /**
 145  
      * Get all the model elements in this diagram that are represented
 146  
      * by a FigEdge.
 147  
      * @see org.tigris.gef.base.Diagram#getEdges()
 148  
      */
 149  
     public List getEdges();
 150  
 
 151  
     /**
 152  
      * Get all the model elements in this diagram that are represented
 153  
      * by a FigNode.
 154  
      * @see org.tigris.gef.base.Diagram#getNodes()
 155  
      */
 156  
     public List getNodes();
 157  
 
 158  
 
 159  
     /**
 160  
      * We hang our heads in shame. There are still bugs in ArgoUML
 161  
      * and/or GEF that cause corruptions in the model.
 162  
      * Before a save takes place we repair the model in order to
 163  
      * be as certain as possible that the saved file will reload.
 164  
      * TODO: Split into small inner classes for each fix.
 165  
      *
 166  
      * @return A text that explains what is repaired.
 167  
      */
 168  
     public String repair();
 169  
 
 170  
     /**
 171  
      * Find all the Figs that visualise the given model element in
 172  
      * this layer, or null if there is none.
 173  
      * 
 174  
      * TODO: once GEF includes this same method in Diagram then this can go
 175  
      * 
 176  
      * @see org.tigris.gef.base.Diagram#presentationsFor(java.lang.Object)
 177  
      */
 178  
     public List presentationsFor(Object obj);
 179  
 
 180  
     /**
 181  
      * Remove this diagram from existence.
 182  
      * 
 183  
      * TODO: Move to GEF
 184  
      */
 185  
     public void remove();
 186  
 
 187  
     /**
 188  
      * Keeps track of the project that contains this diagram. 
 189  
      * The Project determines many settings that reflect 
 190  
      * the way the diagram is painted, such as font size.
 191  
      * 
 192  
      * @param p the project that contains this diagram
 193  
      */
 194  
     public void setProject(Project p);
 195  
     
 196  
     /**
 197  
      * @return the Project which owns this diagram
 198  
      */
 199  
     public Project getProject();
 200  
 
 201  
     /**
 202  
      * Called when the user releases a dragged FigNode.
 203  
      * 
 204  
      * @param enclosed the enclosed FigNode that was dragged into the encloser
 205  
      * @param oldEncloser the previous encloser
 206  
      * @param newEncloser the FigNode that encloses the dragged FigNode
 207  
      */
 208  
     public void encloserChanged(FigNode enclosed, FigNode oldEncloser,
 209  
             FigNode newEncloser);
 210  
 
 211  
     /**
 212  
      * This method shall return any UML modelelements
 213  
      * that should be deleted when the diagram gets deleted,
 214  
      * or null if there are none. The default implementation returns null;
 215  
      * e.g. a statechart diagram should return its statemachine.
 216  
      *
 217  
      * @author mvw@tigris.org
 218  
      *
 219  
      * @return the dependent element - in the general case there aren't, so null
 220  
      */
 221  
     public Object getDependentElement();
 222  
 
 223  
     /**
 224  
      * TODO: MVW: I am not completely sure of the following:<p>
 225  
      * The "namespace" of the diagram is e.g. used when creating new elements
 226  
      * that are shown on the diagram; they will have their namespace set
 227  
      * according this. It is NOT necessarily equal to the "owner". 
 228  
      * 
 229  
      * @return the namespace for the diagram
 230  
      */
 231  
     public Object getNamespace();
 232  
 
 233  
     /**
 234  
      * Sets the namespace of the Diagram, and
 235  
      * adds the diagram as a listener of its namespace in the UML model
 236  
      * (so that it can delete itself when the model element is deleted).
 237  
      *
 238  
      * @param ns the namespace for the diagram
 239  
      */
 240  
     public void setNamespace(Object ns);
 241  
 
 242  
     /**
 243  
      * Set the namespace of a model element to the owner of
 244  
      * the given namespace. If the namespace is null
 245  
      * the namespace of the diagram is used instead.
 246  
      * If the modelElement is not valid in the given namespace
 247  
      * this method takes no action.
 248  
      * @param modelElement the model element
 249  
      * @param ns the namespace
 250  
      */
 251  
     public void setModelElementNamespace(Object modelElement, Object ns);
 252  
 
 253  
     /**
 254  
      * This diagram listens to events from its namespace ModelElement;
 255  
      * when the modelelement is removed, we also want to delete this
 256  
      * diagram.  <p>
 257  
      *
 258  
      * There is also a risk that if this diagram was the one shown in
 259  
      * the diagram panel, then it will remain after it has been
 260  
      * deleted. So we need to deselect this diagram. 
 261  
      * There are other things to take care of, so all this is delegated to 
 262  
      * {@link org.argouml.kernel.Project#moveToTrash(Object)}.
 263  
      * 
 264  
      * @param evt A PropertyChangeEvent object describing the event source
 265  
      * and the property that has changed.
 266  
      *
 267  
      * @see PropertyChangeListener#propertyChange(PropertyChangeEvent)
 268  
      */
 269  
     public void propertyChange(PropertyChangeEvent evt);
 270  
 
 271  
     /**
 272  
      * The owner of a diagram is the modelelement that is saved
 273  
      * with the project in the pgml file, and binds it to the model. <p>
 274  
      * 
 275  
      * This value is shown in the diagram's properties panel
 276  
      * as the "Home model".
 277  
      *
 278  
      * @return the home model
 279  
      */
 280  
     public Object getOwner();
 281  
     
 282  
     /**
 283  
      * @return an iterator which iterates over all Figs in Diagram
 284  
      */
 285  
     public Iterator<Fig> getFigIterator();
 286  
     
 287  
     /**
 288  
      * Create a diagram element suitable for the base diagram type
 289  
      * @param modelElement the model element the diagram element
 290  
      * will represent
 291  
      * @param bounds the bounds of the newly created diagram element
 292  
      * @return the newly created diagram element.
 293  
      */
 294  
     public DiagramElement createDiagramElement(
 295  
             final Object modelElement,
 296  
             final Rectangle bounds);
 297  
     
 298  
     ///////////////// GEF Methods ////////////////////////////
 299  
     // TODO: These should really be picked up automatically from
 300  
     // some GEF interface that we extend, but there is no such
 301  
     // thing.  NOTE: We've only added methods used by ArgoUML,
 302  
     // so it's possible that external consumers need other methods.
 303  
     
 304  
     
 305  
     /**
 306  
      * @param listener
 307  
      * @see org.tigris.gef.base.Diagram#addVetoableChangeListener(VetoableChangeListener)
 308  
      */
 309  
     public void addVetoableChangeListener(VetoableChangeListener listener);
 310  
 
 311  
     /**
 312  
      * @param listener
 313  
      * @see org.tigris.gef.base.Diagram#removeVetoableChangeListener(VetoableChangeListener)
 314  
      */
 315  
     public void removeVetoableChangeListener(VetoableChangeListener listener);
 316  
 
 317  
     /**
 318  
      * @param property
 319  
      * @param listener
 320  
      * @see org.tigris.gef.base.Diagram#addPropertyChangeListener(String, PropertyChangeListener)
 321  
      */
 322  
     public void addPropertyChangeListener(String property,
 323  
             PropertyChangeListener listener);
 324  
 
 325  
     /**
 326  
      * @param property
 327  
      * @param listener
 328  
      * @see org.tigris.gef.base.Diagram#removePropertyChangeListener(String, PropertyChangeListener)
 329  
      */
 330  
     public void removePropertyChangeListener(String property,
 331  
             PropertyChangeListener listener);
 332  
     
 333  
     /**
 334  
      * @return the GEF graphmodel for this diagram
 335  
      * @see org.tigris.gef.base.Diagram#getGraphModel()
 336  
      */
 337  
     public GraphModel getGraphModel();
 338  
     
 339  
     /**
 340  
      * @return the GEF LayerPerspective of this diagram
 341  
      * @see org.tigris.gef.base.Diagram#getLayer()
 342  
      */
 343  
     public LayerPerspective getLayer();
 344  
     
 345  
     /**
 346  
      * @param figures list of Figures to check for in diagram
 347  
      * @return count of figures contained in this diagram
 348  
      * @see org.tigris.gef.base.Diagram#countContained(List)
 349  
      */
 350  
     public int countContained(List figures);
 351  
     
 352  
     /**
 353  
      * @param o The object which owns the fig
 354  
      * @return the corresponding fig
 355  
      * @see org.tigris.gef.base.Diagram#presentationFor(Object)
 356  
      */
 357  
     public Fig presentationFor(Object o);
 358  
     
 359  
     /**
 360  
      * @param f Fig to be added
 361  
      * @see org.tigris.gef.base.Diagram#add(Fig)
 362  
      */
 363  
     public void add(Fig f);
 364  
     
 365  
     /**
 366  
      * Used by "argo.tee".
 367  
      * 
 368  
      * @return the name of the diagram
 369  
      * @see org.tigris.gef.base.Diagram#getName()
 370  
      */
 371  
     public String getName();
 372  
     
 373  
     /**
 374  
      * Perform any pre-save actions.
 375  
      * @see org.tigris.gef.base.Diagram#preSave()
 376  
      */
 377  
     public void preSave();
 378  
     
 379  
     /**
 380  
      * Perform any post-save actions.
 381  
      * @see org.tigris.gef.base.Diagram#postSave()
 382  
      */
 383  
     public void postSave();
 384  
     
 385  
     /**
 386  
      * Perform any post-load actions.
 387  
      * @see org.tigris.gef.base.Diagram#postLoad()
 388  
      */
 389  
     public void postLoad();
 390  
     /////////////////// End GEF methods ////////////////////////
 391  
 
 392  
 }