package org.sugarj.driver.transformations.primitive; import java.io.IOException; import org.spoofax.interpreter.core.IContext; import org.spoofax.interpreter.core.InterpreterException; import org.spoofax.interpreter.library.AbstractPrimitive; import org.spoofax.interpreter.stratego.Strategy; import org.spoofax.interpreter.terms.IStrategoTerm; import org.sugarj.common.ATermCommands; import org.sugarj.common.Environment; import org.sugarj.common.path.RelativePath; import org.sugarj.driver.Driver; import org.sugarj.driver.ImportCommands; import org.sugarj.util.Renaming; /** * Primitive for looking up and loading a model according to the current environment. * If successful, this primitive returns the loaded model as a term. * * @author seba */ class WriteTransformed extends AbstractPrimitive { private Driver driver; private Environment environment; public WriteTransformed(Driver driver, Environment environment) { super("SUGARJ_write", 0, 2); this.driver = driver; this.environment = environment; } @Override public boolean call(IContext context, Strategy[] svars, IStrategoTerm[] tvars) throws InterpreterException { IStrategoTerm generatedModel = context.current(); String modelPath = ATermCommands.getString(tvars[0]); RelativePath modelRelativePath = new RelativePath(modelPath); IStrategoTerm transformationsTerm = tvars[1]; RelativePath transformationPath = new RelativePath(ATermCommands.getString(transformationsTerm)); RelativePath source = ImportCommands.getTransformedModelSourceFilePath(modelRelativePath, transformationPath, environment); try { Renaming ren = new Renaming(modelPath, source.getRelativePath()); environment.getRenamings().add(0, ren); // generatedModel = driver.currentRename(generatedModel); driver.getCurrentResult().generateFile(source, ATermCommands.atermToString(generatedModel)); } catch (IOException e) { driver.setErrorMessage(e.getLocalizedMessage()); } return true; } }