1 16 package org.apache.cocoon.components.flow.util; 17 18 import java.io.IOException ; 19 import java.io.InputStream ; 20 import java.io.OutputStream ; 21 import java.util.Map ; 22 23 import org.apache.avalon.excalibur.io.IOUtil; 24 import org.apache.avalon.framework.activity.Disposable; 25 import org.apache.avalon.framework.context.Context; 26 import org.apache.avalon.framework.context.ContextException; 27 import org.apache.avalon.framework.context.Contextualizable; 28 import org.apache.avalon.framework.service.ServiceException; 29 import org.apache.avalon.framework.service.ServiceManager; 30 import org.apache.avalon.framework.service.Serviceable; 31 import org.apache.cocoon.ProcessingException; 32 import org.apache.cocoon.components.ContextHelper; 33 import org.apache.cocoon.components.flow.FlowHelper; 34 import org.apache.cocoon.components.source.SourceUtil; 35 import org.apache.excalibur.source.Source; 36 import org.apache.excalibur.source.SourceResolver; 37 import org.w3c.dom.Document ; 38 import org.xml.sax.ContentHandler ; 39 import org.xml.sax.SAXException ; 40 41 49 public class PipelineUtil implements Contextualizable, Serviceable, Disposable { 50 51 private Context context; 52 private ServiceManager manager; 53 private SourceResolver resolver; 54 55 58 public void dispose() { 59 if (this.manager != null) { 60 this.manager.release(this.resolver); 61 this.manager = null; 62 this.resolver = null; 63 } 64 } 65 66 public void contextualize(Context context) throws ContextException { 67 this.context = context; 68 69 } 70 71 public void service(ServiceManager manager) throws ServiceException { 72 this.manager = manager; 73 this.resolver = (SourceResolver)manager.lookup(SourceResolver.ROLE); 74 } 75 76 81 private void checkSetup() { 82 if (this.manager == null) { 83 throw new IllegalStateException ("Instances of " + getClass().getName() + 84 " must be setup using either cocoon.createObject() or cocoon.setupObject()."); 85 } 86 } 87 88 96 public void processToStream(String uri, Object viewData, OutputStream output) 97 throws IOException { 98 checkSetup(); 99 100 Map objectModel = ContextHelper.getObjectModel(this.context); 101 102 Object oldViewData = FlowHelper.getContextObject(objectModel); 104 FlowHelper.setContextObject(objectModel, FlowHelper.unwrap(viewData)); 105 106 Source src = null; 107 InputStream input = null; 108 try { 109 src = this.resolver.resolveURI("cocoon:/" + uri); 110 input = src.getInputStream(); 111 IOUtil.copy(input, output); 112 } finally { 113 if (input != null) { 114 try { 115 input.close(); 116 } catch (IOException ignored) {} 117 } 118 119 FlowHelper.setContextObject(objectModel, oldViewData); 121 122 if (src != null) { 123 this.resolver.release(src); 124 } 125 } 126 } 127 128 135 public void processToSAX(String uri, Object viewData, ContentHandler handler) 136 throws SAXException , IOException , ProcessingException { 137 checkSetup(); 138 139 Map objectModel = ContextHelper.getObjectModel(this.context); 140 Object oldViewData = FlowHelper.getContextObject(objectModel); 141 FlowHelper.setContextObject(objectModel, FlowHelper.unwrap(viewData)); 142 143 Source src = null; 144 try { 145 src = this.resolver.resolveURI("cocoon:/" + uri); 146 SourceUtil.toSAX(src, handler); 147 } finally { 148 FlowHelper.setContextObject(objectModel, oldViewData); 149 if (src != null) { 150 this.resolver.release(src); 151 } 152 } 153 } 154 155 162 public Document processToDOM(String uri, Object viewData) throws ProcessingException, SAXException , IOException { 163 checkSetup(); 164 165 Map objectModel = ContextHelper.getObjectModel(this.context); 166 Object oldViewData = FlowHelper.getContextObject(objectModel); 167 FlowHelper.setContextObject(objectModel, FlowHelper.unwrap(viewData)); 168 169 Source src = null; 170 171 try { 172 src = this.resolver.resolveURI("cocoon:/" + uri); 173 return SourceUtil.toDOM(src); 174 } finally { 175 FlowHelper.setContextObject(objectModel, oldViewData); 176 if (src != null) { 177 this.resolver.release(src); 178 } 179 } 180 } 181 } 182 | Popular Tags |