package jetbrains.mps.tool.environment;
/*Generated by MPS */
import java.util.Set;
import jetbrains.mps.internal.collections.runtime.SetSequence;
import java.util.LinkedHashSet;
import java.util.Map;
import java.io.File;
import jetbrains.mps.internal.collections.runtime.MapSequence;
import java.util.LinkedHashMap;
import org.jetbrains.annotations.Nullable;
import java.util.Collections;
import jetbrains.mps.core.tool.environment.util.PathManager;
/**
* Represents a configuration options list for an environment, used a Builder pattern
*
*
* @see jetbrains.mps.tool.environment.Environment
* @see jetbrains.mps.tool.environment.EnvironmentContainer
*/
public class EnvironmentConfig {
private final Set<PluginDescriptor> myPlugins = SetSequence.fromSet(new LinkedHashSet<PluginDescriptor>());
private final Map<String, File> myMacros = MapSequence.fromMap(new LinkedHashMap<String, File>(16, (float) 0.75, false));
private final Set<String> myLibs = SetSequence.fromSet(new LinkedHashSet<String>());
private boolean myLoadPluginsByDefault = false;
private EnvironmentConfig() {
}
/**
*
* @return null if we do not want to specify plugins to the platform
*/
@Nullable
public Set<PluginDescriptor> getPlugins() {
if (myLoadPluginsByDefault) {
return null;
}
return SetSequence.fromSet(myPlugins).asUnmodifiable();
}
public Map<String, File> getMacros() {
return Collections.unmodifiableMap(myMacros);
}
public Set<String> getLibs() {
return SetSequence.fromSet(myLibs).asUnmodifiable();
}
public EnvironmentConfig addPlugin(String path, String id) {
SetSequence.fromSet(myPlugins).addElement(new PluginDescriptor(path, id));
return this;
}
public EnvironmentConfig addMacro(String macroName, File macroValue) {
MapSequence.fromMap(myMacros).put(macroName, macroValue);
return this;
}
public EnvironmentConfig addLib(String libPath) {
SetSequence.fromSet(myLibs).addElement(libPath);
return this;
}
public EnvironmentConfig withDefaultSamples() {
return addMacro("samples_home", new File(System.getProperty("user.dir"), "samples"));
}
public EnvironmentConfig withDefaultPlugins() {
return withMakePlugin().withCorePlugin().withTestingPlugin();
}
public EnvironmentConfig withMakePlugin() {
return addPlugin("mpsmake", "jetbrains.mps.ide.make");
}
public EnvironmentConfig withVcsPlugin() {
return addPlugin("vcs", "jetbrains.mps.vcs").withGit4IdeaPlugin();
}
public EnvironmentConfig withTestingPlugin() {
return addPlugin("mps-testing", "jetbrains.mps.testing");
}
public EnvironmentConfig withCorePlugin() {
return addPlugin("mps-core", "jetbrains.mps.core");
}
public EnvironmentConfig withGit4IdeaPlugin() {
return addPlugin("git4idea", "Git4Idea");
}
public EnvironmentConfig withBuildPlugin() {
return addPlugin("mps-build", "jetbrains.mps.build");
}
public EnvironmentConfig withJavaPlugin() {
return addPlugin("mps-java-workbench", "jetbrains.mps.ide.java").addPlugin("mpsjava", "jetbrains.mps.ide.java.platform");
}
public EnvironmentConfig withMigrationPlugin() {
return addPlugin("migrationAssistant", "jetbrains.mps.ide.migration.assistant");
}
public EnvironmentConfig withDevkitPlugin() {
return addPlugin("mpsdevkit", "jetbrains.mps.ide.devkit");
}
public EnvironmentConfig withBootstrapLibraries() {
for (String path : PathManager.getBootstrapPaths()) {
addLib(path);
}
addLib(PathManager.getLanguagesPath());
return this;
}
public EnvironmentConfig withWorkbenchPath() {
String workbenchPath = PathManager.getHomePath() + File.separator + "workbench";
addLib(workbenchPath);
return this;
}
public static EnvironmentConfig defaultConfig() {
return new EnvironmentConfig().withDefaultSamples().withDefaultPlugins().withBootstrapLibraries().withWorkbenchPath();
}
/**
*
* @return EnvironmentConfig with no specified plugins. At the time of writing it meant that the platform will load all the plugins. Note that one needs to provide a proper class path.
*/
public static EnvironmentConfig defaultConfigNoPluginsSpecified() {
EnvironmentConfig defaultConf = defaultConfig();
defaultConf.myLoadPluginsByDefault = false;
return defaultConf;
}
/**
* fixme: currently the repository within the 'empty environment' is inconsistent (mps-core plugin is needed),
* so use defaultConfig
*/
public static EnvironmentConfig emptyConfig() {
return new EnvironmentConfig();
}
}