/*
* See the NOTICE file distributed with this work for additional
* information regarding copyright ownership.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.xwiki.rendering.wikimodel.xml.sax;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.net.URL;
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;
import org.xwiki.rendering.wikimodel.IWikiParser;
import org.xwiki.rendering.wikimodel.WikiParserException;
import org.xwiki.rendering.wikimodel.xml.WemTagNotifier;
/**
* @version $Id: 619fe909c5806e7c3d4c3f10caff2ab507421d9e $
* @since 4.0M1
*/
public class WemReader implements XMLReader
{
private ContentHandler fContentHandler;
private DTDHandler fDTDHandler;
private EntityResolver fEntityResolver;
private ErrorHandler fErrorHandler;
private IWikiParser fParser;
protected Map<String, Object> fProperties = new HashMap<String, Object>();
public WemReader(IWikiParser parser)
{
fParser = parser;
}
/**
* @see org.xml.sax.XMLReader#getContentHandler()
*/
public ContentHandler getContentHandler()
{
return fContentHandler;
}
/**
* @see org.xml.sax.XMLReader#getDTDHandler()
*/
public DTDHandler getDTDHandler()
{
return fDTDHandler;
}
/**
* @see org.xml.sax.XMLReader#getEntityResolver()
*/
public EntityResolver getEntityResolver()
{
return fEntityResolver;
}
/**
* @see org.xml.sax.XMLReader#getErrorHandler()
*/
public ErrorHandler getErrorHandler()
{
return fErrorHandler;
}
/**
* @see org.xml.sax.XMLReader#getFeature(java.lang.String)
*/
public boolean getFeature(String name)
throws SAXNotRecognizedException,
SAXNotSupportedException
{
// throw new SAXNotSupportedException();
return false;
}
/**
* @see org.xml.sax.XMLReader#getProperty(java.lang.String)
*/
public Object getProperty(String name)
throws SAXNotRecognizedException,
SAXNotSupportedException
{
return fProperties.get(name);
}
/**
* @see org.xml.sax.XMLReader#parse(org.xml.sax.InputSource)
*/
public void parse(InputSource input) throws IOException, SAXException
{
Reader reader = input.getCharacterStream();
parse(reader);
}
/**
* @param reader
* @throws SAXException
* @throws IOException
*/
private void parse(Reader reader) throws SAXException, IOException
{
try {
WemToSax handler = new WemToSax(fContentHandler);
WemTagNotifier tagNotifier = new WemTagNotifier(handler);
fParser.parse(reader, tagNotifier);
} catch (WikiParserException e) {
throw new SAXException(e);
} finally {
reader.close();
}
}
/**
* @see org.xml.sax.XMLReader#parse(java.lang.String)
*/
public void parse(String systemId) throws IOException, SAXException
{
URL url = new URL(systemId);
InputStream input = url.openStream();
try {
InputStreamReader reader = new InputStreamReader(input, "UTF-8");
parse(reader);
} finally {
input.close();
}
}
/**
* @see org.xml.sax.XMLReader#setContentHandler(org.xml.sax.ContentHandler)
*/
public void setContentHandler(ContentHandler handler)
{
fContentHandler = handler;
}
/**
* @see org.xml.sax.XMLReader#setDTDHandler(org.xml.sax.DTDHandler)
*/
public void setDTDHandler(DTDHandler handler)
{
fDTDHandler = handler;
}
/**
* @see org.xml.sax.XMLReader#setEntityResolver(org.xml.sax.EntityResolver)
*/
public void setEntityResolver(EntityResolver resolver)
{
fEntityResolver = resolver;
}
/**
* @see org.xml.sax.XMLReader#setErrorHandler(org.xml.sax.ErrorHandler)
*/
public void setErrorHandler(ErrorHandler handler)
{
fErrorHandler = handler;
}
/**
* @see org.xml.sax.XMLReader#setFeature(java.lang.String, boolean)
*/
public void setFeature(String name, boolean value)
throws SAXNotRecognizedException,
SAXNotSupportedException
{
// FIXME:
}
/**
* @see org.xml.sax.XMLReader#setProperty(java.lang.String,
* java.lang.Object)
*/
public void setProperty(String name, Object value)
throws SAXNotRecognizedException,
SAXNotSupportedException
{
fProperties.put(name, value);
}
}