001: /*
002: * Copyright 2004 Sun Microsystems, Inc.
003: *
004: * Licensed under the Apache License, Version 2.0 (the "License");
005: * you may not use this file except in compliance with the License.
006: * You may obtain a copy of the License at
007: *
008: * http://www.apache.org/licenses/LICENSE-2.0
009: *
010: * Unless required by applicable law or agreed to in writing, software
011: * distributed under the License is distributed on an "AS IS" BASIS,
012: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013: * See the License for the specific language governing permissions and
014: * limitations under the License.
015: *
016: */
017: package com.sun.syndication.io;
018:
019: import com.sun.syndication.feed.synd.SyndFeed;
020: import com.sun.syndication.feed.synd.SyndFeedImpl;
021: import org.jdom.Document;
022: import org.xml.sax.InputSource;
023:
024: import java.io.File;
025: import java.io.FileNotFoundException;
026: import java.io.IOException;
027: import java.io.Reader;
028:
029: /**
030: * Parses an XML document (File, InputStream, Reader, W3C SAX InputSource, W3C DOM Document or JDom DOcument)
031: * into an SyndFeedImpl.
032: * <p>
033: * It delegates to a WireFeedInput to handle all feed types.
034: * <p>
035: * @author Alejandro Abdelnur
036: *
037: */
038: public class SyndFeedInput {
039: private WireFeedInput _feedInput;
040:
041: /**
042: * Creates a SyndFeedInput instance with input validation turned off.
043: * <p>
044: *
045: */
046: public SyndFeedInput() {
047: this (false);
048: }
049:
050: /**
051: * Creates a SyndFeedInput instance.
052: * <p>
053: * @param validate indicates if the input should be validated. NOT IMPLEMENTED YET (validation does not happen)
054: *
055: */
056: public SyndFeedInput(boolean validate) {
057: _feedInput = new WireFeedInput(validate);
058: }
059:
060: /**
061: * Enables XML healing in the WiredFeedInput instance.
062: * <p>
063: * Healing trims leading chars from the stream (empty spaces and comments) until the XML prolog.
064: * <p>
065: * Healing resolves HTML entities (from literal to code number) in the reader.
066: * <p>
067: * The healing is done only with the build(File) and build(Reader) signatures.
068: * <p>
069: * By default is TRUE.
070: * <p>
071: * @param heals TRUE enables stream healing, FALSE disables it.
072: *
073: */
074: public void setXmlHealerOn(boolean heals) {
075: _feedInput.setXmlHealerOn(heals);
076: }
077:
078: /**
079: * Indicates if the WiredFeedInput instance will XML heal (if necessary) the character stream.
080: * <p>
081: * Healing trims leading chars from the stream (empty spaces and comments) until the XML prolog.
082: * <p>
083: * Healing resolves HTML entities (from literal to code number) in the reader.
084: * <p>
085: * The healing is done only with the build(File) and build(Reader) signatures.
086: * <p>
087: * By default is TRUE.
088: * <p>
089: * @return TRUE if healing is enabled, FALSE if not.
090: *
091: */
092: public boolean getXmlHealerOn() {
093: return _feedInput.getXmlHealerOn();
094: }
095:
096: /**
097: * Builds SyndFeedImpl from a file.
098: * <p>
099: * @param file file to read to create the SyndFeedImpl.
100: * @return the SyndFeedImpl read from the file.
101: * @throws FileNotFoundException thrown if the file could not be found.
102: * @throws IOException thrown if there is problem reading the file.
103: * @throws IllegalArgumentException thrown if feed type could not be understood by any of the underlying parsers.
104: * @throws FeedException if the feed could not be parsed
105: *
106: */
107: public SyndFeed build(File file) throws FileNotFoundException,
108: IOException, IllegalArgumentException, FeedException {
109: return new SyndFeedImpl(_feedInput.build(file));
110: }
111:
112: /**
113: * Builds SyndFeedImpl from an Reader.
114: * <p>
115: * @param reader Reader to read to create the SyndFeedImpl.
116: * @return the SyndFeedImpl read from the Reader.
117: * @throws IllegalArgumentException thrown if feed type could not be understood by any of the underlying parsers.
118: * @throws FeedException if the feed could not be parsed
119: *
120: */
121: public SyndFeed build(Reader reader)
122: throws IllegalArgumentException, FeedException {
123: return new SyndFeedImpl(_feedInput.build(reader));
124: }
125:
126: /**
127: * Builds SyndFeedImpl from an W3C SAX InputSource.
128: * <p>
129: * @param is W3C SAX InputSource to read to create the SyndFeedImpl.
130: * @return the SyndFeedImpl read from the W3C SAX InputSource.
131: * @throws IllegalArgumentException thrown if feed type could not be understood by any of the underlying parsers.
132: * @throws FeedException if the feed could not be parsed
133: *
134: */
135: public SyndFeed build(InputSource is)
136: throws IllegalArgumentException, FeedException {
137: return new SyndFeedImpl(_feedInput.build(is));
138: }
139:
140: /**
141: * Builds SyndFeedImpl from an W3C DOM document.
142: * <p>
143: * @param document W3C DOM document to read to create the SyndFeedImpl.
144: * @return the SyndFeedImpl read from the W3C DOM document.
145: * @throws IllegalArgumentException thrown if feed type could not be understood by any of the underlying parsers.
146: * @throws FeedException if the feed could not be parsed
147: *
148: */
149: public SyndFeed build(org.w3c.dom.Document document)
150: throws IllegalArgumentException, FeedException {
151: return new SyndFeedImpl(_feedInput.build(document));
152: }
153:
154: /**
155: * Builds SyndFeedImpl from an JDOM document.
156: * <p>
157: * @param document JDOM document to read to create the SyndFeedImpl.
158: * @return the SyndFeedImpl read from the JDOM document.
159: * @throws IllegalArgumentException thrown if feed type could not be understood by any of the underlying parsers.
160: * @throws FeedException if the feed could not be parsed
161: *
162: */
163: public SyndFeed build(Document document)
164: throws IllegalArgumentException, FeedException {
165: return new SyndFeedImpl(_feedInput.build(document));
166: }
167:
168: }
|