Author: tfmorris
Date: 2010-04-18 01:50:37-0700
New Revision: 18282

Modified:
   trunk/src/argouml-app/src/org/argouml/profile/URLModelLoader.java
   
trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/UmlFactoryEUMLImpl.java
   
trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/MDRModelImplementation.java
   
trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/UmlFactoryMDRImpl.java
   trunk/src/argouml-core-model/src/org/argouml/model/ModelImplementation.java
   trunk/src/argouml-core-model/src/org/argouml/model/UmlFactory.java

Log:
REOPENED - task 6008: Check for profile XMI in repository before attempting to 
load it to deal with cases where profile was loaded implicitly first, then 
explicitly later

Modified: trunk/src/argouml-app/src/org/argouml/profile/URLModelLoader.java
Url: 
http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/profile/URLModelLoader.java?view=diff&pathrev=18282&r1=18281&r2=18282
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/profile/URLModelLoader.java   
(original)
+++ trunk/src/argouml-app/src/org/argouml/profile/URLModelLoader.java   
2010-04-18 01:50:37-0700
@@ -58,10 +58,15 @@
 public class URLModelLoader implements ProfileModelLoader {
 
     /**
+     * Load a profile from a URL.  If a profile with the same public ID has 
+     * already been loaded, its contents are returned instead of loading the
+     * new profile.
+     * 
      * @param url the url/system id to load
      * @param publicId the publicId for which the model will be known - must be
      *                equal in different machines in order to be possible to
-     *                load the model.
+     *                load the model.  If a profile with this public ID has 
+     *                already been loaded, it is returned instead.
      * @return a collection of top level elements in the profile (usually a
      *         single package stereotyped <<profile>>
      * @throws ProfileException if the XMIReader couldn't read the profile
@@ -71,29 +76,33 @@
         if (url == null) {
             throw new ProfileException("Null profile URL");
         }
-        ZipInputStream zis = null;
-        try {
-            Collection elements = null;
-            XmiReader xmiReader = Model.getXmiReader();
-            if (url.getPath().toLowerCase().endsWith(".zip")) {
-                zis = new ZipInputStream(url.openStream());
-                ZipEntry entry = zis.getNextEntry();
-                // TODO: check if it's OK to just get the first zip entry
-                // since the zip file should contain only one xmi file - thn
-                if (entry != null) {
-                    url = makeZipEntryUrl(url, entry.getName());
+        
+        Collection elements = 
+            Model.getUmlFactory().getExtentPackages(publicId.toExternalForm());
+        if (elements == null) {
+            ZipInputStream zis = null;
+            try {
+                XmiReader xmiReader = Model.getXmiReader();
+                if (url.getPath().toLowerCase().endsWith(".zip")) {
+                    zis = new ZipInputStream(url.openStream());
+                    ZipEntry entry = zis.getNextEntry();
+                    // TODO: check if it's OK to just get the first zip entry
+                    // since the zip file should contain only one xmi file - 
thn
+                    if (entry != null) {
+                        url = makeZipEntryUrl(url, entry.getName());
+                    }
+                    zis.close();
                 }
-                zis.close();
+                InputSource inputSource = new 
InputSource(url.toExternalForm());
+                inputSource.setPublicId(publicId.toString());
+                elements = xmiReader.parse(inputSource, true);
+            } catch (UmlException e) {
+                throw new ProfileException("Error loading profile XMI file ", 
e);
+            } catch (IOException e) {
+                throw new ProfileException("I/O error loading profile XMI ", 
e);
             }
-            InputSource inputSource = new InputSource(url.toExternalForm());
-            inputSource.setPublicId(publicId.toString());
-            elements = xmiReader.parse(inputSource, true);
-            return elements;
-        } catch (UmlException e) {
-            throw new ProfileException("Error loading profile XMI file ", e);
-        } catch (IOException e) {
-            throw new ProfileException("I/O error loading profile XMI ", e);
         }
+        return elements;
     }
 
     /**

Modified: 
trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/UmlFactoryEUMLImpl.java
Url: 
http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/UmlFactoryEUMLImpl.java?view=diff&pathrev=18282&r1=18281&r2=18282
==============================================================================
--- 
trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/UmlFactoryEUMLImpl.java
        (original)
+++ 
trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/UmlFactoryEUMLImpl.java
        2010-04-18 01:50:37-0700
@@ -16,6 +16,7 @@
 package org.argouml.model.euml;
 
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
@@ -629,4 +630,9 @@
         }
     }
 
+    public Collection getExtentPackages(String extentName) {
+        // TODO: Auto-generated method stub
+        return null;
+    }
+
 }

Modified: 
trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/MDRModelImplementation.java
Url: 
http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/MDRModelImplementation.java?view=diff&pathrev=18282&r1=18281&r2=18282
==============================================================================
--- 
trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/MDRModelImplementation.java
      (original)
+++ 
trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/MDRModelImplementation.java
      2010-04-18 01:50:37-0700
@@ -348,6 +348,10 @@
         return Collections.unmodifiableSet(extents.keySet());
     }
     
+    public UmlPackage getExtent(String name) {
+        return (UmlPackage) repository.getExtent(name);
+    }
+    
     boolean isReadOnly(Object extent) {
         synchronized (extents) {
             Extent result = extents.get(extent);

Modified: 
trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/UmlFactoryMDRImpl.java
Url: 
http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/UmlFactoryMDRImpl.java?view=diff&pathrev=18282&r1=18281&r2=18282
==============================================================================
--- 
trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/UmlFactoryMDRImpl.java
   (original)
+++ 
trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/UmlFactoryMDRImpl.java
   2010-04-18 01:50:37-0700
@@ -39,6 +39,7 @@
 package org.argouml.model.mdr;
 
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
@@ -1617,5 +1618,13 @@
             throw new InvalidElementException(e);
         }
     }
+    
+    public Collection getExtentPackages(String name) {
+        org.omg.uml.UmlPackage pkg = modelImpl.getExtent(name);
+        if (pkg == null) {
+            return null;
+        }
+        return pkg.getModelManagement().getUmlPackage().refAllOfType();
+    }
 
 }

Modified: 
trunk/src/argouml-core-model/src/org/argouml/model/ModelImplementation.java
Url: 
http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-model/src/org/argouml/model/ModelImplementation.java?view=diff&pathrev=18282&r1=18281&r2=18282
==============================================================================
--- trunk/src/argouml-core-model/src/org/argouml/model/ModelImplementation.java 
(original)
+++ trunk/src/argouml-core-model/src/org/argouml/model/ModelImplementation.java 
2010-04-18 01:50:37-0700
@@ -39,7 +39,6 @@
 package org.argouml.model;
 
 import java.io.OutputStream;
-import java.io.Writer;
 
 
 

Modified: trunk/src/argouml-core-model/src/org/argouml/model/UmlFactory.java
Url: 
http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-model/src/org/argouml/model/UmlFactory.java?view=diff&pathrev=18282&r1=18281&r2=18282
==============================================================================
--- trunk/src/argouml-core-model/src/org/argouml/model/UmlFactory.java  
(original)
+++ trunk/src/argouml-core-model/src/org/argouml/model/UmlFactory.java  
2010-04-18 01:50:37-0700
@@ -38,6 +38,7 @@
 
 package org.argouml.model;
 
+import java.util.Collection;
 
 /**
  * The interface for the UmlFactory.
@@ -174,4 +175,14 @@
      */
     boolean isRemoved(Object o);
 
+    /**
+     * Get the top level packages (typically just a single Model) for the given
+     * extent if it is loaded. Returns null if the extent doesn't exist and an
+     * empty collection if it exists, but contains no packages.
+     * 
+     * @param extentName the extent name (typically the public ID or URL of the
+     *            file which is used for references)
+     * @return a collection of packages if the extent exists, otherwise null
+     */
+    Collection getExtentPackages(String extentName);
 }

------------------------------------------------------
http://argouml.tigris.org/ds/viewMessage.do?dsForumId=5905&dsMessageId=2587674

To unsubscribe from this discussion, e-mail: 
[[email protected]].

Reply via email to