/*
* ====================================================================
* 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.internal.io.dav.DAVElement;
import org.tmatesoft.svn.core.internal.util.SVNXMLUtil;
import org.xml.sax.Attributes;
/**
* @author TMate Software Ltd.
* @version 1.3
*/
public class DAVLockHandler extends BasicDAVHandler {
public static StringBuffer generateGetLockRequest(StringBuffer body) {
return DAVPropertiesHandler.generatePropertiesRequest(body, new DAVElement[]{DAVElement.LOCK_DISCOVERY});
}
public static StringBuffer generateSetLockRequest(StringBuffer xmlBuffer, String comment) {
xmlBuffer = xmlBuffer == null ? new StringBuffer() : xmlBuffer;
SVNXMLUtil.addXMLHeader(xmlBuffer);
SVNXMLUtil.openNamespaceDeclarationTag(SVNXMLUtil.DAV_NAMESPACE_PREFIX, "lockinfo", DAV_NAMESPACES_LIST,
SVNXMLUtil.PREFIX_MAP, xmlBuffer);
SVNXMLUtil.openXMLTag(SVNXMLUtil.DAV_NAMESPACE_PREFIX, "lockscope", SVNXMLUtil.XML_STYLE_NORMAL, null,
xmlBuffer);
SVNXMLUtil.openXMLTag(SVNXMLUtil.DAV_NAMESPACE_PREFIX, "exclusive", SVNXMLUtil.XML_STYLE_SELF_CLOSING,
null, xmlBuffer);
SVNXMLUtil.closeXMLTag(SVNXMLUtil.DAV_NAMESPACE_PREFIX, "lockscope", xmlBuffer);
SVNXMLUtil.openXMLTag(SVNXMLUtil.DAV_NAMESPACE_PREFIX, "locktype", SVNXMLUtil.XML_STYLE_NORMAL, null,
xmlBuffer);
SVNXMLUtil.openXMLTag(SVNXMLUtil.DAV_NAMESPACE_PREFIX, "write", SVNXMLUtil.XML_STYLE_SELF_CLOSING, null,
xmlBuffer);
SVNXMLUtil.closeXMLTag(SVNXMLUtil.DAV_NAMESPACE_PREFIX, "locktype", xmlBuffer);
comment = comment == null ? "" : comment;
SVNXMLUtil.openCDataTag(SVNXMLUtil.DAV_NAMESPACE_PREFIX, "owner", comment, xmlBuffer);
SVNXMLUtil.addXMLFooter(SVNXMLUtil.DAV_NAMESPACE_PREFIX, "lockinfo", xmlBuffer);
return xmlBuffer;
}
private boolean myIsHandlingToken;
private String myID;
private String myComment;
private String myExpiration;
public DAVLockHandler() {
init();
}
public String getComment() {
return myComment;
}
public String getExpiration() {
return myExpiration;
}
public String getID() {
return myID;
}
protected void startElement(DAVElement parent, DAVElement element, Attributes attrs) {
if (element == DAVElement.LOCK_TOKEN) {
myIsHandlingToken = true;
}
}
protected void endElement(DAVElement parent, DAVElement element, StringBuffer cdata) {
if (element == DAVElement.HREF && myIsHandlingToken && cdata != null) {
myID = cdata.toString();
} else if (element == DAVElement.LOCK_TOKEN) {
myIsHandlingToken = false;
} else if (element == DAVElement.LOCK_OWNER && cdata != null) {
myComment = cdata.toString();
} else if (element == DAVElement.LOCK_TIMEOUT && cdata != null) {
myExpiration = cdata.toString();
}
}
}