package jetbrains.mps.execution.configurations.implementation.plugin.plugin; /*Generated by MPS */ import jetbrains.mps.execution.api.configurations.BaseMpsRunConfiguration; import jetbrains.mps.execution.api.settings.IPersistentConfiguration; import org.apache.log4j.Logger; import org.apache.log4j.LogManager; import org.jetbrains.annotations.NotNull; import jetbrains.mps.execution.api.settings.PersistentConfigurationContext; import com.intellij.execution.configurations.RuntimeConfigurationException; import jetbrains.mps.internal.collections.runtime.ListSequence; import com.intellij.execution.configurations.RuntimeConfigurationError; import org.jdom.Element; import com.intellij.openapi.util.WriteExternalException; import com.intellij.util.xmlb.XmlSerializer; import com.intellij.openapi.util.InvalidDataException; import java.io.File; import com.intellij.openapi.application.PathManager; import com.intellij.openapi.project.Project; import java.util.List; import java.util.ArrayList; import jetbrains.mps.internal.collections.runtime.IVisitor; import org.apache.log4j.Level; import org.jetbrains.annotations.Nullable; import com.intellij.execution.configurations.RunProfileState; import com.intellij.execution.Executor; import com.intellij.execution.runners.ExecutionEnvironment; import com.intellij.execution.ExecutionException; import com.intellij.openapi.options.SettingsEditor; import com.intellij.execution.configurations.ConfigurationPerRunnerSettings; import com.intellij.execution.runners.ProgramRunner; import com.intellij.execution.configurations.ConfigurationInfoProvider; import jetbrains.mps.execution.api.settings.SettingsEditorEx; import jetbrains.mps.ide.project.ProjectHelper; public class DeployPlugins_Configuration extends BaseMpsRunConfiguration implements IPersistentConfiguration { private static final Logger LOG = LogManager.getLogger(DeployPlugins_Configuration.class); @NotNull private DeployPlugins_Configuration.MyState myState = new DeployPlugins_Configuration.MyState(); private DeployPluginsSettings_Configuration myPluginsSettings = new DeployPluginsSettings_Configuration(this.getProject()); public void checkConfiguration(final PersistentConfigurationContext context) throws RuntimeConfigurationException { this.getPluginsSettings().checkConfiguration(context); if (ListSequence.fromList(this.getPluginsSettings().getPluginsListToDeploy()).isEmpty()) { throw new RuntimeConfigurationError("No plugins to deploy selected"); } } @Override public void writeExternal(Element element) throws WriteExternalException { element.addContent(XmlSerializer.serialize(myState)); { Element fieldElement = new Element("myPluginsSettings"); myPluginsSettings.writeExternal(fieldElement); element.addContent(fieldElement); } } @Override public void readExternal(Element element) throws InvalidDataException { if (element == null) { throw new InvalidDataException("Cant read " + this + ": element is null."); } XmlSerializer.deserializeInto(myState, (Element) element.getChildren().get(0)); { Element fieldElement = element.getChild("myPluginsSettings"); if (fieldElement != null) { myPluginsSettings.readExternal(fieldElement); } else { if (LOG.isDebugEnabled()) { LOG.debug("Element " + "myPluginsSettings" + " in " + this.getClass().getName() + " was null."); } } } } public DeployPluginsSettings_Configuration getPluginsSettings() { return myPluginsSettings; } public boolean getSkipModulesLoading() { return myState.mySkipModulesLoading; } public boolean getRestartCurrentInstance() { return myState.myRestartCurrentInstance; } public void setSkipModulesLoading(boolean value) { myState.mySkipModulesLoading = value; } public void setRestartCurrentInstance(boolean value) { myState.myRestartCurrentInstance = value; } public File getPluginsPath() { return new File(PathManager.getPluginsPath()); } public void removeLanguageLibraries(Element element, Project project) { List<Element> toRemove = ListSequence.fromList(new ArrayList<Element>()); removeLanguageLibraries(element, project, toRemove); ListSequence.fromList(toRemove).visitAll(new IVisitor<Element>() { public void visit(Element it) { it.detach(); } }); } private void removeLanguageLibraries(Element element, Project project, List<Element> toRemove) { String mpsLanguageLib = "LanguageLibrary"; if (element.getName().endsWith(mpsLanguageLib)) { ListSequence.fromList(toRemove).addElement(element); } else { for (Element child : ListSequence.fromList(element.getChildren())) { if (child instanceof Element) { removeLanguageLibraries((Element) child, project, toRemove); } } } } @Override public DeployPlugins_Configuration clone() { DeployPlugins_Configuration clone = null; try { clone = createCloneTemplate(); clone.myState = (DeployPlugins_Configuration.MyState) myState.clone(); clone.myPluginsSettings = (DeployPluginsSettings_Configuration) myPluginsSettings.clone(); return clone; } catch (CloneNotSupportedException ex) { if (LOG.isEnabledFor(Level.ERROR)) { LOG.error("", ex); } } return clone; } public class MyState { public boolean mySkipModulesLoading = true; public boolean myRestartCurrentInstance = true; public MyState() { } @Override public Object clone() throws CloneNotSupportedException { DeployPlugins_Configuration.MyState state = new DeployPlugins_Configuration.MyState(); state.mySkipModulesLoading = mySkipModulesLoading; state.myRestartCurrentInstance = myRestartCurrentInstance; return state; } } public DeployPlugins_Configuration(Project project, DeployPlugins_Configuration_Factory factory, String name) { super(project, factory, name); } @Nullable public RunProfileState getState(@NotNull Executor executor, @NotNull ExecutionEnvironment environment) throws ExecutionException { return new DeployPlugins_Configuration_RunProfileState(this, executor, environment); } @Nullable public SettingsEditor<ConfigurationPerRunnerSettings> getRunnerSettingsEditor(ProgramRunner runner) { return null; } public ConfigurationPerRunnerSettings createRunnerSettings(ConfigurationInfoProvider provider) { return null; } public SettingsEditorEx<DeployPlugins_Configuration> getConfigurationEditor() { return (SettingsEditorEx<DeployPlugins_Configuration>) getEditor(); } public DeployPlugins_Configuration createCloneTemplate() { return (DeployPlugins_Configuration) super.clone(); } public SettingsEditorEx<? extends IPersistentConfiguration> getEditor() { return new DeployPlugins_Configuration_Editor(myPluginsSettings.getEditor()); } @Override public void checkConfiguration() throws RuntimeConfigurationException { final jetbrains.mps.project.Project mpsProject = ProjectHelper.fromIdeaProject(getProject()); checkConfiguration(new PersistentConfigurationContext() { public jetbrains.mps.project.Project getProject() { return mpsProject; } }); } @Override public boolean canExecute(String executorId) { return DeployPlugins_Configuration_RunProfileState.canExecute(executorId); } public Object[] createMakedeployscriptsTask() { return new Object[]{this.getPluginsSettings().getPluginsListToDeploy()}; } }