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 */
017package org.apache.commons.jxpath.xml;
018
019import java.io.InputStream;
020
021/**
022 * The abstract superclass of XML parsers that produce DOM Documents.
023 * The features have the same defaults as {@link javax.xml.parsers.DocumentBuilderFactory}.
024 *
025 * @author Dmitri Plotnikov
026 * @version $Revision: 652845 $ $Date: 2008-05-02 19:46:46 +0200 (Fr, 02 Mai 2008) $
027 */
028public abstract class XMLParser2 implements XMLParser {
029    private boolean validating = false;
030    private boolean namespaceAware = true;
031    private boolean whitespace = false;
032    private boolean expandEntityRef = true;
033    private boolean ignoreComments = false;
034    private boolean coalescing = false;
035
036    /**
037     * Set whether the underlying parser should be validating.
038     * @param validating flag
039     * @see javax.xml.parsers.DocumentBuilderFactory#setValidating(boolean)
040     */
041    public void setValidating(boolean validating) {
042        this.validating = validating;
043    }
044
045    /**
046     * Learn whether the underlying parser is validating.
047     * @return boolean
048     * @see javax.xml.parsers.DocumentBuilderFactory#isValidating()
049     */
050    public boolean isValidating() {
051        return validating;
052    }
053
054    /**
055     * Learn whether the underlying parser is ns-aware.
056     * @return boolean
057     * @see javax.xml.parsers.DocumentBuilderFactory#isNamespaceAware()
058     */
059    public boolean isNamespaceAware() {
060        return namespaceAware;
061    }
062
063    /**
064     * Set whether the underlying parser is ns-aware.
065     * @param namespaceAware flag
066     * @see javax.xml.parsers.DocumentBuilderFactory#setNamespaceAware(boolean)
067     */
068    public void setNamespaceAware(boolean namespaceAware) {
069        this.namespaceAware = namespaceAware;
070    }
071
072    /**
073     * Set whether the underlying parser is ignoring whitespace.
074     * @param whitespace flag
075     * @see javax.xml.parsers.DocumentBuilderFactory#setIgnoringElementContentWhitespace(boolean)
076     */
077    public void setIgnoringElementContentWhitespace(boolean whitespace) {
078        this.whitespace = whitespace;
079    }
080
081    /**
082     * Learn whether the underlying parser is ignoring whitespace.
083     * @return boolean
084     * @see javax.xml.parsers.DocumentBuilderFactory#isIgnoringElementContentWhitespace()
085     */
086    public boolean isIgnoringElementContentWhitespace() {
087        return whitespace;
088    }
089
090    /**
091     * Learn whether the underlying parser expands entity references.
092     * @return boolean
093     * @see javax.xml.parsers.DocumentBuilderFactory#isExpandEntityReferences()
094     */
095    public boolean isExpandEntityReferences() {
096        return expandEntityRef;
097    }
098
099    /**
100     * Set whether the underlying parser expands entity references.
101     * @param expandEntityRef flag
102     * @see javax.xml.parsers.DocumentBuilderFactory#setExpandEntityReferences(boolean)
103     */
104    public void setExpandEntityReferences(boolean expandEntityRef) {
105        this.expandEntityRef = expandEntityRef;
106    }
107
108    /**
109     * Learn whether the underlying parser ignores comments.
110     * @return boolean
111     * @see javax.xml.parsers.DocumentBuilderFactory#isIgnoringComments()
112     */
113    public boolean isIgnoringComments() {
114        return ignoreComments;
115    }
116
117    /**
118     * Set whether the underlying parser ignores comments.
119     * @param ignoreComments flag
120     * @see javax.xml.parsers.DocumentBuilderFactory#setIgnoringComments(boolean)
121     */
122    public void setIgnoringComments(boolean ignoreComments) {
123        this.ignoreComments = ignoreComments;
124    }
125
126    /**
127     * Learn whether the underlying parser is coalescing.
128     * @return boolean
129     * @see javax.xml.parsers.DocumentBuilderFactory#isCoalescing()
130     */
131    public boolean isCoalescing() {
132        return coalescing;
133    }
134
135    /**
136     * Set whether the underlying parser is coalescing.
137     * @param coalescing flag
138     * @see javax.xml.parsers.DocumentBuilderFactory#setCoalescing(boolean)
139     */
140    public void setCoalescing(boolean coalescing) {
141        this.coalescing = coalescing;
142    }
143
144    public abstract Object parseXML(InputStream stream);
145}