You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by jg...@apache.org on 2006/03/01 07:40:06 UTC

svn commit: r381929 - in /geronimo/trunk/modules/system/src: java/org/apache/geronimo/system/configuration/ test/org/apache/geronimo/system/configuration/

Author: jgenender
Date: Tue Feb 28 22:40:04 2006
New Revision: 381929

URL: http://svn.apache.org/viewcvs?rev=381929&view=rev
Log:
Added value and null attributes and empty attrs and refs are now clearing/removal of the set value.

Modified:
    geronimo/trunk/modules/system/src/java/org/apache/geronimo/system/configuration/GBeanOverride.java
    geronimo/trunk/modules/system/src/java/org/apache/geronimo/system/configuration/LocalAttributeManager.java
    geronimo/trunk/modules/system/src/test/org/apache/geronimo/system/configuration/ServerOverrideTest.java

Modified: geronimo/trunk/modules/system/src/java/org/apache/geronimo/system/configuration/GBeanOverride.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/system/src/java/org/apache/geronimo/system/configuration/GBeanOverride.java?rev=381929&r1=381928&r2=381929&view=diff
==============================================================================
--- geronimo/trunk/modules/system/src/java/org/apache/geronimo/system/configuration/GBeanOverride.java (original)
+++ geronimo/trunk/modules/system/src/java/org/apache/geronimo/system/configuration/GBeanOverride.java Tue Feb 28 22:40:04 2006
@@ -42,11 +42,19 @@
  */
 class GBeanOverride {
     private final Object name;
+
     private boolean load;
+
     private final Map attributes = new LinkedHashMap();
+
     private final ArrayList clearAttributes = new ArrayList();
+
+    private final ArrayList nullAttributes = new ArrayList();
+
     private final Map references = new LinkedHashMap();
+
     private final ArrayList clearReferences = new ArrayList();
+
     private final String gbeanInfo;
 
     public GBeanOverride(String name, boolean load) {
@@ -65,18 +73,22 @@
         GBeanInfo gbeanInfo = gbeanData.getGBeanInfo();
         this.gbeanInfo = gbeanInfo.getSourceClass();
         if (this.gbeanInfo == null) {
-            throw new IllegalArgumentException("GBeanInfo must have a source class set");
+            throw new IllegalArgumentException(
+                    "GBeanInfo must have a source class set");
         }
         name = gbeanData.getName();
         load = true;
 
         // set attributes
-        for (Iterator iterator = gbeanData.getAttributes().entrySet().iterator(); iterator.hasNext();) {
+        for (Iterator iterator = gbeanData.getAttributes().entrySet()
+                .iterator(); iterator.hasNext();) {
             Map.Entry entry = (Map.Entry) iterator.next();
             String attributeName = (String) entry.getKey();
-            GAttributeInfo attributeInfo = gbeanInfo.getAttribute(attributeName);
+            GAttributeInfo attributeInfo = gbeanInfo
+                    .getAttribute(attributeName);
             if (attributeInfo == null) {
-                throw new InvalidAttributeException("No attribute: " + attributeName + " for gbean: " + gbeanData.getName());
+                throw new InvalidAttributeException("No attribute: "
+                        + attributeName + " for gbean: " + gbeanData.getName());
             }
             Object attributeValue = entry.getValue();
             setAttribute(attributeName, attributeValue, attributeInfo.getType());
@@ -101,7 +113,9 @@
             gbeanInfo = null;
         }
         if (gbeanInfo != null && !(name instanceof ObjectName)) {
-            throw new MalformedObjectNameException("A gbean element using the gbeanInfo attribute must be specified using a full ObjectName: name=" + nameString);
+            throw new MalformedObjectNameException(
+                    "A gbean element using the gbeanInfo attribute must be specified using a full ObjectName: name="
+                            + nameString);
         }
 
         String loadString = gbean.getAttribute("load");
@@ -113,13 +127,31 @@
             Element attribute = (Element) attributes.item(a);
 
             String attributeName = attribute.getAttribute("name");
-            String emptyStr = attribute.getAttribute("empty");
-            boolean empty = "true".equals(emptyStr);
-            if (empty){
-                clearAttributes.add(attributeName);
+
+            // Check to see if there is a value attribute
+            if (attribute.hasAttribute("value")) {
+                setAttribute(attributeName, (String) EncryptionManager
+                        .decrypt(attribute.getAttribute("value")));
                 continue;
             }
-            String attributeValue = (String)EncryptionManager.decrypt(getContentsAsText(attribute));
+            
+            // Check to see if there is a null attribute
+            if (attribute.hasAttribute("null")) {
+                String nullString = attribute.getAttribute("null");
+                if (nullString.equals("true")){
+                    setNullAttribute(attributeName);
+                    continue;
+                }
+            }
+
+            String rawAttribute = getContentsAsText(attribute);
+            // If there are no contents, then it's to be cleared
+            if (rawAttribute.length() == 0) {
+                setClearAttribute(attributeName);
+                continue;
+            }
+            String attributeValue = (String) EncryptionManager
+                    .decrypt(rawAttribute);
             setAttribute(attributeName, attributeValue);
         }
 
@@ -129,24 +161,31 @@
             Element reference = (Element) references.item(r);
 
             String referenceName = reference.getAttribute("name");
-            String emptyStr = reference.getAttribute("empty");
-            boolean empty = "true".equals(emptyStr);
-            if (empty){
-                clearReferences.add(referenceName);
-                continue;
-            }
 
             Set objectNamePatterns = new LinkedHashSet();
             NodeList patterns = reference.getElementsByTagName("pattern");
-            for (int p = 0; p < references.getLength(); p++) {
+            
+            // If there is no pattern, then its an empty set, so its a
+            // cleared value
+            if (patterns.getLength() == 0) {
+                setClearReference(referenceName);
+                continue;
+            }
+
+            for (int p = 0; p < patterns.getLength(); p++) {
                 Element pattern = (Element) patterns.item(p);
-                NodeList gbeanNames = pattern.getElementsByTagName("gbean-name");
+                if (pattern == null)
+                    continue;
+
+                NodeList gbeanNames = pattern
+                        .getElementsByTagName("gbean-name");
                 if (gbeanNames.getLength() != 1) {
-                    throw new MalformedObjectNameException("pattern does not contain a valid gbean-name:" +
-                            " name=" + nameString +
-                            " referenceName=" + referenceName);
+                    throw new MalformedObjectNameException(
+                            "pattern does not contain a valid gbean-name:"
+                                    + " name=" + nameString + " referenceName="
+                                    + referenceName);
                 }
-                String value = getContentsAsText((Element)gbeanNames.item(0));
+                String value = getContentsAsText((Element) gbeanNames.item(0));
                 ObjectName objectNamePattern = new ObjectName(value);
                 objectNamePatterns.add(objectNamePattern);
             }
@@ -190,28 +229,52 @@
     public String getAttribute(String attributeName) {
         return (String) attributes.get(attributeName);
     }
-    
-    public ArrayList getClearAttributes(){
+
+    public ArrayList getClearAttributes() {
         return clearAttributes;
     }
     
-    public boolean getClearAttribute(String attributeName){
-        return clearAttributes.contains(attributeName);
+    public ArrayList getNullAttributes() {
+        return nullAttributes;
+    }
+
+    public boolean getNullAttribute(String attributeName) {
+        return nullAttributes.contains(attributeName);
     }
     
-    public ArrayList getClearRefrences(){
+    public boolean getClearAttribute(String attributeName) {
+        return clearAttributes.contains(attributeName);
+    }
+
+    public ArrayList getClearReferences() {
         return clearReferences;
     }
-    
-    public boolean getClearReference(String referenceName){
+
+    public boolean getClearReference(String referenceName) {
         return clearReferences.contains(referenceName);
     }
 
+    public void setClearAttribute(String attributeName) {
+        if (!clearAttributes.contains(attributeName))
+            clearAttributes.add(attributeName);
+    }
+    
+    public void setNullAttribute(String attributeName) {
+        if (!nullAttributes.contains(attributeName))
+            nullAttributes.add(attributeName);
+    }
 
-    public void setAttribute(String attributeName, Object attributeValue, String attributeType) throws InvalidAttributeException {
+    public void setClearReference(String referenceName) {
+        if (!clearReferences.contains(referenceName))
+            clearReferences.add(referenceName);
+    }
+
+    public void setAttribute(String attributeName, Object attributeValue,
+            String attributeType) throws InvalidAttributeException {
         String stringValue = getAsText(attributeValue, attributeType);
         attributes.put(attributeName, stringValue);
     }
+
     public void setAttribute(String attributeName, String attributeValue) {
         attributes.put(attributeName, attributeValue);
     }
@@ -244,37 +307,51 @@
         if (gbeanInfo != null) {
             out.print(" gbeanInfo=\"" + gbeanInfo + "\"");
         }
-        
+
         if (!load) {
             out.print(" load=\"false\"");
         }
         out.println(">");
 
         // attributes
-        for (Iterator iterator = attributes.entrySet().iterator(); iterator.hasNext();) {
+        for (Iterator iterator = attributes.entrySet().iterator(); iterator
+                .hasNext();) {
             Map.Entry entry = (Map.Entry) iterator.next();
             String name = (String) entry.getKey();
             String value = (String) entry.getValue();
-            if(name.toLowerCase().indexOf("password") > -1) {
+            if (name.toLowerCase().indexOf("password") > -1) {
                 value = EncryptionManager.encrypt(value);
             }
-            out.println("      <attribute name=\"" + name + "\">" +  value + "</attribute>");
+            if (value.length() == 0)
+                out.println("      <attribute name=\"" + name
+                        + "\" value=\"\" />");
+            else
+                out.println("      <attribute name=\"" + name + "\">" + value
+                        + "</attribute>");
         }
-        
+
         // cleared attributes
         for (Iterator iterator = clearAttributes.iterator(); iterator.hasNext();) {
             String name = (String) iterator.next();
-            out.println("      <attribute name=\"" + name + "\" empty=\"true\" />");
+            out.println("      <attribute name=\"" + name + "\" />");
+        }
+        
+        // Null attributes
+        for (Iterator iterator = nullAttributes.iterator(); iterator.hasNext();) {
+            String name = (String) iterator.next();
+            out.println("      <attribute name=\"" + name + "\" null=\"true\" />");
         }
 
         // references
-        for (Iterator iterator = references.entrySet().iterator(); iterator.hasNext();) {
+        for (Iterator iterator = references.entrySet().iterator(); iterator
+                .hasNext();) {
             Map.Entry entry = (Map.Entry) iterator.next();
             String name = (String) entry.getKey();
             Set patterns = (Set) entry.getValue();
 
             out.println("      <reference name=\"" + name + "\">");
-            for (Iterator patternIterator = patterns.iterator(); patternIterator.hasNext();) {
+            for (Iterator patternIterator = patterns.iterator(); patternIterator
+                    .hasNext();) {
                 ObjectName pattern = (ObjectName) patternIterator.next();
                 out.print("          <pattern><gbean-name>");
                 out.print(pattern.getCanonicalName());
@@ -285,27 +362,33 @@
         // cleared references
         for (Iterator iterator = clearReferences.iterator(); iterator.hasNext();) {
             String name = (String) iterator.next();
-            out.println("      <reference name=\"" + name + "\" empty=\"true\" />");
+            out.println("      <reference name=\"" + name + "\" />");
         }
 
         out.println("    </gbean>");
     }
 
-    public static String getAsText(Object value, String type) throws InvalidAttributeException {
+    public static String getAsText(Object value, String type)
+            throws InvalidAttributeException {
         try {
             String attributeStringValue = null;
             if (value != null) {
-                PropertyEditor editor = PropertyEditors.findEditor(type, GBeanOverride.class.getClassLoader());
+                PropertyEditor editor = PropertyEditors.findEditor(type,
+                        GBeanOverride.class.getClassLoader());
                 if (editor == null) {
-                    throw new InvalidAttributeException("Unable to format attribute of type " + type + "; no editor found");
+                    throw new InvalidAttributeException(
+                            "Unable to format attribute of type " + type
+                                    + "; no editor found");
                 }
                 editor.setValue(value);
                 attributeStringValue = editor.getAsText();
             }
             return attributeStringValue;
         } catch (ClassNotFoundException e) {
-            //todo: use the Configuration's ClassLoader to load the attribute, if this ever becomes an issue
-            throw new InvalidAttributeException("Unable to store attribute type " + type);
+            // todo: use the Configuration's ClassLoader to load the attribute,
+            // if this ever becomes an issue
+            throw new InvalidAttributeException(
+                    "Unable to store attribute type " + type);
         }
     }
 }

Modified: geronimo/trunk/modules/system/src/java/org/apache/geronimo/system/configuration/LocalAttributeManager.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/system/src/java/org/apache/geronimo/system/configuration/LocalAttributeManager.java?rev=381929&r1=381928&r2=381929&view=diff
==============================================================================
--- geronimo/trunk/modules/system/src/java/org/apache/geronimo/system/configuration/LocalAttributeManager.java (original)
+++ geronimo/trunk/modules/system/src/java/org/apache/geronimo/system/configuration/LocalAttributeManager.java Tue Feb 28 22:40:04 2006
@@ -189,6 +189,14 @@
                data.clearAttribute(attribute);
            }
         }
+        
+        //Null attributes
+        for (Iterator iterator = gbean.getNullAttributes().iterator(); iterator.hasNext();){
+           String attribute = (String) iterator.next(); 
+           if (gbean.getNullAttribute(attribute)){
+               data.setAttribute(attribute, null);
+           }
+        }
 
         // set references
         for (Iterator iterator = gbean.getReferences().entrySet().iterator(); iterator.hasNext();) {
@@ -206,7 +214,7 @@
         }
         
         //Clear references
-        for (Iterator iterator = gbean.getClearRefrences().iterator(); iterator.hasNext();){
+        for (Iterator iterator = gbean.getClearReferences().iterator(); iterator.hasNext();){
            String reference = (String) iterator.next(); 
            if (gbean.getClearReference(reference)){
                data.clearReference(reference);

Modified: geronimo/trunk/modules/system/src/test/org/apache/geronimo/system/configuration/ServerOverrideTest.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/system/src/test/org/apache/geronimo/system/configuration/ServerOverrideTest.java?rev=381929&r1=381928&r2=381929&view=diff
==============================================================================
--- geronimo/trunk/modules/system/src/test/org/apache/geronimo/system/configuration/ServerOverrideTest.java (original)
+++ geronimo/trunk/modules/system/src/test/org/apache/geronimo/system/configuration/ServerOverrideTest.java Tue Feb 28 22:40:04 2006
@@ -103,9 +103,13 @@
         GBeanOverride pizza = new GBeanOverride("Pizza", false);
         pizza.setAttribute("cheese", "mozzarella");
         pizza.setAttribute("size", "x-large");
+        pizza.setAttribute("emptyString", "");
+        pizza.setClearAttribute("greenPeppers");
+        pizza.setNullAttribute("pineapple");
         ObjectName pizzaOvenPattern = new ObjectName(":name=PizzaOven,j2eeType=oven,*");
         ObjectName toasterOvenPattern = new ObjectName(":name=ToasterOven,j2eeType=oven,*");
         pizza.setReferencePatterns("oven", new LinkedHashSet(Arrays.asList(new ObjectName[] {pizzaOvenPattern, toasterOvenPattern})));
+        pizza.setClearReference("microwave");
         assertCopyIdentical(dinnerMenu);
 
         dinnerMenu.addGBean(pizza);
@@ -126,9 +130,13 @@
         GBeanOverride pizza = new GBeanOverride("Pizza", false);
         pizza.setAttribute("cheese", "mozzarella");
         pizza.setAttribute("size", "x-large");
+        pizza.setAttribute("emptyString", "");
+        pizza.setClearAttribute("greenPeppers");
+        pizza.setNullAttribute("pineapple");
         ObjectName pizzaOvenPattern = new ObjectName(":name=PizzaOven,j2eeType=oven,*");
         ObjectName toasterOvenPattern = new ObjectName(":name=ToasterOven,j2eeType=oven,*");
         pizza.setReferencePatterns("oven", new LinkedHashSet(Arrays.asList(new ObjectName[] {pizzaOvenPattern, toasterOvenPattern})));
+        pizza.setClearReference("microwave");
         dinnerMenu.addGBean(pizza);
         GBeanOverride garlicCheeseBread = new GBeanOverride("Garlic Cheese Bread", true);
         garlicCheeseBread.setReferencePattern("oven", toasterOvenPattern);
@@ -215,6 +223,9 @@
         assertEquals(expected.getName(), actual.getName());
         assertEquals(expected.isLoad(), actual.isLoad());
         assertEquals(expected.getAttributes(), actual.getAttributes());
+        assertEquals(expected.getClearAttributes(), actual.getClearAttributes());
+        assertEquals(expected.getNullAttributes(), actual.getNullAttributes());
+        assertEquals(expected.getClearReferences(), actual.getClearReferences());
     }
 
     private ServerOverride copy(ServerOverride server) throws Exception {



Re: svn commit: r381929 - in /geronimo/trunk/modules/system/src: java/org/apache/geronimo/system/configuration/ test/org/apache/geronimo/system/configuration/

Posted by John Sisson <jr...@gmail.com>.
jgenender@apache.org wrote:
> Author: jgenender
> Date: Tue Feb 28 22:40:04 2006
> New Revision: 381929
>
> URL: http://svn.apache.org/viewcvs?rev=381929&view=rev
> Log:
> Added value and null attributes and empty attrs and refs are now clearing/removal of the set value.
>
> Modified:
>     geronimo/trunk/modules/system/src/java/org/apache/geronimo/system/configuration/GBeanOverride.java
>     geronimo/trunk/modules/system/src/java/org/apache/geronimo/system/configuration/LocalAttributeManager.java
>     geronimo/trunk/modules/system/src/test/org/apache/geronimo/system/configuration/ServerOverrideTest.java
>
>   
Can we have a JIRA for this so it will be in the release notes.

Thanks,

John