Author: mvw
Date: 2008-02-04 14:18:59-0800
New Revision: 14079

Modified:
   trunk/src_new/org/argouml/kernel/MemberList.java
   trunk/src_new/org/argouml/kernel/Project.java
   trunk/src_new/org/argouml/kernel/ProjectImpl.java
   trunk/src_new/org/argouml/persistence/XmiFilePersister.java
   trunk/src_new/org/argouml/persistence/ZipFilePersister.java

Log:
Make the usage of the MemberList restricted to one location only. 

This in preparation of improving it, 

which is needed to solve a package dependency cycle between the kernel and the 
org.argouml.uml package.

Modified: trunk/src_new/org/argouml/kernel/MemberList.java
Url: 
http://argouml.tigris.org/source/browse/argouml/trunk/src_new/org/argouml/kernel/MemberList.java?view=diff&rev=14079&p1=trunk/src_new/org/argouml/kernel/MemberList.java&p2=trunk/src_new/org/argouml/kernel/MemberList.java&r1=14078&r2=14079
==============================================================================
--- trunk/src_new/org/argouml/kernel/MemberList.java    (original)
+++ trunk/src_new/org/argouml/kernel/MemberList.java    2008-02-04 14:18:59-0800
@@ -1,5 +1,5 @@
 // $Id$
-// Copyright (c) 2004-2007 The Regents of the University of California. All
+// Copyright (c) 2004-2008 The Regents of the University of California. All
 // Rights Reserved. Permission to use, copy, modify, and distribute this
 // software and its documentation without fee, and without a written
 // agreement is hereby granted, provided that the above copyright notice
@@ -39,19 +39,30 @@
 /**
  * List of ProjectMembers. <p>
  * 
- * The project members are grouped into 3 categories: 
- * model, diagrams and the todo item list. <p>
+ * The project members are grouped into 4 categories: 
+ * model, diagrams, the todo item list and the profile configuration. <p>
  *
  * The purpose of these categories is to make sure that members are read 
  * and written in the correct order. The model must be read before diagrams, 
- * diagrams must be read before todo items. <p>
+ * diagrams must be read before todo items. (Dixit Bob in issue 2979.)
+ * The profile configuration is written last. <p>
  *
  * This implementation supports only 1 model member, 
- * multiple diagram members, and one todo list member.
+ * multiple diagram members, one todo list member, 
+ * and one profile configuration. <p>
+ * 
+ * Comments by mvw: <p>
+ * This class should be reworked to be independent 
+ * of the org.argouml.uml package. That can be done by extending the 
+ * ProjectMember interface with functions returning the sorting order, 
+ * and if multiple entries of the same type are allowed. <p>
+ * 
+ * In preparation, this class is made simpler by deprecating 
+ * all operations that are not part of the List interface.
  * 
  * @author Bob Tarling
  */
