svn commit: r13216 - trunk/src/model-mdr/src/org/argouml/model/mdr

[email protected]
Newsgroups gmane.comp.lang.uml.argouml.cvs
Message-ID <[email protected]>
Author: mvw
Date: 2007-08-03 07:51:01-0700
New Revision: 13216

Modified:
   trunk/src/model-mdr/src/org/argouml/model/mdr/CoreHelperMDRImpl.java
   trunk/src/model-mdr/src/org/argouml/model/mdr/ModelManagementHelperMDRImpl.java

Log:
Trying to complete these difficult functions. 

In preparation of issue 4395.

Modified: trunk/src/model-mdr/src/org/argouml/model/mdr/CoreHelperMDRImpl.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/model-mdr/src/org/argouml/model/mdr/CoreHelperMDRImpl.java?view=diff&rev=13216&p1=trunk/src/model-mdr/src/org/argouml/model/mdr/CoreHelperMDRImpl.java&p2=trunk/src/model-mdr/src/org/argouml/model/mdr/CoreHelperMDRImpl.java&r1=13215&r2=13216
==============================================================================
--- trunk/src/model-mdr/src/org/argouml/model/mdr/CoreHelperMDRImpl.java	(original)
+++ trunk/src/model-mdr/src/org/argouml/model/mdr/CoreHelperMDRImpl.java	2007-08-03 07:51:01-0700
@@ -403,6 +403,23 @@
     }
 
 
