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 07:32:42 UTC

svn commit: r1771999 - in /jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav: client/methods/PollMethod.java client/methods/PropFindMethod.java observation/EventDiscovery.java property/PropfindInfo.java

Author: reschke
Date: Wed Nov 30 07:32:42 2016
New Revision: 1771999

URL: http://svn.apache.org/viewvc?rev=1771999&view=rev
Log:
JCR-4064: Refactor WebDAV related code out of HttpClient3-specific classes for better future re-use

use separate classes for XML parsing/serialization

Added:
    jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/property/PropfindInfo.java   (with props)
Modified:
    jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/PollMethod.java
    jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/PropFindMethod.java
    jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/observation/EventDiscovery.java

Modified: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/PollMethod.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/PollMethod.java?rev=1771999&r1=1771998&r2=1771999&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/PollMethod.java (original)
+++ jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/PollMethod.java Wed Nov 30 07:32:42 2016
@@ -15,24 +15,20 @@
 */
 package org.apache.jackrabbit.webdav.client.methods;
 
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
+import java.io.IOException;
+
+import org.apache.commons.httpclient.HttpConnection;
+import org.apache.commons.httpclient.HttpMethodBase;
+import org.apache.commons.httpclient.HttpState;
+import org.apache.jackrabbit.webdav.DavException;
 import org.apache.jackrabbit.webdav.DavMethods;
 import org.apache.jackrabbit.webdav.DavServletResponse;
-import org.apache.jackrabbit.webdav.DavException;
 import org.apache.jackrabbit.webdav.header.PollTimeoutHeader;
-import org.apache.jackrabbit.webdav.xml.DomUtil;
-import org.apache.jackrabbit.webdav.xml.ElementIterator;
-import org.apache.jackrabbit.webdav.observation.ObservationConstants;
 import org.apache.jackrabbit.webdav.observation.EventDiscovery;
-import org.apache.jackrabbit.webdav.observation.EventBundle;
-import org.apache.commons.httpclient.HttpMethodBase;
-import org.apache.commons.httpclient.HttpState;
-import org.apache.commons.httpclient.HttpConnection;
+import org.apache.jackrabbit.webdav.observation.ObservationConstants;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.w3c.dom.Element;
-import org.w3c.dom.Document;
-
-import java.io.IOException;
 
 /**
  * <code>PollMethod</code> implementation.
@@ -112,23 +108,13 @@ public class PollMethod extends DavMetho
       * @param root
       * @return
       */
-     private boolean buildDiscoveryFromRoot(Element root) {
-         if (DomUtil.matches(root, XML_EVENTDISCOVERY, ObservationConstants.NAMESPACE)) {
-             eventDiscovery = new EventDiscovery();
-             ElementIterator it = DomUtil.getChildren(root, XML_EVENTBUNDLE, ObservationConstants.NAMESPACE);
-             while (it.hasNext()) {
-                 final Element ebElement = it.nextElement();
-                 EventBundle eb = new EventBundle() {
-                     public Element toXml(Document document) {
-                         return (Element) document.importNode(ebElement, true);
-                     }
-                 };
-                 eventDiscovery.addEventBundle(eb);
-             }
-             return true;
-         } else {
-             log.debug("Missing 'eventdiscovery' response body in POLL method.");
-         }
-         return false;
-     }
+    private boolean buildDiscoveryFromRoot(Element root) {
+        try {
+            eventDiscovery = EventDiscovery.createFromXml(root);
+            return true;
+        } catch (IllegalArgumentException ex) {
+            log.debug("Missing 'eventdiscovery' response body in POLL method.", ex);
+            return false;
+        }
+    }
 }

Modified: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/PropFindMethod.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/PropFindMethod.java?rev=1771999&r1=1771998&r2=1771999&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/PropFindMethod.java (original)
+++ jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/client/methods/PropFindMethod.java Wed Nov 30 07:32:42 2016
@@ -18,17 +18,12 @@ package org.apache.jackrabbit.webdav.cli
 
 import java.io.IOException;
 
