Coverage Report - org.argouml.kernel.Project
 
Classes in this File Line Coverage Branch Coverage Complexity
Project
N/A
N/A
1
 
 1  
 /* $Id: Project.java 18968 2011-01-13 14:39:23Z tfmorris $
 2  
  *******************************************************************************
 3  
  * Copyright (c) 2010 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  
  *    Tom Morris
 11  
  *    Bob Tarling
 12  
  *******************************************************************************
 13  
  *
 14  
  * Some portions of this file were previously release using the BSD License:
 15  
  */
 16  
 
 17  
 // Copyright (c) 2007-2008 The Regents of the University of California. All
 18  
 // Rights Reserved. Permission to use, copy, modify, and distribute this
 19  
 // software and its documentation without fee, and without a written
 20  
 // agreement is hereby granted, provided that the above copyright notice
 21  
 // and this paragraph appear in all copies. This software program and
 22  
 // documentation are copyrighted by The Regents of the University of
 23  
 // California. The software program and documentation are supplied "AS
 24  
 // IS", without any accompanying services from The Regents. The Regents
 25  
 // does not warrant that the operation of the program will be
 26  
 // uninterrupted or error-free. The end-user understands that the program
 27  
 // was developed for research purposes and is advised not to rely
 28  
 // exclusively on the program for any reason. IN NO EVENT SHALL THE
 29  
 // UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT,
 30  
 // SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS,
 31  
 // ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF
 32  
 // THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF
 33  
 // SUCH DAMAGE. THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY
 34  
 // WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 35  
 // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE
 36  
 // PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF
 37  
 // CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT,
 38  
 // UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
 39  
 
 40  
 package org.argouml.kernel;
 41  
 
 42  
 import java.io.File;
 43  
 import java.net.URI;
 44  
 import java.util.Collection;
 45  
 import java.util.List;
 46  
 import java.util.Map;
 47  
 
 48  
 import org.argouml.uml.diagram.ArgoDiagram;
 49  
 import org.tigris.gef.presentation.Fig;
 50  
 
 51  
 /**
 52  
  * The Project interface encapsulates all information about a designer's
 53  
  * project. It contains the list of diagrams and UML models, various project
 54  
  * properties such as the author's name, and defaults for various settings.
 55  
  * <p>
 56  
  * TODO: This interface was mechanically refactored from the implementation
 57  
  * class {@link ProjectImpl}. It needs to be reviewed and cleaned up,
 58  
  * eliminating methods which should be part of the public API and splitting the
 59  
  * interface into smaller function specific (e.g. TrashCan) interfaces.
 60  
  * 
 61  
  * @author Tom Morris <tfmorris@gmail.com>, Thomas Neustupny
 62  
  * @since 0.25.4 when it replaced the concrete class of the same name
 63  
  */
 64  
 public interface Project {
 65  
 
 66  
     /**
 67  
      * Project type: an UML project
 68  
      */
 69  
     public static final int UML_PROJECT = 0;
 70  
 
 71  
     /**
 72  
      * Project type: a profile project
 73  
      */
 74  
     public static final int PROFILE_PROJECT = 1;
 75  
 
 76  
     /**
 77  
      * Get the project name. This is just the name part of the full filename.
 78  
      * @return the name of the project
 79  
      */
 80  
     public String getName();
 81  
 
 82  
     /**
 83  
      * Get the project type. (Currently needed for profile project; probably
 84  
      * no longer needed when ArgoUML supports multimodel projects.)
 85  
      *
 86  
      * @return The URI.
 87  
      */
 88  
     public int getProjectType();
 89  
 
 90  
     /**
 91  
      * Set the project type. (Currently needed for profile project; probably
 92  
      * no longer needed when ArgoUML supports multimodel projects.)
 93  
      * 
 94  
      * @param projectType The new project type.
 95  
      */
 96  
     public void setProjectType(int projectType);
 97  
 
 98  
     /**
 99  
      * Get the URI for this project.
 100  
      *
 101  
      * @return The URI.
 102  
      */
 103  
     public URI getURI();
 104  
 
 105  
     /**
 106  
      * Set the URI for this project. <p>
 107  
      * 
 108  
      * Don't use this directly! Use instead:
 109  
      * {@link org.argouml.persistence.PersistenceManager
 110  
      * #setProjectURI(URI, Project)}
 111  
      * <p>
 112  
      * TODO: Why isn't this deprecated or private if it is not to be used?
 113  
      * 
 114  
      * @param theUri The URI to set.
 115  
      */
 116  
     public void setUri(final URI theUri);
 117  
 
 118  
     /**
 119  
      * Set the project file.
 120  
      *
 121  
      * This only works if it is possible to convert the File to an uri.
 122  
      *
 123  
      * @param file File to set the project to.
 124  
      */
 125  
     public void setFile(final File file);
 126  
 
 127  
     
 128  
     /**
 129  
      * Used by "argo.tee".
 130  
      * 
 131  
      * @return the search path
 132  
      */
 133  
     // TODO: Unused?
 134  
     public List<String> getSearchPathList();
 135  
 
 136  
     /**
 137  
      * @param searchPathElement the element to be added to the searchpath
 138  
      */
 139  
     // TODO: Unused?
 140  
     public void addSearchPath(String searchPathElement);
 141  
 
 142  
     /**
 143  
      * Sets the searchpath.
 144  
      * @param theSearchpath The searchpath to set
 145  
      */
 146  
     // TODO: Unused?
 147  
     public void setSearchPath(final List<String> theSearchpath);
 148  
     
 149  
     /**
 150  
      * Get all members of the project.
 151  
      * Used by "argo.tee".
 152  
      *
 153  
      * @return all members.
 154  
      */
 155  
     public List<ProjectMember> getMembers();
 156  
 
 157  
     /**
 158  
      * Add a member: ArgoDiagram, a UML Model, or a ProjectMemberTodoList.
 159  
      * 
 160  
      * @param m the member to be added
 161  
      */
 162  
     public void addMember(final Object m);
 163  
 
 164  
     /**
 165  
      * @param model a namespace
 166  
      */
 167  
     public void addModel(final Object model);
 168  
 
 169  
     /**
 170  
      * Get the author name. 
 171  
      * Used by "argo.tee".
 172  
      *
 173  
      * @return The author name.
 174  
      */
 175  
     public String getAuthorname();
 176  
 
 177  
     /**
 178  
      * Set the author name.
 179  
      *
 180  
      * @param s The new author name.
 181  
      */
 182  
     public void setAuthorname(final String s);
 183  
 
 184  
     /**
 185  
      * Get the author e-mail address.
 186  
      * Used by "argo.tee".
 187  
      *
 188  
      * @return the author e-mail address
 189  
      */
 190  
     public String getAuthoremail();
 191  
 
 192  
     /**
 193  
      * Set the author e-mail address.
 194  
      *
 195  
      * @param s the new author e-mail address
 196  
      */
 197  
     public void setAuthoremail(final String s);
 198  
 
 199  
     /**
 200  
      * Get the version. 
 201  
      * This is the ArgoUML version that last saved this project.
 202  
      * This field is not editable by the user.
 203  
      * Used by "argo.tee".
 204  
      *
 205  
      * @return the version.
 206  
      */
 207  
     public String getVersion();
 208  
 
 209  
     /**
 210  
      * Set the new version.
 211  
      * This is the ArgoUML version that last saved this project.
 212  
      * This field is not editable by the user.
 213  
      * @param s The new version.
 214  
      */
 215  
     public void setVersion(final String s);
 216  
 
 217  
     /**
 218  
      * Get the description.
 219  
      * This is the description of the project, as entered by the user.
 220  
      * Used by "argo.tee".
 221  
      *
 222  
      * @return the description.
 223  
      */
 224  
     public String getDescription();
 225  
 
 226  
     /**
 227  
      * Set a new description.
 228  
      * This is the description of the project. 
 229  
      * It is freely editable by the user.
 230  
      *
 231  
      * @param s The new description.
 232  
      */
 233  
     public void setDescription(final String s);
 234  
 
 235  
     /**
 236  
      * Get the history file name.
 237  
      * Not used.
 238  
      * Used by "argo.tee".
 239  
      *
 240  
      * @return The history file.
 241  
      */
 242  
     public String getHistoryFile();
 243  
 
 244  
     /**
 245  
      * Set the history file name.
 246  
      *
 247  
      * @param s The new history file.
 248  
      */
 249  
     public void setHistoryFile(final String s);
 250  
 
 251  
     
 252  
     /**
 253  
      * Returns all models defined by the user. I.e. this does not return any
 254  
      * profile packages but all other top level Packages (usually Models).
 255  
      *
 256  
      * @return A List of all user defined models.
 257  
      */
 258  
     public List getUserDefinedModelList();
 259  
 
 260  
     /**
 261  
      * Returns all top level Packages (e.g. Models), including the profile
 262  
      * packages. 
 263  
      * <p>
 264  
      * <em>WARNING:</em> The models returned by this method are <em>not</em>
 265  
      * ordered.  Any code which makes the assumption that the user model is
 266  
      * first (or any other ordering assumption) is broken!
 267  
      * <p><em>NOTE:</em> Since user defined models and profiles are
 268  
      * handled quite differently, you normally want to use
 269  
      * {@link #getUserDefinedModelList()} instead of this method.
 270  
      * 
 271  
      * @return A Collection containing all models.
 272  
      */
 273  
     public Collection getModels();
 274  
 
 275  
     /**
 276  
      * Return the model.<p>
 277  
      *
 278  
      * If there isn't exactly one model, <code>null</code> is returned.
 279  
      *
 280  
      * @return the model.
 281  
      * @deprecated for 0.25.4 by tfmorris.  Use 
 282  
      * {@link #getUserDefinedModelList()} or {@link #getModels()}.
 283  
      */
 284  
     @Deprecated
 285  
     public Object getModel();
 286  
 
 287  
 
 288  
     /**
 289  
      * Return the default type for an attribute.
 290  
      * 
 291  
      * @return a Classifier to use as the default type
 292  
      * TODO: This belongs in ProjectSettings. - tfm
 293  
      */
 294  
     public Object getDefaultAttributeType();
 295  
 
 296  
     /**
 297  
      * Return the default type for a parameter.
 298  
      * 
 299  
      * @return a Classifier to use as the default type
 300  
      * TODO: This belongs in ProjectSettings. - tfm
 301  
      */
 302  
     public Object getDefaultParameterType();
 303  
 
 304  
     /**
 305  
      * Return the default type for the return parameter of a method.
 306  
      * 
 307  
      * @return a Classifier to use as the default type
 308  
      * TODO: This belongs in ProjectSettings. - tfm
 309  
      */
 310  
     public Object getDefaultReturnType();
 311  
 
 312  
     /**
 313  
      * Searches for a type/classifier with name s. If the type is not found, a
 314  
      * new type is created and added to the current namespace.
 315  
      * <p>
 316  
      * TODO: Move to Model subsystem - tfm 20070307
 317  
      * 
 318  
      * @param s
 319  
      *            the name of the type/classifier to be found
 320  
      * @return Classifier
 321  
      */
 322  
     public Object findType(String s);
 323  
     
 324  
     /**
 325  
      * Searches for a type/classifier with name s. If defineNew is
 326  
      * true, a new type is defined if the type/classifier is not
 327  
      * found. The newly created type is added to the currentNamespace
 328  
      * and given the name s.
 329  
      * <p>
 330  
      * TODO: Move to Model subsystem - tfm 20070307
 331  
      * 
 332  
      * @param s the name of the type/classifier to be found
 333  
      * @param defineNew if true, define a new one
 334  
      * @return Classifier the found classifier
 335  
      */
 336  
     public Object findType(String s, boolean defineNew);
 337  
 
 338  
     /**
 339  
      * Finds all figs on the diagrams for some project member,
 340  
      * including the figs containing the member (so for some
 341  
      * operation, the containing figclass is returned).
 342  
      *
 343  
      * @param member The member we are looking for.
 344  
      *              This can be a model element object but also another object.
 345  
      * @return Collection The collection with the figs.
 346  
      */
 347  
     public Collection<Fig> findFigsForMember(Object member);
 348  
 
 349  
     /**
 350  
      * Returns a list with all figs for some UML object on all diagrams.
 351  
      *
 352  
      * @param obj the given UML object
 353  
      * @return List the list of figs
 354  
      */
 355  
     public Collection findAllPresentationsFor(Object obj);
 356  
 
 357  
     /**
 358  
      * Finds a classifier with a certain name.<p>
 359  
      *
 360  
      * Will only return first classifier with the matching name.
 361  
      *
 362  
      * TODO: Move to Model subsystem - tfm 20070307
 363  
      * 
 364  
      * @param s is short name.
 365  
      * @param ns Namespace where we do the search.
 366  
      * @return the found classifier (or <code>null</code> if not found).
 367  
      */
 368  
     public Object findTypeInModel(String s, Object ns);
 369  
 
 370  
     /**
 371  
      * @param m the namespace
 372  
     * @deprecated for 0.27.2 by tfmorris. Since we can now have multiple top
 373  
      *             level packages in the project, there is no concept of a
 374  
      *             single current namespace. To add a new top-level package, use
 375  
      *             {@link #getRoots()}.add(Object).
 376  
      */
 377  
     @Deprecated
 378  
     public void setCurrentNamespace(final Object m);
 379  
 
 380  
     /**
 381  
      * @return the namespace
 382  
      * @deprecated for 0.27.2 by tfmorris. Since we can now have multiple top
 383  
      *             level packages in the project, there is no concept of a
 384  
      *             single current namespace. Callers should use
 385  
      *             {@link #getRoots()} and be prepared to handle multiple roots.
 386  
      */
 387  
     @Deprecated
 388  
     public Object getCurrentNamespace();
 389  
 
 390  
     
 391  
     /**
 392  
      * @return the diagrams
 393  
      */
 394  
     public List<ArgoDiagram> getDiagramList();
 395  
 
 396  
     /**
 397  
      * Get the number of diagrams in this project.
 398  
      * Used by argo2.tee!!
 399  
      * @return the number of diagrams in this project.
 400  
      */
 401  
     public int getDiagramCount();
 402  
 
 403  
     /**
 404  
      * Finds a diagram with a specific name or UID.
 405  
      *
 406  
      * @return the diagram object (if found). Otherwise null.
 407  
      * @param name is the name to search for.
 408  
      */
 409  
     public ArgoDiagram getDiagram(String name);
 410  
 
 411  
     /**
 412  
      * @param d the diagram to be added
 413  
      */
 414  
     public void addDiagram(final ArgoDiagram d);
 415  
 
 416  
     /**
 417  
      * @param me the given modelelement
 418  
      * @return the total number of presentation
 419  
      *         for the given modelelement in the project
 420  
      */
 421  
     public int getPresentationCountFor(Object me);
 422  
 
 423  
     /**
 424  
      * @return an initial target, in casu a diagram or a model
 425  
      */
 426  
     public Object getInitialTarget();
 427  
 
 428  
     /**
 429  
      * This is executed before a save.
 430  
      */
 431  
     public void preSave();
 432  
 
 433  
     /**
 434  
      * This is executed after a save.
 435  
      */
 436  
     public void postSave();
 437  
 
 438  
     /**
 439  
      * This is executed after a load.
 440  
      */
 441  
     public void postLoad();
 442  
 
 443  
     /**
 444  
      * Moves some object to trash, i.e. deletes it completely with all
 445  
      * dependent structures. <p>
 446  
      *
 447  
      * Deleting an object involves: <pre>
 448  
      * - Removing Target history
 449  
      * - Deleting all Fig representations for the object
 450  
      * - Deleting the UML element
 451  
      * - Deleting all dependent UML modelelements
 452  
      * - Deleting CommentEdges (which are not UML elements)
 453  
      * - Move to trash for enclosed objects, i.e. graphically drawn on top of
 454  
      * - Move to trash subdiagrams for the object
 455  
      * - Saveguard that there is always at least 1 diagram left
 456  
      * - If the current diagram has been deleted, select a new one to show
 457  
      * - Trigger the explorer when a diagram is deleted
 458  
      * - Set the needsSave (dirty) flag of the projectmanager
 459  
      * </pre>
 460  
      *
 461  
      * @param obj The object to be deleted
 462  
      * @see org.argouml.kernel.ProjectImpl#trashInternal(Object)
 463  
      * <p> 
 464  
      * TODO: This should just be named delete() or something which better 
 465  
      * tells what it does (since there really isn't a trash can).
 466  
      */
 467  
     public void moveToTrash(Object obj);
 468  
 
 469  
     /**
 470  
      * @param obj the object
 471  
      * @return true if the object is trashed
 472  
      * @deprecated for 0.27.3 by tfmorris. Not actually implemented. The
 473  
      *             (future) Undo facility is a better way to handle this.
 474  
      */
 475  
     @Deprecated
 476  
     public boolean isInTrash(Object obj);
 477  
 
 478  
 
 479  
     /**
 480  
      * Find a type by name in the default model.
 481  
      * <p>
 482  
      * <em>NOTE:</em>The behavior of this method changed after version 0.24.
 483  
      * Earlier versions copied the type from the profile or default model into
 484  
      * the user model.  The type is now returned directly and HREFs are used
 485  
      * to link to it when the model is written out.
 486  
      * 
 487  
      * @param name the name.
 488  
      * @return the type.
 489  
      */
 490  
     public Object findTypeInDefaultModel(String name);
 491  
 
 492  
     /**
 493  
      * Returns the root package.
 494  
      * 
 495  
      * @return the Package which is the root
 496  
      * @deprecated for 0.25.4 by tfmorris - use {@link #getRoots()} to
 497  
      *             get packages/model elements which are at the top level.
 498  
      *             <p>
 499  
      *             TODO: We probably need a getDefaultNamespace() method or
 500  
      *             something similar to replace some uses of this.
 501  
      */
 502  
     @Deprecated
 503  
     public Object getRoot();
 504  
 
 505  
     /**
 506  
      * Sets the root package.
 507  
      * @param root The root to set, a UML Package
 508  
      * @deprecated for 0.25.4 by tfmorris - use {@link #setRoots}.
 509  
      */
 510  
     @Deprecated
 511  
     public void setRoot(final Object root);
 512  
 
 513  
     /**
 514  
      * Return a collection of top level Model Elements. Normally for ArgoUML
 515  
      * created models, this will be a single Package or Model, but other tools
 516  
      * may allow more liberal structures.
 517  
      * 
 518  
      * @return Collection of top level ModelElements
 519  
      */
 520  
     public Collection getRoots();
 521  
 
 522  
     /**
 523  
      * Set the top level ModelElements for this project.
 524  
      * 
 525  
      * @param elements Collection of top level ModelElements
 526  
      */
 527  
     public void setRoots(final Collection elements);
 528  
 
 529  
     /**
 530  
      * Updates the top level ModelElements for all projects. In UML2, each
 531  
      * model knows it's root elements, so this could make setRoots(...)
 532  
      * obsolete. E.g., applying a stereotype in UML2 adds a new root.
 533  
      * 
 534  
      * TODO: This is redundant with setRoots/getRoots.  There are already too
 535  
      * many ways this stuff is managed without adding an additional one.
 536  
      * All current model subsystem implementations know their top level
 537  
      * elements.  Responsibility can be moved to the model subsystem, but
 538  
      * let's choose *one* way of managing this.
 539  
      */
 540  
     public void updateRoots();
 541  
     
 542  
     /**
 543  
      * Returns true if the given name is a valid name for a diagram. Valid means
 544  
      * that it does not occur as a name for a diagram yet.
 545  
      * @param name The name to test
 546  
      * @return boolean True if there are no problems with this name, false if
 547  
      * it's not valid.
 548  
      */
 549  
     public boolean isValidDiagramName(String name);
 550  
 
 551  
 
 552  
     /**
 553  
      * Returns the uri.
 554  
      * @return URI
 555  
      */
 556  
     public URI getUri();
 557  
 
 558  
     /**
 559  
      * Returns the uUIDRefs.
 560  
      * @return HashMap
 561  
      */
 562  
     public Map<String, Object> getUUIDRefs();
 563  
 
 564  
     /**
 565  
      * Sets the uUIDRefs.
 566  
      * @param uUIDRefs The uUIDRefs to set
 567  
      */
 568  
     public void setUUIDRefs(final Map<String, Object> uUIDRefs);
 569  
 
 570  
     /**
 571  
      * Get the current viewed diagram.
 572  
      * <p>
 573  
      * Used by "argo.tee" to save the name of this diagram, so that the same
 574  
      * diagram can be initially shown when reloading this project. This probably
 575  
      * needs to be converted to an ordered list of open diagram windows to
 576  
      * support MDI.
 577  
      * 
 578  
      * @return the current viewed diagram
 579  
      * @deprecated for 0.27.2 by tfmorris for all uses other than argo.tee. The
 580  
      *             active diagram is a concept associated with the current
 581  
      *             editing window, not a project. It can be retrieved from
 582  
      *          {@link org.argouml.uml.diagram.DiagramUtils#getActiveDiagram()},
 583  
      *          which will get the diagram for the window 
 584  
      *          that last contained the mouse (from GEF).
 585  
      *          Alternatively, to get the diagram from a Fig, use 
 586  
      *          ((LayerPerspective) getLayer()).getDiagram().
 587  
      */
 588  
     @Deprecated
 589  
     public ArgoDiagram getActiveDiagram();
 590  
 
 591  
     /**
 592  
      * @param theDiagram the ArgoDiagram
 593  
      * @deprecated for 0.27.2 by tfmorris.  The active diagram is a concept
 594  
      * associated with the current editing window, not a project.
 595  
      */
 596  
     @Deprecated
 597  
     public void setActiveDiagram(final ArgoDiagram theDiagram);
 598  
     
 599  
     /**
 600  
      * @param diagramName the name of the diagram to show 
 601  
      * by default after loading
 602  
      */
 603  
     public void setSavedDiagramName(String diagramName);
 604  
 
 605  
     /**
 606  
      * Remove the project.
 607  
      */
 608  
     public void remove();
 609  
 
 610  
     /**
 611  
      * Used by "argo.tee".
 612  
      * 
 613  
      * @return Returns the persistenceVersion.
 614  
      */
 615  
     public int getPersistenceVersion();
 616  
 
 617  
     /**
 618  
      * @param pv The persistenceVersion to set.
 619  
      */
 620  
     public void setPersistenceVersion(int pv);
 621  
 
 622  
     /**
 623  
      * Repair all parts of the project before a save takes place.
 624  
      * @return a report of any fixes
 625  
      */
 626  
     public String repair();
 627  
 
 628  
     /**
 629  
      * Used by "argo.tee".
 630  
      * 
 631  
      * @return the settings of this project
 632  
      */
 633  
     public ProjectSettings getProjectSettings();
 634  
 
 635  
     /**
 636  
      * @return Returns the profile configuration.
 637  
      */
 638  
     public ProfileConfiguration getProfileConfiguration();
 639  
 
 640  
 
 641  
     /**
 642  
      * Set the profile configuration.
 643  
      * 
 644  
      * @param pc the profile configuration
 645  
      */
 646  
     public void setProfileConfiguration(final ProfileConfiguration pc);
 647  
 
 648  
     /**
 649  
      * Return the UndoManager for this project.  Undo is managed on a 
 650  
      * per-project basis.
 651  
      * 
 652  
      * @return the UndoManager for this project
 653  
      */
 654  
     public UndoManager getUndoManager();
 655  
     
 656  
     /**
 657  
      * @return true if Project has been modified since last save
 658  
      */
 659  
     public boolean isDirty();
 660  
     
 661  
     /**
 662  
      * Set the dirty flag for the project.  This has no direct effect other than
 663  
      * setting the flag.
 664  
      * 
 665  
      * @param isDirty true if the project should be marked as dirty
 666  
      */
 667  
     public void setDirty(boolean isDirty);
 668  
 
 669  
 }