Author: thorsten Date: Wed Sep 17 04:37:18 2008 New Revision: 696257 URL: http://svn.apache.org/viewvc?rev=696257&view=rev Log: Re-factoring the Structure implementation to implement the interface. Removing hacks around data and contract resolving.
Modified: forrest/trunk/whiteboard/dispatcher/java/org/apache/forrest/dispatcher/impl/XMLStructurer.java Modified: forrest/trunk/whiteboard/dispatcher/java/org/apache/forrest/dispatcher/impl/XMLStructurer.java URL: http://svn.apache.org/viewvc/forrest/trunk/whiteboard/dispatcher/java/org/apache/forrest/dispatcher/impl/XMLStructurer.java?rev=696257&r1=696256&r2=696257&view=diff ============================================================================== --- forrest/trunk/whiteboard/dispatcher/java/org/apache/forrest/dispatcher/impl/XMLStructurer.java (original) +++ forrest/trunk/whiteboard/dispatcher/java/org/apache/forrest/dispatcher/impl/XMLStructurer.java Wed Sep 17 04:37:18 2008 @@ -14,19 +14,22 @@ import javax.xml.stream.XMLStreamConstants; import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamReader; -import javax.xml.stream.XMLStreamWriter; import javax.xml.stream.events.EndElement; import javax.xml.stream.events.StartElement; import javax.xml.stream.events.XMLEvent; import javax.xml.stream.util.XMLEventAllocator; -import org.apache.forrest.dispatcher.DispatcherException; import org.apache.forrest.dispatcher.api.Contract; -import org.apache.forrest.dispatcher.helper.StAX; +import org.apache.forrest.dispatcher.api.Resolver; +import org.apache.forrest.dispatcher.api.Structurer; +import org.apache.forrest.dispatcher.config.DispatcherBean; +import org.apache.forrest.dispatcher.exception.DispatcherException; +import org.apache.forrest.dispatcher.factories.ContractFactory; +import org.apache.forrest.dispatcher.impl.helper.StAX; import org.apache.forrest.dispatcher.utils.CommonString; import org.xml.sax.InputSource; -public class XMLStructurer extends StAX { +public class XMLStructurer extends StAX implements Structurer { public static final String NS = "http://apache.org/forrest/templates/2.0"; @@ -52,51 +55,29 @@ private static final Object CONTRACT_RESULT_XPATH = "xpath"; - private String format = ""; - private InputStream dataStream = null; - private String currentPath = ""; + + private Resolver resolver = null; private boolean allowXmlProperties = false; private LinkedHashMap<String, LinkedHashSet<XMLEvent>> resultTree = new LinkedHashMap<String, LinkedHashSet<XMLEvent>>(); - public boolean isAllowXmlProperties() { - return allowXmlProperties; - } - - public void setAllowXmlProperties(boolean allowXmlProperties) { - this.allowXmlProperties = allowXmlProperties; - } - - private String contractUriPrefix = ""; - private String contractUriSufix = ".contract.xml"; - - public String getContractUriPrefix() { - return contractUriPrefix; - } - - public void setContractUriPrefix(String contractUriPrefix) { - this.contractUriPrefix = contractUriPrefix; + private ContractFactory contractRep =null; + + public XMLStructurer(DispatcherBean config) { + this.contractRep = new ContractFactory(config); + this.resolver = config.getResolver(); + this.allowXmlProperties = config.isAllowXmlProperties(); } - public String getContractUriSufix() { - return contractUriSufix; - } - - public void setContractUriSufix(String contractUriSufix) { - this.contractUriSufix = contractUriSufix; - } - - public XMLStructurer(InputStream dataStream, String format) { - this.format = format; - this.dataStream = dataStream; - } - - public BufferedInputStream execute() throws DispatcherException { + /* + * @see org.apache.forrest.dispatcher.impl.Structurer#execute(java.io.InputStream, java.lang.String) + */ + public InputStream execute(InputStream structurerStream, String format) throws DispatcherException { BufferedInputStream stream = null; try { - XMLStreamReader reader = getReader(dataStream); + XMLStreamReader reader = getReader(structurerStream); boolean process = true; while (process) { int event = reader.next(); @@ -141,6 +122,14 @@ throw new DispatcherException(e); } catch (IOException e) { throw new DispatcherException(e); + }finally{ + if (null!=structurerStream){ + try { + structurerStream.close(); + } catch (IOException e) { + throw new DispatcherException(e); + }; + } } return stream; } @@ -215,7 +204,7 @@ throws XMLStreamException, DispatcherException, IOException { boolean process = true; String elementName = null; - String name = "", data = ""; + String name = "", data= null; // Get attribute names for (int i = 0; i < reader.getAttributeCount(); i++) { String localName = reader.getAttributeLocalName(i); @@ -226,26 +215,12 @@ data = reader.getAttributeValue(i); } } - /* - * FIXME: TEMPORAL HACK ONLY Use source resolver/contract factory when - * fixing this. - * - * Ignoring dataStream completely for now - * - * THIS ONLY WORKS FOR JUNIT ATM!!! - */ - dataStream = null; - Contract contract = new XSLContract(allowXmlProperties); - InputStream xslStream = this.getClass().getResourceAsStream( - this.contractUriPrefix + name + this.contractUriSufix); - contract.initializeFromStream(xslStream); - // closing stream - if (xslStream != null) { - xslStream.close(); - } - /* - * HACK END - */ + log.debug("data "+data); + InputStream dataStream=null; + if(null != data){ + dataStream = resolver.resolve(data); + } + Contract contract = contractRep.resolve(name); HashMap<String, ?> param = new HashMap(); while (process) {