# HG changeset patch
# User František Kučera <franta-hg@frantovo.cz>
# Date 1402133038 -7200
# Node ID 64358dd0999f3c51bb090f82608f4b62fdab3423
# Parent  b2fbb3570ae1316172cf1bd5cc039d0dab4a08b0
AbstractAlt2XmlReader

diff -r b2fbb3570ae1 -r 64358dd0999f java/alt2xml-in-json/src/cz/frantovo/alt2xml/in/json/Reader.java
--- a/java/alt2xml-in-json/src/cz/frantovo/alt2xml/in/json/Reader.java	Sat Jun 07 10:49:42 2014 +0200
+++ b/java/alt2xml-in-json/src/cz/frantovo/alt2xml/in/json/Reader.java	Sat Jun 07 11:23:58 2014 +0200
@@ -17,39 +17,22 @@
  */
 package cz.frantovo.alt2xml.in.json;
 
+import cz.frantovo.alt2xml.AbstractAlt2XmlReader;
 import java.io.IOException;
 import java.io.InputStreamReader;
-import java.util.HashMap;
-import java.util.Map;
 import org.json.simple.parser.JSONParser;
 import org.json.simple.parser.ParseException;
-import org.xml.sax.ContentHandler;
-import org.xml.sax.DTDHandler;
-import org.xml.sax.EntityResolver;
-import org.xml.sax.ErrorHandler;
 import org.xml.sax.InputSource;
 import org.xml.sax.SAXException;
-import org.xml.sax.SAXNotRecognizedException;
-import org.xml.sax.SAXNotSupportedException;
-import org.xml.sax.XMLReader;
 
 /**
  *
- * @author fiki
+ * @author Ing. František Kučera (frantovo.cz)
  */
