/*
* ====================================================================
* 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.internal.io.dav.handlers;
import org.tmatesoft.svn.core.SVNErrorCode;
import org.tmatesoft.svn.core.SVNErrorMessage;
import org.tmatesoft.svn.core.SVNException;
import org.tmatesoft.svn.core.internal.io.dav.DAVElement;
import org.xml.sax.Attributes;
/**
* @author TMate Software Ltd.
* @version 1.3
*/
public class DAVErrorHandler extends BasicDAVHandler {
private static final DAVElement SVN_ERROR = DAVElement.getElement(DAVElement.SVN_NAMESPACE, "error");
private static final DAVElement ERROR_DATA = DAVElement.getElement(DAVElement.SVN_APACHE_PROPERTY_NAMESPACE, "human-readable");
private SVNErrorMessage myError;
private SVNErrorCode myErrorCode;
private String myErrorMessage;
public DAVErrorHandler() {
init();
myErrorCode = SVNErrorCode.RA_DAV_REQUEST_FAILED;
myErrorMessage = "General svn error from server";
}
public SVNErrorMessage getErrorMessage() {
return myError;
}
protected void startElement(DAVElement parent, DAVElement element, Attributes attrs) throws SVNException {
if (element == SVN_ERROR) {
myErrorMessage = "General svn error from server";
myError = SVNErrorMessage.create(myErrorCode, myErrorMessage);
} else if (element == ERROR_DATA) {
String errCode = attrs.getValue("errcode");
if (errCode != null) {
try {
myErrorCode = SVNErrorCode.getErrorCode(Integer.parseInt(errCode));
myError = SVNErrorMessage.create(myErrorCode, myErrorMessage);
} catch (NumberFormatException nfe) {
}
}
}
}
protected void endElement(DAVElement parent, DAVElement element, StringBuffer cdata) throws SVNException {
if (element == ERROR_DATA && cdata != null) {
String errorMessage = cdata.toString();
while (errorMessage.endsWith("\n")) {
errorMessage = errorMessage.substring(0, errorMessage.length() - 1);
}
while (errorMessage.startsWith("\n")) {
errorMessage = errorMessage.substring(1);
}
myErrorMessage = errorMessage;
myError = SVNErrorMessage.create(myErrorCode, myErrorMessage);
}
}
}