001: /*
002: * Created on Feb 13, 2004
003: *
004: * To change the template for this generated file go to
005: * Window>Preferences>Java>Code Generation>Code and Comments
006: */
007: package org.xdev.base.resource.xml;
008:
009: import java.util.HashMap;
010:
011: import org.jaxen.jdom.JDOMXPath;
012: import org.jdom.Attribute;
013: import org.jdom.Document;
014: import org.jdom.Element;
015: import org.xdev.base.core.compiler.AXCompiler;
016: import org.xdev.base.resource.AbstractDataResource;
017: import org.xdev.base.xssl.XSSLAction;
018: import org.xdev.base.xssl.XSSLReturn;
019:
020: /**
021: * @author AYegorov
022: *
023: * To change the template for this generated type comment go to
024: * Window>Preferences>Java>Code Generation>Code and Comments
025: */
026: public class XmlParameterResource extends AbstractDataResource {
027: protected Element root = null;
028:
029: private StringBuffer buffer = new StringBuffer();
030:
031: private Object returnValue = null;
032:
033: /**
034: * @param id
035: */
036: public XmlParameterResource(String id) {
037: super (id);
038: // XXX Auto-generated constructor stub
039: }
040:
041: /**
042: * @param id
043: * @param properties
044: */
045: public XmlParameterResource(String id, HashMap properties) {
046: super (id, properties);
047: // XXX Auto-generated constructor stub
048: }
049:
050: /* (non-Javadoc)
051: * @see org.xdev.base.resource.AbstractDataResource#initialize()
052: */
053: protected void initialize() throws Exception {
054: this .root = ((Document) this .getResourceConnection())
055: .getRootElement();
056: }
057:
058: protected void set() throws Exception {
059: if (this .hasProperty("path")) {
060: super .ds = new XmlDataSource();
061:
062: super .ds.setProperty("path", this .getProperty("path"));
063:
064: super .ds.initialize();
065:
066: String dataSourceId = this .getProperty("datasource-id");
067:
068: if ("".equals(dataSourceId)) {
069: dataSourceId = this .getReferenceId();
070: }
071:
072: if (dataSourceId != null && !"".equals(dataSourceId)) {
073: AXCompiler.getInstance().addDataSource(dataSourceId,
074: super .ds);
075: }
076: }
077:
078: super .set();
079: }
080:
081: protected void invoke() throws Exception {
082: if (this .hasProperty("expression")) {
083: this .buffer.setLength(0);
084:
085: this .buffer.append(this .getProperty("expression"));
086: }
087:
088: this .returnValue = this .search(new JDOMXPath(this .buffer
089: .toString()));
090: }
091:
092: /* (non-Javadoc)
093: * @see org.xdev.base.xssl.XSSLActionIterator#invoke(org.xdev.base.xssl.XSSLAction)
094: */
095: protected void invoke(XSSLAction component) throws Exception {
096: this .buffer.append(((XSSLReturn) component).getObjectValue());
097: }
098:
099: protected String search(JDOMXPath xpath) throws Exception {
100: Object obj = xpath.selectSingleNode(this .root);
101:
102: String value = "";
103:
104: if (obj instanceof Element) {
105: value = ((Element) obj).getTextTrim();
106: } else if (obj instanceof Attribute) {
107: value = ((Attribute) obj).getValue();
108: }
109:
110: return value;
111: }
112:
113: public Object getObjectValue() {
114: return this .returnValue;
115: }
116:
117: /* (non-Javadoc)
118: * @see org.xdev.base.xssl.manage.TransactionFinalizable#doFinalize()
119: */
120: public void doFinalize() throws Exception {
121: }
122: }
|