Go to the documentation of this file.00001 package org.best_of_robotics.transform.ros.to.cplusplus;
00002
00003 import java.io.IOException;
00004 import java.net.MalformedURLException;
00005 import java.net.URI;
00006 import java.net.URISyntaxException;
00007 import java.net.URL;
00008
00009 import org.best_of_robotics.transform.service.parameter.IEglTransformParameter;
00010 import org.eclipse.core.runtime.FileLocator;
00011 import org.eclipse.epsilon.common.parse.problem.ParseProblem;
00012 import org.eclipse.epsilon.egl.EglFileGeneratingTemplateFactory;
00013 import org.eclipse.epsilon.egl.EglTemplateFactoryModuleAdapter;
00014 import org.eclipse.epsilon.egl.exceptions.EglRuntimeException;
00015 import org.eclipse.epsilon.emc.emf.EmfModel;
00016 import org.eclipse.epsilon.eol.IEolExecutableModule;
00017 import org.eclipse.epsilon.eol.dt.ExtensionPointToolNativeTypeDelegate;
00018 import org.eclipse.epsilon.eol.exceptions.EolRuntimeException;
00019 import org.eclipse.epsilon.eol.exceptions.models.EolModelLoadingException;
00020
00021 public class EGLTransformer {
00022
00023 IEglTransformParameter parameter;
00024
00025 public EGLTransformer(IEglTransformParameter param) {
00026 parameter = param;
00027
00028 }
00029
00030 public void transform()
00031 {
00032
00033 URL transformationEntry = null;
00034 try {
00035 transformationEntry = new URL(parameter.getEglTransformation());
00036 } catch (MalformedURLException e1) {
00037
00038 e1.printStackTrace();
00039 }
00040 URL resolvedTransformationURL = null;
00041 URI transformURI = null;
00042
00043 try {
00044 resolvedTransformationURL = FileLocator
00045 .resolve(transformationEntry);
00046 transformURI = resolvedTransformationURL.toURI();
00047 } catch (IOException e) {
00048 e.printStackTrace();
00049 } catch (URISyntaxException e) {
00050 e.printStackTrace();
00051 }
00052
00053
00054
00055 EglFileGeneratingTemplateFactory eglTemplateFactory = new EglFileGeneratingTemplateFactory();
00056 IEolExecutableModule eglModule = new EglTemplateFactoryModuleAdapter(
00057 eglTemplateFactory);
00058 try {
00059 eglTemplateFactory.setOutputRoot(parameter.getOutputRoot());
00060 eglModule.parse(transformURI);
00061 } catch (EglRuntimeException e2) {
00062 e2.printStackTrace();
00063 } catch (Exception e) {
00064 e.printStackTrace();
00065 }
00066
00067 if (eglModule.getParseProblems().size() > 0) {
00068 System.err.println("Parse errors occured...");
00069 for (ParseProblem problem : eglModule.getParseProblems()) {
00070 System.err.println(problem.toString());
00071 }
00072 }
00073 eglModule.getContext().getNativeTypeDelegates().add(new ExtensionPointToolNativeTypeDelegate());
00074
00075 EmfModel emfModel = new EmfModel();
00076 emfModel.setName(parameter.getSourceName());
00077 emfModel.setMetamodelUri(parameter.getSourceMetaModelURI());
00078 emfModel.setModelFile(parameter.getSourceModelFilePath());
00079 emfModel.setReadOnLoad(parameter.isSourceReadOnLoad());
00080 emfModel.setStoredOnDisposal(parameter.isSourceStoreOnDisposal());
00081 try {
00082 emfModel.load();
00083 } catch (EolModelLoadingException e) {
00084 e.printStackTrace();
00085 }
00086
00087 eglModule.getContext().getModelRepository().addModel(emfModel);
00088 try {
00089 eglModule.execute();
00090 } catch (EolRuntimeException e) {
00091 e.printStackTrace();
00092 }
00093 eglModule.getContext().getModelRepository().dispose();
00094 }
00095
00096 }