-public class Reader implements XMLReader {
-
-	private ContentHandler contentHandler;
-	private ErrorHandler errorHandler;
-	private DTDHandler dtdHandler;
-	private EntityResolver entityResolver;
-	private Map<String, Object> konfigurace = new HashMap<>();
+public class Reader extends AbstractAlt2XmlReader {
 
 	@Override
 	public void parse(InputSource input) throws IOException, SAXException {
-		/**
-		 * TODO: rozpornat formát vstupu a podle toho delegovat
-		 */
 		JSONParser p = new JSONParser();
 		InputStreamReader vstup = new InputStreamReader(input.getByteStream());
 		JsonSimpleContentHandler handler = new JsonSimpleContentHandler(contentHandler);
@@ -57,78 +40,7 @@
 		try {
 			p.parse(vstup, handler);
 		} catch (ParseException e) {
-			throw new SAXException("Chyba při načítání JSONu", e);
+			throw new SAXException("Unable to parse JSON: " + input.getSystemId(), e);
 		}
 	}
-
-	@Override
-	public void parse(String systemId) throws IOException, SAXException {
-		parse(new InputSource(systemId));
-	}
-
-	@Override
-	public boolean getFeature(String name) throws SAXNotRecognizedException, SAXNotSupportedException {
-		/**
-		 * TODO:
-		 * All XMLReaders are required to recognize
-		 * the http://xml.org/sax/features/namespaces
-		 * and the http://xml.org/sax/features/namespace-prefixes feature names.
-		 */
-		throw new SAXNotSupportedException("Zatím není podporováno.");
-	}
-
-	@Override
-	public void setFeature(String name, boolean value) throws SAXNotRecognizedException, SAXNotSupportedException {
-		throw new SAXNotSupportedException("Zatím není podporováno.");
-	}
-
-	@Override
-	public Object getProperty(String name) throws SAXNotRecognizedException, SAXNotSupportedException {
-		return konfigurace.get(name);
-	}
-
-	@Override
-	public void setProperty(String name, Object value) throws SAXNotRecognizedException, SAXNotSupportedException {
-		konfigurace.put(name, value);
-	}
-
-	@Override
-	public void setEntityResolver(EntityResolver entityResolver) {
-		this.entityResolver = entityResolver;
-	}
-
-	@Override
-	public EntityResolver getEntityResolver() {
-		return entityResolver;
-	}
-
-	@Override
-	public void setDTDHandler(DTDHandler dtdHandler) {
-		this.dtdHandler = dtdHandler;
-	}
-
-	@Override
-	public DTDHandler getDTDHandler() {
-		return dtdHandler;
-	}
-
-	@Override
-	public void setContentHandler(ContentHandler contentHandler) {
-		this.contentHandler = contentHandler;
-	}
-
-	@Override
-	public ContentHandler getContentHandler() {
-		return contentHandler;
-	}
-
-	@Override
-	public void setErrorHandler(ErrorHandler errorHandler) {
-		this.errorHandler = errorHandler;
-	}
-
-	@Override
-	public ErrorHandler getErrorHandler() {
-		return errorHandler;
-	}
 }
diff -r b2fbb3570ae1 -r 64358dd0999f java/alt2xml-lib/src/cz/frantovo/alt2xml/AbstractAlt2XmlReader.java
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/java/alt2xml-lib/src/cz/frantovo/alt2xml/AbstractAlt2XmlReader.java	Sat Jun 07 11:23:58 2014 +0200
@@ -0,0 +1,116 @@
+/**
+ * Alt2XML
+ * Copyright © 2014 František Kučera (frantovo.cz)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package cz.frantovo.alt2xml;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+import org.xml.sax.ContentHandler;
+import org.xml.sax.DTDHandler;
+import org.xml.sax.EntityResolver;
+import org.xml.sax.ErrorHandler;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+import org.xml.sax.SAXNotRecognizedException;
+import org.xml.sax.SAXNotSupportedException;
+import org.xml.sax.XMLReader;
+
+/**
+ * Recommended base class for all alternative format readers.
+ *
+ * @author Ing. František Kučera (frantovo.cz)
+ */
+public abstract class AbstractAlt2XmlReader implements XMLReader {
+
+	protected ContentHandler contentHandler;
+	protected ErrorHandler errorHandler;
+	protected DTDHandler dtdHandler;
+	protected EntityResolver entityResolver;
+	protected Map<String, Object> properties = new HashMap<>();
+
+	@Override
+	public void parse(String systemId) throws IOException, SAXException {
+		parse(new InputSource(systemId));
+	}
+
+	@Override
+	public boolean getFeature(String name) throws SAXNotRecognizedException, SAXNotSupportedException {
+		/**
+		 * TODO:
+		 * All XMLReaders are required to recognize
+		 * the http://xml.org/sax/features/namespaces
+		 * and the http://xml.org/sax/features/namespace-prefixes feature names.
+		 */
+		throw new SAXNotSupportedException("Zatím není podporováno.");
+	}
+
+	@Override
+	public void setFeature(String name, boolean value) throws SAXNotRecognizedException, SAXNotSupportedException {
+		throw new SAXNotSupportedException("Zatím není podporováno.");
+	}
+
+	@Override
+	public Object getProperty(String name) throws SAXNotRecognizedException, SAXNotSupportedException {
+		return properties.get(name);
+	}
+
+	@Override
+	public void setProperty(String name, Object value) throws SAXNotRecognizedException, SAXNotSupportedException {
+		properties.put(name, value);
+	}
+
+	@Override
+	public void setEntityResolver(EntityResolver entityResolver) {
+		this.entityResolver = entityResolver;
+	}
+
+	@Override
+	public EntityResolver getEntityResolver() {
+		return entityResolver;
+	}
+
+	@Override
+	public void setDTDHandler(DTDHandler dtdHandler) {
+		this.dtdHandler = dtdHandler;
+	}
+
+	@Override
+	public DTDHandler getDTDHandler() {
+		return dtdHandler;
+	}
+
+	@Override
+	public void setContentHandler(ContentHandler contentHandler) {
+		this.contentHandler = contentHandler;
+	}
+
+	@Override
+	public ContentHandler getContentHandler() {
+		return contentHandler;
+	}
+
+	@Override
+	public void setErrorHandler(ErrorHandler errorHandler) {
+		this.errorHandler = errorHandler;
+	}
+
+	@Override
+	public ErrorHandler getErrorHandler() {
+		return errorHandler;
+	}
+}