Classes in this File | Line Coverage | Branch Coverage | Complexity | ||||
Project |
|
| 1.0;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 | } |