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.Path;
import org.sugarj.driver.ModuleSystemCommands;
import org.sugarj.driver.Result;
/**
* 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 ResolveModel extends AbstractPrimitive {
private Environment env;
private Result driverResult;
public ResolveModel(Environment env, Result driverResult) {
super("SUGARJ_resolve_model", 0, 0);
this.env = env;
this.driverResult = driverResult;
}
@Override
public boolean call(IContext context, Strategy[] svars, IStrategoTerm[] tvars) throws InterpreterException {
String modelPath = ATermCommands.getString(context.current());
try {
Path p = ModuleSystemCommands.importModel(modelPath, env, driverResult);
if (p == null)
return false;
IStrategoTerm model = ATermCommands.atermFromFile(p.getAbsolutePath());
if (model == null)
return false;
context.setCurrent(model);
return true;
} catch (IOException e) {
return false;
}
}
}