package jetbrains.mps.build.util;
/*Generated by MPS */
import java.util.Map;
import jetbrains.mps.internal.collections.runtime.MapSequence;
import java.util.HashMap;
import jetbrains.mps.generator.template.TemplateQueryContext;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.mps.openapi.model.SNode;
import jetbrains.mps.lang.smodel.generator.smodelAdapter.SNodeOperations;
import jetbrains.mps.smodel.adapter.structure.MetaAdapterFactory;
import java.util.concurrent.ConcurrentMap;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.mps.openapi.model.SModel;
import jetbrains.mps.generator.TransientModelsModule;
import org.jetbrains.mps.openapi.module.SModule;
public class Context {
private Map<String, Object> myProperties = MapSequence.fromMap(new HashMap<String, Object>());
private TemplateQueryContext myGenerationContext;
public Context() {
}
public Context(TemplateQueryContext generationContext) {
myGenerationContext = generationContext;
}
@Nullable
public Object put(String key, Object value) {
Object previousValue = MapSequence.fromMap(myProperties).get(key);
MapSequence.fromMap(myProperties).put(key, value);
return previousValue;
}
@Nullable
public <T> T get(String key) {
return ((T) MapSequence.fromMap(myProperties).get(key));
}
protected SNode getBuildProject(SNode node) {
return SNodeOperations.getNodeAncestor(node, MetaAdapterFactory.getConcept(0x798100da4f0a421aL, 0xb99171f8c50ce5d2L, 0x4df58c6f18f84a13L, "jetbrains.mps.build.structure.BuildProject"), true, false);
}
public MacroHelper getMacros(SNode context) {
SNode buildProject = getBuildProject(context);
if (buildProject == null) {
return null;
}
buildProject = SNodeOperations.as(DependenciesHelper.getOriginalNode(buildProject, myGenerationContext), MetaAdapterFactory.getConcept(0x798100da4f0a421aL, 0xb99171f8c50ce5d2L, 0x4df58c6f18f84a13L, "jetbrains.mps.build.structure.BuildProject"));
if (buildProject == null) {
return null;
}
return new MacroHelper.MacroContext(buildProject, myGenerationContext).getMacros(buildProject);
}
public String getTempPath(SNode node, String name, String... categories) {
assert myGenerationContext != null;
SNode project = getBuildProject(node);
ConcurrentMap<SNode, String> sessionMap = GenerationUtil.<SNode,String>getSessionMap(project, myGenerationContext, "Context_tempPath");
String result = sessionMap.get(node);
if (result != null) {
return result;
}
result = new PathProvider(myGenerationContext, project).createTempPath(name, categories);
if (sessionMap.putIfAbsent(node, result) != null) {
result = sessionMap.get(node);
}
return result;
}
public RelativePathHelper getRelativePathHelper(@NotNull SModel model) {
if (model.getModule() instanceof TransientModelsModule && myGenerationContext != null) {
model = myGenerationContext.getOriginalInputModel();
}
SModule module = model.getModule();
if (module instanceof TransientModelsModule) {
return null;
}
return RelativePathHelper.forModule(module);
}
public TemplateQueryContext getGenerationContext() {
return myGenerationContext;
}
@NotNull
public static Context defaultContext() {
return new Context();
}
@NotNull
public static Context defaultContext(final TemplateQueryContext gencontext) {
if (gencontext == null) {
return defaultContext();
}
return new Context(gencontext);
}
}