+    /*
+     * @see org.argouml.model.CoreHelper#getParent(java.lang.Object)
+     */
+    public Collection<GeneralizableElement> getParent(
+            Object generalizableElement) {
+        if (!(generalizableElement instanceof GeneralizableElement)) {
+            throw new IllegalArgumentException();
+        }
+        Collection<Generalization> gc = 
+            ((GeneralizableElement) generalizableElement).getGeneralization();
+        Set<GeneralizableElement> result = new HashSet<GeneralizableElement>();
+        for (Generalization g : gc) {
+            result.add(g.getParent());
+        }
+        return result;
+    }
+
     public List getReturnParameters(Object operation) {
         List returnParams = new ArrayList();
         try {

Modified: trunk/src/model-mdr/src/org/argouml/model/mdr/ModelManagementHelperMDRImpl.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/model-mdr/src/org/argouml/model/mdr/ModelManagementHelperMDRImpl.java?view=diff&rev=13216&p1=trunk/src/model-mdr/src/org/argouml/model/mdr/ModelManagementHelperMDRImpl.java&p2=trunk/src/model-mdr/src/org/argouml/model/mdr/ModelManagementHelperMDRImpl.java&r1=13215&r2=13216
==============================================================================
--- trunk/src/model-mdr/src/org/argouml/model/mdr/ModelManagementHelperMDRImpl.java	(original)
+++ trunk/src/model-mdr/src/org/argouml/model/mdr/ModelManagementHelperMDRImpl.java	2007-08-03 07:51:01-0700
@@ -41,8 +41,10 @@
 import org.argouml.model.InvalidElementException;
 import org.argouml.model.ModelManagementHelper;
 import org.omg.uml.behavioralelements.collaborations.Collaboration;
+import org.omg.uml.behavioralelements.commonbehavior.Instance;
 import org.omg.uml.foundation.core.BehavioralFeature;
 import org.omg.uml.foundation.core.Classifier;
+import org.omg.uml.foundation.core.GeneralizableElement;
 import org.omg.uml.foundation.core.ModelElement;
 import org.omg.uml.foundation.core.Namespace;
 import org.omg.uml.foundation.core.Permission;
@@ -562,10 +564,64 @@
         throw new IllegalArgumentException("handle: " + handle);
     }
 
+    public Collection<ModelElement> getContents(Object modelelement) {
+        Set<ModelElement> results = new HashSet<ModelElement>();
+        if (modelelement == null) {
+            return results;
+        }
+
+        /*
+         * For a Package: <pre>
+         * [1] The operation contents results in a Set containing 
+         * the ModelElements owned by or imported by the Package.
+         * contents : Set(ModelElement)
+         * contents = self.ownedElement->union(self.importedElement)
+         * </pre>
+         * For a Subsystem: <pre>
+         * [2] The operation contents results in a Set containing 
+         * the ModelElements owned by or imported by the Subsystem.
+         *   contents : Set(ModelElement)
+         *   contents = self.ownedElement->union(self.importedElement)
+         * </pre>
+         */
+        if (modelelement instanceof UmlPackage) {
+            Collection<ElementImport> c = 
+                ((UmlPackage) modelelement).getElementImport();
+            for (ElementImport ei : c) {
+                results.add(ei.getImportedElement());
+            }
+        }
+
+        /*
+         * For a Namespace: <pre>
+         * [1] The operation contents results in a Set containing 
+         * all ModelElements contained by the Namespace.
+         * contents : Set(ModelElement)
+         * contents = self.ownedElement -> union(self.namespace, contents)
+         * </pre> 
+         */
+        if (modelelement instanceof Namespace) {
+            results.addAll(((Namespace) modelelement).getOwnedElement());
+            Namespace ns = ((Namespace) modelelement).getNamespace();
+            if (ns != null) {
+                results.addAll(getContents(ns));
+            }
+        }
+
+        /*
+         * For a Instance: <pre>
+         * [5] The operation contents results in a Set containing all 
+         * ModelElements contained by the Instance.
+         *   contents: Set(ModelElement);
+         *   contents = self.ownedInstance->union(self.ownedLink)
+         * </pre>
+         */
+        if (modelelement instanceof Instance) {
+            results.addAll(((Instance) modelelement).getOwnedInstance());
+            results.addAll(((Instance) modelelement).getOwnedLink());
+        }
 
-    public Collection getContents(Object namespace) {
-        // TODO: Auto-generated method stub
-        return null;
+        return results;
     }
 
 
@@ -625,8 +681,8 @@
     }
 
 
-    public Collection getAllContents(Object pack) {
-        Set results = new HashSet();
+    public Collection<ModelElement> getAllContents(Object pack) {
+        Set<ModelElement> results = new HashSet<ModelElement>();
         if (pack == null) {
             return results;
         }
@@ -643,7 +699,7 @@
          * </pre><p>
          */
         if (pack instanceof Namespace) {
-            results.addAll(((Namespace) pack).getOwnedElement());
+            results.addAll(getContents(pack));
         }
         
         /*
@@ -663,30 +719,7 @@
          *   parent = self.generalization.parent
          * </pre><p>
          */
-        if (pack instanceof Classifier) {
 
-            // Implementation from CoreHelperMDRImpl.getAllContents();
-            try {
-                Iterator it = ((Namespace) pack).getOwnedElement().iterator();
-                while (it.hasNext()) {
-                    ModelElement element = (ModelElement) it.next();
-                    if (element.getVisibility()
-                            .equals(VisibilityKindEnum.VK_PUBLIC)
-                            || element.getVisibility().equals(
-                                    VisibilityKindEnum.VK_PROTECTED)) {
-                        results.add(element);
-                    }
-                }
-                it = modelImpl.getFacade().getGeneralizations(pack).iterator();
-                while (it.hasNext()) {
-                    results.addAll(getAllContents(it.next()));
-                }
-            } catch (InvalidObjectException e) {
-                throw new InvalidElementException(e);
-            }
-            
-        }
-        
         /*
          * For a Package:
          * <pre>
@@ -714,12 +747,25 @@
          *                         re.elementImport.visibility = #protected))
          * </pre>
          */
-        if (pack instanceof Package) {
-            // TODO: Not implemented
-            throw new RuntimeException("Not implement - getAllContents for: "
-                    + pack);
+
+        if (pack instanceof Classifier || pack instanceof Package) {
+            Collection<GeneralizableElement> ges = 
+                modelImpl.getCoreHelper().getParent(pack);
+            Collection<ModelElement> allContents = new HashSet<ModelElement>();
+            for (GeneralizableElement ge : ges) {
+                allContents.addAll(getAllContents(ge));
+            }
+            for (ModelElement element : allContents) {
+                if (element.getVisibility()
+                        .equals(VisibilityKindEnum.VK_PUBLIC)
+                        || element.getVisibility().equals(
+                                VisibilityKindEnum.VK_PROTECTED)) {
+                    results.add(element);
+                }
+            }
         }
         
+        
         /*
          * For a Collaboration:
          * <pre>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.