blob: 55387e77b0e74453ba920977b03e3c4c55c0d57c [file] [log] [blame]
/**
* Copyright (c) 2008 INRIA.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* INRIA - initial API and implementation
*
* $Id: ACGTransformation.java,v 1.2 2008/06/25 13:01:57 fjouault Exp $
*/
package org.eclipse.gmt.tcs.builder.ct.definition;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.eclipse.core.resources.IFile;
import org.eclipse.gmt.tcs.builder.ct.usage.Source;
import org.eclipse.gmt.tcs.builder.ct.usage.Target;
import org.eclipse.gmt.tcs.builder.ct.usage.TransformationUsage;
import org.eclipse.m2m.atl.core.IExtractor;
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.EMFModelFactory;
import org.eclipse.m2m.atl.core.service.CoreService;
import org.eclipse.m2m.atl.core.ui.vm.asm.ASMInjector;
import org.eclipse.m2m.atl.dsls.textsource.ByteArrayTextSource;
import org.eclipse.m2m.atl.dsls.textsource.TextSource;
import org.eclipse.m2m.atl.engine.vm.ASM;
import org.eclipse.m2m.atl.engine.vm.ASMReader;
import org.eclipse.m2m.atl.engine.vm.ASMXMLReader;
import org.eclipse.m2m.atl.engine.vm.ASMXMLWriter;
import org.eclipse.m2m.atl.engine.vm.AtlLauncher;
import org.eclipse.m2m.atl.engine.vm.AtlModelHandler;
import org.eclipse.m2m.atl.engine.vm.Debugger;
import org.eclipse.m2m.atl.engine.vm.SimpleDebugger;
import org.eclipse.m2m.atl.engine.vm.nativelib.ASMModel;
/**
*
* @author Fr�d�ric Jouault
*
*/
public class ACGTransformation extends Transformation {
public void execute(TransformationUsage usage, Map contextualModels) throws IOException {
Map libraries = new HashMap(this.libraries);
ModelFactory mf = CoreService.getModelFactory(EMFModelFactory.MODEL_FACTORY_NAME);
IExtractor extractor = CoreService.getExtractor(mf.getDefaultExtractorName());
Map models = new HashMap();
models.put("MOF", mf.getMetametamodel());
for(Iterator i = usage.sources.iterator() ; i.hasNext() ; ) {
Source source = (Source)i.next();
ATLSourceDefinition sourceDef = (ATLSourceDefinition)source.definition;
IModel sourceModel = (IModel)source.origin.get(contextualModels);
IReferenceModel sourceMetamodel = sourceDef.getMetamodel().getMetamodel();
sourceModel.setIsTarget(false);
models.put(sourceDef.getMetamodelName(), sourceMetamodel);
models.put(sourceDef.getModelName(), sourceModel);
}
/* for(Iterator i = usage.targets.iterator() ; i.hasNext() ; ) {
Target target = (Target)i.next();
ATLTargetDefinition targetDef = (ATLTargetDefinition)target.definition;
ASMModel targetMetamodel = targetDef.getMetamodel().getMetamodel();
models.put(targetDef.getMetamodelName(), targetMetamodel);
ASMModel targetModel = amh.newModel(targetDef.getModelName(), "myTarget.xmi", targetMetamodel);
models.put(targetDef.getModelName(), targetModel);
contextualModels.put(target, targetModel);
}
*/
IFile file = ASMRetriever.getFile();
List superimpose = Collections.EMPTY_LIST;
Map options = Collections.EMPTY_MAP;
Debugger debugger = new SimpleDebugger(
/* step = */ "true".equals(options.get("step")),
/* stepops = */ new ArrayList(),
/* deepstepops = */ new ArrayList(),
/* nostepops = */ new ArrayList(),
/* deepnostepops = */ new ArrayList(),
/* showStackTrace = */ true,
"true".equals(options.get("showSummary")),
"true".equals(options.get("profile")),
"true".equals(options.get("continueAfterError"))
);
// debugger = new NetworkDebugger(6060, true);
Map asmParams = new HashMap();
asmParams.put("debug", "false");//$NON-NLS-1$//$NON-NLS-2$
asmParams.put("WriteTo", file.getLocation().toString());//$NON-NLS-1$
AtlLauncher.getDefault().launch(asm, libraries, models, asmParams, superimpose, options, debugger);
ASM asm = ASMRetriever.getASM(file);
Target target = (Target)usage.targets.get(0);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
Map params = new HashMap();
params.putAll(options);
PrintWriter pw = new PrintWriter(baos);
new ASMXMLWriter(pw, false).print(asm);
pw.close();
contextualModels.put(target, new ByteArrayTextSource(baos.toByteArray()));
}
private ASM asm;
public Map libraries;
public ACGTransformation(TextSource transformationTS) throws IOException {
this(transformationTS, Collections.EMPTY_MAP);
}
public ACGTransformation(TextSource transformationTS, Map libraries) throws IOException {
asm = new ASMXMLReader().read(transformationTS.openStream());
this.libraries = new HashMap();
for(Iterator i = libraries.keySet().iterator() ; i.hasNext() ; ) {
Object key = i.next();
addLibrary(key, (TextSource)libraries.get(key));
}
}
public void addLibrary(Object name, TextSource ts) throws IOException {
this.libraries.put(name, new ASMXMLReader().read(ts.openStream()));
}
public ASM getASM() {
return asm;
}
}