3 * Copyright © 2014 František Kučera (frantovo.cz)
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation, either version 3 of the License, or
8 * (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
18 package cz.frantovo.alt2xml;
20 import java.util.Deque;
21 import java.util.LinkedList;
22 import java.util.ServiceLoader;
23 import javax.xml.parsers.ParserConfigurationException;
24 import javax.xml.parsers.SAXParser;
25 import javax.xml.parsers.SAXParserFactory;
26 import org.xml.sax.Parser;
27 import org.xml.sax.SAXException;
28 import org.xml.sax.SAXNotRecognizedException;
29 import org.xml.sax.SAXNotSupportedException;
30 import org.xml.sax.XMLReader;
34 * @author Ing. František Kučera (frantovo.cz)
36 public class ParserFactory extends SAXParserFactory implements ReaderFinder {
38 private final Deque<Alt2XmlReaderFactory> readerFactories = new LinkedList();
40 public ParserFactory() {
42 for (Alt2XmlReaderFactory f : ServiceLoader.load(Alt2XmlReaderFactory.class)) {
43 readerFactories.add(f);
49 public XMLReader findReader(String systemId) throws SAXException {
50 for (Alt2XmlReaderFactory f : readerFactories) {
51 if (f.canRead(systemId)) {
55 throw new SAXException("Iterated over " + readerFactories.size() + " and was unable to find XMLReader for SystemId: " + systemId);
59 public SAXParser newSAXParser() throws ParserConfigurationException, SAXException {
60 return new AltSAXParser(new SuperReader(this));
64 public void setFeature(String name, boolean value) throws ParserConfigurationException, SAXNotRecognizedException, SAXNotSupportedException {
65 throw new SAXNotSupportedException("Zatím není podporováno.");
69 public boolean getFeature(String name) throws ParserConfigurationException, SAXNotRecognizedException, SAXNotSupportedException {
70 throw new SAXNotSupportedException("Zatím není podporováno.");
73 private static class AltSAXParser extends SAXParser {
75 private XMLReader xmlReader;
77 public AltSAXParser(XMLReader xmlReader) {
78 this.xmlReader = xmlReader;
83 public Parser getParser() throws SAXException {
84 throw new SAXException("Není podporováno.");
88 public XMLReader getXMLReader() throws SAXException {
93 public boolean isNamespaceAware() {
98 public boolean isValidating() {
103 public void setProperty(String name, Object value) throws SAXNotRecognizedException, SAXNotSupportedException {
104 xmlReader.setProperty(name, value);
108 public Object getProperty(String name) throws SAXNotRecognizedException, SAXNotSupportedException {
109 return xmlReader.getProperty(name);