You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by ga...@apache.org on 2008/11/29 22:44:00 UTC

svn commit: r721726 - in /geronimo/server/trunk/framework/modules/geronimo-system/src: main/java/org/apache/geronimo/system/configuration/GBeanOverride.java test/java/org/apache/geronimo/system/configuration/GBeanOverrideTest.java

Author: gawor
Date: Sat Nov 29 13:44:00 2008
New Revision: 721726

URL: http://svn.apache.org/viewvc?rev=721726&view=rev
Log:
ensure an attribute or a reference exists in one map at a time - should be really using one map for attributes and another one for references (GERONIMO-4407)

Modified:
    geronimo/server/trunk/framework/modules/geronimo-system/src/main/java/org/apache/geronimo/system/configuration/GBeanOverride.java
    geronimo/server/trunk/framework/modules/geronimo-system/src/test/java/org/apache/geronimo/system/configuration/GBeanOverrideTest.java

Modified: geronimo/server/trunk/framework/modules/geronimo-system/src/main/java/org/apache/geronimo/system/configuration/GBeanOverride.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-system/src/main/java/org/apache/geronimo/system/configuration/GBeanOverride.java?rev=721726&r1=721725&r2=721726&view=diff
==============================================================================
--- geronimo/server/trunk/framework/modules/geronimo-system/src/main/java/org/apache/geronimo/system/configuration/GBeanOverride.java (original)
+++ geronimo/server/trunk/framework/modules/geronimo-system/src/main/java/org/apache/geronimo/system/configuration/GBeanOverride.java Sat Nov 29 13:44:00 2008
@@ -184,7 +184,7 @@
                 }
                 
                 if (attr.isNull()) {
-                    getNullAttributes().add(attr.getName());
+                    setNullAttribute(attr.getName());
                 } else {
                     String value;
                     try {
@@ -198,7 +198,7 @@
                         setClearAttribute(attr.getName());
                     } else {
                         String truevalue = (String) EncryptionManager.decrypt(value);
-                        getAttributes().put(attr.getName(), truevalue);
+                        setAttribute(attr.getName(), truevalue);
                     }
                 }
             } else if (o instanceof ReferenceType) {
@@ -295,14 +295,21 @@
 
     public void setClearAttribute(String attributeName) {
         clearAttributes.add(attributeName);
+        // remove attribute from other maps
+        nullAttributes.remove(attributeName);
+        attributes.remove(attributeName);
     }
 
     public void setNullAttribute(String attributeName) {
         nullAttributes.add(attributeName);
+        // remove attribute from other maps
+        clearAttributes.remove(attributeName);
+        attributes.remove(attributeName);
     }
 
     public void setClearReference(String referenceName) {
         clearReferences.add(referenceName);
+        references.remove(referenceName);
     }
 
     public void setAttribute(String attributeName, Object attributeValue, String attributeType, ClassLoader classLoader) throws InvalidAttributeException {
@@ -312,9 +319,12 @@
 
     public void setAttribute(String attributeName, String attributeValue) {
         if (attributeValue == null || attributeValue.length() == 0) {
-            clearAttributes.add(attributeName);
+            setClearAttribute(attributeName);
         } else {
             attributes.put(attributeName, attributeValue);
+            // remove attribute from other maps
+            clearAttributes.remove(attributeName);
+            nullAttributes.remove(attributeName);
         }
     }
     
@@ -328,6 +338,7 @@
 
     public void setReferencePatterns(String name, ReferencePatterns patterns) {
         references.put(name, patterns);
+        clearReferences.remove(name);
     }
 
     public boolean applyOverrides(GBeanData data, Artifact configName, AbstractName gbeanName, ClassLoader classLoader) throws InvalidConfigException {
@@ -452,11 +463,12 @@
             String name = entry.getKey();
             String value = entry.getValue();
             if (value == null) {
-                setNullAttribute(name);
-            } else {
-                if (isNullAttribute(name)) {
-                    nullAttributes.remove(name);
-                }
+                nullAttributes.add(name);
+                clearAttributes.remove(name);
+            } else {                
+                nullAttributes.remove(name);
+                clearAttributes.remove(name);
+
                 if (name.toLowerCase().indexOf("password") > -1) {
                     value = EncryptionManager.encrypt(value);
                 }

Modified: geronimo/server/trunk/framework/modules/geronimo-system/src/test/java/org/apache/geronimo/system/configuration/GBeanOverrideTest.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/framework/modules/geronimo-system/src/test/java/org/apache/geronimo/system/configuration/GBeanOverrideTest.java?rev=721726&r1=721725&r2=721726&view=diff
==============================================================================
--- geronimo/server/trunk/framework/modules/geronimo-system/src/test/java/org/apache/geronimo/system/configuration/GBeanOverrideTest.java (original)
+++ geronimo/server/trunk/framework/modules/geronimo-system/src/test/java/org/apache/geronimo/system/configuration/GBeanOverrideTest.java Sat Nov 29 13:44:00 2008
@@ -20,11 +20,14 @@
 package org.apache.geronimo.system.configuration;
 
 import java.beans.PropertyEditorSupport;
+import java.net.URI;
 import java.util.Collection;
 import java.util.Collections;
 
 import junit.framework.TestCase;
 
+import org.apache.geronimo.gbean.AbstractName;
+import org.apache.geronimo.gbean.ReferencePatterns;
 import org.apache.geronimo.system.configuration.condition.JexlExpressionParser;
 import org.apache.geronimo.system.plugin.model.AttributeType;
 import org.apache.geronimo.system.plugin.model.GbeanType;
@@ -112,6 +115,83 @@
         assertNull(attributeType.getPropertyEditor());
     }
     
+    public void testReferences() throws Exception {
+        GBeanOverride override;
+        
+        override = new GBeanOverride(gbeanType, new JexlExpressionParser());        
+        override.setClearReference("foo");
+        override.setReferencePatterns("foo", new ReferencePatterns(new AbstractName(new URI("/foo/bar/car?foo=bar"))));
+        override.writeXml();
+        
+        assertFalse(override.isClearReference("foo"));
+        assertFalse(override.getClearReferences().contains("foo"));        
+        assertTrue(override.getReferencePatterns("foo") != null);
+        assertTrue(override.getReferences().containsKey("foo"));
+        
+        override = new GBeanOverride(gbeanType, new JexlExpressionParser());   
+        override.setReferencePatterns("foo", new ReferencePatterns(new AbstractName(new URI("/foo/bar/car?foo=bar"))));        
+        override.setClearReference("foo");
+        override.writeXml();
+        
+        assertTrue(override.isClearReference("foo"));
+        assertTrue(override.getClearReferences().contains("foo"));        
+        assertFalse(override.getReferencePatterns("foo") != null);
+        assertFalse(override.getReferences().containsKey("foo"));        
+    }
+    
+    public void testAttributes() throws Exception {
+        GBeanOverride override;
+        
+        override = new GBeanOverride(gbeanType, new JexlExpressionParser()); 
+        override.setNullAttribute("foo");
+        override.setClearAttribute("foo");
+        override.setAttribute("foo", "bar");
+        override.writeXml();
+        
+        assertFalse(override.isNullAttribute("foo"));
+        assertFalse(override.getNullAttributes().contains("foo"));    
+        assertFalse(override.isClearAttribute("foo"));
+        assertFalse(override.getClearAttributes().contains("foo"));  
+        assertTrue(override.getAttribute("foo") != null);
+        assertTrue(override.getAttributes().containsKey("foo"));
+            
+        override = new GBeanOverride(gbeanType, new JexlExpressionParser()); 
+        override.setAttribute("foo", "bar");
+        override.setNullAttribute("foo");
+        override.setClearAttribute("foo");
+        override.writeXml();
+        
+        assertFalse(override.isNullAttribute("foo"));
+        assertFalse(override.getNullAttributes().contains("foo"));    
+        assertFalse(override.getAttribute("foo") != null);
+        assertFalse(override.getAttributes().containsKey("foo"));        
+        assertTrue(override.isClearAttribute("foo"));
+        assertTrue(override.getClearAttributes().contains("foo"));  
+        
+        override = new GBeanOverride(gbeanType, new JexlExpressionParser()); 
+        override.setClearAttribute("foo");
+        override.setAttribute("foo", "bar");
+        override.setNullAttribute("foo");
+        override.writeXml();
+            
+        assertFalse(override.getAttribute("foo") != null);
+        assertFalse(override.getAttributes().containsKey("foo"));        
+        assertFalse(override.isClearAttribute("foo"));
+        assertFalse(override.getClearAttributes().contains("foo"));         
+        assertTrue(override.isNullAttribute("foo"));
+        assertTrue(override.getNullAttributes().contains("foo"));
+        
+        override = new GBeanOverride(gbeanType, new JexlExpressionParser()); 
+        override.setAttribute("bar1", "foo");
+        override.setAttribute("bar2", "foo");
+        override.getAttributes().put("foo", null);
+        GbeanType gbean = override.writeXml();
+        assertEquals(3, gbean.getAttributeOrReference().size());
+        AttributeType attribute = (AttributeType)gbean.getAttributeOrReference().get(2);
+        assertEquals("foo", attribute.getName());
+        assertTrue(attribute.isNull());
+    }
+    
     public interface Service {
     }