| 1 package org.sapia.soto.state.cocoon.view; 2 3 import org.sapia.soto.Env; 4 import org.sapia.soto.EnvAware; 5 import org.sapia.soto.util.URIResolverImpl; 6 7 import org.xml.sax.ContentHandler ; 8 9 import java.io.IOException ; 10 11 import java.util.ArrayList ; 12 import java.util.List ; 13 import java.util.Map ; 14 15 import javax.xml.transform.TransformerConfigurationException ; 16 import javax.xml.transform.TransformerException ; 17 import javax.xml.transform.sax.SAXResult ; 18 import javax.xml.transform.sax.SAXTransformerFactory ; 19 import javax.xml.transform.sax.TransformerHandler ; 20 21 22 44 public class XslViewHelper implements EnvAware { 45 protected List _sources = new ArrayList (); 46 private SAXTransformerFactory _fac; 47 48 public XslViewHelper(SAXTransformerFactory fac) { 49 _fac = fac; 50 } 51 52 55 public void setEnv(Env env) { 56 if (!(_fac.getURIResolver() instanceof URIResolverImpl)) { 57 _fac.setURIResolver(new URIResolverImpl(env, _fac.getURIResolver())); 58 } 59 } 60 61 64 protected void addSource(XslSource src) { 65 _sources.add(src); 66 src.setSaxTransformerFactory(_fac); 67 } 68 69 79 protected TransformInfo process(Map params, ContentHandler handler) 80 throws TransformerConfigurationException , TransformerException , IOException { 81 TransformerHandler [] handlers = new TransformerHandler [_sources.size()]; 82 SAXResult first = null; 83 XslSource src; 84 85 if (_sources.size() == 1) { 86 src = (XslSource) _sources.get(0); 87 handlers[0] = src.getTransformerHandler(params); 88 handlers[0].setResult(first = new SAXResult (handler)); 89 } else { 90 for (int i = 0; i < _sources.size(); i++) { 91 src = (XslSource) _sources.get(i); 92 handlers[i] = src.getTransformerHandler(params); 93 94 if (i > 0) { 95 if ((i - 1) == 0) { 96 handlers[i - 1].setResult(first = new SAXResult (handlers[i])); 97 } else { 98 handlers[i - 1].setResult(new SAXResult (handlers[i])); 99 } 100 } 101 } 102 103 handlers[handlers.length - 1].setResult(new SAXResult (handler)); 104 } 105 106 return new TransformInfo(first, handlers[0]); 107 } 108 } 109 | Popular Tags |