-public class MemberList implements List<ProjectMember> {
+class MemberList implements List<ProjectMember> {
 
     /**
      * Logger.
@@ -84,7 +95,7 @@
             setTodoList((AbstractProjectMember) member);
             return true;
         } else if (member instanceof ProfileConfiguration) {
-            setProfileConfiguration((AbstractProjectMember) member);
+            profileConfiguration = (AbstractProjectMember) member;
             return true;
         } else if (member instanceof ProjectMemberDiagram) {
             // otherwise add the diagram at the start
@@ -108,7 +119,7 @@
             return true;
         } else if (profileConfiguration == member) {
             LOG.info("Removing profile configuration");
-            setProfileConfiguration(null);
+            profileConfiguration = null;
             return true;
         } else {
             final boolean removed = diagramMembers.remove(member);
@@ -207,7 +218,10 @@
     /**
      * @param type the type of the member
      * @return the member of the project
+     * @deprecated by MVW in V0.25.2: no replacement needed since not used. 
+     * Rationale: this class should ONLY implement List, nothing more.
      */
+    @Deprecated
     public synchronized ProjectMember getMember(Class type) {
         if (type == ProjectMemberModel.class) {
             return model;
@@ -225,7 +239,10 @@
     /**
      * @param type the type of the member
      * @return the member of the project
+     * @deprecated by MVW in V0.25.2: no replacement needed since not used. 
+     * Rationale: this class should ONLY implement List, nothing more.
      */
+    @Deprecated
     public synchronized List getMembers(Class type) {
         if (type == ProjectMemberModel.class) {
             List<ProjectMember> temp = new ArrayList<ProjectMember>(1);
@@ -303,23 +320,23 @@
         throw new UnsupportedOperationException();
     }
 
-    public boolean containsAll(Collection<?> arg0) {
+    public boolean containsAll(Collection< ? > arg0) {
         throw new UnsupportedOperationException();
     }
 
-    public boolean addAll(Collection<? extends ProjectMember> arg0) {
+    public boolean addAll(Collection< ? extends ProjectMember> arg0) {
         throw new UnsupportedOperationException();
     }
 
-    public boolean addAll(int arg0, Collection<? extends ProjectMember> arg1) {
+    public boolean addAll(int arg0, Collection< ? extends ProjectMember> arg1) 
{
         throw new UnsupportedOperationException();
     }
 
-    public boolean removeAll(Collection<?> arg0) {
+    public boolean removeAll(Collection< ? > arg0) {
         throw new UnsupportedOperationException();
     }
 
-    public boolean retainAll(Collection<?> arg0) {
+    public boolean retainAll(Collection< ? > arg0) {
         throw new UnsupportedOperationException();
     }
 
@@ -347,10 +364,22 @@
         throw new UnsupportedOperationException();
     }
 
+    /**
+     * @return the project member
+     * @deprecated by MVW in V0.25.2: no replacement needed since not used. 
+     * Rationale: this class should ONLY implement List, nothing more.
+     */
+    @Deprecated
     public AbstractProjectMember getProfileConfiguration() {
         return profileConfiguration;
     }
 
+    /**
+     * @param profileConfig the new profile configuration
+     * @deprecated by MVW in V0.25.2: no replacement needed since not used. 
+     * Rationale: this class should ONLY implement List, nothing more.
+     */
+    @Deprecated
     public void setProfileConfiguration(AbstractProjectMember profileConfig) {
         profileConfiguration = profileConfig;
     }

Modified: trunk/src_new/org/argouml/kernel/Project.java
Url: 
http://argouml.tigris.org/source/browse/argouml/trunk/src_new/org/argouml/kernel/Project.java?view=diff&rev=14079&p1=trunk/src_new/org/argouml/kernel/Project.java&p2=trunk/src_new/org/argouml/kernel/Project.java&r1=14078&r2=14079
==============================================================================
--- trunk/src_new/org/argouml/kernel/Project.java       (original)
+++ trunk/src_new/org/argouml/kernel/Project.java       2008-02-04 14:18:59-0800
@@ -1,5 +1,5 @@
 // $Id$
-// Copyright (c) 2007 The Regents of the University of California. All
+// Copyright (c) 2007-2008 The Regents of the University of California. All
 // Rights Reserved. Permission to use, copy, modify, and distribute this
 // software and its documentation without fee, and without a written
 // agreement is hereby granted, provided that the above copyright notice
@@ -59,9 +59,11 @@
      *
      * @return The name (a String).
      * @deprecated by MVW in V0.25.4 - replaced by 
-     *     [EMAIL PROTECTED] 
org.argouml.persistence.PersistenceManager#getProjectBaseName(Project)}
+     *     [EMAIL PROTECTED] org.argouml.persistence.PersistenceManager
+     *     #getProjectBaseName(Project)}
      *     Rationale: Remove dependency on persistence subsystem.
      */
+    @Deprecated
     public String getBaseName();
 
     /**
@@ -77,9 +79,11 @@
      * @throws URISyntaxException if the argument cannot be converted to
      *         an URI.
      * @deprecated by MVW in V0.25.4 - replaced by 
-     *     [EMAIL PROTECTED] 
org.argouml.persistence.PersistenceManager#setProjectName(String, Project)}
+     *     [EMAIL PROTECTED] org.argouml.persistence.PersistenceManager
+     *     #setProjectName(String, Project)}
      *     Rationale: Remove dependency on persistence subsystem.
      */
+    @Deprecated
     public void setName(final String n) throws URISyntaxException;
 
     /**
@@ -94,16 +98,19 @@
      *
      * @param theUri The URI to set.
      * @deprecated by MVW in V0.25.4 - replaced by 
-     *     [EMAIL PROTECTED] 
org.argouml.persistence.PersistenceManager#setProjectURI(URI, Project)}
+     *     [EMAIL PROTECTED] org.argouml.persistence.PersistenceManager
+     *     #setProjectURI(URI, Project)}
      *     Rationale: Remove dependency on persistence subsystem.
      */
+    @Deprecated
     public void setURI(final URI theUri);
 
     /**
      * Set the URI for this project. <p>
      * 
      * Don't use this directly! Use instead:
-     * [EMAIL PROTECTED] 
org.argouml.persistence.PersistenceManager#setProjectURI(URI, Project)}
+     * [EMAIL PROTECTED] org.argouml.persistence.PersistenceManager
+     * #setProjectURI(URI, Project)}
      *
      * @param theUri The URI to set.
      */
@@ -151,7 +158,7 @@
      *
      * @return all members.
      */
-    public MemberList getMembers();
+    public List<ProjectMember> getMembers();
 
     /**
      * Add a member: ArgoDiagram, a UML Model, or a ProjectMemberTodoList.

Modified: trunk/src_new/org/argouml/kernel/ProjectImpl.java
Url: 
http://argouml.tigris.org/source/browse/argouml/trunk/src_new/org/argouml/kernel/ProjectImpl.java?view=diff&rev=14079&p1=trunk/src_new/org/argouml/kernel/ProjectImpl.java&p2=trunk/src_new/org/argouml/kernel/ProjectImpl.java&r1=14078&r2=14079
==============================================================================
--- trunk/src_new/org/argouml/kernel/ProjectImpl.java   (original)
+++ trunk/src_new/org/argouml/kernel/ProjectImpl.java   2008-02-04 14:18:59-0800
@@ -1,5 +1,5 @@
 // $Id$
-// Copyright (c) 1996-2007 The Regents of the University of California. All
+// Copyright (c) 1996-2008 The Regents of the University of California. All
 // Rights Reserved. Permission to use, copy, modify, and distribute this
 // software and its documentation without fee, and without a written
 // agreement is hereby granted, provided that the above copyright notice
@@ -50,13 +50,13 @@
 import org.argouml.i18n.Translator;
 import org.argouml.model.Model;
 import org.argouml.persistence.PersistenceManager;
+import org.argouml.profile.Profile;
 import org.argouml.uml.CommentEdge;
 import org.argouml.uml.ProjectMemberModel;
 import org.argouml.uml.cognitive.ProjectMemberTodoList;
 import org.argouml.uml.diagram.ArgoDiagram;
 import org.argouml.uml.diagram.DiagramFactory;
 import org.argouml.uml.diagram.ProjectMemberDiagram;
-import org.argouml.profile.Profile;
 import org.tigris.gef.presentation.Fig;
 
 /**
@@ -102,7 +102,7 @@
 
     // TODO: break into 3 main member types
     // model, diagram and other
-    private final MemberList members = new MemberList();
+    private final List<ProjectMember> members = new MemberList();
 
     private String historyFile;
 
@@ -274,7 +274,7 @@
     }
 
 
-    public MemberList getMembers() {
+    public List<ProjectMember> getMembers() {
         LOG.info("Getting the members there are " + members.size());
         return members;
     }
@@ -328,8 +328,8 @@
 
         boolean memberFound = false;
         Object currentMember =
-            members.getMember(ProjectMemberModel.class);
-        if (currentMember != null) {
+            members.get(0);
+        if (currentMember instanceof ProjectMemberModel) {
             Object currentModel =
                 ((ProjectMemberModel) currentMember).getModel();
             if (currentModel == m) {
@@ -819,8 +819,6 @@
 
     /**
      * Empty the trash can and permanently delete all objects that it contains.
-     * 
-     * @see org.argouml.kernel.Project#emptyTrashCan()
      */
     public void emptyTrashCan() {
         trashcan.clear();

Modified: trunk/src_new/org/argouml/persistence/XmiFilePersister.java
Url: 
http://argouml.tigris.org/source/browse/argouml/trunk/src_new/org/argouml/persistence/XmiFilePersister.java?view=diff&rev=14079&p1=trunk/src_new/org/argouml/persistence/XmiFilePersister.java&p2=trunk/src_new/org/argouml/persistence/XmiFilePersister.java&r1=14078&r2=14079
==============================================================================
--- trunk/src_new/org/argouml/persistence/XmiFilePersister.java (original)
+++ trunk/src_new/org/argouml/persistence/XmiFilePersister.java 2008-02-04 
14:18:59-0800
@@ -1,5 +1,5 @@
 // $Id$
-// Copyright (c) 1996-2007 The Regents of the University of California. All
+// Copyright (c) 1996-2008 The Regents of the University of California. All
 // Rights Reserved. Permission to use, copy, modify, and distribute this
 // software and its documentation without fee, and without a written
 // agreement is hereby granted, provided that the above copyright notice
@@ -178,11 +178,11 @@
         int size = project.getMembers().size();
         for (int i = 0; i < size; i++) {
             ProjectMember projectMember =
-                (ProjectMember) project.getMembers().get(i);
+                project.getMembers().get(i);
             if (projectMember.getType().equalsIgnoreCase(getExtension())) {
                 if (LOG.isInfoEnabled()) {
                     LOG.info("Saving member of type: "
-                            + ((ProjectMember) project.getMembers()
+                            + (project.getMembers()
                                     .get(i)).getType());
                 }
                 MemberFilePersister persister = new ModelMemberFilePersister();

Modified: trunk/src_new/org/argouml/persistence/ZipFilePersister.java
Url: 
http://argouml.tigris.org/source/browse/argouml/trunk/src_new/org/argouml/persistence/ZipFilePersister.java?view=diff&rev=14079&p1=trunk/src_new/org/argouml/persistence/ZipFilePersister.java&p2=trunk/src_new/org/argouml/persistence/ZipFilePersister.java&r1=14078&r2=14079
==============================================================================
--- trunk/src_new/org/argouml/persistence/ZipFilePersister.java (original)
+++ trunk/src_new/org/argouml/persistence/ZipFilePersister.java 2008-02-04 
14:18:59-0800
@@ -1,5 +1,5 @@
 // $Id$
-// Copyright (c) 1996-2006 The Regents of the University of California. All
+// Copyright (c) 1996-2008 The Regents of the University of California. All
 // Rights Reserved. Permission to use, copy, modify, and distribute this
 // software and its documentation without fee, and without a written
 // agreement is hereby granted, provided that the above copyright notice
@@ -135,11 +135,11 @@
             int size = project.getMembers().size();
             for (int i = 0; i < size; i++) {
                 ProjectMember projectMember =
-                    (ProjectMember) project.getMembers().get(i);
+                    project.getMembers().get(i);
                 if (projectMember.getType().equalsIgnoreCase("xmi")) {
                     if (LOG.isInfoEnabled()) {
                         LOG.info("Saving member of type: "
-                              + ((ProjectMember) project.getMembers()
+                              + (project.getMembers()
                                     .get(i)).getType());
                     }
                     MemberFilePersister persister

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to