/* * ==================================================================== * 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; import java.util.Map; import org.tmatesoft.svn.core.internal.io.dav.http.XMLReader; import org.tmatesoft.svn.core.internal.util.SVNHashMap; /** * @version 1.3 * @author TMate Software Ltd. */ public class DAVElement { private static Map ourProperties = new SVNHashMap(); public static DAVElement getElement(String namespace, String name) { if (namespace == null) { namespace = ""; } Map properties = (Map) ourProperties.get(namespace); if (properties == null) { properties = new SVNHashMap(); ourProperties.put(namespace, properties); } name = name.replace(XMLReader.COLON_REPLACEMENT, ':'); DAVElement property = (DAVElement) properties.get(name); if (property == null) { property = new DAVElement(namespace, name); properties.put(name, property); } return property; } public static final String SVN_DAV_PROPERTY_NAMESPACE = "http://subversion.tigris.org/xmlns/dav/"; public static final String SVN_CUSTOM_PROPERTY_NAMESPACE = "http://subversion.tigris.org/xmlns/custom/"; public static final String SVN_SVN_PROPERTY_NAMESPACE = "http://subversion.tigris.org/xmlns/svn/"; public static final String SVN_APACHE_PROPERTY_NAMESPACE = "http://apache.org/dav/xmlns"; public static final String SVN_DAV_ERROR_NAMESPACE = "svn:"; public static final String DAV_NAMESPACE = "DAV:"; public static final String SVN_NAMESPACE = "svn:"; public static final String DEPTH_OPTION = SVN_DAV_PROPERTY_NAMESPACE + "svn/depth"; public static final String MERGE_INFO_OPTION = SVN_DAV_PROPERTY_NAMESPACE + "svn/mergeinfo"; public static final String LOG_REVPROPS_OPTION = SVN_DAV_PROPERTY_NAMESPACE + "svn/log-revprops"; public static final String PARTIAL_REPLAY_OPTION = SVN_DAV_PROPERTY_NAMESPACE + "svn/partial-replay"; public static final String ATOMIC_REVPROPS_OPTION = SVN_DAV_PROPERTY_NAMESPACE + "svn/atomic-revprops"; public static final String INHERITED_PROPS_OPTION = SVN_DAV_PROPERTY_NAMESPACE + "svn/inherited-props"; public static final String EPHEMERAL_PROPS_OPTION = SVN_DAV_PROPERTY_NAMESPACE + "svn/ephemeral-txnprops"; public static final DAVElement ACTIVITY = getElement(DAV_NAMESPACE, "activity"); public static final DAVElement VERSION_HISTORY = getElement(DAV_NAMESPACE, "version-history"); public static final DAVElement DISPLAY_NAME = getElement(DAV_NAMESPACE, "displayname"); public static final DAVElement SUPPORTED_LIVE_PROPERTY = getElement(DAV_NAMESPACE, "supported-live-property"); public static final DAVElement MERGE_RESPONSE = getElement(DAV_NAMESPACE, "merge-response"); public static final DAVElement UPDATE_SET = getElement(DAV_NAMESPACE, "updated-set"); public static final DAVElement NO_AUTO_MERGE = getElement(DAV_NAMESPACE, "no-auto-merge"); public static final DAVElement NO_CHECKOUT = getElement(DAV_NAMESPACE, "no-checkout"); public static final DAVElement SOURCE = getElement(DAV_NAMESPACE, "source"); public static final DAVElement MULTISTATUS = getElement(DAV_NAMESPACE, "multistatus"); public static final DAVElement RESPONSE = getElement(DAV_NAMESPACE, "response"); public static final DAVElement RESPONSE_DESCRIPTION = getElement(DAV_NAMESPACE, "responsedescription"); public static final DAVElement HREF = getElement(DAV_NAMESPACE, "href"); public static final DAVElement PROPSTAT = getElement(DAV_NAMESPACE, "propstat"); public static final DAVElement PROP = getElement(DAV_NAMESPACE, "prop"); public static final DAVElement STATUS = getElement(DAV_NAMESPACE, "status"); public static final DAVElement BASELINE = getElement(DAV_NAMESPACE, "baseline"); public static final DAVElement BASELINE_COLLECTION = getElement(DAV_NAMESPACE, "baseline-collection"); public static final DAVElement CHECKED_IN = getElement(DAV_NAMESPACE, "checked-in"); public static final DAVElement COLLECTION = getElement(DAV_NAMESPACE, "collection"); public static final DAVElement RESOURCE_TYPE = getElement(DAV_NAMESPACE, "resourcetype"); public static final DAVElement VERSION_CONTROLLED_CONFIGURATION = getElement(DAV_NAMESPACE, "version-controlled-configuration"); public static final DAVElement VERSION_NAME = getElement(DAV_NAMESPACE, "version-name"); public static final DAVElement GET_CONTENT_LENGTH = getElement(DAV_NAMESPACE, "getcontentlength"); public static final DAVElement CREATION_DATE = getElement(DAV_NAMESPACE, "creationdate"); public static final DAVElement CREATOR_DISPLAY_NAME = getElement(DAV_NAMESPACE, "creator-displayname"); public static final DAVElement COMMENT = getElement(DAV_NAMESPACE, "comment"); public static final DAVElement DATE = getElement(SVN_NAMESPACE, "date"); public static final DAVElement POST_COMMIT_ERROR = DAVElement.getElement(DAVElement.SVN_NAMESPACE, "post-commit-err"); public static final DAVElement PROPFIND = DAVElement.getElement(DAV_NAMESPACE, "propfind"); public static final DAVElement ALLPROP = DAVElement.getElement(DAV_NAMESPACE, "allprop"); public static final DAVElement PROPNAME = DAVElement.getElement(DAV_NAMESPACE, "propname"); public static final DAVElement ACTIVE_LOCK = DAVElement.getElement(DAV_NAMESPACE, "activelock"); public static final DAVElement LOCK_TYPE = DAVElement.getElement(DAV_NAMESPACE, "locktype"); public static final DAVElement LOCK_SCOPE = DAVElement.getElement(DAV_NAMESPACE, "lockscope"); public static final DAVElement WRITE = DAVElement.getElement(DAV_NAMESPACE, "write"); public static final DAVElement EXCLUSIVE = DAVElement.getElement(DAV_NAMESPACE, "exclusive"); public static final DAVElement SHARED = DAVElement.getElement(DAV_NAMESPACE, "shared"); public static final DAVElement DEPTH = DAVElement.getElement(DAV_NAMESPACE, "depth"); public static final DAVElement SUPPORTED_LOCK = getElement(DAV_NAMESPACE, "supportedlock"); public static final DAVElement LOCK_DISCOVERY = getElement(DAV_NAMESPACE, "lockdiscovery"); public static final DAVElement LOCK_OWNER = getElement(DAV_NAMESPACE, "owner"); public static final DAVElement LOCK_TIMEOUT = getElement(DAV_NAMESPACE, "timeout"); public static final DAVElement LOCK_TOKEN = getElement(DAV_NAMESPACE, "locktoken"); public static final DAVElement LOCK_ENTRY = getElement(DAV_NAMESPACE, "lockentry"); public static final DAVElement SVN_LOCK_TOKEN_LIST = getElement(SVN_NAMESPACE, "lock-token-list"); public static final DAVElement SVN_LOCK = getElement(SVN_NAMESPACE, "lock"); public static final DAVElement SVN_LOCK_PATH = getElement(SVN_NAMESPACE, "path"); public static final DAVElement SVN_LOCK_TOKEN = getElement(SVN_NAMESPACE, "token"); public static final DAVElement SVN_LOCK_COMMENT = getElement(SVN_NAMESPACE, "comment"); public static final DAVElement SVN_LOCK_OWNER = getElement(SVN_NAMESPACE, "owner"); public static final DAVElement SVN_LOCK_CREATION_DATE = getElement(SVN_NAMESPACE, "creationdate"); public static final DAVElement SVN_LOCK_EXPIRATION_DATE = getElement(SVN_NAMESPACE, "expirationdate"); //servlet defined svn namespace properties public static final DAVElement PATH = DAVElement.getElement(DAVElement.SVN_NAMESPACE, "path"); public static final DAVElement REVISION = DAVElement.getElement(DAVElement.SVN_NAMESPACE, "revision"); public static final DAVElement START_REVISION = DAVElement.getElement(DAVElement.SVN_NAMESPACE, "start-revision"); public static final DAVElement END_REVISION = DAVElement.getElement(DAVElement.SVN_NAMESPACE, "end-revision"); public static final DAVElement PEG_REVISION = DAVElement.getElement(DAVElement.SVN_NAMESPACE, "peg-revision"); public static final DAVElement INCLUDE_MERGED_REVISIONS = getElement(SVN_NAMESPACE, "include-merged-revisions"); public static final DAVElement BASELINE_RELATIVE_PATH = getElement(SVN_DAV_PROPERTY_NAMESPACE, "baseline-relative-path"); public static final DAVElement REPOSITORY_UUID = getElement(SVN_DAV_PROPERTY_NAMESPACE, "repository-uuid"); public static final DAVElement MD5_CHECKSUM = getElement(SVN_DAV_PROPERTY_NAMESPACE, "md5-checksum"); public static final DAVElement SHA1_CHECKSUM = getElement(SVN_DAV_PROPERTY_NAMESPACE, "sha1-checksum"); public static final DAVElement DEADPROP_COUNT = getElement(SVN_DAV_PROPERTY_NAMESPACE, "deadprop-count"); public static final DAVElement AUTO_VERSION = getElement(DAV_NAMESPACE, "auto-version"); public static final DAVElement MERGE_INFO_ITEM = getElement(SVN_NAMESPACE, "mergeinfo-item"); public static final DAVElement MERGE_INFO_PATH = getElement(SVN_NAMESPACE, "mergeinfo-path"); public static final DAVElement MERGE_INFO_INFO = getElement(SVN_NAMESPACE, "mergeinfo-info"); //Supported live properties public static final DAVElement GET_CONTENT_LANGUAGE = getElement(DAV_NAMESPACE, "getcontentlanguage"); public static final DAVElement GET_CONTENT_TYPE = getElement(DAV_NAMESPACE, "getcontenttype"); public static final DAVElement GET_ETAG = getElement(DAV_NAMESPACE, "getetag"); public static final DAVElement GET_LAST_MODIFIED = getElement(DAV_NAMESPACE, "getlastmodified"); public static final DAVElement[] STARTING_PROPERTIES = {VERSION_CONTROLLED_CONFIGURATION, RESOURCE_TYPE, BASELINE_RELATIVE_PATH, REPOSITORY_UUID}; public static final DAVElement[] BASELINE_PROPERTIES = {BASELINE_COLLECTION, VERSION_NAME}; private String myPropertyName; private String myNamespace; public static final DAVElement LOG = getElement(SVN_SVN_PROPERTY_NAMESPACE, "log"); private DAVElement(String namespace, String propertyName) { myNamespace = namespace; myPropertyName = propertyName; } public String getNamespace() { return myNamespace; } public String getName() { return myPropertyName; } public String toString() { StringBuffer sb = new StringBuffer(); sb.append(getNamespace()); if (!getNamespace().endsWith(":")) { sb.append(":"); } sb.append(getName()); return sb.toString(); } public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((myNamespace == null) ? 0 : myNamespace.hashCode()); result = prime * result + ((myPropertyName == null) ? 0 : myPropertyName.hashCode()); return result; } public boolean equals(Object obj) { if (this == obj) { return true; } if (obj == null) { return false; } if (getClass() != obj.getClass()) { return false; } DAVElement other = (DAVElement) obj; if (myNamespace == null) { if (other.myNamespace != null) { return false; } } else if (!myNamespace.equals(other.myNamespace)) { return false; } if (myPropertyName == null) { if (other.myPropertyName != null) { return false; } } else if (!myPropertyName.equals(other.myPropertyName)) { return false; } return true; } }