You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ss...@apache.org on 2016/12/05 20:51:47 UTC

svn commit: r1772800 - in /sling/trunk/contrib/extensions/contextaware-config: impl/src/main/java/org/apache/sling/caconfig/impl/def/ impl/src/main/java/org/apache/sling/caconfig/management/ impl/src/main/java/org/apache/sling/caconfig/management/impl/...

Author: sseifert
Date: Mon Dec  5 20:51:47 2016
New Revision: 1772800

URL: http://svn.apache.org/viewvc?rev=1772800&view=rev
Log:
SLING-6367 Context-Aware Config: Delete Configurations via ConfigurationManager

Modified:
    sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/impl/def/DefaultConfigurationPersistenceStrategy.java
    sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/management/ConfigurationManager.java
    sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImpl.java
    sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/management/impl/ConfigurationPersistenceStrategyMultiplexer.java
    sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/impl/def/DefaultConfigurationPersistenceStrategyTest.java
    sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImplTest.java
    sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationPersistenceStrategyMultiplexerTest.java
    sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/management/impl/CustomConfigurationPersistenceStrategy.java
    sling/trunk/contrib/extensions/contextaware-config/spi/src/main/java/org/apache/sling/caconfig/spi/ConfigurationPersistenceStrategy.java

Modified: sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/impl/def/DefaultConfigurationPersistenceStrategy.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/impl/def/DefaultConfigurationPersistenceStrategy.java?rev=1772800&r1=1772799&r2=1772800&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/impl/def/DefaultConfigurationPersistenceStrategy.java (original)
+++ sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/impl/def/DefaultConfigurationPersistenceStrategy.java Mon Dec  5 20:51:47 2016
@@ -82,7 +82,7 @@ public class DefaultConfigurationPersist
     }
 
     @Override
