/*
* ====================================================================
* Copyright (c) 2004-2012 TMate Software Ltd. All rights reserved.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
* are also available at http://svnkit.com/license.html
* If newer versions of this license are posted there, you may use a
* newer version instead, at your option.
* ====================================================================
*/
package org.tmatesoft.svn.core.wc.xml;
import org.tmatesoft.svn.util.ISVNDebugLog;
import org.tmatesoft.svn.util.SVNDebugLog;
import org.xml.sax.ContentHandler;
import org.xml.sax.Locator;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.AttributesImpl;
/**
* <b>AbstractXMLLogger</b> is a basic XML formatter for all
* XML handler classes which are provided in this package. All
* XML output is written to a specified <b>ContentHandler</b>.
*
* @version 1.3
* @author TMate Software Ltd.
* @since 1.2
*/
public abstract class AbstractXMLHandler implements Locator {
private AttributesImpl mySharedAttributes;
private ContentHandler myHandler;
private ISVNDebugLog myLog;
protected AbstractXMLHandler(ContentHandler contentHandler, ISVNDebugLog log) {
myHandler = contentHandler;
myLog = log == null ? SVNDebugLog.getDefaultLog() : log;
}
protected ISVNDebugLog getDebugLog() {
return myLog;
}
/**
* Starts logging.
*
*/
public void startDocument() {
try {
getHandler().setDocumentLocator(this);
getHandler().startDocument();
openTag(getHeaderName());
} catch (SAXException e) {
}
}
/**
* Stops logging.
*
*/
public void endDocument() {
try {
closeTag(getHeaderName());
getHandler().endDocument();
} catch (SAXException e) {
}
}
private ContentHandler getHandler() {
return myHandler;
}
protected abstract String getHeaderName();
protected void openTag(String name) throws SAXException {
if (mySharedAttributes == null) {
mySharedAttributes = new AttributesImpl();
}
getHandler().startElement("", "", name, mySharedAttributes);
mySharedAttributes.clear();
}
protected void closeTag(String name) throws SAXException {
getHandler().endElement("", "", name);
}
protected void addTag(String tagName, String value) throws SAXException {
if (mySharedAttributes == null) {
mySharedAttributes = new AttributesImpl();
}
getHandler().startElement("", "", tagName, mySharedAttributes);
mySharedAttributes.clear();
value = value == null ? "" : value;
getHandler().characters(value.toCharArray(), 0, value.length());
getHandler().endElement("", "", tagName);
}
protected void addAttribute(String name, String value) {
if (mySharedAttributes == null) {
mySharedAttributes = new AttributesImpl();
}
mySharedAttributes.addAttribute("", "", name, "CDATA", value);
}
/**
* @return <code>0</code>
*/
public int getColumnNumber() {
return 0;
}
/**
* @return <code>0</code>
*/
public int getLineNumber() {
return 0;
}
/**
* @return <span class="javakeyword">null</span>
*/
public String getPublicId() {
return null;
}
/**
* @return <span class="javakeyword">null</span>
*/
public String getSystemId() {
return null;
}
}