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.1.2 in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-jcr-webdav.git
commit 36a21a232ee0e6d8cba0d4abdb8b9e6c75ef3db9 Author: Felix Meschberger <fmesc...@apache.org> AuthorDate: Wed Sep 28 06:15:26 2011 +0000 SLING-2233 Apply patch providing support for CopyMoveManager supplied by Sameer Charles (Thanks) git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/bundles/jcr/webdav@1176743 13f79535-47bb-0310-9956-ffa450edef68 --- .../webdav/impl/handler/DefaultHandlerService.java | 21 +++++++- .../webdav/impl/handler/SlingCopyMoveManager.java | 62 ++++++++++++++++++++++ .../webdav/impl/helper/SlingResourceConfig.java | 12 ++++- .../webdav/impl/servlets/SlingWebDavServlet.java | 23 +++++++- 4 files changed, 114 insertions(+), 4 deletions(-) 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 f25d050..4575ba5 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 @@ -33,6 +33,9 @@ import org.apache.jackrabbit.server.io.ImportContext; import org.apache.jackrabbit.server.io.PropertyExportContext; import org.apache.jackrabbit.server.io.PropertyHandler; import org.apache.jackrabbit.server.io.PropertyImportContext; +import org.apache.jackrabbit.server.io.CopyMoveHandler; +import org.apache.jackrabbit.server.io.CopyMoveContext; +import org.apache.jackrabbit.webdav.DavException; import org.apache.jackrabbit.webdav.DavResource; import org.apache.jackrabbit.webdav.property.PropEntry; import org.apache.sling.commons.osgi.OsgiUtil; @@ -55,7 +58,7 @@ 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 { +public class DefaultHandlerService implements IOHandler, PropertyHandler, CopyMoveHandler { private DefaultHandler delegatee; @@ -149,4 +152,20 @@ public class DefaultHandlerService implements IOHandler, PropertyHandler { throws RepositoryException { return delegatee.importProperties(importContext, isCollection); } + + public boolean canCopy(CopyMoveContext context, DavResource source, DavResource destination) { + return delegatee.canCopy(context, source, destination); + } + + public boolean copy(CopyMoveContext context, DavResource source, DavResource destination) throws DavException { + return delegatee.copy(context, source, destination); + } + + public boolean canMove(CopyMoveContext context, DavResource source, DavResource destination) { + return delegatee.canMove(context, source, destination); + } + + public boolean move(CopyMoveContext context, DavResource source, DavResource destination) throws DavException { + return delegatee.move(context, source, destination); + } } diff --git a/src/main/java/org/apache/sling/jcr/webdav/impl/handler/SlingCopyMoveManager.java b/src/main/java/org/apache/sling/jcr/webdav/impl/handler/SlingCopyMoveManager.java new file mode 100644 index 0000000..312e031 --- /dev/null +++ b/src/main/java/org/apache/sling/jcr/webdav/impl/handler/SlingCopyMoveManager.java @@ -0,0 +1,62 @@ +/* + * 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.CopyMoveHandler; +import org.apache.jackrabbit.server.io.CopyMoveManagerImpl; +import org.osgi.framework.ServiceReference; +import org.osgi.service.component.ComponentContext; + +/** + * CopyMoveManager service that uses a ServiceTracker to find available + * CopyMoveHandler. + */ +public class SlingCopyMoveManager extends CopyMoveManagerImpl { + + private static final CopyMoveHandler[] COPYMOVEHANDLERS_PROTOTYPE = new CopyMoveHandler[0]; + + private final SlingHandlerManager<CopyMoveHandler> handlerManager; + + public SlingCopyMoveManager(final String referenceName) { + handlerManager = new SlingHandlerManager<CopyMoveHandler>(referenceName); + } + + @Override + public void addCopyMoveHandler(CopyMoveHandler propertyHandler) { + throw new UnsupportedOperationException( + "This CopyMoveManager only supports registered CopyMoveHandler services"); + } + + @Override + public CopyMoveHandler[] getCopyMoveHandlers() { + return this.handlerManager.getHandlers(COPYMOVEHANDLERS_PROTOTYPE); + } + + public void setComponentContext(ComponentContext componentContext) { + this.handlerManager.setComponentContext(componentContext); + } + + public void bindCopyMoveHandler(final ServiceReference copyMoveHandlerReference) { + this.handlerManager.bindHandler(copyMoveHandlerReference); + } + + public void unbindCopyMoveHandler(final ServiceReference copyMoveHandlerReference) { + this.handlerManager.unbindHandler(copyMoveHandlerReference); + } +} 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 42bec88..eab6da0 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 @@ -18,6 +18,7 @@ */ package org.apache.sling.jcr.webdav.impl.helper; +import org.apache.jackrabbit.server.io.CopyMoveManager; import org.apache.jackrabbit.server.io.IOManager; import org.apache.jackrabbit.server.io.PropertyManager; import org.apache.jackrabbit.webdav.simple.DefaultItemFilter; @@ -45,6 +46,8 @@ public class SlingResourceConfig extends ResourceConfig { private final PropertyManager propertyManager; + private final CopyMoveManager copyMoveManager; + private final String servletContextPath; private final Dictionary<String, String> servletInitParams; @@ -52,10 +55,12 @@ public class SlingResourceConfig extends ResourceConfig { public SlingResourceConfig(MimeTypeService mimeTypeService, Dictionary<?, ?> config, IOManager ioManager, - PropertyManager propertyManager) { + PropertyManager propertyManager, + CopyMoveManager copyMoveManager) { super(new SlingTikaDetector(mimeTypeService)); this.ioManager = ioManager; this.propertyManager = propertyManager; + this.copyMoveManager = copyMoveManager; collectionTypes = OsgiUtil.toStringArray( config.get(SlingWebDavServlet.COLLECTION_TYPES), SlingWebDavServlet.COLLECTION_TYPES_DEFAULT); @@ -109,6 +114,11 @@ public class SlingResourceConfig extends ResourceConfig { } @Override + public CopyMoveManager getCopyMoveManager() { + return copyMoveManager; + } + + @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 47be098..ccf7a38 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 @@ -32,12 +32,14 @@ import org.apache.felix.scr.annotations.ReferencePolicy; 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.IOHandler; import org.apache.jackrabbit.server.io.PropertyHandler; import org.apache.jackrabbit.webdav.DavLocatorFactory; 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.SlingIOManager; import org.apache.sling.jcr.webdav.impl.handler.SlingPropertyManager; import org.apache.sling.jcr.webdav.impl.helper.SlingLocatorFactory; @@ -72,7 +74,8 @@ import org.osgi.service.http.NamespaceException; @Property(name = "sling.servlet.methods", value = "*", propertyPrivate = true) }) @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.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) }) public class SlingWebDavServlet extends SimpleWebdavServlet { @@ -125,6 +128,8 @@ public class SlingWebDavServlet extends SimpleWebdavServlet { static final String PROPERTYHANDLER_REF_NAME = "PropertyHandler"; + static final String COPYMOVEHANDLER_REF_NAME = "CopyMoveHandler"; + @Reference private SlingRepository repository; @@ -140,6 +145,9 @@ public class SlingWebDavServlet extends SimpleWebdavServlet { private final SlingPropertyManager propertyManager = new SlingPropertyManager( PROPERTYHANDLER_REF_NAME); + private final SlingCopyMoveManager copyMoveManager = new SlingCopyMoveManager( + COPYMOVEHANDLER_REF_NAME); + private SlingResourceConfig resourceConfig; private DavLocatorFactory locatorFactory; @@ -206,11 +214,13 @@ public class SlingWebDavServlet extends SimpleWebdavServlet { this.ioManager.setComponentContext(context); this.propertyManager.setComponentContext(context); + this.copyMoveManager.setComponentContext(context); resourceConfig = new SlingResourceConfig(mimeTypeService, context.getProperties(), ioManager, - propertyManager); + propertyManager, + copyMoveManager); // Register servlet, and set the contextPath field to signal successful // registration @@ -231,6 +241,7 @@ public class SlingWebDavServlet extends SimpleWebdavServlet { this.resourceConfig = null; this.ioManager.setComponentContext(null); this.propertyManager.setComponentContext(null); + this.copyMoveManager.setComponentContext(null); } public void bindIOHandler(final ServiceReference ioHandlerReference) { @@ -248,4 +259,12 @@ public class SlingWebDavServlet extends SimpleWebdavServlet { public void unbindPropertyHandler(final ServiceReference propertyHandlerReference) { this.propertyManager.unbindPropertyHandler(propertyHandlerReference); } + + public void bindCopyMoveHandler(final ServiceReference copyMoveHandlerReference) { + this.copyMoveManager.bindCopyMoveHandler(copyMoveHandlerReference); + } + + public void unbindCopyMoveHandler(final ServiceReference copyMoveHandlerReference) { + this.copyMoveManager.unbindCopyMoveHandler(copyMoveHandlerReference); + } } -- To stop receiving notification emails like this one, please contact "commits@sling.apache.org" <commits@sling.apache.org>.