Files
HRMS/hrmsEjb/org/apache/commons/digester/FactoryCreateRule.java
2025-07-28 13:56:49 +05:30

160 lines
5.6 KiB
Java

package org.apache.commons.digester;
import org.apache.commons.collections.ArrayStack;
import org.xml.sax.Attributes;
public class FactoryCreateRule extends Rule {
private boolean ignoreCreateExceptions;
private ArrayStack exceptionIgnoredStack;
protected String attributeName;
protected String className;
protected ObjectCreationFactory creationFactory;
public FactoryCreateRule(Digester digester, String className) {
this(className);
}
public FactoryCreateRule(Digester digester, Class clazz) {
this(clazz);
}
public FactoryCreateRule(Digester digester, String className, String attributeName) {
this(className, attributeName);
}
public FactoryCreateRule(Digester digester, Class clazz, String attributeName) {
this(clazz, attributeName);
}
public FactoryCreateRule(Digester digester, ObjectCreationFactory creationFactory) {
this(creationFactory);
}
public FactoryCreateRule(String className) {
this(className, false);
}
public FactoryCreateRule(Class clazz) {
this(clazz, false);
}
public FactoryCreateRule(String className, String attributeName) {
this(className, attributeName, false);
}
public FactoryCreateRule(Class clazz, String attributeName) {
this(clazz, attributeName, false);
}
public FactoryCreateRule(ObjectCreationFactory creationFactory) {
this(creationFactory, false);
}
public FactoryCreateRule(String className, boolean ignoreCreateExceptions) {
this(className, (String)null, ignoreCreateExceptions);
}
public FactoryCreateRule(Class clazz, boolean ignoreCreateExceptions) {
this(clazz, (String)null, ignoreCreateExceptions);
}
public FactoryCreateRule(String className, String attributeName, boolean ignoreCreateExceptions) {
this.attributeName = null;
this.className = null;
this.creationFactory = null;
this.className = className;
this.attributeName = attributeName;
this.ignoreCreateExceptions = ignoreCreateExceptions;
}
public FactoryCreateRule(Class clazz, String attributeName, boolean ignoreCreateExceptions) {
this(clazz.getName(), attributeName, ignoreCreateExceptions);
}
public FactoryCreateRule(ObjectCreationFactory creationFactory, boolean ignoreCreateExceptions) {
this.attributeName = null;
this.className = null;
this.creationFactory = null;
this.creationFactory = creationFactory;
this.ignoreCreateExceptions = ignoreCreateExceptions;
}
public void begin(String namespace, String name, Attributes attributes) throws Exception {
if (this.ignoreCreateExceptions) {
if (this.exceptionIgnoredStack == null)
this.exceptionIgnoredStack = new ArrayStack();
try {
Object instance = getFactory(attributes).createObject(attributes);
if (this.digester.log.isDebugEnabled())
this.digester.log.debug("[FactoryCreateRule]{" + this.digester.match + "} New " + instance.getClass().getName());
this.digester.push(instance);
this.exceptionIgnoredStack.push(Boolean.FALSE);
} catch (Exception e) {
if (this.digester.log.isInfoEnabled()) {
this.digester.log.info("[FactoryCreateRule] Create exception ignored: " + ((e.getMessage() == null) ? e.getClass().getName() : e.getMessage()));
if (this.digester.log.isDebugEnabled())
this.digester.log.debug("[FactoryCreateRule] Ignored exception:", e);
}
this.exceptionIgnoredStack.push(Boolean.TRUE);
}
} else {
Object instance = getFactory(attributes).createObject(attributes);
if (this.digester.log.isDebugEnabled())
this.digester.log.debug("[FactoryCreateRule]{" + this.digester.match + "} New " + instance.getClass().getName());
this.digester.push(instance);
}
}
public void end(String namespace, String name) throws Exception {
if (this.ignoreCreateExceptions && this.exceptionIgnoredStack != null && !this.exceptionIgnoredStack.empty())
if (((Boolean)this.exceptionIgnoredStack.pop()).booleanValue()) {
if (this.digester.log.isTraceEnabled())
this.digester.log.trace("[FactoryCreateRule] No creation so no push so no pop");
return;
}
Object top = this.digester.pop();
if (this.digester.log.isDebugEnabled())
this.digester.log.debug("[FactoryCreateRule]{" + this.digester.match + "} Pop " + top.getClass().getName());
}
public void finish() throws Exception {
if (this.attributeName != null)
this.creationFactory = null;
}
public String toString() {
StringBuffer sb = new StringBuffer("FactoryCreateRule[");
sb.append("className=");
sb.append(this.className);
sb.append(", attributeName=");
sb.append(this.attributeName);
if (this.creationFactory != null) {
sb.append(", creationFactory=");
sb.append(this.creationFactory);
}
sb.append("]");
return sb.toString();
}
protected ObjectCreationFactory getFactory(Attributes attributes) throws Exception {
if (this.creationFactory == null) {
String realClassName = this.className;
if (this.attributeName != null) {
String value = attributes.getValue(this.attributeName);
if (value != null)
realClassName = value;
}
if (this.digester.log.isDebugEnabled())
this.digester.log.debug("[FactoryCreateRule]{" + this.digester.match + "} New factory " + realClassName);
Class clazz = this.digester.getClassLoader().loadClass(realClassName);
this.creationFactory = (ObjectCreationFactory)clazz.newInstance();
this.creationFactory.setDigester(this.digester);
}
return this.creationFactory;
}
}