diff --git a/com.example.odata.profile.utils/src/som/odata/profile/utils/ODataDefaultProfileUtils.java b/com.example.odata.profile.utils/src/som/odata/profile/utils/ODataDefaultProfileUtils.java index cb31618..b048e62 100644 --- a/com.example.odata.profile.utils/src/som/odata/profile/utils/ODataDefaultProfileUtils.java +++ b/com.example.odata.profile.utils/src/som/odata/profile/utils/ODataDefaultProfileUtils.java @@ -1,15 +1,95 @@ package som.odata.profile.utils; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.ecore.resource.Resource; +import org.eclipse.emf.ecore.util.EcoreUtil; import org.eclipse.uml2.uml.AggregationKind; +import org.eclipse.uml2.uml.Class; import org.eclipse.uml2.uml.Classifier; import org.eclipse.uml2.uml.DataType; +import org.eclipse.uml2.uml.Enumeration; import org.eclipse.uml2.uml.Generalization; import org.eclipse.uml2.uml.Package; +import org.eclipse.uml2.uml.PrimitiveType; +import org.eclipse.uml2.uml.Profile; import org.eclipse.uml2.uml.Property; import org.eclipse.uml2.uml.Stereotype; +import org.eclipse.uml2.uml.UMLPackage; import org.eclipse.uml2.uml.util.UMLUtil; public class ODataDefaultProfileUtils { + + public static void applyODataProfile(Resource modelResource, Resource profileResource) { + List packages = new ArrayList(); + populatePackageList(modelResource, packages); + applyODataStereotypes(profileResource, packages); + resolveBaseType(packages); + } + + private static void populatePackageList(Resource resource, List packages) { + for (EObject eObject : resource.getContents()) { + if (eObject instanceof Package) { + packages.add((Package) eObject); + } + } + } + + private static void applyODataStereotypes(Resource profileResource, List packages) { + for (Package pkg : packages) { + + Profile profile = (Profile) EcoreUtil + .getObjectByType(profileResource.getContents(), + UMLPackage.Literals.PROFILE); + + pkg.applyProfile(profile); + ODataDefaultProfileUtils.applyODServiceStereotype(pkg); + for (Iterator it = pkg.eAllContents(); it.hasNext();) { + EObject child = it.next(); + if (child instanceof Class) { + Class clazz = (Class) child; + ODataDefaultProfileUtils.applyODEntityType(clazz); + ODataDefaultProfileUtils.applyODEntitySet(clazz); + + } + if (child instanceof Property) { + Property property = (Property) child; + ODataDefaultProfileUtils.applyODProperty(property); + ODataDefaultProfileUtils.applyODataNavigationProperty(property); + ODataDefaultProfileUtils.applyODataNavigationPropertyBinding(property); + + } + if(child instanceof DataType){ + DataType dataType = (DataType) child; + if(child instanceof PrimitiveType) + ODataDefaultProfileUtils.applyODPrimitiveType(dataType); + else + if (child instanceof Enumeration) + ODataDefaultProfileUtils.applyODEnumType(dataType); + else + ODataDefaultProfileUtils.applyODComplexType(dataType); + } + + } + } + } + + private static void resolveBaseType(List packages) { + //resolve basetype + for (Package pkg : packages) { + for (Iterator it = pkg.eAllContents(); it.hasNext();) { + EObject child = it.next(); + if (child instanceof Class ) { + Class clazz = (Class) child; + ODataDefaultProfileUtils.resolveBaseType(clazz); + + } + } + } + } public static void applyODServiceStereotype(Package pkg) { Stereotype odService = pkg.getApplicableStereotype("ODataProfile::ODService"); diff --git a/com.example.odata.profile.utils/src/som/odata/profile/utils/popup/actions/AutoApplyProfileAction.java b/com.example.odata.profile.utils/src/som/odata/profile/utils/popup/actions/AutoApplyProfileAction.java index 312bb22..2d6840e 100644 --- a/com.example.odata.profile.utils/src/som/odata/profile/utils/popup/actions/AutoApplyProfileAction.java +++ b/com.example.odata.profile.utils/src/som/odata/profile/utils/popup/actions/AutoApplyProfileAction.java @@ -1,14 +1,10 @@ package som.odata.profile.utils.popup.actions; import java.io.IOException; -import java.util.ArrayList; import java.util.Collections; -import java.util.Iterator; -import java.util.List; import org.eclipse.core.resources.IFile; import org.eclipse.emf.common.util.URI; -import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.emf.ecore.resource.ResourceSet; import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl; @@ -19,13 +15,6 @@ import org.eclipse.ui.IActionDelegate; import org.eclipse.ui.IObjectActionDelegate; import org.eclipse.ui.IWorkbenchPart; -import org.eclipse.uml2.uml.Class; -import org.eclipse.uml2.uml.DataType; -import org.eclipse.uml2.uml.Enumeration; -import org.eclipse.uml2.uml.Package; -import org.eclipse.uml2.uml.PrimitiveType; -import org.eclipse.uml2.uml.Profile; -import org.eclipse.uml2.uml.Property; import som.odata.profile.utils.ODataDefaultProfileUtils; @@ -54,59 +43,16 @@ public void setActivePart(IAction action, IWorkbenchPart targetPart) { */ public void run(IAction action) { ResourceSet resourceSet = new ResourceSetImpl(); - Resource resource = resourceSet.getResource(URI.createPlatformResourceURI(file.getFullPath().toString(), true), true); - List packages = new ArrayList(); - for (EObject eObject : resource.getContents()) { - if (eObject instanceof Package) { - packages.add((Package) eObject); - } - } - for (Package pkg : packages) { - // pathmap://ODA_PROFILES/odata.profile.uml#_p6kjUO-pEeaLcvwqpORGRg - Resource profileResource = resourceSet.getResource(URI.createURI("pathmap://ODA_PROFILES/odata.profile.uml"), true); - Profile profile = (Profile) profileResource.getEObject("_pWtvsO-mEeaLcvwqpORGRg"); - - pkg.applyProfile(profile); - ODataDefaultProfileUtils.applyODServiceStereotype(pkg); - for (Iterator it = pkg.eAllContents(); it.hasNext();) { - EObject child = it.next(); - if (child instanceof Class) { - Class clazz = (Class) child; - ODataDefaultProfileUtils.applyODEntityType(clazz); - ODataDefaultProfileUtils.applyODEntitySet(clazz); - - } - if (child instanceof Property) { - Property property = (Property) child; - ODataDefaultProfileUtils.applyODProperty(property); - ODataDefaultProfileUtils.applyODataNavigationProperty(property); - ODataDefaultProfileUtils.applyODataNavigationPropertyBinding(property); - - } - if(child instanceof DataType){ - DataType dataType = (DataType) child; - if(child instanceof PrimitiveType) - ODataDefaultProfileUtils.applyODPrimitiveType(dataType); - else - if (child instanceof Enumeration) - ODataDefaultProfileUtils.applyODEnumType(dataType); - else - ODataDefaultProfileUtils.applyODComplexType(dataType); - } - - } - } - //resolve basetype - for (Package pkg : packages) { - for (Iterator it = pkg.eAllContents(); it.hasNext();) { - EObject child = it.next(); - if (child instanceof Class ) { - Class clazz = (Class) child; - ODataDefaultProfileUtils.resolveBaseType(clazz); - - } - } - } + Resource modelResource = resourceSet.getResource(URI.createPlatformResourceURI(file.getFullPath().toString(), true), true); + // pathmap://ODA_PROFILES/odata.profile.uml#_p6kjUO-pEeaLcvwqpORGRg + Resource profileResource = resourceSet.getResource(URI.createURI("pathmap://ODA_PROFILES/odata.profile.uml").appendFragment("_pWtvsO-mEeaLcvwqpORGRg"), true); + ODataDefaultProfileUtils.applyODataProfile(modelResource, profileResource); + save(modelResource); + } + + + + private void save(Resource resource) { try { resource.save(Collections.emptyMap()); } catch (IOException e) {