Persist on policy-reconfigured

Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/08244283
Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/08244283
Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/08244283

Branch: refs/heads/master
Commit: 08244283a7ce7b54f3914867d5877a897c8087cd
Parents: d9570ee
Author: Aled Sage <aled.s...@gmail.com>
Authored: Thu Jun 5 22:21:21 2014 +0200
Committer: Aled Sage <aled.s...@gmail.com>
Committed: Fri Jun 6 16:32:09 2014 +0200

----------------------------------------------------------------------
 .../enricher/basic/AbstractEnricher.java        |  5 +++
 .../policy/basic/AbstractEntityAdjunct.java     |  6 +++-
 .../brooklyn/policy/basic/AbstractPolicy.java   |  5 +++
 .../entity/rebind/RebindEnricherTest.java       |  4 +--
 .../entity/rebind/RebindPolicyTest.java         | 33 ++++++++++++++++++--
 5 files changed, 48 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/08244283/core/src/main/java/brooklyn/enricher/basic/AbstractEnricher.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/enricher/basic/AbstractEnricher.java 
b/core/src/main/java/brooklyn/enricher/basic/AbstractEnricher.java
index c80c9a7..7fe9811 100644
--- a/core/src/main/java/brooklyn/enricher/basic/AbstractEnricher.java
+++ b/core/src/main/java/brooklyn/enricher/basic/AbstractEnricher.java
@@ -41,4 +41,9 @@ public abstract class AbstractEnricher extends 
AbstractEntityAdjunct implements
     public EnricherType getEnricherType() {
         return enricherType;
     }
+
+    @Override
+    protected void onChanged() {
+        
getManagementContext().getRebindManager().getChangeListener().onChanged(this);
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/08244283/core/src/main/java/brooklyn/policy/basic/AbstractEntityAdjunct.java
----------------------------------------------------------------------
diff --git 
a/core/src/main/java/brooklyn/policy/basic/AbstractEntityAdjunct.java 
b/core/src/main/java/brooklyn/policy/basic/AbstractEntityAdjunct.java
index cf41996..89815b6 100644
--- a/core/src/main/java/brooklyn/policy/basic/AbstractEntityAdjunct.java
+++ b/core/src/main/java/brooklyn/policy/basic/AbstractEntityAdjunct.java
@@ -230,7 +230,9 @@ public abstract class AbstractEntityAdjunct implements 
EntityAdjunct, Configurab
         if (entity != null && isRunning()) {
             doReconfigureConfig(key, val);
         }
-        return (T) configsInternal.setConfig(key, val);
+        T result = (T) configsInternal.setConfig(key, val);
+        onChanged();
+        return result;
     }
     
     // TODO make immutable
@@ -244,6 +246,8 @@ public abstract class AbstractEntityAdjunct implements 
EntityAdjunct, Configurab
         throw new UnsupportedOperationException("reconfiguring "+key+" 
unsupported for "+this);
     }
     
+    protected abstract void onChanged();
+    
     protected AdjunctType getAdjunctType() {
         return adjunctType;
     }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/08244283/core/src/main/java/brooklyn/policy/basic/AbstractPolicy.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/brooklyn/policy/basic/AbstractPolicy.java 
b/core/src/main/java/brooklyn/policy/basic/AbstractPolicy.java
index c6b932c..5bd8843 100644
--- a/core/src/main/java/brooklyn/policy/basic/AbstractPolicy.java
+++ b/core/src/main/java/brooklyn/policy/basic/AbstractPolicy.java
@@ -77,6 +77,11 @@ public abstract class AbstractPolicy extends 
AbstractEntityAdjunct implements Po
     }
 
     @Override
+    protected void onChanged() {
+        
getManagementContext().getRebindManager().getChangeListener().onChanged(this);
+    }
+    
+    @Override
     public RebindSupport<PolicyMemento> getRebindSupport() {
         return new BasicPolicyRebindSupport(this);
     }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/08244283/core/src/test/java/brooklyn/entity/rebind/RebindEnricherTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/entity/rebind/RebindEnricherTest.java 
b/core/src/test/java/brooklyn/entity/rebind/RebindEnricherTest.java
index 0a34106..c6de0ee 100644
--- a/core/src/test/java/brooklyn/entity/rebind/RebindEnricherTest.java
+++ b/core/src/test/java/brooklyn/entity/rebind/RebindEnricherTest.java
@@ -219,9 +219,9 @@ public class RebindEnricherTest extends 
RebindTestFixtureWithApp {
             initCalled = true;
         }
         
-        // TODO When AbstractEnricher declares rebind; @Override
+        @Override
         public void rebind() {
-            // TODO super.rebind();
+            super.rebind();
             rebindCalled = true;
         }
     }

http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/08244283/core/src/test/java/brooklyn/entity/rebind/RebindPolicyTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/brooklyn/entity/rebind/RebindPolicyTest.java 
b/core/src/test/java/brooklyn/entity/rebind/RebindPolicyTest.java
index 8e54781..552db17 100644
--- a/core/src/test/java/brooklyn/entity/rebind/RebindPolicyTest.java
+++ b/core/src/test/java/brooklyn/entity/rebind/RebindPolicyTest.java
@@ -124,6 +124,18 @@ public class RebindPolicyTest extends 
RebindTestFixtureWithApp {
     }
     
     @Test
+    public void testReconfigurePolicyPersistsChange() throws Exception {
+        MyPolicyReconfigurable policy = 
origApp.addPolicy(PolicySpec.create(MyPolicyReconfigurable.class)
+                .configure(MyPolicyReconfigurable.MY_CONFIG, "oldval"));
+        policy.setConfig(MyPolicyReconfigurable.MY_CONFIG, "newval");
+        
+        newApp = (TestApplication) rebind();
+        MyPolicyReconfigurable newPolicy = (MyPolicyReconfigurable) 
Iterables.getOnlyElement(newApp.getPolicies());
+
+        assertEquals(newPolicy.getConfig(MyPolicyReconfigurable.MY_CONFIG), 
"newval");
+    }
+
+    @Test
     public void testIsRebinding() throws Exception {
         origApp.addPolicy(PolicySpec.create(PolicyChecksIsRebinding.class));
 
@@ -182,9 +194,9 @@ public class RebindPolicyTest extends 
RebindTestFixtureWithApp {
             initCalled = true;
         }
         
-        // TODO When AbstractPolicy declares rebind; @Override
+        @Override
         public void rebind() {
-            // TODO super.rebind();
+            super.rebind();
             rebindCalled = true;
         }
     }
@@ -194,4 +206,21 @@ public class RebindPolicyTest extends 
RebindTestFixtureWithApp {
             super(flags);
         }
     }
+    
+    public static class MyPolicyReconfigurable extends AbstractPolicy {
+        public static final ConfigKey<String> MY_CONFIG = 
ConfigKeys.newStringConfigKey("myconfig");
+        
+        public MyPolicyReconfigurable() {
+            super();
+        }
+        
+        @Override
+        protected <T> void doReconfigureConfig(ConfigKey<T> key, T val) {
+            if (MY_CONFIG.equals(key)) {
+                // we'd do here whatever reconfig meant; caller will set 
actual new val
+            } else {
+                super.doReconfigureConfig(key, val);
+            }
+        }
+    }
 }

Reply via email to