-import javax.xml.parsers.ParserConfigurationException;
-
 import org.apache.jackrabbit.webdav.DavConstants;
 import org.apache.jackrabbit.webdav.DavMethods;
 import org.apache.jackrabbit.webdav.DavServletResponse;
 import org.apache.jackrabbit.webdav.header.DepthHeader;
 import org.apache.jackrabbit.webdav.property.DavPropertyNameSet;
-import org.apache.jackrabbit.webdav.xml.DomUtil;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
+import org.apache.jackrabbit.webdav.property.PropfindInfo;
 
 /**
  * <code>PropFindMethod</code>, as specified in
@@ -73,57 +68,8 @@ public class PropFindMethod extends DavM
         DepthHeader dh = new DepthHeader(depth);
         setRequestHeader(dh.getHeaderName(), dh.getHeaderValue());
 
-        // build the request body
-        try {
-            // create the document and attach the root element
-            Document document = DomUtil.createDocument();
-            Element propfind = DomUtil.createElement(document, XML_PROPFIND, NAMESPACE);
-            document.appendChild(propfind);
-
-            // fill the propfind element
-            switch (propfindType) {
-                case PROPFIND_ALL_PROP:
-                    propfind.appendChild(DomUtil.createElement(document, XML_ALLPROP, NAMESPACE));
-                    break;
-                    
-                case PROPFIND_PROPERTY_NAMES:
-                    propfind.appendChild(DomUtil.createElement(document, XML_PROPNAME, NAMESPACE));
-                    break;
-                    
-                case PROPFIND_BY_PROPERTY:
-                    if (propNameSet == null) {
-                        // name set missing, ask for a property that is known to exist
-                        Element prop = DomUtil.createElement(document, XML_PROP, NAMESPACE);
-                        Element resourcetype = DomUtil.createElement(document, PROPERTY_RESOURCETYPE, NAMESPACE);
-                        prop.appendChild(resourcetype);
-                        propfind.appendChild(prop);
-                    } else {
-                        propfind.appendChild(propNameSet.toXml(document));
-                    }
-                    break;
-                    
-                case PROPFIND_ALL_PROP_INCLUDE:
-                    propfind.appendChild(DomUtil.createElement(document, XML_ALLPROP, NAMESPACE));
-                    if (propNameSet != null && ! propNameSet.isEmpty()) {
-                        Element include = DomUtil.createElement(document, XML_INCLUDE, NAMESPACE);
-                        Element prop = propNameSet.toXml(document);
-                        for (Node c = prop.getFirstChild(); c != null; c = c.getNextSibling()) {
-                            // copy over the children of <prop> to <include> element
-                            include.appendChild(c.cloneNode(true));
-                        }
-                        propfind.appendChild(include);
-                    }
-                    break;
-                  
-               default:
-                   throw new IllegalArgumentException("unknown propfind type");
-            }
-
-            // set the request body
-            setRequestBody(document);
-        } catch (ParserConfigurationException e) {
-            throw new IOException(e.getMessage());
-        }
+        PropfindInfo info = new PropfindInfo(propfindType, propNameSet);
+        setRequestBody(info);
     }
 
     //---------------------------------------------------------< HttpMethod >---

Modified: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/observation/EventDiscovery.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/observation/EventDiscovery.java?rev=1771999&r1=1771998&r2=1771999&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/observation/EventDiscovery.java (original)
+++ jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/observation/EventDiscovery.java Wed Nov 30 07:32:42 2016
@@ -17,6 +17,7 @@
 package org.apache.jackrabbit.webdav.observation;
 
 import org.apache.jackrabbit.webdav.xml.DomUtil;
+import org.apache.jackrabbit.webdav.xml.ElementIterator;
 import org.apache.jackrabbit.webdav.xml.XmlSerializable;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -89,4 +90,32 @@ public class EventDiscovery implements O
         }
         return ed;
     }
+
+    /**
+     * Build a <code>EventDiscovery</code> from the specified xml element.
+     *
+     * @param eventDiscoveryElement
+     * @return new <code>EventDiscovery</code> instance.
+     * @throws IllegalArgumentException if the given document is <code>null</code>
+     * or does not provide the required element.
+     */
+    public static EventDiscovery createFromXml(Element eventDiscoveryElement) {
+        if (!DomUtil.matches(eventDiscoveryElement, XML_EVENTDISCOVERY, ObservationConstants.NAMESPACE)) {
+            throw new IllegalArgumentException(
+                    "{" + ObservationConstants.NAMESPACE + "}" + XML_EVENTDISCOVERY + " element expected, but got: {"
+                            + eventDiscoveryElement.getNamespaceURI() + "}" + eventDiscoveryElement.getLocalName());
+        }
+        EventDiscovery eventDiscovery = new EventDiscovery();
+        ElementIterator it = DomUtil.getChildren(eventDiscoveryElement, XML_EVENTBUNDLE, ObservationConstants.NAMESPACE);
+        while (it.hasNext()) {
+            final Element ebElement = it.nextElement();
+            EventBundle eb = new EventBundle() {
+                public Element toXml(Document document) {
+                    return (Element) document.importNode(ebElement, true);
+                }
+            };
+            eventDiscovery.addEventBundle(eb);
+        }
+        return eventDiscovery;
+    }
 }