-    public boolean persist(ResourceResolver resourceResolver, String configResourcePath,
+    public boolean persistConfiguration(ResourceResolver resourceResolver, String configResourcePath,
             ConfigurationPersistData data) {
         if (!config.enabled()) {
             return false;
@@ -93,7 +93,7 @@ public class DefaultConfigurationPersist
     }
 
     @Override
-    public boolean persistCollection(ResourceResolver resourceResolver, String configResourceCollectionParentPath,
+    public boolean persistConfigurationCollection(ResourceResolver resourceResolver, String configResourceCollectionParentPath,
             ConfigurationCollectionPersistData data) {
         if (!config.enabled()) {
             return false;
@@ -115,6 +115,24 @@ public class DefaultConfigurationPersist
         commit(resourceResolver);
         return true;
     }
+
+    @Override
+    public boolean deleteConfiguration(ResourceResolver resourceResolver, String configResourcePath) {
+        if (!config.enabled()) {
+            return false;
+        }
+        Resource resource = resourceResolver.getResource(configResourcePath);
+        if (resource != null) {
+            try {
+                resourceResolver.delete(resource);
+            }
+            catch (PersistenceException ex) {
+                throw new ConfigurationPersistenceException("Unable to delete configuration at " + configResourcePath, ex);
+            }
+        }
+        commit(resourceResolver);
+        return true;
+    }
     
     private Resource getOrCreateResource(ResourceResolver resourceResolver, String path, Map<String,Object> properties) {
         try {

Modified: sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/management/ConfigurationManager.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/management/ConfigurationManager.java?rev=1772800&r1=1772799&r2=1772800&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/management/ConfigurationManager.java (original)
+++ sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/management/ConfigurationManager.java Mon Dec  5 20:51:47 2016
@@ -54,7 +54,7 @@ public interface ConfigurationManager {
     @Nonnull ConfigurationCollectionData getConfigurationCollection(@Nonnull Resource resource, @Nonnull String configName);
     
     /**
-     * Write configuration to repository data using the inner-most context path as reference.
+     * Write configuration data to repository using the inner-most context path as reference.
      * @param resource Context resource
      * @param configName Configuration name
      * @param values Values to be stored. All existing properties are erased and replaced with the new ones.
@@ -79,6 +79,13 @@ public interface ConfigurationManager {
      * @return Configuration data. Is null when no configuration metadata exists.
      */
     @CheckForNull ConfigurationData newCollectionItem(@Nonnull Resource resource, @Nonnull String configName);
+
+    /**
+     * Delete configuration or configuration collection data from repository using the inner-most context path as reference.
+     * @param resource Context resource
+     * @param configName Configuration name
+     */
+    void deleteConfiguration(@Nonnull Resource resource, @Nonnull String configName);
     
     /**
      * Get all configuration names.

Modified: sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImpl.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImpl.java?rev=1772800&r1=1772799&r2=1772800&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImpl.java (original)
+++ sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImpl.java Mon Dec  5 20:51:47 2016
@@ -187,7 +187,7 @@ public class ConfigurationManagerImpl im
         if (configResourcePath == null) {
             throw new ConfigurationPersistenceException("Unable to persist configuration: Configuration resolving strategy returned no path.");
         }
-        if (!configurationPersistenceStrategy.persist(resource.getResourceResolver(), configResourcePath, data)) {
+        if (!configurationPersistenceStrategy.persistConfiguration(resource.getResourceResolver(), configResourcePath, data)) {
             throw new ConfigurationPersistenceException("Unable to persist configuration: No persistence strategy found.");
         }
     }
@@ -199,7 +199,7 @@ public class ConfigurationManagerImpl im
         if (configResourceParentPath == null) {
             throw new ConfigurationPersistenceException("Unable to persist configuration collection: Configuration resolving strategy returned no parent path.");
         }
-        if (!configurationPersistenceStrategy.persistCollection(resource.getResourceResolver(), configResourceParentPath, data)) {
+        if (!configurationPersistenceStrategy.persistConfigurationCollection(resource.getResourceResolver(), configResourceParentPath, data)) {
             throw new ConfigurationPersistenceException("Unable to persist configuration: No persistence strategy found.");
         }
     }
@@ -216,6 +216,18 @@ public class ConfigurationManagerImpl im
     }
 
     @Override
+    public void deleteConfiguration(Resource resource, String configName) {
+        ConfigNameUtil.ensureValidConfigName(configName);
+        String configResourcePath = configurationResourceResolvingStrategy.getResourcePath(resource, CONFIGS_PARENT_NAME, configName);
+        if (configResourcePath == null) {
+            throw new ConfigurationPersistenceException("Unable to delete configuration: Configuration resolving strategy returned no path.");
+        }
+        if (!configurationPersistenceStrategy.deleteConfiguration(resource.getResourceResolver(), configResourcePath)) {
+            throw new ConfigurationPersistenceException("Unable to delete configuration: No persistence strategy found.");
+        }
+    }
+    
+    @Override
     public SortedSet<String> getConfigurationNames() {
         return configurationMetadataProvider.getConfigurationNames();
     }
@@ -287,5 +299,5 @@ public class ConfigurationManagerImpl im
     public String getPersistenceResourcePath(String configResourcePath) {
         return configurationPersistenceStrategy.getResourcePath(configResourcePath);
     }
-    
+
 }

Modified: sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/management/impl/ConfigurationPersistenceStrategyMultiplexer.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/management/impl/ConfigurationPersistenceStrategyMultiplexer.java?rev=1772800&r1=1772799&r2=1772800&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/management/impl/ConfigurationPersistenceStrategyMultiplexer.java (original)
+++ sling/trunk/contrib/extensions/contextaware-config/impl/src/main/java/org/apache/sling/caconfig/management/impl/ConfigurationPersistenceStrategyMultiplexer.java Mon Dec  5 20:51:47 2016
@@ -85,10 +85,10 @@ public class ConfigurationPersistenceStr
      * Persist configuration data with the first implementation that accepts it.
      */
     @Override
-    public boolean persist(ResourceResolver resourceResolver, String configResourcePath,
+    public boolean persistConfiguration(ResourceResolver resourceResolver, String configResourcePath,
             ConfigurationPersistData data) {
         for (ConfigurationPersistenceStrategy item : items) {
-            if (item.persist(resourceResolver, configResourcePath, data)) {
+            if (item.persistConfiguration(resourceResolver, configResourcePath, data)) {
                 return true;
             }
         }
@@ -99,14 +99,26 @@ public class ConfigurationPersistenceStr
      * Persist configuration data with the first implementation that accepts it.
      */
     @Override
-    public boolean persistCollection(ResourceResolver resourceResolver, String configResourceCollectionParentPath,
+    public boolean persistConfigurationCollection(ResourceResolver resourceResolver, String configResourceCollectionParentPath,
             ConfigurationCollectionPersistData data) {
         for (ConfigurationPersistenceStrategy item : items) {
-            if (item.persistCollection(resourceResolver, configResourceCollectionParentPath, data)) {
+            if (item.persistConfigurationCollection(resourceResolver, configResourceCollectionParentPath, data)) {
                 return true;
             }
         }
         return false;
     }
 
+    @Override
+    public boolean deleteConfiguration(ResourceResolver resourceResolver, String configResourcePath) {
+        for (ConfigurationPersistenceStrategy item : items) {
+            if (item.deleteConfiguration(resourceResolver, configResourcePath)) {
+                return true;
+            }
+        }
+        return false;
+    }
+    
+    
+
 }

Modified: sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/impl/def/DefaultConfigurationPersistenceStrategyTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/impl/def/DefaultConfigurationPersistenceStrategyTest.java?rev=1772800&r1=1772799&r2=1772800&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/impl/def/DefaultConfigurationPersistenceStrategyTest.java (original)
+++ sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/impl/def/DefaultConfigurationPersistenceStrategyTest.java Mon Dec  5 20:51:47 2016
@@ -63,11 +63,11 @@ public class DefaultConfigurationPersist
     }
 
     @Test
-    public void testPersist() throws Exception {
+    public void testPersistConfiguration() throws Exception {
         ConfigurationPersistenceStrategy underTest = context.registerInjectActivateService(new DefaultConfigurationPersistenceStrategy());
         
         // store config data
-        assertTrue(underTest.persist(context.resourceResolver(), "/conf/test",
+        assertTrue(underTest.persistConfiguration(context.resourceResolver(), "/conf/test",
                 new ConfigurationPersistData(ImmutableMap.<String,Object>of("prop1", "value1", "prop2", 5))));
         context.resourceResolver().commit();
         
@@ -76,7 +76,7 @@ public class DefaultConfigurationPersist
         assertEquals((Integer)5, props.get("prop2", Integer.class));
 
         // remove config data
-        assertTrue(underTest.persist(context.resourceResolver(), "/conf/test",
+        assertTrue(underTest.persistConfiguration(context.resourceResolver(), "/conf/test",
                 new ConfigurationPersistData(ImmutableMap.<String,Object>of())));
         context.resourceResolver().commit();
 
@@ -84,14 +84,16 @@ public class DefaultConfigurationPersist
         assertNull(props.get("prop1", String.class));
         assertNull(props.get("prop2", Integer.class));
         
+        underTest.deleteConfiguration(context.resourceResolver(), "/conf/test");
+        assertNull(context.resourceResolver().getResource("/conf/test"));
     }
 
     @Test
-    public void testPersistCollection() throws Exception {
+    public void testPersistConfigurationCollection() throws Exception {
         ConfigurationPersistenceStrategy underTest = context.registerInjectActivateService(new DefaultConfigurationPersistenceStrategy());
         
         // store new config collection items
-        assertTrue(underTest.persistCollection(context.resourceResolver(), "/conf/test",
+        assertTrue(underTest.persistConfigurationCollection(context.resourceResolver(), "/conf/test",
                 new ConfigurationCollectionPersistData(ImmutableList.of(
                 new ConfigurationPersistData(ImmutableMap.<String,Object>of("prop1", "value1")).collectionItemName("0"),
                 new ConfigurationPersistData(ImmutableMap.<String,Object>of("prop2", 5)).collectionItemName("1"))
@@ -111,12 +113,15 @@ public class DefaultConfigurationPersist
                 "sling:resourceType", "/a/b/c"));
 
         // remove config collection items
-        assertTrue(underTest.persistCollection(context.resourceResolver(), "/conf/test",
+        assertTrue(underTest.persistConfigurationCollection(context.resourceResolver(), "/conf/test",
                 new ConfigurationCollectionPersistData(ImmutableList.<ConfigurationPersistData>of())));
         context.resourceResolver().commit();
 
         resource = context.resourceResolver().getResource("/conf/test");
         assertEquals(0, ImmutableList.copyOf(resource.getChildren()).size());
+
+        underTest.deleteConfiguration(context.resourceResolver(), "/conf/test");
+        assertNull(context.resourceResolver().getResource("/conf/test"));
     }
 
     @Test
@@ -128,10 +133,11 @@ public class DefaultConfigurationPersist
         assertNull(underTest.getResource(resource));
         assertNull(underTest.getResourcePath(resource.getPath()));
 
-        assertFalse(underTest.persist(context.resourceResolver(), "/conf/test",
+        assertFalse(underTest.persistConfiguration(context.resourceResolver(), "/conf/test",
                 new ConfigurationPersistData(ImmutableMap.<String,Object>of())));
-        assertFalse(underTest.persistCollection(context.resourceResolver(), "/conf/test",
+        assertFalse(underTest.persistConfigurationCollection(context.resourceResolver(), "/conf/test",
                 new ConfigurationCollectionPersistData(ImmutableList.<ConfigurationPersistData>of())));
+        assertFalse(underTest.deleteConfiguration(context.resourceResolver(), "/conf/test"));
     }
 
 }

Modified: sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImplTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImplTest.java?rev=1772800&r1=1772799&r2=1772800&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImplTest.java (original)
+++ sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationManagerImplTest.java Mon Dec  5 20:51:47 2016
@@ -780,4 +780,28 @@ public class ConfigurationManagerImplTes
         assertEquals("value3_persist", subListData[2].getValues().get("prop1", String.class));
     }
 
+    @Test
+    public void testDeleteConfiguration() throws Exception {
+        underTest.deleteConfiguration(contextResource, CONFIG_NAME);
+        
+        ConfigurationData configData = underTest.getConfiguration(contextResource, CONFIG_NAME);
+        assertEquals(ImmutableSet.of("prop1", "prop2", "prop3"), configData.getPropertyNames());
+
+        assertNull(configData.getValues().get("prop1", String.class));
+        assertEquals("defValue", configData.getEffectiveValues().get("prop1", String.class));
+        assertNull(configData.getValues().get("prop2", String.class));
+        assertNull(configData.getEffectiveValues().get("prop2", String.class));
+        assertNull(configData.getValues().get("prop3", Integer.class));
+        assertEquals((Integer)5, configData.getEffectiveValues().get("prop3", Integer.class));
+    }
+
+    @Test
+    public void testDeleteConfigurationCollection() throws Exception {
+        underTest.deleteConfiguration(contextResource, CONFIG_COL_NAME);
+        
+        ConfigurationCollectionData configCollectionData = underTest.getConfigurationCollection(contextResource, CONFIG_COL_NAME);
+        List<ConfigurationData> configDatas = ImmutableList.copyOf(configCollectionData.getItems());
+        assertEquals(0, configDatas.size());
+    }
+
 }

Modified: sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationPersistenceStrategyMultiplexerTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationPersistenceStrategyMultiplexerTest.java?rev=1772800&r1=1772799&r2=1772800&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationPersistenceStrategyMultiplexerTest.java (original)
+++ sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/management/impl/ConfigurationPersistenceStrategyMultiplexerTest.java Mon Dec  5 20:51:47 2016
@@ -59,11 +59,12 @@ public class ConfigurationPersistenceStr
     public void testWithNoStrategies() {
         assertNull(underTest.getResource(resource1));
         assertNull(underTest.getResourcePath(resource1.getPath()));
-        assertFalse(underTest.persist(context.resourceResolver(), "/conf/test1", new ConfigurationPersistData(resource1.getValueMap())));
-        assertFalse(underTest.persistCollection(context.resourceResolver(), "/conf/testCol",
+        assertFalse(underTest.persistConfiguration(context.resourceResolver(), "/conf/test1", new ConfigurationPersistData(resource1.getValueMap())));
+        assertFalse(underTest.persistConfigurationCollection(context.resourceResolver(), "/conf/testCol",
                 new ConfigurationCollectionPersistData(ImmutableList.of(
                         new ConfigurationPersistData(resource1.getValueMap()).collectionItemName(resource1.getName()),
                         new ConfigurationPersistData(resource2.getValueMap()).collectionItemName(resource2.getName())))));
+        assertFalse(underTest.deleteConfiguration(context.resourceResolver(), "/conf/test1"));
     }
 
     @Test
@@ -72,11 +73,12 @@ public class ConfigurationPersistenceStr
 
         assertSame(resource1, underTest.getResource(resource1));
         assertEquals(resource1.getPath(), underTest.getResourcePath(resource1.getPath()));
-        assertTrue(underTest.persist(context.resourceResolver(), "/conf/test1", new ConfigurationPersistData(resource1.getValueMap())));
-        assertTrue(underTest.persistCollection(context.resourceResolver(), "/conf/testCol",
+        assertTrue(underTest.persistConfiguration(context.resourceResolver(), "/conf/test1", new ConfigurationPersistData(resource1.getValueMap())));
+        assertTrue(underTest.persistConfigurationCollection(context.resourceResolver(), "/conf/testCol",
                 new ConfigurationCollectionPersistData(ImmutableList.of(
                         new ConfigurationPersistData(resource1.getValueMap()).collectionItemName(resource1.getName()),
                         new ConfigurationPersistData(resource2.getValueMap()).collectionItemName(resource2.getName())))));
+        assertTrue(underTest.deleteConfiguration(context.resourceResolver(), "/conf/test1"));
     }
     
     @Test
@@ -93,15 +95,19 @@ public class ConfigurationPersistenceStr
                 return resource2.getPath();
             }
             @Override
-            public boolean persist(ResourceResolver resourceResolver, String configResourcePath,
+            public boolean persistConfiguration(ResourceResolver resourceResolver, String configResourcePath,
                     ConfigurationPersistData data) {
                 return true;
             }
             @Override
-            public boolean persistCollection(ResourceResolver resourceResolver,
+            public boolean persistConfigurationCollection(ResourceResolver resourceResolver,
                     String configResourceCollectionParentPath, ConfigurationCollectionPersistData data) {
                 return false;
             }
+            @Override
+            public boolean deleteConfiguration(ResourceResolver resourceResolver, String configResourcePath) {
+                return false;
+            }
         }, Constants.SERVICE_RANKING, 2000);
         
         // strategy 2
@@ -115,25 +121,30 @@ public class ConfigurationPersistenceStr
                 return resource1.getPath();
             }
             @Override
-            public boolean persist(ResourceResolver resourceResolver, String configResourcePath,
+            public boolean persistConfiguration(ResourceResolver resourceResolver, String configResourcePath,
                     ConfigurationPersistData data) {
                 return false;
             }
             @Override
-            public boolean persistCollection(ResourceResolver resourceResolver,
+            public boolean persistConfigurationCollection(ResourceResolver resourceResolver,
                     String configResourceCollectionParentPath, ConfigurationCollectionPersistData data) {
                 return true;
             }
+            @Override
+            public boolean deleteConfiguration(ResourceResolver resourceResolver, String configResourcePath) {
+                return true;
+            }
 
         }, Constants.SERVICE_RANKING, 1000);
         
         assertSame(resource2, underTest.getResource(resource1));
         assertEquals(resource2.getPath(), underTest.getResourcePath(resource1.getPath()));
-        assertTrue(underTest.persist(context.resourceResolver(), "/conf/test1", new ConfigurationPersistData(resource1.getValueMap())));
-        assertTrue(underTest.persistCollection(context.resourceResolver(), "/conf/testCol",
+        assertTrue(underTest.persistConfiguration(context.resourceResolver(), "/conf/test1", new ConfigurationPersistData(resource1.getValueMap())));
+        assertTrue(underTest.persistConfigurationCollection(context.resourceResolver(), "/conf/testCol",
                 new ConfigurationCollectionPersistData(ImmutableList.of(
                         new ConfigurationPersistData(resource1.getValueMap()).collectionItemName(resource1.getName()),
                         new ConfigurationPersistData(resource2.getValueMap()).collectionItemName(resource2.getName())))));
+        assertTrue(underTest.deleteConfiguration(context.resourceResolver(), "/conf/test1"));
     }
 
 }

Modified: sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/management/impl/CustomConfigurationPersistenceStrategy.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/management/impl/CustomConfigurationPersistenceStrategy.java?rev=1772800&r1=1772799&r2=1772800&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/management/impl/CustomConfigurationPersistenceStrategy.java (original)
+++ sling/trunk/contrib/extensions/contextaware-config/impl/src/test/java/org/apache/sling/caconfig/management/impl/CustomConfigurationPersistenceStrategy.java Mon Dec  5 20:51:47 2016
@@ -55,14 +55,15 @@ public class CustomConfigurationPersiste
     }
 
     @Override
-    public boolean persist(ResourceResolver resourceResolver, String configResourcePath,
+    public boolean persistConfiguration(ResourceResolver resourceResolver, String configResourcePath,
             ConfigurationPersistData data) {
         getOrCreateResource(resourceResolver, configResourcePath + "/" + CHILD_NODE_NAME, data.getProperties());
+        commit(resourceResolver);
         return true;
     }
 
     @Override
-    public boolean persistCollection(ResourceResolver resourceResolver, String configResourceCollectionParentPath,
+    public boolean persistConfigurationCollection(ResourceResolver resourceResolver, String configResourceCollectionParentPath,
             ConfigurationCollectionPersistData data) {
         Resource configResourceParent = getOrCreateResource(resourceResolver, configResourceCollectionParentPath, ValueMap.EMPTY);
         
@@ -78,9 +79,25 @@ public class CustomConfigurationPersiste
             replaceProperties(configResourceParent, data.getProperties());
         }
         
+        commit(resourceResolver);
         return true;
     }
     
+    @Override
+    public boolean deleteConfiguration(ResourceResolver resourceResolver, String configResourcePath) {
+        Resource resource = resourceResolver.getResource(configResourcePath);
+        if (resource != null) {
+            try {
+                resourceResolver.delete(resource);
+            }
+            catch (PersistenceException ex) {
+                throw new ConfigurationPersistenceException("Unable to delete configuration at " + configResourcePath, ex);
+            }
+        }
+        commit(resourceResolver);
+        return true;
+    }
+
     private Resource getOrCreateResource(ResourceResolver resourceResolver, String path, Map<String,Object> properties) {
         try {
             Resource resource = ResourceUtil.getOrCreateResource(resourceResolver, path, DEFAULT_RESOURCE_TYPE, DEFAULT_RESOURCE_TYPE, false);
@@ -116,4 +133,13 @@ public class CustomConfigurationPersiste
         modValueMap.putAll(properties);
     }
 
+    private void commit(ResourceResolver resourceResolver) {
+        try {
+            resourceResolver.commit();
+        }
+        catch (PersistenceException ex) {
+            throw new ConfigurationPersistenceException("Unable to save configuration: " + ex.getMessage(), ex);
+        }
+    }
+
 }

Modified: sling/trunk/contrib/extensions/contextaware-config/spi/src/main/java/org/apache/sling/caconfig/spi/ConfigurationPersistenceStrategy.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/contextaware-config/spi/src/main/java/org/apache/sling/caconfig/spi/ConfigurationPersistenceStrategy.java?rev=1772800&r1=1772799&r2=1772800&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/contextaware-config/spi/src/main/java/org/apache/sling/caconfig/spi/ConfigurationPersistenceStrategy.java (original)
+++ sling/trunk/contrib/extensions/contextaware-config/spi/src/main/java/org/apache/sling/caconfig/spi/ConfigurationPersistenceStrategy.java Mon Dec  5 20:51:47 2016
@@ -55,9 +55,9 @@ public interface ConfigurationPersistenc
      * @param configResourcePath Path to store configuration data to. The resource (and it's parents) may not exist and may have to be created. 
      * @param properties Configuration properties
      * @return true if the data was persisted. false if persisting the data was not accepted by this persistence strategy
-     *      (but in case of error throw an exception).
+     *      (in case of error throw an exception).
      */
-    boolean persist(@Nonnull ResourceResolver resourceResolver,
+    boolean persistConfiguration(@Nonnull ResourceResolver resourceResolver,
             @Nonnull String configResourcePath, @Nonnull ConfigurationPersistData data);
     
     /**
@@ -69,9 +69,18 @@ public interface ConfigurationPersistenc
      * @param resourceCollectionItems Resource collection items to be stored.
      *      All existing collection entries on this context path level are erased and replaced with the new ones.
      * @return true if the data was persisted. false if persisting the data was not accepted by this persistence strategy
-     *      (but in case of error throw an exception).
+     *      (in case of error throw an exception).
      */
-    boolean persistCollection(@Nonnull ResourceResolver resourceResolver,
+    boolean persistConfigurationCollection(@Nonnull ResourceResolver resourceResolver,
             @Nonnull String configResourceCollectionParentPath, @Nonnull ConfigurationCollectionPersistData data);
+ 
+    /**
+     * Delete configuration or configuration collection data from repository using the inner-most context path as reference.
+     * @param resourceResolver Resource resolver
+     * @param configResourcePath Path to store configuration data to. The resource (and it's parents) may not exist and may have to be created. 
+     * @return true if the data was delete. false if deleting the data was not accepted by this persistence strategy
+     *      (in case of error throw an exception).
+     */
+    boolean deleteConfiguration(@Nonnull ResourceResolver resourceResolver, @Nonnull String configResourcePath);
     
 }