Author: tfmorris
Date: 2008-05-04 13:26:30-0700
New Revision: 14615

Modified:
   
trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/XmiReferenceResolverImpl.java

Log:
Issue 5064 - Fix handling of profiles that refer to other profiles.  Revert 
xmi.id changes to Java profile.

Modified: 
trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/XmiReferenceResolverImpl.java
Url: 
http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/XmiReferenceResolverImpl.java?view=diff&rev=14615&p1=trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/XmiReferenceResolverImpl.java&p2=trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/XmiReferenceResolverImpl.java&r1=14614&r2=14615
==============================================================================
--- 
trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/XmiReferenceResolverImpl.java
    (original)
+++ 
trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/XmiReferenceResolverImpl.java
    2008-05-04 13:26:30-0700
@@ -43,6 +43,7 @@
 import org.apache.log4j.Logger;
 import org.netbeans.api.xmi.XMIInputConfig;
 import org.netbeans.lib.jmi.xmi.XmiContext;
+import org.omg.uml.foundation.core.ModelElement;
 
 /**
  * Custom resolver to use with XMI reader.
@@ -161,7 +162,8 @@
      *            referenced object
      */
     @Override
-    public void register(String systemId, String xmiId, RefObject object) {
+    public void register(final String systemId, final String xmiId, 
+            final RefObject object) {
         if (LOG.isDebugEnabled()) {
             LOG.debug("Registering XMI ID '" + xmiId 
                     + "' in system ID '" + systemId 
@@ -183,18 +185,19 @@
             }
         }
 
-        if (profile) {
-            systemId = modelPublicId;
-        } else if (systemId == topSystemId) {
-            systemId = null;
+        String resolvedSystemId = systemId;
+        if (profile && systemId.equals(topSystemId)) {
+            resolvedSystemId = modelPublicId;
+        } else if (systemId.equals(topSystemId)) {
+            resolvedSystemId = null;
         } else if (reverseUrlMap.get(systemId) != null) {
-            systemId = reverseUrlMap.get(systemId);
+            resolvedSystemId = reverseUrlMap.get(systemId);
         } else {
             LOG.debug("Unable to map systemId - " + systemId);
         }
         
         String key;
-        if (systemId == null || "".equals(systemId)) {
+        if (resolvedSystemId == null || "".equals(resolvedSystemId)) {
             // No # here because PGML parser needs bare UUID/xmi.id
             key = xmiId;            
         } else {
@@ -203,15 +206,18 @@
 
         if (!idToObjects.containsKey(key) 
                 && !objectsToId.containsKey(object.refMofId())) {
-            super.register(systemId, xmiId, object);
+            super.register(resolvedSystemId, xmiId, object);
             idToObjects.put(key, object);
             objectsToId.put(object.refMofId(),
-                    new XmiReference(systemId, xmiId));
+                    new XmiReference(resolvedSystemId, xmiId));
         } else {
             if (idToObjects.containsKey(key) 
                     && idToObjects.get(key) != object) {
+                ((ModelElement) idToObjects.get(key)).getName();
                 LOG.error("Collision - multiple elements with same xmi.id : "
                         + xmiId);
+                throw new IllegalStateException(
+                        "Multiple elements with same xmi.id");
             }
             if (objectsToId.containsKey(object.refMofId())) {
                 // For now just skip registering this and ignore the request, 

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

Reply via email to