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/04/06 04:42:56 UTC
svn commit: r391883 - in /geronimo/branches/1.1/modules:
kernel/src/java/org/apache/geronimo/gbean/
system/src/java/org/apache/geronimo/system/configuration/
system/src/test/org/apache/geronimo/system/configuration/
Author: jgenender
Date: Wed Apr 5 19:42:54 2006
New Revision: 391883
URL: http://svn.apache.org/viewcvs?rev=391883&view=rev
Log:
Merge in the config.xml empty string, null, and reference removal code from trunk
Modified:
geronimo/branches/1.1/modules/kernel/src/java/org/apache/geronimo/gbean/GBeanData.java
geronimo/branches/1.1/modules/system/src/java/org/apache/geronimo/system/configuration/GBeanOverride.java
geronimo/branches/1.1/modules/system/src/java/org/apache/geronimo/system/configuration/LocalAttributeManager.java
geronimo/branches/1.1/modules/system/src/test/org/apache/geronimo/system/configuration/ServerOverrideTest.java
Modified: geronimo/branches/1.1/modules/kernel/src/java/org/apache/geronimo/gbean/GBeanData.java
URL: http://svn.apache.org/viewcvs/geronimo/branches/1.1/modules/kernel/src/java/org/apache/geronimo/gbean/GBeanData.java?rev=391883&r1=391882&r2=391883&view=diff
==============================================================================
--- geronimo/branches/1.1/modules/kernel/src/java/org/apache/geronimo/gbean/GBeanData.java (original)
+++ geronimo/branches/1.1/modules/kernel/src/java/org/apache/geronimo/gbean/GBeanData.java Wed Apr 5 19:42:54 2006
@@ -73,6 +73,13 @@
public GBeanInfo getGBeanInfo() {
return gbeanInfo;
}
+
+ public void clearAttribute(String name){
+ attributes.remove(name);
+ }
+ public void clearReference(String name){
+ references.remove(name);
+ }
public void setGBeanInfo(GBeanInfo gbeanInfo) {
this.gbeanInfo = gbeanInfo;
Modified: geronimo/branches/1.1/modules/system/src/java/org/apache/geronimo/system/configuration/GBeanOverride.java
URL: http://svn.apache.org/viewcvs/geronimo/branches/1.1/modules/system/src/java/org/apache/geronimo/system/configuration/GBeanOverride.java?rev=391883&r1=391882&r2=391883&view=diff
==============================================================================
--- geronimo/branches/1.1/modules/system/src/java/org/apache/geronimo/system/configuration/GBeanOverride.java (original)
+++ geronimo/branches/1.1/modules/system/src/java/org/apache/geronimo/system/configuration/GBeanOverride.java Wed Apr 5 19:42:54 2006
@@ -19,6 +19,7 @@
import java.beans.PropertyEditor;
import java.io.PrintWriter;
import java.net.URI;
+import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
@@ -49,6 +50,9 @@
private boolean load;
private final Map attributes = new LinkedHashMap();
private final Map references = new LinkedHashMap();
+ private final ArrayList clearAttributes = new ArrayList();
+ private final ArrayList nullAttributes = new ArrayList();
+ private final ArrayList clearReferences = new ArrayList();
private final String gbeanInfo;
public GBeanOverride(String name, boolean load) {
@@ -115,7 +119,32 @@
Element attribute = (Element) attributes.item(a);
String attributeName = attribute.getAttribute("name");
- String attributeValue = (String)EncryptionManager.decrypt(getContentsAsText(attribute));
+
+ // Check to see if there is a value attribute
+ if (attribute.hasAttribute("value")) {
+ setAttribute(attributeName, (String) EncryptionManager
+ .decrypt(attribute.getAttribute("value")));
+ continue;
+ }
+
+ // 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);
}
@@ -128,8 +157,19 @@
Set objectNamePatterns = new LinkedHashSet();
NodeList patterns = reference.getElementsByTagName("pattern");
+
+ // 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 < references.getLength(); p++) {
Element pattern = (Element) patterns.item(p);
+ if (pattern == null)
+ continue;
+
String groupId = getChildAsText(pattern, "groupId");
String artifactId = getChildAsText(pattern, "artifactId");
String version = getChildAsText(pattern, "version");
@@ -203,10 +243,50 @@
return (String) attributes.get(attributeName);
}
+ public ArrayList getClearAttributes() {
+ return clearAttributes;
+ }
+
+ public ArrayList getNullAttributes() {
+ return nullAttributes;
+ }
+
+ public boolean getNullAttribute(String attributeName) {
+ return nullAttributes.contains(attributeName);
+ }
+
+ public boolean getClearAttribute(String attributeName) {
+ return clearAttributes.contains(attributeName);
+ }
+
+ public ArrayList getClearReferences() {
+ return clearReferences;
+ }
+
+ 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 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);
}
@@ -249,7 +329,22 @@
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 + "\" />");
+ }
+
+ // Null attributes
+ for (Iterator iterator = nullAttributes.iterator(); iterator.hasNext();) {
+ String name = (String) iterator.next();
+ out.println(" <attribute name=\"" + name + "\" null=\"true\" />");
}
// references
@@ -286,6 +381,12 @@
out.println("</pattern>");
}
out.println(" </reference>");
+ }
+
+ // cleared references
+ for (Iterator iterator = clearReferences.iterator(); iterator.hasNext();) {
+ String name = (String) iterator.next();
+ out.println(" <reference name=\"" + name + "\" />");
}
out.println(" </gbean>");
Modified: geronimo/branches/1.1/modules/system/src/java/org/apache/geronimo/system/configuration/LocalAttributeManager.java
URL: http://svn.apache.org/viewcvs/geronimo/branches/1.1/modules/system/src/java/org/apache/geronimo/system/configuration/LocalAttributeManager.java?rev=391883&r1=391882&r2=391883&view=diff
==============================================================================
--- geronimo/branches/1.1/modules/system/src/java/org/apache/geronimo/system/configuration/LocalAttributeManager.java (original)
+++ geronimo/branches/1.1/modules/system/src/java/org/apache/geronimo/system/configuration/LocalAttributeManager.java Wed Apr 5 19:42:54 2006
@@ -58,7 +58,7 @@
/**
* Stores managed attributes in an XML file on the local filesystem.
*
- * @version $Rev: 386505 $ $Date$
+ * @version $Rev$ $Date$
*/
public class LocalAttributeManager implements ManageableAttributeStore, PersistentConfigurationList, GBeanLifecycle {
private final static Log log = LogFactory.getLog(LocalAttributeManager.class);
@@ -182,6 +182,22 @@
data.setAttribute(attributeName, value);
}
+ //Clear attributes
+ for (Iterator iterator = gbean.getClearAttributes().iterator(); iterator.hasNext();){
+ String attribute = (String) iterator.next();
+ if (gbean.getClearAttribute(attribute)){
+ 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();) {
Map.Entry entry = (Map.Entry) iterator.next();
@@ -196,6 +212,15 @@
data.setReferencePatterns(referenceName, referencePatterns);
}
+
+ //Clear references
+ for (Iterator iterator = gbean.getClearReferences().iterator(); iterator.hasNext();){
+ String reference = (String) iterator.next();
+ if (gbean.getClearReference(reference)){
+ data.clearReference(reference);
+ }
+ }
+
return true;
}
Modified: geronimo/branches/1.1/modules/system/src/test/org/apache/geronimo/system/configuration/ServerOverrideTest.java
URL: http://svn.apache.org/viewcvs/geronimo/branches/1.1/modules/system/src/test/org/apache/geronimo/system/configuration/ServerOverrideTest.java?rev=391883&r1=391882&r2=391883&view=diff
==============================================================================
--- geronimo/branches/1.1/modules/system/src/test/org/apache/geronimo/system/configuration/ServerOverrideTest.java (original)
+++ geronimo/branches/1.1/modules/system/src/test/org/apache/geronimo/system/configuration/ServerOverrideTest.java Wed Apr 5 19:42:54 2006
@@ -120,12 +120,18 @@
GBeanOverride pizza = new GBeanOverride("Pizza", false);
pizza.setAttribute("cheese", "mozzarella");
pizza.setAttribute("size", "x-large");
+ pizza.setAttribute("emptyString", "");
+ pizza.setClearAttribute("greenPeppers");
+ pizza.setNullAttribute("pineapple");
+
AbstractNameQuery pizzaOvenQuery = getAbstractNameQuery(":name=PizzaOven,j2eeType=oven");
AbstractNameQuery toasterOvenQuery = getAbstractNameQuery(":name=ToasterOven,j2eeType=oven,*");
AbstractNameQuery[] queries = new AbstractNameQuery[]{pizzaOvenQuery, toasterOvenQuery};
ReferencePatterns ovenPatterns = getReferencePatterns(queries);
pizza.setReferencePatterns("oven", ovenPatterns);
- assertCopyIdentical(dinnerMenu);
+ pizza.setClearReference("microwave");
+
+ assertCopyIdentical(dinnerMenu);
dinnerMenu.addGBean(pizza);
assertCopyIdentical(dinnerMenu);
@@ -146,11 +152,15 @@
GBeanOverride pizza = new GBeanOverride("Pizza", false);
pizza.setAttribute("cheese", "mozzarella");
pizza.setAttribute("size", "x-large");
+ pizza.setAttribute("emptyString", "");
+ pizza.setClearAttribute("greenPeppers");
+ pizza.setNullAttribute("pineapple");
AbstractNameQuery pizzaOvenQuery = getAbstractNameQuery(":name=PizzaOven,j2eeType=oven");
AbstractNameQuery toasterOvenQuery = getAbstractNameQuery(":name=ToasterOven,j2eeType=oven,*");
AbstractNameQuery[] queries = new AbstractNameQuery[]{pizzaOvenQuery, toasterOvenQuery};
ReferencePatterns ovenPatterns = getReferencePatterns(queries);
pizza.setReferencePatterns("oven", ovenPatterns);
+ pizza.setClearReference("microwave");
dinnerMenu.addGBean(pizza);
GBeanOverride garlicCheeseBread = new GBeanOverride("Garlic Cheese Bread", true);
ReferencePatterns toasterOvenPatterns = new ReferencePatterns(Collections.singleton(toasterOvenQuery));
@@ -238,6 +248,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 {