first commit
This commit is contained in:
94
hrmsEjb/org/apache/commons/digester/SetPropertiesRule.java
Normal file
94
hrmsEjb/org/apache/commons/digester/SetPropertiesRule.java
Normal file
@@ -0,0 +1,94 @@
|
||||
package org.apache.commons.digester;
|
||||
|
||||
import java.util.HashMap;
|
||||
import org.apache.commons.beanutils.BeanUtils;
|
||||
import org.xml.sax.Attributes;
|
||||
|
||||
public class SetPropertiesRule extends Rule {
|
||||
private String[] attributeNames;
|
||||
|
||||
private String[] propertyNames;
|
||||
|
||||
public SetPropertiesRule(Digester digester) {
|
||||
this();
|
||||
}
|
||||
|
||||
public SetPropertiesRule() {}
|
||||
|
||||
public SetPropertiesRule(String attributeName, String propertyName) {
|
||||
this.attributeNames = new String[1];
|
||||
this.attributeNames[0] = attributeName;
|
||||
this.propertyNames = new String[1];
|
||||
this.propertyNames[0] = propertyName;
|
||||
}
|
||||
|
||||
public SetPropertiesRule(String[] attributeNames, String[] propertyNames) {
|
||||
this.attributeNames = new String[attributeNames.length];
|
||||
for (int i = 0, size = attributeNames.length; i < size; i++)
|
||||
this.attributeNames[i] = attributeNames[i];
|
||||
this.propertyNames = new String[propertyNames.length];
|
||||
for (int j = 0, k = propertyNames.length; j < k; j++)
|
||||
this.propertyNames[j] = propertyNames[j];
|
||||
}
|
||||
|
||||
public void begin(Attributes attributes) throws Exception {
|
||||
HashMap values = new HashMap();
|
||||
int attNamesLength = 0;
|
||||
if (this.attributeNames != null)
|
||||
attNamesLength = this.attributeNames.length;
|
||||
int propNamesLength = 0;
|
||||
if (this.propertyNames != null)
|
||||
propNamesLength = this.propertyNames.length;
|
||||
for (int i = 0; i < attributes.getLength(); i++) {
|
||||
String name = attributes.getLocalName(i);
|
||||
if ("".equals(name))
|
||||
name = attributes.getQName(i);
|
||||
String value = attributes.getValue(i);
|
||||
for (int n = 0; n < attNamesLength; n++) {
|
||||
if (name.equals(this.attributeNames[n])) {
|
||||
if (n < propNamesLength) {
|
||||
name = this.propertyNames[n];
|
||||
break;
|
||||
}
|
||||
name = null;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (this.digester.log.isDebugEnabled())
|
||||
this.digester.log.debug("[SetPropertiesRule]{" + this.digester.match + "} Setting property '" + name + "' to '" + value + "'");
|
||||
if (name != null)
|
||||
values.put(name, value);
|
||||
}
|
||||
Object top = this.digester.peek();
|
||||
if (this.digester.log.isDebugEnabled())
|
||||
this.digester.log.debug("[SetPropertiesRule]{" + this.digester.match + "} Set " + top.getClass().getName() + " properties");
|
||||
BeanUtils.populate(top, values);
|
||||
}
|
||||
|
||||
public void addAlias(String attributeName, String propertyName) {
|
||||
if (this.attributeNames == null) {
|
||||
this.attributeNames = new String[1];
|
||||
this.attributeNames[0] = attributeName;
|
||||
this.propertyNames = new String[1];
|
||||
this.propertyNames[0] = propertyName;
|
||||
} else {
|
||||
int length = this.attributeNames.length;
|
||||
String[] tempAttributes = new String[length + 1];
|
||||
for (int i = 0; i < length; i++)
|
||||
tempAttributes[i] = this.attributeNames[i];
|
||||
tempAttributes[length] = attributeName;
|
||||
String[] tempProperties = new String[length + 1];
|
||||
for (int j = 0; j < length && j < this.propertyNames.length; j++)
|
||||
tempProperties[j] = this.propertyNames[j];
|
||||
tempProperties[length] = propertyName;
|
||||
this.propertyNames = tempProperties;
|
||||
this.attributeNames = tempAttributes;
|
||||
}
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
StringBuffer sb = new StringBuffer("SetPropertiesRule[");
|
||||
sb.append("]");
|
||||
return sb.toString();
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user