001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. See the NOTICE file distributed with
004: * this work for additional information regarding copyright ownership.
005: * The ASF licenses this file to You under the Apache License, Version 2.0
006: * (the "License"); you may not use this file except in compliance with
007: * the License. You may obtain a copy of the License at
008: *
009: * http://www.apache.org/licenses/LICENSE-2.0
010: *
011: * Unless required by applicable law or agreed to in writing, software
012: * distributed under the License is distributed on an "AS IS" BASIS,
013: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014: * See the License for the specific language governing permissions and
015: * limitations under the License.
016: */
017: package org.apache.cocoon.components.source.impl;
018:
019: import org.apache.avalon.framework.component.ComponentManager;
020: import org.apache.cocoon.ProcessingException;
021: import org.apache.cocoon.components.source.SourceUtil;
022: import org.apache.cocoon.environment.Environment;
023: import org.apache.cocoon.environment.ModifiableSource;
024: import org.apache.excalibur.source.Source;
025: import org.apache.excalibur.source.SourceException;
026: import org.apache.excalibur.source.SourceResolver;
027: import org.xml.sax.ContentHandler;
028: import org.xml.sax.InputSource;
029: import org.xml.sax.SAXException;
030:
031: import java.io.IOException;
032: import java.io.InputStream;
033:
034: /**
035: * This source objects wraps an Avalon Excalibur Source to get
036: * an obsolete Cocoon Source object for the use of the deprecated
037: * {@link org.apache.cocoon.environment.SourceResolver#resolve(String)}
038: * method.
039: *
040: * @author <a href="mailto:cziegeler@apache.org">Carsten Ziegeler</a>
041: * @version CVS $Id: AvalonToCocoonSource.java 433543 2006-08-22 06:22:54Z crossley $
042: */
043: public final class AvalonToCocoonSource implements ModifiableSource {
044:
045: /** The real source */
046: protected Source source;
047:
048: /** The source resolver */
049: protected SourceResolver resolver;
050:
051: /** The environment */
052: protected Environment environment;
053:
054: /** The manager */
055: protected ComponentManager manager;
056:
057: /**
058: * Constructor
059: */
060: public AvalonToCocoonSource(Source source, SourceResolver resolver,
061: Environment environment, ComponentManager manager) {
062: this .source = source;
063: this .resolver = resolver;
064: this .environment = environment;
065: this .manager = manager;
066: }
067:
068: /**
069: * Get the last modification date of the source or 0 if it
070: * is not possible to determine the date.
071: */
072: public long getLastModified() {
073: return this .source.getLastModified();
074: }
075:
076: /**
077: * Get the content length of the source or -1 if it
078: * is not possible to determine the length.
079: */
080: public long getContentLength() {
081: return this .source.getContentLength();
082: }
083:
084: /**
085: * Return an <code>InputStream</code> object to read from the source.
086: */
087: public InputStream getInputStream() throws ProcessingException,
088: IOException {
089: try {
090: return this .source.getInputStream();
091: } catch (SourceException e) {
092: throw SourceUtil.handle(e);
093: }
094: }
095:
096: /**
097: * Return an <code>InputSource</code> object to read the XML
098: * content.
099: *
100: * @return an <code>InputSource</code> value
101: * @exception ProcessingException if an error occurs
102: * @exception IOException if an error occurs
103: */
104: public InputSource getInputSource() throws ProcessingException,
105: IOException {
106: try {
107: InputSource newObject = new InputSource(this .source
108: .getInputStream());
109: newObject.setSystemId(this .getSystemId());
110: return newObject;
111: } catch (SourceException se) {
112: throw SourceUtil.handle(se);
113: }
114: }
115:
116: /**
117: * Return the unique identifer for this source
118: */
119: public String getSystemId() {
120: return this .source.getURI();
121: }
122:
123: public void recycle() {
124: this .resolver.release(this .source);
125: this .source = null;
126: this .environment = null;
127: }
128:
129: public void refresh() {
130: this .source.refresh();
131: }
132:
133: /**
134: * Stream content to a content handler or to an XMLConsumer.
135: *
136: * @throws SAXException if failed to parse source document.
137: */
138: public void toSAX(ContentHandler handler) throws SAXException {
139: try {
140: SourceUtil.parse(this .manager, this .source, handler);
141: } catch (ProcessingException pe) {
142: throw new SAXException(
143: "ProcessingException during streaming.", pe);
144: } catch (IOException ioe) {
145: throw new SAXException("IOException during streaming.", ioe);
146: }
147: }
148:
149: }
|