[FELIX-2763] disableConfigSave actually enables configuration save
git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@1301388 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/fileinstall/src/main/java/org/apache/felix/fileinstall/internal/ConfigInstaller.java b/fileinstall/src/main/java/org/apache/felix/fileinstall/internal/ConfigInstaller.java
index 1e27b9a..26a4c70 100644
--- a/fileinstall/src/main/java/org/apache/felix/fileinstall/internal/ConfigInstaller.java
+++ b/fileinstall/src/main/java/org/apache/felix/fileinstall/internal/ConfigInstaller.java
@@ -98,11 +98,7 @@
{
// Check if writing back configurations has been disabled.
{
- Object obj = this.context.getProperty( DirectoryWatcher.DISABLE_CONFIG_SAVE );
- if (obj instanceof String) {
- obj = new Boolean((String) obj );
- }
- if( Boolean.FALSE.equals( obj ) )
+ if (shouldSaveConfig())
{
return;
}
@@ -170,6 +166,32 @@
}
}
+ boolean shouldSaveConfig()
+ {
+ Object obj = this.context.getProperty( DirectoryWatcher.ENABLE_CONFIG_SAVE );
+ if (obj instanceof String)
+ {
+ obj = Boolean.valueOf((String) obj);
+ }
+ if (Boolean.FALSE.equals( obj ))
+ {
+ return false;
+ }
+ else if ( !Boolean.TRUE.equals( obj ))
+ {
+ obj = this.context.getProperty( DirectoryWatcher.DISABLE_CONFIG_SAVE );
+ if (obj instanceof String)
+ {
+ obj = Boolean.valueOf((String) obj);
+ }
+ if( Boolean.FALSE.equals( obj ) )
+ {
+ return false;
+ }
+ }
+ return true;
+ }
+
ConfigurationAdmin getConfigurationAdmin()
{
return configAdmin;
diff --git a/fileinstall/src/main/java/org/apache/felix/fileinstall/internal/DirectoryWatcher.java b/fileinstall/src/main/java/org/apache/felix/fileinstall/internal/DirectoryWatcher.java
index 0b55e48..eb0d1cd 100644
--- a/fileinstall/src/main/java/org/apache/felix/fileinstall/internal/DirectoryWatcher.java
+++ b/fileinstall/src/main/java/org/apache/felix/fileinstall/internal/DirectoryWatcher.java
@@ -92,6 +92,7 @@
public final static String USE_START_ACTIVATION_POLICY = "felix.fileinstall.bundles.startActivationPolicy";
public final static String NO_INITIAL_DELAY = "felix.fileinstall.noInitialDelay";
public final static String DISABLE_CONFIG_SAVE = "felix.fileinstall.disableConfigSave";
+ public final static String ENABLE_CONFIG_SAVE = "felix.fileinstall.enableConfigSave";
public final static String START_LEVEL = "felix.fileinstall.start.level";
public final static String ACTIVE_LEVEL = "felix.fileinstall.active.level";
diff --git a/fileinstall/src/test/java/org/apache/felix/fileinstall/internal/ConfigInstallerTest.java b/fileinstall/src/test/java/org/apache/felix/fileinstall/internal/ConfigInstallerTest.java
index eb3737d..9a6edb8 100644
--- a/fileinstall/src/test/java/org/apache/felix/fileinstall/internal/ConfigInstallerTest.java
+++ b/fileinstall/src/test/java/org/apache/felix/fileinstall/internal/ConfigInstallerTest.java
@@ -21,9 +21,11 @@
import java.io.File;
import java.util.Dictionary;
import java.util.Hashtable;
+import java.util.concurrent.atomic.AtomicReference;
import junit.framework.TestCase;
import org.easymock.EasyMock;
+import org.easymock.IAnswer;
import org.easymock.IArgumentMatcher;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
@@ -163,6 +165,67 @@
EasyMock.verify(new Object[]{mockConfiguration, mockConfigurationAdmin, mockBundleContext});
}
+
+ public void testShouldSaveConfig()
+ {
+ final AtomicReference<Boolean> disable = new AtomicReference<Boolean>();
+ final AtomicReference<Boolean> enable = new AtomicReference<Boolean>();
+
+ EasyMock.expect(mockBundleContext.getProperty(DirectoryWatcher.DISABLE_CONFIG_SAVE)).andAnswer(
+ new IAnswer<String>() {
+ public String answer() throws Throwable {
+ return disable.get() != null ? disable.get().toString() : null;
+ }
+ }
+ ).anyTimes();
+ EasyMock.expect(mockBundleContext.getProperty(DirectoryWatcher.ENABLE_CONFIG_SAVE)).andAnswer(
+ new IAnswer<String>() {
+ public String answer() throws Throwable {
+ return enable.get() != null ? enable.get().toString() : null;
+ }
+ }
+ ).anyTimes();
+ EasyMock.replay(new Object[]{mockConfiguration, mockConfigurationAdmin, mockBundleContext});
+ ConfigInstaller ci = new ConfigInstaller( mockBundleContext, mockConfigurationAdmin, new FileInstall() );
+
+ disable.set(null);
+ enable.set(null);
+ assertTrue( ci.shouldSaveConfig() );
+
+ disable.set(false);
+ enable.set(null);
+ assertFalse( ci.shouldSaveConfig() );
+
+ disable.set(true);
+ enable.set(null);
+ assertTrue( ci.shouldSaveConfig() );
+
+ disable.set(null);
+ enable.set(false);
+ assertFalse( ci.shouldSaveConfig() );
+
+ disable.set(false);
+ enable.set(false);
+ assertFalse( ci.shouldSaveConfig() );
+
+ disable.set(true);
+ enable.set(false);
+ assertFalse( ci.shouldSaveConfig() );
+
+ disable.set(null);
+ enable.set(true);
+ assertTrue( ci.shouldSaveConfig() );
+
+ disable.set(false);
+ enable.set(true);
+ assertTrue( ci.shouldSaveConfig() );
+
+ disable.set(true);
+ enable.set(true);
+ assertTrue( ci.shouldSaveConfig() );
+
+ EasyMock.verify(new Object[]{mockConfiguration, mockConfigurationAdmin, mockBundleContext});
+ }
}