You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ro...@apache.org on 2017/11/07 09:52:04 UTC
[sling-org-apache-sling-jcr-webdav] 02/05: SLING-4825 - support
Jackrabbit DeleteHandler - contributed by Satya Deep Maheshwari, thanks!
This is an automated email from the ASF dual-hosted git repository.
rombert pushed a commit to annotated tag org.apache.sling.jcr.webdav-2.3.2
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-jcr-webdav.git
commit f82f58f1aab04321e6f946d4730bcd6c72aa5ecd
Author: Bertrand Delacretaz <bd...@apache.org>
AuthorDate: Mon Sep 14 12:50:16 2015 +0000
SLING-4825 - support Jackrabbit DeleteHandler - contributed by Satya Deep Maheshwari, thanks!
git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/bundles/jcr/webdav@1702935 13f79535-47bb-0310-9956-ffa450edef68
---
pom.xml | 4 +-
.../webdav/impl/handler/DefaultHandlerService.java | 15 +++++-
.../webdav/impl/handler/SlingDeleteManager.java | 63 ++++++++++++++++++++++
.../webdav/impl/helper/SlingResourceConfig.java | 12 ++++-
.../webdav/impl/servlets/SlingWebDavServlet.java | 23 +++++++-
5 files changed, 111 insertions(+), 6 deletions(-)
diff --git a/pom.xml b/pom.xml
index d34c785..134f1dc 100644
--- a/pom.xml
+++ b/pom.xml
@@ -56,7 +56,7 @@
<instructions>
<Bundle-Category>sling,jcr</Bundle-Category>
<Export-Package>
- org.apache.jackrabbit.server.io;version=2.3;provide:=true
+ org.apache.jackrabbit.server.io;version=2.4;provide:=true
</Export-Package>
<Private-Package>
org.apache.jackrabbit.server,
@@ -115,7 +115,7 @@
<dependency>
<groupId>org.apache.jackrabbit</groupId>
<artifactId>jackrabbit-jcr-server</artifactId>
- <version>2.6.4</version>
+ <version>2.11.0</version>
<scope>compile</scope>
</dependency>
diff --git a/src/main/java/org/apache/sling/jcr/webdav/impl/handler/DefaultHandlerService.java b/src/main/java/org/apache/sling/jcr/webdav/impl/handler/DefaultHandlerService.java
index 4575ba5..3021e6b 100644
--- a/src/main/java/org/apache/sling/jcr/webdav/impl/handler/DefaultHandlerService.java
+++ b/src/main/java/org/apache/sling/jcr/webdav/impl/handler/DefaultHandlerService.java
@@ -26,6 +26,8 @@ import org.apache.felix.scr.annotations.Properties;
import org.apache.felix.scr.annotations.Property;
import org.apache.felix.scr.annotations.Service;
import org.apache.jackrabbit.server.io.DefaultHandler;
+import org.apache.jackrabbit.server.io.DeleteContext;
+import org.apache.jackrabbit.server.io.DeleteHandler;
import org.apache.jackrabbit.server.io.ExportContext;
import org.apache.jackrabbit.server.io.IOHandler;
import org.apache.jackrabbit.server.io.IOManager;
@@ -58,7 +60,8 @@ import javax.jcr.RepositoryException;
@Property(name = SlingWebDavServlet.TYPE_NONCOLLECTIONS, value = SlingWebDavServlet.TYPE_NONCOLLECTIONS_DEFAULT, propertyPrivate = false),
@Property(name = SlingWebDavServlet.TYPE_CONTENT, value = SlingWebDavServlet.TYPE_CONTENT_DEFAULT, propertyPrivate = false) })
@Service
-public class DefaultHandlerService implements IOHandler, PropertyHandler, CopyMoveHandler {
+public class DefaultHandlerService implements IOHandler, PropertyHandler, CopyMoveHandler,
+ DeleteHandler {
private DefaultHandler delegatee;
@@ -168,4 +171,14 @@ public class DefaultHandlerService implements IOHandler, PropertyHandler, CopyMo
public boolean move(CopyMoveContext context, DavResource source, DavResource destination) throws DavException {
return delegatee.move(context, source, destination);
}
+
+ public boolean delete(DeleteContext deleteContext, DavResource davResource)
+ throws DavException {
+ return delegatee.delete(deleteContext, davResource);
+ }
+
+ public boolean canDelete(DeleteContext deleteContext,
+ DavResource davResource) {
+ return delegatee.canDelete(deleteContext, davResource);
+ }
}
diff --git a/src/main/java/org/apache/sling/jcr/webdav/impl/handler/SlingDeleteManager.java b/src/main/java/org/apache/sling/jcr/webdav/impl/handler/SlingDeleteManager.java
new file mode 100644
index 0000000..156a720
--- /dev/null
+++ b/src/main/java/org/apache/sling/jcr/webdav/impl/handler/SlingDeleteManager.java
@@ -0,0 +1,63 @@
+/*
+ * 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.sling.jcr.webdav.impl.handler;
+
+import org.apache.jackrabbit.server.io.DeleteHandler;
+import org.apache.jackrabbit.server.io.DeleteManagerImpl;
+import org.osgi.framework.ServiceReference;
+import org.osgi.service.component.ComponentContext;
+
+/**
+ * DeleteManager service that uses a ServiceTracker to find available
+ * DeleteHandler.
+ */
+public class SlingDeleteManager extends DeleteManagerImpl {
+
+ private static final DeleteHandler[] DELETEHANDLERS_PROTOTYPE = new DeleteHandler[0];
+ private final SlingHandlerManager<DeleteHandler> handlerManager;
+
+ public SlingDeleteManager(final String referenceName) {
+ handlerManager = new SlingHandlerManager<DeleteHandler>(referenceName);
+ }
+
+ @Override
+ public void addDeleteHandler(DeleteHandler propertyHandler) {
+ throw new UnsupportedOperationException(
+ "This DeleteManager only supports registered DeleteHandler services");
+ }
+
+ @Override
+ public DeleteHandler[] getDeleteHandlers() {
+ return this.handlerManager.getHandlers(DELETEHANDLERS_PROTOTYPE);
+ }
+
+ public void setComponentContext(ComponentContext componentContext) {
+ this.handlerManager.setComponentContext(componentContext);
+ }
+
+ public void bindDeleteHandler(final ServiceReference deleteHandlerReference) {
+ this.handlerManager.bindHandler(deleteHandlerReference);
+ }
+
+ public void unbindDeleteHandler(final ServiceReference deleteHandlerReference) {
+ this.handlerManager.unbindHandler(deleteHandlerReference);
+ }
+
+}
diff --git a/src/main/java/org/apache/sling/jcr/webdav/impl/helper/SlingResourceConfig.java b/src/main/java/org/apache/sling/jcr/webdav/impl/helper/SlingResourceConfig.java
index b0e16da..8f94274 100644
--- a/src/main/java/org/apache/sling/jcr/webdav/impl/helper/SlingResourceConfig.java
+++ b/src/main/java/org/apache/sling/jcr/webdav/impl/helper/SlingResourceConfig.java
@@ -19,6 +19,7 @@
package org.apache.sling.jcr.webdav.impl.helper;
import org.apache.jackrabbit.server.io.CopyMoveManager;
+import org.apache.jackrabbit.server.io.DeleteManager;
import org.apache.jackrabbit.server.io.IOManager;
import org.apache.jackrabbit.server.io.PropertyManager;
import org.apache.jackrabbit.webdav.simple.DefaultItemFilter;
@@ -48,6 +49,8 @@ public class SlingResourceConfig extends ResourceConfig {
private final CopyMoveManager copyMoveManager;
+ private final DeleteManager deleteManager;
+
private final String servletContextPath;
private final Dictionary<String, String> servletInitParams;
@@ -56,11 +59,13 @@ public class SlingResourceConfig extends ResourceConfig {
Dictionary<?, ?> config,
IOManager ioManager,
PropertyManager propertyManager,
- CopyMoveManager copyMoveManager) {
+ CopyMoveManager copyMoveManager,
+ DeleteManager deleteManager) {
super(new SlingTikaDetector(mimeTypeService));
this.ioManager = ioManager;
this.propertyManager = propertyManager;
this.copyMoveManager = copyMoveManager;
+ this.deleteManager = deleteManager;
collectionTypes = OsgiUtil.toStringArray(
config.get(SlingWebDavServlet.COLLECTION_TYPES),
SlingWebDavServlet.COLLECTION_TYPES_DEFAULT);
@@ -126,6 +131,11 @@ public class SlingResourceConfig extends ResourceConfig {
}
@Override
+ public DeleteManager getDeleteManager() {
+ return deleteManager;
+ }
+
+ @Override
public boolean isCollectionResource(Item item) {
if (item.isNode()) {
Node node = (Node) item;
diff --git a/src/main/java/org/apache/sling/jcr/webdav/impl/servlets/SlingWebDavServlet.java b/src/main/java/org/apache/sling/jcr/webdav/impl/servlets/SlingWebDavServlet.java
index c031a98..cdd488e 100644
--- a/src/main/java/org/apache/sling/jcr/webdav/impl/servlets/SlingWebDavServlet.java
+++ b/src/main/java/org/apache/sling/jcr/webdav/impl/servlets/SlingWebDavServlet.java
@@ -37,6 +37,7 @@ import org.apache.felix.scr.annotations.References;
import org.apache.felix.scr.annotations.Service;
import org.apache.jackrabbit.server.SessionProvider;
import org.apache.jackrabbit.server.io.CopyMoveHandler;
+import org.apache.jackrabbit.server.io.DeleteHandler;
import org.apache.jackrabbit.server.io.IOHandler;
import org.apache.jackrabbit.server.io.PropertyHandler;
import org.apache.jackrabbit.webdav.DavException;
@@ -47,6 +48,7 @@ import org.apache.jackrabbit.webdav.simple.SimpleWebdavServlet;
import org.apache.sling.commons.mime.MimeTypeService;
import org.apache.sling.jcr.api.SlingRepository;
import org.apache.sling.jcr.webdav.impl.handler.SlingCopyMoveManager;
+import org.apache.sling.jcr.webdav.impl.handler.SlingDeleteManager;
import org.apache.sling.jcr.webdav.impl.handler.SlingIOManager;
import org.apache.sling.jcr.webdav.impl.handler.SlingPropertyManager;
import org.apache.sling.jcr.webdav.impl.helper.SlingLocatorFactory;
@@ -76,7 +78,8 @@ import org.osgi.service.http.NamespaceException;
@References({
@Reference(name = SlingWebDavServlet.IOHANDLER_REF_NAME, referenceInterface = IOHandler.class, cardinality = ReferenceCardinality.OPTIONAL_MULTIPLE, policy = ReferencePolicy.DYNAMIC),
@Reference(name = SlingWebDavServlet.PROPERTYHANDLER_REF_NAME, referenceInterface = PropertyHandler.class, cardinality = ReferenceCardinality.OPTIONAL_MULTIPLE, policy = ReferencePolicy.DYNAMIC),
- @Reference(name = SlingWebDavServlet.COPYMOVEHANDLER_REF_NAME, referenceInterface = CopyMoveHandler.class, cardinality = ReferenceCardinality.OPTIONAL_MULTIPLE, policy = ReferencePolicy.DYNAMIC)
+ @Reference(name = SlingWebDavServlet.COPYMOVEHANDLER_REF_NAME, referenceInterface = CopyMoveHandler.class, cardinality = ReferenceCardinality.OPTIONAL_MULTIPLE, policy = ReferencePolicy.DYNAMIC),
+ @Reference(name = SlingWebDavServlet.DELETEHANDLER_REF_NAME, referenceInterface = DeleteHandler.class, cardinality = ReferenceCardinality.OPTIONAL_MULTIPLE, policy = ReferencePolicy.DYNAMIC)
})
public class SlingWebDavServlet extends SimpleWebdavServlet {
@@ -136,6 +139,8 @@ public class SlingWebDavServlet extends SimpleWebdavServlet {
static final String COPYMOVEHANDLER_REF_NAME = "CopyMoveHandler";
+ static final String DELETEHANDLER_REF_NAME = "DeleteHandler";
+
@Reference
private SlingRepository repository;
@@ -154,6 +159,9 @@ public class SlingWebDavServlet extends SimpleWebdavServlet {
private final SlingCopyMoveManager copyMoveManager = new SlingCopyMoveManager(
COPYMOVEHANDLER_REF_NAME);
+ private final SlingDeleteManager deleteManager = new SlingDeleteManager(
+ DELETEHANDLER_REF_NAME);
+
private SlingResourceConfig resourceConfig;
private DavLocatorFactory locatorFactory;
@@ -221,12 +229,14 @@ public class SlingWebDavServlet extends SimpleWebdavServlet {
this.ioManager.setComponentContext(context);
this.propertyManager.setComponentContext(context);
this.copyMoveManager.setComponentContext(context);
+ this.deleteManager.setComponentContext(context);
resourceConfig = new SlingResourceConfig(mimeTypeService,
context.getProperties(),
ioManager,
propertyManager,
- copyMoveManager);
+ copyMoveManager,
+ deleteManager);
// Register servlet, and set the contextPath field to signal successful
// registration
@@ -267,6 +277,7 @@ public class SlingWebDavServlet extends SimpleWebdavServlet {
}
public void bindCopyMoveHandler(final ServiceReference copyMoveHandlerReference) {
+
this.copyMoveManager.bindCopyMoveHandler(copyMoveHandlerReference);
}
@@ -274,6 +285,14 @@ public class SlingWebDavServlet extends SimpleWebdavServlet {
this.copyMoveManager.unbindCopyMoveHandler(copyMoveHandlerReference);
}
+ public void bindDeleteHandler(final ServiceReference deleteHandlerReference) {
+ this.deleteManager.bindDeleteHandler(deleteHandlerReference);
+ }
+
+ public void unbindDeleteHandler(final ServiceReference deleteHandlerReference) {
+ this.deleteManager.unbindDeleteHandler(deleteHandlerReference);
+ }
+
/** Overridden as the base class uses sendError that we don't want (SLING-2443) */
@Override
protected void sendUnauthorized(WebdavRequest request, WebdavResponse response, DavException error) throws IOException {
--
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.