svn commit: r17439 - trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/ExtensionMechanismsHelperEUMLImpl.java

Thomas Neustupny <[email protected]>
Newsgroups gmane.comp.lang.uml.argouml.cvs
Message-ID <[email protected]>
Author: thn
Date: 2009-10-31 12:28:01-0700
New Revision: 17439

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

Log:
implement some more eUML methods

Modified: trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/ExtensionMechanismsHelperEUMLImpl.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/ExtensionMechanismsHelperEUMLImpl.java?view=diff&pathrev=17439&r1=17438&r2=17439
==============================================================================
--- trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/ExtensionMechanismsHelperEUMLImpl.java	(original)
+++ trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/ExtensionMechanismsHelperEUMLImpl.java	2009-10-31 12:28:01-0700
@@ -65,22 +65,9 @@
 
     public void addBaseClass(Object handle, Object baseClass) {
         if (handle instanceof Stereotype) {
-            Profile profile = (Profile) modelImpl.getFacade().getRoot(handle);
-            org.eclipse.uml2.uml.Class metaclass = null;
-            if (profile != null && baseClass instanceof String) {
-                URI uri = URI.createURI(UMLResource.UML_METAMODEL_URI);
-                ResourceSet rs = modelImpl.getEditingDomain().getResourceSet();
-                // this line takes long on first call: (put it elsewhere?)
-                Resource res = rs.getResource(uri, true);
-                Model m = (Model) EcoreUtil.getObjectByType(res.getContents(),
-                        UMLPackage.Literals.PACKAGE);
-                metaclass = (org.eclipse.uml2.uml.Class) m
-                        .getOwnedType((String) baseClass);
-            } else if (profile != null
-                    && baseClass instanceof org.eclipse.uml2.uml.Class) {
-                metaclass = (org.eclipse.uml2.uml.Class) baseClass;
-            }
-            if (metaclass != null) {
+            org.eclipse.uml2.uml.Class metaclass = getMetaclass(baseClass);
+            Profile profile = ((Stereotype) handle).getProfile();
+            if (metaclass != null && profile != null) {
                 profile.createMetaclassReference(metaclass);
                 Stereotype st = (Stereotype) handle;
                 st.createExtension(metaclass, false);
@@ -160,8 +147,8 @@
         if (models != null) {
             for (Object ns : models) {
                 if (ns instanceof Profile) {
-                    Iterator iter =
-                        ((Profile) ns).getOwnedStereotypes().iterator();
+                    Iterator iter = ((Profile) ns).getOwnedStereotypes()
+                            .iterator();
                     while (iter.hasNext()) {
                         l.add((Stereotype) iter.next());
                     }
@@ -188,12 +175,27 @@
 
     public boolean isValidStereotype(Object theModelElement,
             Object theStereotype) {
-        // TODO: Auto-generated method stub
+        if (theModelElement instanceof Element
+                && theStereotype instanceof Stereotype) {
+            return ((Element) theModelElement)
+                    .isStereotypeApplicable((Stereotype) theStereotype);
+        }
         return false;
     }
 
     public void removeBaseClass(Object handle, Object baseClass) {
-        // TODO: Auto-generated method stub
+        if (handle instanceof Stereotype) {
+            org.eclipse.uml2.uml.Class metaclass = getMetaclass(baseClass);
+            Profile profile = ((Stereotype) handle).getProfile();
+            if (metaclass != null && profile != null) {
+                Stereotype st = (Stereotype) handle;
+                st.getExtension(metaclass.getName());
+                // TODO: remove extension
+                return;
+            }
+        }
+        throw new IllegalArgumentException(
+                "Not a Stereotype or illegal base class"); //$NON-NLS-1$
     }
 
     public void removeTaggedValue(Object handle, Object taggedValue) {
@@ -231,4 +233,20 @@
         }
         return result;
     }
+
+    private org.eclipse.uml2.uml.Class getMetaclass(Object baseClass) {
+        org.eclipse.uml2.uml.Class metaclass = null;
+        if (baseClass instanceof String) {
+            URI uri = URI.createURI(UMLResource.UML_METAMODEL_URI);
+            ResourceSet rs = modelImpl.getEditingDomain().getResourceSet();
+            Resource res = rs.getResource(uri, true);
+            Model m = (Model) EcoreUtil.getObjectByType(res.getContents(),
+                    UMLPackage.Literals.PACKAGE);
+            metaclass = (org.eclipse.uml2.uml.Class) m
+                    .getOwnedType((String) baseClass);
+        } else if (baseClass instanceof org.eclipse.uml2.uml.Class) {
+            metaclass = (org.eclipse.uml2.uml.Class) baseClass;
+        }
+        return metaclass;
+    }
 }

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

To unsubscribe from this discussion, e-mail: [[email protected]].
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.