Author: tfmorris
Date: 2010-04-08 16:33:06-0700
New Revision: 18231

Modified:
   
trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/FacadeEUMLImpl.java

Log:
ArgoEclipse merge.  Many small fixes and additional implementations.

Modified: 
trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/FacadeEUMLImpl.java
Url: 
http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/FacadeEUMLImpl.java?view=diff&pathrev=18231&r1=18230&r2=18231
==============================================================================
--- 
trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/FacadeEUMLImpl.java
    (original)
+++ 
trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/FacadeEUMLImpl.java
    2010-04-08 16:33:06-0700
@@ -1,13 +1,16 @@
-/* $Id$
- *****************************************************************************
- * Copyright (c) 2009-2010 Contributors - see below
+// $Id$
+/*******************************************************************************
+ * Copyright (c) 2007,2010 Tom Morris and other contributors
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
+ *    Tom Morris - initial implementation
+ *    Bogdan Pistol - initial implementation
  *    Bob Tarling
+ 
  *****************************************************************************
  *
  * Some portions of this file was previously release using the BSD License:
@@ -49,11 +52,15 @@
 
 import org.apache.log4j.Logger;
 import org.argouml.model.Facade;
+import org.eclipse.emf.common.notify.Notifier;
 import org.eclipse.emf.common.util.EList;
 import org.eclipse.emf.common.util.Enumerator;
+import org.eclipse.emf.common.util.TreeIterator;
+import org.eclipse.emf.common.util.URI;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.EStructuralFeature;
 import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.util.EcoreUtil;
 import org.eclipse.uml2.uml.Abstraction;
 import org.eclipse.uml2.uml.Action;
 import org.eclipse.uml2.uml.ActivityPartition;
@@ -134,10 +141,12 @@
 import org.eclipse.uml2.uml.StructuralFeature;
 import org.eclipse.uml2.uml.TemplateBinding;
 import org.eclipse.uml2.uml.TemplateParameter;
+import org.eclipse.uml2.uml.TemplateParameterSubstitution;
 import org.eclipse.uml2.uml.TemplateableElement;
 import org.eclipse.uml2.uml.TimeEvent;
 import org.eclipse.uml2.uml.Transition;
 import org.eclipse.uml2.uml.Trigger;
+import org.eclipse.uml2.uml.Type;
 import org.eclipse.uml2.uml.TypedElement;
 import org.eclipse.uml2.uml.UMLPackage;
 import org.eclipse.uml2.uml.Usage;
@@ -145,6 +154,7 @@
 import org.eclipse.uml2.uml.ValueSpecification;
 import org.eclipse.uml2.uml.Vertex;
 import org.eclipse.uml2.uml.VisibilityKind;
+import org.eclipse.uml2.uml.resource.UMLResource;
 
 
 /**
@@ -277,12 +287,12 @@
         return null;
     }
 
-    public Collection getAssociationEnds(Object handle) {
+    public Collection<Property> getAssociationEnds(Object handle) {
         if (!(handle instanceof Classifier)) {
             throw new IllegalArgumentException(
                     "handle must be instance of Classifier"); //$NON-NLS-1$
         }
-        Collection result = new ArrayList();
+        Collection<Property> result = new ArrayList<Property>();
         for (Property p : ((Classifier) handle).getAttributes()) {
             if (p.getAssociation() != null) {
                 result.add(p);
@@ -295,7 +305,7 @@
         // TODO: In UML 2.0, ClassifierRole, AssociationRole, and
         // AssociationEndRole have been replaced by the internal 
         // structure of the Collaboration
-        return Collections.EMPTY_SET;
+        return Collections.emptySet();
     }
 
     public List<Property> getAttributes(Object handle) {
@@ -319,26 +329,19 @@
         if (handle instanceof Extend) {
             return ((Extend) handle).getExtendedCase();
         } else if (handle instanceof Include) {
-            return ((Include) handle).getAddition();
+            return ((Include) handle).getIncludingCase();
         }
         throw new NotYetImplementedException();
     }
 
     public Collection<String> getBaseClasses(Object handle) {
-        if (isAStereotype(handle)) {
-            // TODO: it's an implementation, but is it correct? - thn
-            EList<Class> eList =
-                ((Stereotype) handle).getAllExtendedMetaclasses();
-            ArrayList<String> list = new ArrayList<String>();
-            Iterator iter = eList.iterator();
-            while (iter.hasNext()) {
-                list.add(((Class) iter.next()).getName());
+        Collection<String> result = new ArrayList<String>();
+        for (org.eclipse.uml2.uml.Class metaclass 
+                : ((Stereotype) handle).getAllExtendedMetaclasses()) {
+            result.add(metaclass.getName());
             }
-            return list;
+        return result;
         }
-        throw new IllegalArgumentException(
-                "handle must be instance of Stereotype"); //$NON-NLS-1$
-    }
 
     public Collection getBases(Object handle) {
         throw new NotYetImplementedException();
@@ -346,16 +349,12 @@
     }
 
     public Object getBehavioralFeature(Object handle) {
-        if (!(handle instanceof Parameter)) {
-            throw new IllegalArgumentException(
-                    "handle must be instance of Parameter"); //$NON-NLS-1$
-        }
         return ((Parameter) handle).getOperation();
     }
 
     public Collection getBehaviors(Object handle) {
         // TODO:
-        return Collections.EMPTY_SET;
+        return Collections.emptySet();
     }
 
     public Object getBinding(Object handle) {
@@ -418,10 +417,6 @@
     }
 
     public Object getSpecific(Object handle) {
-        if (!(handle instanceof Generalization)) {
-            throw new IllegalArgumentException(
-                    "handle must be instance of Generalization"); //$NON-NLS-1$
-        }
         return ((Generalization) handle).getSpecific();
     }
     
@@ -430,15 +425,14 @@
     }
 
     public Object getClassifier(Object handle) {
-        Property prop = (Property) handle;
-        return prop.getType();
+        return ((Property) handle).getType();
     }
 
     public Collection getClassifierRoles(Object handle) {
         // TODO: In UML 2.0, ClassifierRole, AssociationRole, and
         // AssociationEndRole have been replaced by the internal 
         // structure of the Collaboration
-        return Collections.EMPTY_SET;
+        return Collections.emptySet();
     }
 
     public Collection getClassifiers(Object handle) {
@@ -654,7 +648,6 @@
            }
        }
        return result;
-        // throw new NotYetImplementedException();
     }
 
     public Collection getElementResidences(Object handle) {
@@ -683,9 +676,12 @@
     }
 
     public Collection getExtendedElements(Object handle) {
+//        public Collection<Element> getExtendedElements(Object handle) {
         if (!(handle instanceof Stereotype)) {
             throw new IllegalArgumentException();
         }
+        
+        // TODO: Is this returning extended elements or base classes?
         EList<Class> eList = ((Stereotype) handle).getExtendedMetaclasses();
         ArrayList<Class> list = new ArrayList<Class>();
         Iterator iter = eList.iterator();
@@ -693,6 +689,17 @@
             list.add((Class) iter.next());
         }
         return list;
+        
+        // TODO: Untested alternative to investigate
+//        Collection<Element> result = new ArrayList<Element>();
+//        TreeIterator it = 
modelImpl.getEditingDomain().getResourceSet().getAllContents();
+//        while (it.hasNext()) {
+//            Object o = it.next();
+//            if (handle.getClass().isAssignableFrom(o.getClass())) {
+//                result.add((Element) o);
+//            }
+//        }
+//        return result;
     }
 
     public Collection getExtenders(Object handle) {
@@ -704,8 +711,22 @@
         if (handle instanceof UseCase) {
             return ((UseCase) handle).getExtends();
         } else if (handle instanceof ExtensionPoint) {
-            // TODO:
-            throw new NotYetImplementedException();
+            ExtensionPoint ep = (ExtensionPoint) handle;
+            Collection<Extend> result = new ArrayList<Extend>();
+            // Can't be done in the general case of federated repositories, 
+            // but at least get what we can find for the current resource set
+            TreeIterator<Notifier> ti = 
+                ep.eResource().getResourceSet().getAllContents();            
+            while (ti.hasNext()) {
+                Notifier elem = ti.next();
+                if (elem instanceof Extend) {
+                    Extend extend = (Extend) elem;
+                    if (extend.getExtensionLocations().contains(ep)) {
+                        result.add(extend);
+                    }
+                }
+            }
+            return result;
         }
         throw new IllegalArgumentException();
     }
@@ -820,7 +841,7 @@
     public Collection getInstances(Object handle) {
         // TODO: InstanceSpecification -> Classifier association isn't
         // navigable in this direction
-        return Collections.EMPTY_SET;
+        return Collections.emptySet();
     }
 
     public Object getInteraction(Object handle) {
@@ -862,12 +883,12 @@
 
     public Collection getLinks(Object handle) {
         // TODO: no Links in UML 2
-        return Collections.EMPTY_SET;
+        return Collections.emptySet();
     }
 
     public String getLocation(Object handle) {
         // TODO: Removed from UML2
-        return "";
+        return ""; //$NON-NLS-1$
     }
 
     public int getLower(Object handle) {
@@ -889,26 +910,31 @@
         throw new NotYetImplementedException();
     }
 
-    public Object getInnerContainingModel(Object handle) {
+    public Element getInnerContainingModel(Object handle) {
         if (!(handle instanceof Element)) {
             throw new IllegalArgumentException();
         }
-        return ((Element) handle).getModel();        
+        // TODO: What is the behavior of this in the case of nested models?
+        Element result = ((Element) handle).getModel();
+        if (result == null) {
+            result = getOutermostOwner((Element) handle);
+        }
+        return result;
+    }
+    
+    private Element getOutermostOwner(Element element) {
+        Element result = element;
+        while (result.getOwner() != null) {
+            result = result.getOwner();
+        }
+        return result;
     }
     
-    public Object getRoot(Object handle) {
+    public Element getRoot(Object handle) {
         if (!(handle instanceof Element)) {
             throw new IllegalArgumentException();
         }
-        Object root = ((Element) handle).getModel();
-        if (root == null) {
-            // root is not a model, so we climb up the owners
-            root = handle;
-            while (((Element) root).getOwner() != null) {
-                root = ((Element) root).getOwner();
-            }
-        }
-        return root;
+        return getOutermostOwner((Element) handle);
     }
 
     public Object getModelElement(Object handle) {
@@ -962,11 +988,10 @@
         } else {
             // TODO: Some elements such as Generalization are
             // no longer named.  For a transitional period we'll
-            // return a String to debug can continue, but the
+            // return a String so debug can continue, but the
             // calling code should probably be fixed. - tfm 20070607
-            return handle.toString();
+            return getUMLClassName(handle) + " <not nameable>";
         }
-//        throw new IllegalArgumentException();
     }
 
     public Object getNamespace(Object handle) {
@@ -1045,11 +1070,11 @@
         throw new NotYetImplementedException();
     }
 
-    public Collection getOtherAssociationEnds(Object handle) {
+    public Collection<Property> getOtherAssociationEnds(Object handle) {
         if (!isAAssociationEnd(handle)) {
             throw new IllegalArgumentException();
         }
-        List l = new ArrayList(
+        Collection<Property> l = new ArrayList<Property>(
                 ((Property) handle).getAssociation().getMemberEnds());
         l.remove(handle);
         return l;
@@ -1262,7 +1287,10 @@
 
     }
 
-    public Collection getSources(Object handle) {
+    public Collection getSources(Object element) {
+        if (element instanceof DirectedRelationship) {
+            return ((DirectedRelationship) element).getSources();
+        }
         throw new NotYetImplementedException();
 
     }
@@ -1292,7 +1320,7 @@
         if (handle instanceof Property) {
             // TODO: unimplemented
 //          return ((Property) handle).gets
-            return Collections.EMPTY_SET;
+            return Collections.emptySet();
         } else if (handle instanceof org.eclipse.uml2.uml.Class) {
             return ((org.eclipse.uml2.uml.Class) 
handle).getInterfaceRealizations();
         }
@@ -1304,7 +1332,7 @@
         throw new NotYetImplementedException();
     }
 
-    public Object getStateMachine(Object handle) {
+    public StateMachine getStateMachine(Object handle) {
         if (handle instanceof Pseudostate) {
             return ((Pseudostate) handle).getStateMachine();
         } else if (handle instanceof Region) {
@@ -1317,10 +1345,7 @@
         throw new NotYetImplementedException();
     }
 
-    public Collection getStereotypes(Object handle) {
-        if (!(handle instanceof Element)) {
-            throw new IllegalArgumentException();
-        }
+    public Collection<Stereotype> getStereotypes(Object handle) {
         return ((Element) handle).getAppliedStereotypes();
     }
 
@@ -1381,7 +1406,7 @@
 
     }
 
-    public Collection getTagDefinitions(Object handle) {
+    public Collection<Property> getTagDefinitions(Object handle) {
         if (!(handle instanceof Stereotype)) {
             throw new IllegalArgumentException();
         }
@@ -1708,7 +1733,7 @@
     }
 
     public boolean isACreateAction(Object handle) {
-        // Double check - tfm
+        // TODO: Double check - tfm
         return handle instanceof CreateObjectAction;
     }
 
@@ -2051,7 +2076,8 @@
     }
 
     public boolean isATemplateArgument(Object handle) {
-        throw new NotYetImplementedException();
+        // TODO: Not exact, but close
+        return handle instanceof TemplateParameterSubstitution;
     }
 
     public boolean isATemplateParameter(Object handle) {
@@ -2234,10 +2260,13 @@
     }
 
     public boolean isStereotype(Object handle, String stereotypename) {
-        throw new NotYetImplementedException();
+        return ((Element) handle).getAppliedStereotype(stereotypename) != null;
     }
 
     public boolean isSynch(Object handle) {
+        if (handle instanceof CallAction) {
+            return ((CallAction) handle).isSynchronous();
+        }
         throw new NotYetImplementedException();
     }
 
@@ -2279,7 +2308,7 @@
         Namespace ns = (Namespace) handle;
 
         for (;;) {
-            int idx = sb.indexOf("::");
+            int idx = sb.indexOf("::"); //$NON-NLS-1$
 
             if (idx != -1) {
                 NamedElement subspace = getElementByName(ns, sb.substring(
@@ -2336,19 +2365,42 @@
     }
 
     public String[] getMetatypeNames() {
-        // TODO: Auto-generated method stub
-        throw new NotYetImplementedException();
+        Resource resource = modelImpl
+                .getEditingDomain()
+                .getResourceSet()
+                .getResource(URI.createURI(UMLResource.UML_METAMODEL_URI), 
true);
+        
+        Model metamodel = (Model) EcoreUtil.getObjectByType(resource
+                .getContents(), UMLPackage.Literals.PACKAGE);
+        
+        List<String> result = new ArrayList<String>();
+        for (Type t : metamodel.getOwnedTypes()) {
+            result.add(t.getName());
+        }
+        return result.toArray(new String[0]);
     }
 
     public boolean isA(String metatypeName, Object element) {
         return getUMLClassName(element).equals(metatypeName);
     }
 
-    public Collection getTargets(Object handle) {
-        // TODO: Auto-generated method stub
-        throw new NotYetImplementedException();
+    Namespace getImportingNamespace(Object element) {
+        if (element instanceof PackageImport) {
+            return ((PackageImport) element).getImportingNamespace();
+        } else if (element instanceof ElementImport) {
+            return ((ElementImport) element).getImportingNamespace();
+        }
+        throw new IllegalArgumentException("Element must be one of 
PackageImport or ElementImport");
+    }
+    
+    org.eclipse.uml2.uml.Package getImportedPackage(Object element) {
+        return ((PackageImport) element).getImportedPackage();
     }
 
+    public Collection<Element> getTargets(Object element) {
+        return ((DirectedRelationship) element).getTargets();
+    }
+    
     public boolean isADirectedRelationship(Object handle) {
         return handle instanceof DirectedRelationship;
     }

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

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

Reply via email to