Eclipse Community Forums
Forum Search:

Search      Help    Register    Login    Home
Home » Modeling » ATL » UML2 to Java Literals
UML2 to Java Literals [message #873492] Fri, 18 May 2012 11:12 Go to next message
Rogério Costa is currently offline Rogério Costa
Messages: 5
Registered: April 2012
Junior Member
By the advice of Ed Willink (thank again), I should post my last unanswered post here:
--- POST

I am developing a model-based tool, PIM -> PSM -> Code, and I am using EMF ATL to accomplish the M2M transformations. My problem is simple: My ATL mapping works betwen UML2 and Java metamodels, except in Primitive Types.

If some with more experience could look to my files and take a shot, it will help me a lot!

UML metamodel: By URI, but you could use that as reference: UML.ecore;
Java metamodel: Java-20040316.ecore; (To be built gradually);
ATL mapping: UML2JAVA.atl;

My (UML) input Model: exampleUMLModel_PIM.xmi;

My (Java) output Model: out.j2se5; ==> At line 18 it is supposed to have a Primitive Type, right?

tanks in advance


--- Continuation
This is my Atl configuration, hope this help a little more ... Should I need to register something more?


/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

public class UML2_2_JAVA extends AbstractPIMPSM_Factory
{
    private IInjector injector;
    private IExtractor extractor;
    private IReferenceModel sourceMetamodel;
    private IReferenceModel targetMetamodel;
    
    private String transformationFilepath = null;
    private String sourceMetaModelFilepath = null;
    private String targetMetaModelFilepath = null;
    private String sourceDataFilepath = null;
    private String targetDataFilepath = null;
    
    
    private IModel targetModel;
    private IModel sourceModel;
    private ModelFactory factory;
    private ILauncher launcher;
            
    public UML2_2_JAVA()
    {
        super();
    }

    
    public IModel getTargetModel()
    {
        return this.targetModel;
    }
    
           
    /// From now on, there are the functions
    public void doCore() throws ATLCoreException
    {
        CoreService.registerLauncher("EMF-specific VM", EMFVMLauncher.class);
        CoreService.registerFactory("EMF", EMFModelFactory.class); 
        CoreService.registerExtractor("EMF", EMFExtractor.class);
        CoreService.registerInjector("EMF", EMFInjector.class);
        injector = CoreService.getInjector("EMF"); 
        extractor = CoreService.getExtractor("EMF"); 			
            
        // Defaults
        this.factory = CoreService.getModelFactory("EMF");
        
        /*Resource specification*/
        Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().put("ecore", new EcoreResourceFactoryImpl());
        Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().put("xmi",  UMLResource.Factory.INSTANCE);
        Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().put(UMLResource.FILE_EXTENSION, UMLResource.Factory.INSTANCE);
        
             
        /*Type specification*/
        EPackage.Registry.INSTANCE.put(UMLPackage.eNS_URI, UMLPackage.eINSTANCE);
        EPackage.Registry.INSTANCE.put("ecore", EcorePackage.eINSTANCE);
        EPackage.Registry.INSTANCE.put("h**p://www.omg.org/spec/UML/20110701", UMLPackage.eINSTANCE);
        EPackage.Registry.INSTANCE.put("h**p://www.omg.org/spec/XMI/20110701", UMLPackage.eINSTANCE);
        
               
        Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().put("j2se5", new EcoreResourceFactoryImpl());
    }
    
    @Override
    public void doMetaModels(String sourceTargetMMPath) throws ATLCoreException
    { this.doMetaModels(sourceTargetMMPath, null); }
    
    
    
    @Override
    public void doMetaModels(String sourceMMPath, String targetMMPath) throws ATLCoreException
    {           
        // Metamodels
        this.sourceMetaModelFilepath = sourceMMPath;
        sourceMetamodel = factory.newReferenceModel();
        injector.inject(sourceMetamodel, UMLPackage.eNS_URI);
        

        if(targetMMPath != null) //This means, the metamodel is the same for both models (InputModel & OutputModel)
        {
            this.targetMetaModelFilepath =  targetMMPath;
            targetMetamodel = factory.newReferenceModel();                                              
            injector.inject(targetMetamodel, URI.createFileURI(targetMetaModelFilepath).toString());
        }
    }
    
     
    @Override
    public void doModels(String sourceDM) throws ATLCoreException
    {
         /// Creating models
        sourceModel = factory.newModel(sourceMetamodel);
       
        if(this.targetMetamodel == null)
        { targetModel = factory.newModel(this.sourceMetamodel);}
        else
        { targetModel = factory.newModel(this.targetMetamodel); }
        
        // Loading existing model
        this.sourceDataFilepath = sourceDM;
        injector.inject(sourceModel, URI.createFileURI(sourceDM).toString());         
    }
    
       
    
    public void doTrans(String transformationPath) throws ATLCoreException, MalformedURLException, IOException
    {
        // Getting launcher
        launcher = (EMFVMLauncher)CoreService.getLauncher("EMF-specific VM"); 
        launcher.initialize(Collections.<String, Object> emptyMap());

        // Launching //TODO: REVER ISTO
        launcher.addInModel(sourceModel,"IN", "UML");
        launcher.addOutModel(targetModel, "OUT", "JAVA");
        
        // the loadModule function requires an absolute path to the ASM file
        this.transformationFilepath = transformationPath;
        URL asmFile = new File(transformationPath).toURI().toURL();
        Object loadedModule = launcher.loadModule(asmFile.openStream());

        //launcher.addLibrary("libName", new File("path").toURI().toURL().openStream());
        
        Map <String, Object> optionsTransf = new  TreeMap <String, Object>();
        optionsTransf.put("showSummary", "true");
        optionsTransf.put("printExecutionTime", "true");
        optionsTransf.put("continueAfterError", "true");
        optionsTransf.put("allowInterModelReferences", "true");
        //optionsTransf.put("step", "true"); 
        launcher.launch(ILauncher.DEBUG_MODE, new NullProgressMonitor(), optionsTransf, loadedModule);           
    }
    
    
    /**
    * Saving model
    */
    public void doSave(String dataTargetfp) throws ATLCoreException
    {
        this.targetMetaModelFilepath = dataTargetfp;
        //extractor.extract(targetModel, System.out, null);
        extractor.extract(targetModel, URI.createFileURI(dataTargetfp).toString());
    }
}




Re: UML2 to Java Literals [message #873494 is a reply to message #873492] Fri, 18 May 2012 11:14 Go to previous messageGo to next message
Rogério Costa is currently offline Rogério Costa
Messages: 5
Registered: April 2012
Junior Member
Files here: h**p://dl.dropbox.com/u/5439044/stackoverflow/ATL/ATL.rar
Re: UML2 to Java Literals [message #899084 is a reply to message #873494] Mon, 30 July 2012 14:05 Go to previous message
Emwedish Endargachew is currently offline Emwedish Endargachew
Messages: 27
Registered: April 2011
Junior Member
HI Rogério Costa,

I am having similar issue with literals, can you tell me what solved your problem, it it is solved.

thanks in advance,
emwedish

[Updated on: Mon, 30 July 2012 14:06]

Report message to a moderator

Previous Topic:ATL:Package with URI not found
Next Topic:Error loading File
Goto Forum:
  


Current Time: Thu Oct 30 18:22:35 GMT 2014

Powered by FUDForum. Page generated in 0.01605 seconds
.:: Contact :: Home ::.

Powered by: FUDforum 3.0.2.
Copyright ©2001-2010 FUDforum Bulletin Board Software