multistatus.java
来自「jsr170接口的java实现。是个apache的开源项目。」· Java 代码 · 共 190 行
JAVA
190 行
/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */package org.apache.jackrabbit.webdav;import org.apache.jackrabbit.webdav.property.DavPropertyNameSet;import org.apache.jackrabbit.webdav.xml.DomUtil;import org.apache.jackrabbit.webdav.xml.ElementIterator;import org.apache.jackrabbit.webdav.xml.XmlSerializable;import org.apache.commons.collections.map.LinkedMap;import org.w3c.dom.Document;import org.w3c.dom.Element;import java.util.Iterator;import java.util.Map;/** * MultiStatus representing the content of a multistatus response body and * allows to retrieve the Xml representation. */public class MultiStatus implements DavConstants, XmlSerializable { /** * Map collecting the responses for this multistatus, where every href must * only occure one single time. */ private Map responses = new LinkedMap(); /** * A general response description at the multistatus top level is used to * provide a general message describing the overarching nature of the response. * If this value is available an application may use it instead of * presenting the individual response descriptions contained within the * responses. */ private String responseDescription; /** * Add response(s) to this multistatus, in order to build a multistatus for * responding to a PROPFIND request. * * @param resource The resource to add property from * @param propNameSet The requested property names of the PROPFIND request * @param propFindType * @param depth */ public void addResourceProperties(DavResource resource, DavPropertyNameSet propNameSet, int propFindType, int depth) { addResponse(new MultiStatusResponse(resource, propNameSet, propFindType)); if (depth > 0 && resource.isCollection()) { DavResourceIterator iter = resource.getMembers(); while (iter.hasNext()) { addResourceProperties(iter.nextResource(), propNameSet, propFindType, depth-1); } } } /** * Add response(s) to this multistatus, in order to build a multistatus e.g. * in order to respond to a PROPFIND request. Please note, that in terms * of PROPFIND, this method would correspond to a * {@link DavConstants#PROPFIND_BY_PROPERTY} propfind type. * * @param resource The resource to add property from * @param propNameSet The requested property names of the PROPFIND request * @param depth * @see #addResourceProperties(DavResource, DavPropertyNameSet, int, int) for * the corresponding method that allows to specify the type explicitely. */ public void addResourceProperties(DavResource resource, DavPropertyNameSet propNameSet, int depth) { addResourceProperties(resource, propNameSet, PROPFIND_BY_PROPERTY, depth); } /** * Add response(s) to this multistatus, in order to build a multistatus * as returned for COPY, MOVE, LOCK or DELETE requests resulting in an error * with a resource other than the resource identified in the Request-URI. * * @param resource * @param status * @param depth */ public void addResourceStatus(DavResource resource, int status, int depth) { addResponse(new MultiStatusResponse(resource.getHref(), status)); if (depth > 0 && resource.isCollection()) { DavResourceIterator iter = resource.getMembers(); while (iter.hasNext()) { addResourceStatus(iter.nextResource(), status, depth-1); } } } /** * Add a <code>MultiStatusResponse</code> element to this <code>MultiStatus</code> * * @param response */ public void addResponse(MultiStatusResponse response) { responses.put(response.getHref(), response); } /** * Returns the multistatus responses present as array. * * @return array of all {@link MultiStatusResponse responses} present in this * multistatus. */ public MultiStatusResponse[] getResponses() { return (MultiStatusResponse[]) responses.values().toArray(new MultiStatusResponse[responses.size()]); } /** * Set the response description. * * @param responseDescription */ public void setResponseDescription(String responseDescription) { this.responseDescription = responseDescription; } /** * Returns the response description. * * @return responseDescription */ public String getResponseDescription() { return responseDescription; } /** * Return the Xml representation of this <code>MultiStatus</code>. * * @return Xml document * @param document */ public Element toXml(Document document) { Element multistatus = DomUtil.createElement(document, XML_MULTISTATUS, NAMESPACE); Iterator it = responses.values().iterator(); while(it.hasNext()) { multistatus.appendChild(((MultiStatusResponse)it.next()).toXml(document)); } if (responseDescription != null) { Element respDesc = DomUtil.createElement(document, XML_RESPONSEDESCRIPTION, NAMESPACE, responseDescription); multistatus.appendChild(respDesc); } return multistatus; } /** * Build a <code>MultiStatus</code> from the specified xml element. * * @param multistatusElement * @return new <code>MultiStatus</code> instance. * @throws IllegalArgumentException if the given document is <code>null</code> * or does not provide the required element. */ public static MultiStatus createFromXml(Element multistatusElement) { if (!DomUtil.matches(multistatusElement, XML_MULTISTATUS, NAMESPACE)) { throw new IllegalArgumentException("DAV:multistatus element expected."); } MultiStatus multistatus = new MultiStatus(); ElementIterator it = DomUtil.getChildren(multistatusElement, XML_RESPONSE, NAMESPACE); while (it.hasNext()) { Element respElem = it.nextElement(); MultiStatusResponse response = MultiStatusResponse.createFromXml(respElem); multistatus.addResponse(response); } // optional response description on the multistatus element multistatus.setResponseDescription(DomUtil.getChildText(multistatusElement, XML_RESPONSEDESCRIPTION, NAMESPACE)); return multistatus; }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?