Eclipse Community Forums
Forum Search:

Search      Help    Register    Login    Home
Home » Modeling » UML2 » Loading a UML2 model exported with MagicDraw along with profiles(Launching an atl transformation programmatically in standalone application from uml model with profiles (MagicDraw 16.6))
Loading a UML2 model exported with MagicDraw along with profiles [message #508943] Wed, 20 January 2010 14:32
Luca  is currently offline Luca
Messages: 6
Registered: October 2009
Junior Member
I'm trying to execute an atl transformation in a standalone application (clearly it works fine in eclipse...), using eclipse modeling 3.5, atl 3.0.0, uml 2.0.0 and emf 2.2.0 (the last two because the exported EMF UML2 (v.2.x) XMI models from MagicDraw 16.6 have the xmlns:uml="http://www.eclipse.org/uml2/2.0.0/UML").

I have created a java project following the "new" approach for ATL ( http://wiki.eclipse.org/ATL/Developer_Guide#ATL_Architecture and http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.m2m/org .eclipse.m2m.atl/examples/org.eclipse.m2m.atl.examples.publi c2private.ui/src/org/eclipse/m2m/atl/examples/public2private /ui/PrivatizeAction.java?root=Modeling_Project&view=mark up), namely using these imports:

import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.m2m.atl.core.ATLCoreException;
import org.eclipse.m2m.atl.core.IExtractor;
import org.eclipse.m2m.atl.core.IInjector;
import org.eclipse.m2m.atl.core.IModel;
import org.eclipse.m2m.atl.core.IReferenceModel;
import org.eclipse.m2m.atl.core.ModelFactory;
import org.eclipse.m2m.atl.core.emf.EMFExtractor;
import org.eclipse.m2m.atl.core.emf.EMFInjector;
import org.eclipse.m2m.atl.core.emf.EMFModelFactory;
import org.eclipse.m2m.atl.core.launch.ILauncher;
import org.eclipse.m2m.atl.core.service.CoreService;
import org.eclipse.m2m.atl.engine.emfvm.launch.EMFVMLauncher;
import org.eclipse.uml2.uml.Package;
import org.eclipse.uml2.uml.UMLPackage;
import org.eclipse.uml2.uml.resource.UMLResource;

I first register the package (schema), the resource factory, and the "pathmaps" for UML:
resourceSet = new ResourceSetImpl();
resourceSet.getPackageRegistry().put(UMLPackage.eNS_URI, UMLPackage.eINSTANCE);
resourceSet.getResourceFactoryRegistry().getExtensionToFacto ryMap().put(
UMLResource.FILE_EXTENSION, UMLResource.Factory.INSTANCE);

Map<URI, URI> uriMap = resourceSet.getURIConverter().getURIMap();
String umlResourcesFile = new File(
"lib/org.eclipse.uml2.uml.resources_2.0.0.v200606221411.jar").getAbsolutePath();
URI uri = URI.createURI("jar:file://" + umlResourcesFile +"!/");
uriMap.put(URI.createURI(UMLResource.LIBRARIES_PATHMAP), uri.appendSegment("libraries").appendSegment(""));
uriMap.put(URI.createURI(UMLResource.METAMODELS_PATHMAP), uri.appendSegment("metamodels").appendSegment(""));
uriMap.put(URI.createURI(UMLResource.PROFILES_PATHMAP), uri.appendSegment("profiles").appendSegment(""));

then the EMF's stuff:
CoreService.registerLauncher(new EMFVMLauncher());
CoreService.registerFactory("EMF", EMFModelFactory.class);
factory = CoreService.createModelFactory("EMF");
CoreService.registerExtractor("EMF", new EMFExtractor());
CoreService.registerInjector("EMF", new EMFInjector());
injector = CoreService.getInjector("EMF");
extractor = CoreService.getExtractor("EMF");

I load the metamodels (UML 2.0.0 and Persons, actually it's a pure example):
umlMetamodel = factory.newReferenceModel();
injector.inject(umlMetamodel, "http://www.eclipse.org/uml2/2.0.0/UML");
outputMetamodel = factory.newReferenceModel();
injector.inject(outputMetamodel, new File(metamodelsPath + "Persons.ecore").getAbsolutePath());

Then the input model:
umlModel = factory.newModel(umlMetamodel);
injector.inject(umlModel, (new File(modelsPath + "input_model.uml").getAbsolutePath()));

In this last line, I obtain the following exception:
org.eclipse.emf.ecore.xmi.PackageNotFoundException: Package with uri 'http:///schemas/MagicDrawProfile/_yTCU4AHvEd-Q248yC_s0OA/0' not found.
pointing at the bottom of the model file at the end of this line (the last in the file):
<MagicDrawProfile:auxiliaryResource xmi:id="_yZNOUgHvEd-Q248yC_s0OA" base_Element="magicdraw_uml_standard_profile_v_0001" base_Package="magicdraw_uml_standard_profile_v_0001"/>,
while at the top the namespace is:
xmlns:MagicDrawProfile="http:///schemas/MagicDrawProfile/_yTCU4AHvEd-Q248yC_s0OA/0"
and the schemaLocation:
xsi:schemaLocation="http:///schemas/MagicDrawProfile/_yTCU4AHvEd-Q248yC_s0OA/0 UML_Standard_Profile.MagicDraw_Profile.profile.uml#_yTQXUgHv Ed-Q248yC_s0OA "

I imagine this is related to the 4 profiles that are applied in the model (MagicDraw applies them, so I have the 4 files‪: UML_Standard_Profile.MagicDraw_Profile.DSL_Customization.pro file.uml, UML_Standard_Profile.MagicDraw_Profile.profile.uml, UML_Standard_Profile.UML_Standard_Profile.profile.uml, UML_Standard_Profile.Validation_Profile.profile.uml).

I suppose their nsURI are not automatically resolved, so my question is how to register them properly (I tried to follow http://wiki.eclipse.org/index.php/EMF-FAQ#How_do_I_register_ a_dynamic_package.3F, but without success...I think I miss something...)?

Thanks in advance

Luca
Previous Topic:Generalization from EClass in another Eclipse Project
Next Topic:Loading a UML2 model exported with MagicDraw along with profiles
Goto Forum:
  


Current Time: Wed Aug 27 13:08:40 EDT 2014

Powered by FUDForum. Page generated in 0.01728 seconds