Added: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/property/PropfindInfo.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/property/PropfindInfo.java?rev=1771999&view=auto
==============================================================================
--- jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/property/PropfindInfo.java (added)
+++ jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/property/PropfindInfo.java Wed Nov 30 07:32:42 2016
@@ -0,0 +1,84 @@
+/*
+ * 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 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;
+import org.w3c.dom.Node;
+
+public class PropfindInfo implements XmlSerializable {
+
+    private final int propfindType;
+    private final DavPropertyNameSet propNameSet;
+
+    public PropfindInfo(int propfindType, DavPropertyNameSet propNameSet) {
+        this.propfindType = propfindType;
+        this.propNameSet = propNameSet;
+    }
+
+    @Override
+    public Element toXml(Document document) {
+        Element propfind = DomUtil.createElement(document, DavConstants.XML_PROPFIND, DavConstants.NAMESPACE);
+
+        // fill the propfind element
+        switch (propfindType) {
+            case DavConstants.PROPFIND_ALL_PROP:
+                propfind.appendChild(DomUtil.createElement(document, DavConstants.XML_ALLPROP, DavConstants.NAMESPACE));
+                break;
+
+            case DavConstants.PROPFIND_PROPERTY_NAMES:
+                propfind.appendChild(DomUtil.createElement(document, DavConstants.XML_PROPNAME, DavConstants.NAMESPACE));
+                break;
+
+            case DavConstants.PROPFIND_BY_PROPERTY:
+                if (propNameSet == null) {
+                    // name set missing, ask for a property that is known to
+                    // exist
+                    Element prop = DomUtil.createElement(document, DavConstants.XML_PROP, DavConstants.NAMESPACE);
+                    Element resourcetype = DomUtil.createElement(document, DavConstants.PROPERTY_RESOURCETYPE,
+                            DavConstants.NAMESPACE);
+                    prop.appendChild(resourcetype);
+                    propfind.appendChild(prop);
+                } else {
+                    propfind.appendChild(propNameSet.toXml(document));
+                }
+                break;
+
+            case DavConstants.PROPFIND_ALL_PROP_INCLUDE:
+                propfind.appendChild(DomUtil.createElement(document, DavConstants.XML_ALLPROP, DavConstants.NAMESPACE));
+                if (propNameSet != null && !propNameSet.isEmpty()) {
+                    Element include = DomUtil.createElement(document, DavConstants.XML_INCLUDE, DavConstants.NAMESPACE);
+                    Element prop = propNameSet.toXml(document);
+                    for (Node c = prop.getFirstChild(); c != null; c = c.getNextSibling()) {
+                        // copy over the children of <prop> to <include>
+                        // element
+                        include.appendChild(c.cloneNode(true));
+                    }
+                    propfind.appendChild(include);
+                }
+                break;
+
+            default:
+                throw new IllegalArgumentException("unknown propfind type");
+        }
+
+        return propfind;
+    }
+}

Propchange: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/property/PropfindInfo.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/property/PropfindInfo.java
------------------------------------------------------------------------------
    svn:executable = *