/* * 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.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; import org.apache.jackrabbit.webdav.simple.ItemFilter; import org.apache.jackrabbit.webdav.simple.ResourceConfig; import org.apache.jackrabbit.webdav.simple.SimpleWebdavServlet; import org.apache.sling.commons.mime.MimeTypeService; import org.apache.sling.commons.osgi.OsgiUtil; import org.apache.sling.jcr.webdav.impl.servlets.SlingWebDavServlet; import javax.jcr.Item; import javax.jcr.Node; import javax.jcr.RepositoryException; import java.net.URL; import java.util.Dictionary; import java.util.Hashtable; public class SlingResourceConfig extends ResourceConfig { private final String[] collectionTypes; private final ItemFilter itemFilter; private final IOManager ioManager; private final PropertyManager propertyManager; private final CopyMoveManager copyMoveManager; private final DeleteManager deleteManager; private final String servletContextPath; private final Dictionary<String, String> servletInitParams; public SlingResourceConfig(MimeTypeService mimeTypeService, Dictionary<?, ?> config, IOManager ioManager, PropertyManager propertyManager, 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); String[] filterPrefixes = OsgiUtil.toStringArray( config.get(SlingWebDavServlet.FILTER_PREFIXES), SlingWebDavServlet.FILTER_PREFIXES_DEFAULT); String[] filterNodeTypes = OsgiUtil.toStringArray( config.get(SlingWebDavServlet.FILTER_TYPES), SlingWebDavServlet.EMPTY_DEFAULT); String[] filterURIs = OsgiUtil.toStringArray( config.get(SlingWebDavServlet.FILTER_URIS), SlingWebDavServlet.EMPTY_DEFAULT); itemFilter = new DefaultItemFilter(); itemFilter.setFilteredPrefixes(filterPrefixes); itemFilter.setFilteredURIs(filterURIs); itemFilter.setFilteredNodetypes(filterNodeTypes); servletContextPath = OsgiUtil.toString( config.get(SlingWebDavServlet.PROP_CONTEXT), SlingWebDavServlet.DEFAULT_CONTEXT); servletInitParams = new Hashtable<String, String>(); servletInitParams.put( SimpleWebdavServlet.INIT_PARAM_RESOURCE_PATH_PREFIX, servletContextPath); String value = OsgiUtil.toString( config.get(SlingWebDavServlet.PROP_REALM), SlingWebDavServlet.DEFAULT_REALM); servletInitParams.put( SimpleWebdavServlet.INIT_PARAM_AUTHENTICATE_HEADER, "Basic realm=\"" + value + "\""); boolean createAbsoluteUri = OsgiUtil.toBoolean( config.get(SlingWebDavServlet.PROP_CREATE_ABSOLUTE_URI), SlingWebDavServlet.DEFAULT_CREATE_ABSOLUTE_URI); servletInitParams.put( SimpleWebdavServlet.INIT_PARAM_CREATE_ABSOLUTE_URI, Boolean.toString(createAbsoluteUri)); } // ---------- ResourceConfig overwrites @Override public IOManager getIOManager() { return ioManager; } @Override public ItemFilter getItemFilter() { return itemFilter; } @Override public PropertyManager getPropertyManager() { return propertyManager; } @Override public CopyMoveManager getCopyMoveManager() { return copyMoveManager; } @Override public DeleteManager getDeleteManager() { return deleteManager; } @Override public boolean isCollectionResource(Item item) { if (item.isNode()) { Node node = (Node) item; for (String type : collectionTypes) { try { if (node.isNodeType(type)) { return false; } } catch (RepositoryException re) { // TODO: log and continue } } } return true; } @Override public void parse(URL configURL) { // we don't parse nothing } // ---------- SlingResourceConfig additions public String getServletContextPath() { return servletContextPath; } public Dictionary<String, String> getServletInitParams() { return servletInitParams; } }