You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by re...@apache.org on 2016/11/30 14:51:46 UTC
svn commit: r1772049 - in
/jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav:
client/methods/PropPatchMethod.java property/ProppatchInfo.java
Author: reschke
Date: Wed Nov 30 14:51:46 2016
New Revision: 1772049
URL: http://svn.apache.org/viewvc?rev=1772049&view=rev
Log:
JCR-4064: Refactor WebDAV related code out of HttpClient3-specific classes for better future re-use
move PROPPATCH request building into separate *Info class
Added:
jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/property/ProppatchInfo.java (with props)
Modified:
jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/PropPatchMethod.java
Modified: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/PropPatchMethod.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/PropPatchMethod.java?rev=1772049&r1=1772048&r2=1772049&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/PropPatchMethod.java (original)
+++ jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/PropPatchMethod.java Wed Nov 30 14:51:46 2016
@@ -16,30 +16,26 @@
*/
package org.apache.jackrabbit.webdav.client.methods;
+import java.io.IOException;
+import java.util.List;
+
+import org.apache.commons.httpclient.HttpConnection;
+import org.apache.commons.httpclient.HttpState;
import org.apache.jackrabbit.webdav.DavConstants;
+import org.apache.jackrabbit.webdav.DavException;
import org.apache.jackrabbit.webdav.DavMethods;
-import org.apache.jackrabbit.webdav.property.DavPropertyNameSet;
-import org.apache.jackrabbit.webdav.property.DavPropertySet;
-import org.apache.jackrabbit.webdav.property.DavPropertyName;
-import org.apache.jackrabbit.webdav.property.DavPropertyNameIterator;
-import org.apache.jackrabbit.webdav.property.DavProperty;
-import org.apache.jackrabbit.webdav.property.PropEntry;
import org.apache.jackrabbit.webdav.DavServletResponse;
import org.apache.jackrabbit.webdav.MultiStatus;
import org.apache.jackrabbit.webdav.MultiStatusResponse;
-import org.apache.jackrabbit.webdav.DavException;
import org.apache.jackrabbit.webdav.Status;
-import org.apache.jackrabbit.webdav.xml.DomUtil;
-import org.apache.commons.httpclient.HttpState;
-import org.apache.commons.httpclient.HttpConnection;
+import org.apache.jackrabbit.webdav.property.DavPropertyName;
+import org.apache.jackrabbit.webdav.property.DavPropertyNameIterator;
+import org.apache.jackrabbit.webdav.property.DavPropertyNameSet;
+import org.apache.jackrabbit.webdav.property.DavPropertySet;
+import org.apache.jackrabbit.webdav.property.PropEntry;
+import org.apache.jackrabbit.webdav.property.ProppatchInfo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-
-import javax.xml.parsers.ParserConfigurationException;
-import java.io.IOException;
-import java.util.List;
/**
* <code>PropPatchMethod</code>...
@@ -48,9 +44,8 @@ public class PropPatchMethod extends Dav
private static Logger log = LoggerFactory.getLogger(PropPatchMethod.class);
- private final DavPropertyNameSet propertyNames = new DavPropertyNameSet();
-
private DavException responseException;
+ private DavPropertyNameSet propertyNames;
/**
*
@@ -61,81 +56,17 @@ public class PropPatchMethod extends Dav
*/
public PropPatchMethod(String uri, List<? extends PropEntry> changeList) throws IOException {
super(uri);
- if (changeList == null || changeList.isEmpty()) {
- throw new IllegalArgumentException("PROPPATCH cannot be executed without properties to be set or removed.");
- }
- try {
- Document document = DomUtil.createDocument();
- Element propUpdateElement = DomUtil.addChildElement(document, XML_PROPERTYUPDATE, NAMESPACE);
-
- Element propElement = null;
- boolean isSet = false;
- for (Object entry : changeList) {
- if (entry instanceof DavPropertyName) {
- // DAV:remove
- DavPropertyName removeName = (DavPropertyName) entry;
- if (propElement == null || isSet) {
- isSet = false;
- propElement = getPropElement(propUpdateElement, isSet);
- }
- propElement.appendChild(removeName.toXml(document));
- propertyNames.add(removeName);
- } else if (entry instanceof DavProperty) {
- // DAV:set
- DavProperty<?> setProperty = (DavProperty<?>) entry;
- if (propElement == null || !isSet) {
- isSet = true;
- propElement = getPropElement(propUpdateElement, isSet);
- }
- propElement.appendChild(setProperty.toXml(document));
- propertyNames.add(setProperty.getName());
- } else {
- throw new IllegalArgumentException("ChangeList may only contain DavPropertyName and DavProperty elements.");
- }
- }
- setRequestBody(document);
- } catch (ParserConfigurationException e) {
- throw new IOException(e.getMessage());
- }
+ ProppatchInfo info = new ProppatchInfo(changeList);
+ setRequestBody(info);
+ this.propertyNames = info.getAffectedProperties();
}
public PropPatchMethod(String uri, DavPropertySet setProperties,
DavPropertyNameSet removeProperties) throws IOException {
super(uri);
- if (setProperties == null || removeProperties == null) {
- throw new IllegalArgumentException("Neither setProperties nor removeProperties must be null.");
- }
- if (setProperties.isEmpty() && removeProperties.isEmpty()) {
- throw new IllegalArgumentException("Either setProperties or removeProperties can be empty; not both of them.");
- }
-
- propertyNames.addAll(removeProperties);
- for (DavPropertyName setName : setProperties.getPropertyNames()) {
- propertyNames.add(setName);
- }
-
- try {
- Document document = DomUtil.createDocument();
- Element propupdate = DomUtil.addChildElement(document, XML_PROPERTYUPDATE, NAMESPACE);
- // DAV:set
- if (!setProperties.isEmpty()) {
- Element set = DomUtil.addChildElement(propupdate, XML_SET, NAMESPACE);
- set.appendChild(setProperties.toXml(document));
- }
- // DAV:remove
- if (!removeProperties.isEmpty()) {
- Element remove = DomUtil.addChildElement(propupdate, XML_REMOVE, NAMESPACE);
- remove.appendChild(removeProperties.toXml(document));
- }
- setRequestBody(document);
- } catch (ParserConfigurationException e) {
- throw new IOException(e.getMessage());
- }
- }
-
- private Element getPropElement(Element propUpdate, boolean isSet) {
- Element updateEntry = DomUtil.addChildElement(propUpdate, (isSet) ? XML_SET : XML_REMOVE , NAMESPACE);
- return DomUtil.addChildElement(updateEntry, XML_PROP, NAMESPACE);
+ ProppatchInfo info = new ProppatchInfo(setProperties, removeProperties);
+ setRequestBody(info);
+ this.propertyNames = info.getAffectedProperties();
}
//---------------------------------------------------------< HttpMethod >---
Added: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/property/ProppatchInfo.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/property/ProppatchInfo.java?rev=1772049&view=auto
==============================================================================
--- jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/property/ProppatchInfo.java (added)
+++ jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/property/ProppatchInfo.java Wed Nov 30 14:51:46 2016
@@ -0,0 +1,128 @@
+/*
+ * 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.property;
+
+import java.util.List;
+
+import org.apache.jackrabbit.webdav.DavConstants;
+import org.apache.jackrabbit.webdav.xml.DomUtil;
+import org.apache.jackrabbit.webdav.xml.XmlSerializable;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+public class ProppatchInfo implements XmlSerializable {
+
+ private final List<? extends PropEntry> changeList;
+ private final DavPropertySet setProperties;
+ private final DavPropertyNameSet removeProperties;
+
+ private final DavPropertyNameSet propertyNames = new DavPropertyNameSet();
+
+ public ProppatchInfo(List<? extends PropEntry> changeList) {
+ if (changeList == null || changeList.isEmpty()) {
+ throw new IllegalArgumentException("PROPPATCH cannot be executed without properties to be set or removed.");
+ }
+ this.changeList = changeList;
+ this.setProperties = null;
+ this.removeProperties = null;
+ for (PropEntry entry : changeList) {
+ if (entry instanceof DavPropertyName) {
+ // DAV:remove
+ this.propertyNames.add((DavPropertyName) entry);
+ } else if (entry instanceof DavProperty) {
+ // DAV:set
+ DavProperty<?> setProperty = (DavProperty<?>) entry;
+ this.propertyNames.add(setProperty.getName());
+ } else {
+ throw new IllegalArgumentException("ChangeList may only contain DavPropertyName and DavProperty elements.");
+ }
+ }
+ }
+
+ public ProppatchInfo(DavPropertySet setProperties, DavPropertyNameSet removeProperties) {
+ if (setProperties == null || removeProperties == null) {
+ throw new IllegalArgumentException("Neither setProperties nor removeProperties must be null.");
+ }
+ if (setProperties.isEmpty() && removeProperties.isEmpty()) {
+ throw new IllegalArgumentException("Either setProperties or removeProperties can be empty; not both of them.");
+ }
+ this.changeList = null;
+ this.setProperties = setProperties;
+ this.removeProperties = removeProperties;
+ this.propertyNames.addAll(removeProperties);
+ for (DavPropertyName setName : setProperties.getPropertyNames()) {
+ this.propertyNames.add(setName);
+ }
+ }
+
+ public DavPropertyNameSet getAffectedProperties() {
+ if (this.propertyNames.isEmpty()) {
+ throw new IllegalStateException("must be called after toXml()");
+ }
+ return this.propertyNames;
+ }
+
+ @Override
+ public Element toXml(Document document) {
+ Element proppatch = DomUtil.createElement(document, DavConstants.XML_PROPERTYUPDATE, DavConstants.NAMESPACE);
+
+ if (changeList != null) {
+ Element propElement = null;
+ boolean isSet = false;
+ for (Object entry : changeList) {
+ if (entry instanceof DavPropertyName) {
+ // DAV:remove
+ DavPropertyName removeName = (DavPropertyName) entry;
+ if (propElement == null || isSet) {
+ isSet = false;
+ propElement = getPropElement(proppatch, false);
+ }
+ propElement.appendChild(removeName.toXml(document));
+ } else if (entry instanceof DavProperty) {
+ // DAV:set
+ DavProperty<?> setProperty = (DavProperty<?>) entry;
+ if (propElement == null || !isSet) {
+ isSet = true;
+ propElement = getPropElement(proppatch, true);
+ }
+ propElement.appendChild(setProperty.toXml(document));
+ } else {
+ throw new IllegalArgumentException("ChangeList may only contain DavPropertyName and DavProperty elements.");
+ }
+ }
+ } else {
+ // DAV:set
+ if (!setProperties.isEmpty()) {
+ Element set = DomUtil.addChildElement(proppatch, DavConstants.XML_SET, DavConstants.NAMESPACE);
+ set.appendChild(setProperties.toXml(document));
+ }
+ // DAV:remove
+ if (!removeProperties.isEmpty()) {
+ Element remove = DomUtil.addChildElement(proppatch, DavConstants.XML_REMOVE, DavConstants.NAMESPACE);
+ remove.appendChild(removeProperties.toXml(document));
+ }
+ }
+
+ return proppatch;
+ }
+
+ private Element getPropElement(Element propUpdate, boolean isSet) {
+ Element updateEntry = DomUtil.addChildElement(propUpdate, isSet ? DavConstants.XML_SET : DavConstants.XML_REMOVE,
+ DavConstants.NAMESPACE);
+ return DomUtil.addChildElement(updateEntry, DavConstants.XML_PROP, DavConstants.NAMESPACE);
+ }
+}
Propchange: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/property/ProppatchInfo.java
------------------------------------------------------------------------------
svn:eol-style = native