Package org.apache.slide.projector.processor.xml

Source Code of org.apache.slide.projector.processor.xml.XPathQuery

package org.apache.slide.projector.processor.xml;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.apache.slide.projector.ConfigurableProcessor;
import org.apache.slide.projector.ConfigurationException;
import org.apache.slide.projector.ContentType;
import org.apache.slide.projector.Context;
import org.apache.slide.projector.ProcessException;
import org.apache.slide.projector.descriptor.ParameterDescriptor;
import org.apache.slide.projector.descriptor.ResultEntryDescriptor;
import org.apache.slide.projector.descriptor.StringValueDescriptor;
import org.apache.slide.projector.i18n.DefaultMessage;
import org.apache.slide.projector.i18n.ErrorMessage;
import org.apache.slide.projector.i18n.ParameterMessage;
import org.apache.slide.projector.processor.SimpleProcessor;
import org.apache.slide.projector.value.ArrayValue;
import org.apache.slide.projector.value.ElementValue;
import org.apache.slide.projector.value.StreamableValue;
import org.apache.slide.projector.value.StringValue;
import org.apache.slide.projector.value.Value;
import org.apache.slide.projector.value.XMLValue;
import org.jdom.Attribute;
import org.jdom.CDATA;
import org.jdom.Comment;
import org.jdom.Element;
import org.jdom.ProcessingInstruction;
import org.jdom.Text;
import org.jdom.xpath.XPath;

/**
* @version $Revision: 1.3 $
*/

public class XPathQuery extends SimpleProcessor implements ConfigurableProcessor {
    private Element rootElement;

    public Value process(Value input, Context context) throws Exception {
        XPath xPath = XPath.newInstance(((StringValue)input).toString());
        List nodeList = xPath.selectNodes(rootElement);
        return createValueFromNodeList(nodeList);
    }

    public ParameterDescriptor getParameterDescriptor() {
        return new ParameterDescriptor(INPUT, new ParameterMessage("xPathQuery/parameter/input"), new StringValueDescriptor());
    }

    public ResultEntryDescriptor getResultEntryDescriptor() {
        return new ResultEntryDescriptor(OUTPUT, new DefaultMessage("xPathQuery/result/output"), ContentType.DYNAMIC, true);
    }

    public void configure(StreamableValue config) throws ConfigurationException {
        if ( config instanceof XMLValue ) {
            rootElement = ((XMLValue)config).getRootElement();
        } else {
            throw new ConfigurationException(new ErrorMessage("xpathQuery/xmlResourceRequired"));
        }
    }

    public static Value createValueFromNodeList(List nodeList) throws ProcessException {
      if ( nodeList.size() > 1 ) {
        List resources = new ArrayList();
        for ( Iterator i = nodeList.iterator(); i.hasNext(); ) {
          resources.add(createValueFromNode(i.next()));
        }
        Value[] array = new Value[resources.size()];
        return new ArrayValue((Value [])resources.toArray(array));
      } else {
        return createValueFromNode(nodeList.get(0));
      }
    }
   
    public static Value createValueFromNode(Object node) throws ProcessException {
      if ( node instanceof Element ) {
        return new ElementValue((Element)node);
      } else if ( node instanceof Attribute ) {
        return new StringValue(((Attribute)node).getValue());
      } else if ( node instanceof Text ) {
        return new StringValue(((Text)node).getText());
      } else if ( node instanceof Comment ) {
        return new StringValue(((Comment)node).getText());
      } else if ( node instanceof CDATA ) {
        return new StringValue(((CDATA)node).toString());
      } else if ( node instanceof ProcessingInstruction ) {
        return new StringValue(((ProcessingInstruction)node).getData());
        }
        throw new ProcessException(new ErrorMessage("unconvertableJDomNode"));
    }
}
TOP

Related Classes of org.apache.slide.projector.processor.xml.XPathQuery

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.