diff --git a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/utils/CorePluginsInjector.java b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/utils/CorePluginsInjector.java index ab0d6e04c42688ce704e5bbe86fd3ed8389e9971..b7b03aa709c0b511fcd0f59cbfe2861684d1f8f3 100644 --- a/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/utils/CorePluginsInjector.java +++ b/datastore_server/source/java/ch/systemsx/cisd/openbis/dss/generic/shared/utils/CorePluginsInjector.java @@ -53,6 +53,8 @@ import ch.systemsx.cisd.openbis.generic.shared.coreplugin.CorePluginScanner; */ class CorePluginsInjector { + static final String DELETE_KEY_WORD = "__DELETE__"; + private static final String UNALLOWED_PLUGIN_NAME_CHARACTERS = " ,="; static final String CORE_PLUGINS_FOLDER_KEY = "core-plugins-folder"; @@ -153,7 +155,7 @@ class CorePluginsInjector for (Entry<Object, Object> keyValuePair : pluginProperties.entrySet()) { String value = keyValuePair.getValue().toString(); - properties.setProperty(pluginName + "." + keyValuePair.getKey(), value); + injectProperty(properties, pluginName + "." + keyValuePair.getKey(), value); } } else { @@ -164,7 +166,7 @@ class CorePluginsInjector String key = keyValuePair.getKey().toString(); if (keysOfKeyLists.contains(key) == false) { - properties.setProperty(key, value); + injectProperty(properties, key, value); } } pluginKeyBundles.add(miscPluginKeyBundles); @@ -174,6 +176,18 @@ class CorePluginsInjector } pluginKeyBundles.addOrReplaceKeyBundleIn(properties); } + + private void injectProperty(Properties properties, String key, String value) + { + String property = properties.getProperty(key); + if (property != null && property.trim().equals(DELETE_KEY_WORD)) + { + properties.remove(key); + } else + { + properties.setProperty(key, value); + } + } private Set<String> getDisabledPlugins(Properties properties) { diff --git a/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/shared/utils/CorePluginsInjectorTest.java b/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/shared/utils/CorePluginsInjectorTest.java index a818d0e334c7d6736578c8dfebc57f2ced6a9f8c..8ecd54386d6e5e5d9bc2c98866cdc1cc7613d93f 100644 --- a/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/shared/utils/CorePluginsInjectorTest.java +++ b/datastore_server/sourceTest/java/ch/systemsx/cisd/openbis/dss/generic/shared/utils/CorePluginsInjectorTest.java @@ -44,6 +44,7 @@ import ch.systemsx.cisd.common.filesystem.FileUtilities; import ch.systemsx.cisd.common.logging.ISimpleLogger; import ch.systemsx.cisd.common.logging.LogLevel; import ch.systemsx.cisd.common.utilities.ExtendedProperties; +import ch.systemsx.cisd.openbis.dss.generic.shared.Constants; /** * @@ -298,6 +299,45 @@ public class CorePluginsInjectorTest extends AbstractFileSystemTestCase context.assertIsSatisfied(); } + @Test + public void testDeletedPropertyForPluginTypeNotMiscellaneous() + { + File pluginFolder = new File(corePluginsFolder, "screening/1/dss/services/z"); + pluginFolder.mkdirs(); + FileUtilities.writeToFile(new File(pluginFolder, PLUGIN_PROPERTIES_FILE_NAME), + "alpha = 42\nbeta = 43"); + Properties properties = createProperties(); + properties.setProperty("z.beta", CorePluginsInjector.DELETE_KEY_WORD); + preparePluginNameLog("screening:services:z [" + pluginFolder + "]"); + + injector.injectCorePlugins(properties); + + assertProperties(corePluginsFolderProperty + + Constants.PLUGIN_SERVICES_LIST_KEY + " = z\n" + + "z.alpha = 42\n", properties); + + context.assertIsSatisfied(); + } + + @Test + public void testDeletedPropertyForPluginTypeMiscellaneous() + { + File pluginFolder = new File(corePluginsFolder, "screening/1/dss/miscellaneous/z"); + pluginFolder.mkdirs(); + FileUtilities.writeToFile(new File(pluginFolder, PLUGIN_PROPERTIES_FILE_NAME), + "z = 42\nbeta = 43"); + Properties properties = createProperties(); + properties.setProperty("beta", CorePluginsInjector.DELETE_KEY_WORD); + preparePluginNameLog("screening:miscellaneous:z [" + pluginFolder + "]"); + + injector.injectCorePlugins(properties); + + assertProperties(corePluginsFolderProperty + + "z = 42\n", properties); + + context.assertIsSatisfied(); + } + private void preparePluginNameLog(final String... fullPluginNames) { context.checking(new Expectations()