Skip to content

Instantly share code, notes, and snippets.

@valeriocos
Created February 15, 2017 20:10
Show Gist options
  • Save valeriocos/d643bff1ffa504916ac7e6be7e23ec7a to your computer and use it in GitHub Desktop.
Save valeriocos/d643bff1ffa504916ac7e6be7e23ec7a to your computer and use it in GitHub Desktop.
ATL EMFTVM query launcher
package codeskills.query;
import java.util.logging.Level;
import java.util.logging.Logger;
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.m2m.atl.emftvm.EmftvmFactory;
import org.eclipse.m2m.atl.emftvm.ExecEnv;
import org.eclipse.m2m.atl.emftvm.Metamodel;
import org.eclipse.m2m.atl.emftvm.Model;
import org.eclipse.m2m.atl.emftvm.util.DefaultModuleResolver;
import org.eclipse.m2m.atl.emftvm.util.ModuleResolver;
import org.eclipse.m2m.atl.emftvm.util.TimingData;
import codeskills.resource.ResourceManager;
public class ATLQueryLauncher {
private ExecEnv env;
private ResourceSet rs;
private Logger logger = Logger.getAnonymousLogger();
public ATLQueryLauncher() {
this.env = EmftvmFactory.eINSTANCE.createExecEnv();
this.rs = new ResourceSetImpl();
}
public boolean execute(Resource project, Resource uml, String queryPath) {
boolean isComplete = false;
//load project metamodel
Metamodel projectMetaModel = EmftvmFactory.eINSTANCE.createMetamodel();
projectMetaModel.setResource(rs.getResource(URI.createURI("http://www.designer.codeskills/data/Data"), true));
env.registerMetaModel("PRJ", projectMetaModel);
//load uml metamodel
Metamodel umlMetamodel = EmftvmFactory.eINSTANCE.createMetamodel();
umlMetamodel.setResource(rs.getResource(URI.createURI("http://www.eclipse.org/uml2/5.0.0/UML"), true));
env.registerMetaModel("UML", umlMetamodel);
Model inProjectModel = EmftvmFactory.eINSTANCE.createModel();
inProjectModel.setResource(project);
env.registerInputModel("IN1", inProjectModel);
Model inUMLModel = EmftvmFactory.eINSTANCE.createModel();
inUMLModel.setResource(uml);
env.registerInputModel("IN2", inUMLModel);
// Load and run module
ModuleResolver mr = new DefaultModuleResolver("platform:/plugin/codeskills.enduser" + ResourceManager.QUERIES, new ResourceSetImpl());
TimingData td = new TimingData();
env.loadModule(mr, queryPath);
td.finishLoading();
Object resultQuery = env.run(td);
td.finish();
if (resultQuery instanceof Boolean)
isComplete = (Boolean)resultQuery;
else
logger.log(Level.SEVERE, "[ATLQueryLauncher] Query does not return a boolean " + queryPath);
return isComplete;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment