From 7a70c997ae0c75c773f81142fbc604aafd7ae2e2 Mon Sep 17 00:00:00 2001 From: felmer <felmer> Date: Tue, 28 Feb 2012 10:49:05 +0000 Subject: [PATCH] LMS-2612 update disabled plugins property in DSS service.properties SVN: 24582 --- .../SetDisableTechnologiesVariableAction.java | 80 +++++++++++++++++-- ...DisableTechnologiesVariableActionTest.java | 50 ++++++++++++ 2 files changed, 125 insertions(+), 5 deletions(-) diff --git a/installation/source/java/ch/systemsx/cisd/openbis/installer/izpack/SetDisableTechnologiesVariableAction.java b/installation/source/java/ch/systemsx/cisd/openbis/installer/izpack/SetDisableTechnologiesVariableAction.java index 5ec25a2b2a6..18a88524e81 100644 --- a/installation/source/java/ch/systemsx/cisd/openbis/installer/izpack/SetDisableTechnologiesVariableAction.java +++ b/installation/source/java/ch/systemsx/cisd/openbis/installer/izpack/SetDisableTechnologiesVariableAction.java @@ -22,7 +22,10 @@ import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; +import java.util.HashSet; +import java.util.LinkedHashSet; import java.util.List; +import java.util.Set; import org.apache.commons.io.IOUtils; @@ -32,6 +35,7 @@ import com.izforge.izpack.api.handler.AbstractUIHandler; import com.izforge.izpack.data.PanelAction; import ch.systemsx.cisd.common.filesystem.FileUtilities; +import ch.systemsx.cisd.common.utilities.CommaSeparatedListBuilder; /** * Action which sets the variable <code>DISABLED_TECHNOLOGIES_VARNAME</code> or updates @@ -42,6 +46,7 @@ import ch.systemsx.cisd.common.filesystem.FileUtilities; public class SetDisableTechnologiesVariableAction implements PanelAction { static final String DISABLED_TECHNOLOGIES_VARNAME = "DISABLED_TECHNOLOGIES"; + static final String DISABLED_CORE_PLUGINS_KEY = "disabled-core-plugins"; public void initialize(PanelActionConfiguration configuration) { @@ -97,20 +102,85 @@ public class SetDisableTechnologiesVariableAction implements PanelAction appendEntryToConfigFile(configFile, propertiesEntry); } } + updateDisabledDssPluginsProperty(data, installDir); } - - private String createListOfDisabledTechnologies(AutomatedInstallData data) + + private void updateDisabledDssPluginsProperty(AutomatedInstallData data, File installDir) { - StringBuilder builder = new StringBuilder(); + Set<String> disabledTechnologies = new LinkedHashSet<String>(); + Set<String> technologies = new HashSet<String>(); for (String technology : GlobalInstallationContext.TECHNOLOGIES) { String technologyFlag = data.getVariable(technology); if (Boolean.FALSE.toString().equalsIgnoreCase(technologyFlag)) { - if (builder.length() > 0) + disabledTechnologies.add(technology.toLowerCase()); + } + technologies.add(technology.toLowerCase()); + } + File configFile = new File(installDir, Utils.DSS_PATH + Utils.SERVICE_PROPERTIES_PATH); + List<String> list = FileUtilities.loadToStringList(configFile); + updateDisabledDssPluginsProperty(list, technologies, disabledTechnologies); + updateConfigFile(configFile, list); + } + + private void updateDisabledDssPluginsProperty(List<String> list, Set<String> technologies, + Set<String> disabledTechnologies) + { + for (int i = 0; i < list.size(); i++) + { + String line = list.get(i); + if (line.startsWith(DISABLED_CORE_PLUGINS_KEY)) + { + String[] property = line.split("="); + String oldPluginsList = property.length < 2 ? "" : property[1]; + String pluginsList = + mergeWithDisabledPluginsList(oldPluginsList, technologies, + disabledTechnologies); + list.set(i, DISABLED_CORE_PLUGINS_KEY + " = " + pluginsList); + return; + } + } + String pluginsList = mergeWithDisabledPluginsList("", technologies, disabledTechnologies); + list.add(DISABLED_CORE_PLUGINS_KEY + " = " + pluginsList); + } + + private String mergeWithDisabledPluginsList(String disabledPlugins, Set<String> technologies, + Set<String> disabledTechnologies) + { + CommaSeparatedListBuilder builder = new CommaSeparatedListBuilder(); + Set<String> plugins = new HashSet<String>(); + String[] terms = disabledPlugins.split(","); + for (String term : terms) + { + String plugin = term.trim(); + if (plugin.length() > 0) + { + if (technologies.contains(plugin) == false || disabledTechnologies.contains(plugin)) { - builder.append(", "); + builder.append(plugin); + plugins.add(plugin); } + } + } + for (String disabledTechnology : disabledTechnologies) + { + if (plugins.contains(disabledTechnology) == false) + { + builder.append(disabledTechnology); + } + } + return builder.toString(); + } + + private String createListOfDisabledTechnologies(AutomatedInstallData data) + { + CommaSeparatedListBuilder builder = new CommaSeparatedListBuilder(); + for (String technology : GlobalInstallationContext.TECHNOLOGIES) + { + String technologyFlag = data.getVariable(technology); + if (Boolean.FALSE.toString().equalsIgnoreCase(technologyFlag)) + { builder.append(technology.toLowerCase()); } } diff --git a/installation/sourceTest/java/ch/systemsx/cisd/openbis/installer/izpack/SetDisableTechnologiesVariableActionTest.java b/installation/sourceTest/java/ch/systemsx/cisd/openbis/installer/izpack/SetDisableTechnologiesVariableActionTest.java index 998ebda69b9..f1a3827c8a2 100644 --- a/installation/sourceTest/java/ch/systemsx/cisd/openbis/installer/izpack/SetDisableTechnologiesVariableActionTest.java +++ b/installation/sourceTest/java/ch/systemsx/cisd/openbis/installer/izpack/SetDisableTechnologiesVariableActionTest.java @@ -18,10 +18,12 @@ package ch.systemsx.cisd.openbis.installer.izpack; import static ch.systemsx.cisd.openbis.installer.izpack.GlobalInstallationContext.TECHNOLOGY_PROTEOMICS; import static ch.systemsx.cisd.openbis.installer.izpack.GlobalInstallationContext.TECHNOLOGY_SCREENING; +import static ch.systemsx.cisd.openbis.installer.izpack.SetDisableTechnologiesVariableAction.DISABLED_CORE_PLUGINS_KEY; import static ch.systemsx.cisd.openbis.installer.izpack.SetDisableTechnologiesVariableAction.DISABLED_TECHNOLOGIES_VARNAME; import static ch.systemsx.cisd.openbis.installer.izpack.SetTechnologyCheckBoxesAction.DISABLED_TECHNOLOGIES_KEY; import java.io.File; +import java.io.IOException; import java.util.Properties; import org.testng.annotations.AfterMethod; @@ -32,6 +34,7 @@ import com.izforge.izpack.api.data.AutomatedInstallData; import com.izforge.izpack.core.substitutor.VariableSubstitutorImpl; import com.izforge.izpack.installer.data.InstallData; +import ch.systemsx.cisd.base.exceptions.CheckedExceptionTunnel; import ch.systemsx.cisd.base.tests.AbstractFileSystemTestCase; import ch.systemsx.cisd.common.filesystem.FileUtilities; @@ -43,6 +46,7 @@ import ch.systemsx.cisd.common.filesystem.FileUtilities; public class SetDisableTechnologiesVariableActionTest extends AbstractFileSystemTestCase { private File configFile; + private File dssConfigFile; @Override @BeforeMethod @@ -50,12 +54,22 @@ public class SetDisableTechnologiesVariableActionTest extends AbstractFileSystem { configFile = new File(workingDirectory, Utils.AS_PATH + Utils.SERVICE_PROPERTIES_PATH); configFile.getParentFile().mkdirs(); + dssConfigFile = new File(workingDirectory, Utils.DSS_PATH + Utils.SERVICE_PROPERTIES_PATH); + dssConfigFile.getParentFile().mkdirs(); + try + { + dssConfigFile.createNewFile(); + } catch (IOException ex) + { + throw CheckedExceptionTunnel.wrapIfNecessary(ex); + } } @AfterMethod public void tearDown() { configFile.delete(); + dssConfigFile.delete(); } @Test @@ -80,6 +94,8 @@ public class SetDisableTechnologiesVariableActionTest extends AbstractFileSystem AutomatedInstallData data = updateDisabledTechnologyProperties(variables, true); assertEquals("proteomics, screening", data.getVariable(DISABLED_TECHNOLOGIES_VARNAME)); + assertEquals("[" + DISABLED_CORE_PLUGINS_KEY + " = proteomics, screening]", FileUtilities + .loadToStringList(dssConfigFile).toString()); } @Test @@ -129,6 +145,8 @@ public class SetDisableTechnologiesVariableActionTest extends AbstractFileSystem assertEquals("[abc = 123, " + DISABLED_TECHNOLOGIES_KEY + " = , answer = 42]", FileUtilities .loadToStringList(configFile).toString()); + assertEquals("[" + DISABLED_CORE_PLUGINS_KEY + " = ]", FileUtilities + .loadToStringList(dssConfigFile).toString()); } @Test @@ -143,6 +161,38 @@ public class SetDisableTechnologiesVariableActionTest extends AbstractFileSystem assertEquals("[abc = 123, " + DISABLED_TECHNOLOGIES_KEY + " = proteomics]", FileUtilities .loadToStringList(configFile).toString()); + assertEquals("[" + DISABLED_CORE_PLUGINS_KEY + " = proteomics]", FileUtilities + .loadToStringList(dssConfigFile).toString()); + } + + @Test + public void testUpdateDisabledPluginsForSwitchedTechnologies() + { + FileUtilities.writeToFile(dssConfigFile, "a = b\n" + DISABLED_CORE_PLUGINS_KEY + + "= screening, proteomics:a:b\n" + "gamma = alpha"); + Properties variables = new Properties(); + variables.setProperty(TECHNOLOGY_PROTEOMICS, "false"); + variables.setProperty(TECHNOLOGY_SCREENING, "true"); + + updateDisabledTechnologyProperties(variables, true); + + assertEquals("[a = b, " + DISABLED_CORE_PLUGINS_KEY + " = proteomics:a:b, proteomics, " + + "gamma = alpha]", FileUtilities.loadToStringList(dssConfigFile).toString()); + } + + @Test + public void testUpdateDisabledPluginsForSameTechnology() + { + FileUtilities.writeToFile(dssConfigFile, "a = b\n" + DISABLED_CORE_PLUGINS_KEY + + "= proteomics, proteomics:a:b\n" + "gamma = alpha"); + Properties variables = new Properties(); + variables.setProperty(TECHNOLOGY_PROTEOMICS, "false"); + variables.setProperty(TECHNOLOGY_SCREENING, "true"); + + updateDisabledTechnologyProperties(variables, true); + + assertEquals("[a = b, " + DISABLED_CORE_PLUGINS_KEY + " = proteomics, proteomics:a:b, " + + "gamma = alpha]", FileUtilities.loadToStringList(dssConfigFile).toString()); } private AutomatedInstallData updateDisabledTechnologyProperties(Properties variables, -- GitLab