package org.eclipse.gmf.tests.tr; import java.util.List; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.emf.codegen.ecore.genmodel.GenModel; import org.eclipse.emf.common.util.Diagnostic; 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.gmf.codegen.gmfgen.GenEditorGenerator; import org.eclipse.gmf.graphdef.codegen.MapModeCodeGenStrategy; import org.eclipse.gmf.internal.bridge.VisualIdentifierDispenser; import org.eclipse.gmf.internal.bridge.genmodel.BasicDiagramRunTimeModelHelper; import org.eclipse.gmf.internal.bridge.genmodel.DiagramGenModelTransformer; import org.eclipse.gmf.internal.bridge.genmodel.DiagramRunTimeModelHelper; import org.eclipse.gmf.internal.bridge.genmodel.GenModelProducer; import org.eclipse.gmf.internal.bridge.genmodel.InnerClassViewmapProducer; import org.eclipse.gmf.internal.bridge.genmodel.ModeledViewmapProducer; import org.eclipse.gmf.internal.bridge.genmodel.QVTDiagramGenModelTransformer; import org.eclipse.gmf.internal.bridge.genmodel.ViewmapProducer; import org.eclipse.gmf.internal.bridge.transform.VisualIdentifierDispenserProvider; import org.eclipse.gmf.mappings.Mapping; import org.eclipse.m2m.qvt.oml.BasicModelExtent; import org.eclipse.m2m.qvt.oml.ExecutionContextImpl; import org.eclipse.m2m.qvt.oml.ExecutionDiagnostic; /** * Utility class for tests around qvto-bridge. * * @author ghillairet * */ public class TransformationTestSupport { abstract static class Transformation { protected GenEditorGenerator editor; protected VisualIdentifierDispenser dispenser; public GenEditorGenerator getEditor() { return editor; } public abstract GenEditorGenerator execute(URI outputURI); public VisualIdentifierDispenser getDispencer() {return dispenser;} } public static Transformation getJavaTransformation(final GenModel genModel, final Mapping mapping, final boolean useModeledViewmap) { return new Transformation() { @Override public GenEditorGenerator execute(URI outputURI) { VisualIdentifierDispenserProvider provider = new VisualIdentifierDispenserProvider(outputURI); //traceURI.trimFileExtension().appendFileExtension("java.gmfgen") provider.acquire(); dispenser = provider.get(); GenModelProducer producer = getJavaGenModelProducer(useModeledViewmap, genModel, provider); try { editor = producer.process(mapping, null); } catch (CoreException e) { e.printStackTrace(); } Resource resource = genModel.eResource().getResourceSet().createResource(outputURI); resource.getContents().add(editor); return editor; } }; } public static Transformation getQvtTransformation(final GenModel genModel, final Mapping mapping, final boolean useModeledViewmap) { return new Transformation() { @Override public GenEditorGenerator execute(URI outputURI) { VisualIdentifierDispenserProvider provider = new VisualIdentifierDispenserProvider(outputURI); provider.acquire(); dispenser = provider.get(); GenModelProducer producer = getQvtGenModelProducer(useModeledViewmap, genModel, provider, genModel.eResource().getResourceSet()); try { editor = producer.process(mapping, null); } catch (CoreException e) { e.printStackTrace(); } Resource resource = genModel.eResource().getResourceSet().createResource(outputURI); resource.getContents().add(editor); return editor; } }; } public static GenModelProducer getJavaGenModelProducer(boolean useModeledViewmap, final GenModel genModel, VisualIdentifierDispenserProvider idDespenser) { MapModeCodeGenStrategy mmStrategy = MapModeCodeGenStrategy.DYNAMIC; ViewmapProducer viewmapProducer = useModeledViewmap ? new ModeledViewmapProducer() : new InnerClassViewmapProducer("full", mmStrategy, null); final DiagramRunTimeModelHelper drtModelHelper = new BasicDiagramRunTimeModelHelper(); DiagramGenModelTransformer.Parameters opts = new DiagramGenModelTransformer.Parameters(drtModelHelper, viewmapProducer, idDespenser.get(), false); final DiagramGenModelTransformer t = new DiagramGenModelTransformer(opts); t.setEMFGenModel(genModel); return new GenModelProducer() { public GenEditorGenerator process(Mapping mapping, IProgressMonitor progress) { t.transform(mapping); return t.getResult(); } }; } public static GenModelProducer getQvtGenModelProducer(boolean useModeledViewmap, final GenModel genModel, VisualIdentifierDispenserProvider idDespenser, ResourceSet resourceSet) { final ExecutionContextImpl context = new ExecutionContextImpl(); context.setConfigProperty("rcp", false); context.setConfigProperty("useMapMode", false); context.setConfigProperty("useFullRunTime", false); context.setConfigProperty("useInTransformationCodeGen", !useModeledViewmap); final QVTDiagramGenModelTransformer transformer = new QVTDiagramGenModelTransformer(resourceSet, idDespenser.get()); return new GenModelProducer() { public GenEditorGenerator process(Mapping mapping, IProgressMonitor progress) throws CoreException { final BasicModelExtent output = new BasicModelExtent(); final ExecutionDiagnostic result = transformer.transform(mapping, genModel, output, context); if(result.getSeverity() == Diagnostic.OK) { List<EObject> outObjects = output.getContents(); return outObjects.get(0) instanceof GenEditorGenerator ? (GenEditorGenerator) outObjects.get(0) : null; } return null; } }; } }