⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 davresourceimpl.java

📁 jsr170接口的java实现。是个apache的开源项目。
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
/* * 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.simple;import org.apache.jackrabbit.JcrConstants;import org.apache.jackrabbit.server.io.ExportContext;import org.apache.jackrabbit.server.io.ExportContextImpl;import org.apache.jackrabbit.server.io.IOManager;import org.apache.jackrabbit.server.io.IOUtil;import org.apache.jackrabbit.server.io.ImportContext;import org.apache.jackrabbit.server.io.ImportContextImpl;import org.apache.jackrabbit.server.io.PropertyManager;import org.apache.jackrabbit.server.io.PropertyImportContext;import org.apache.jackrabbit.server.io.IOListener;import org.apache.jackrabbit.server.io.PropertyExportContext;import org.apache.jackrabbit.server.io.AbstractExportContext;import org.apache.jackrabbit.server.io.DefaultIOListener;import org.apache.jackrabbit.util.Text;import org.apache.jackrabbit.webdav.DavConstants;import org.apache.jackrabbit.webdav.DavException;import org.apache.jackrabbit.webdav.DavResource;import org.apache.jackrabbit.webdav.DavResourceFactory;import org.apache.jackrabbit.webdav.DavResourceIterator;import org.apache.jackrabbit.webdav.DavResourceIteratorImpl;import org.apache.jackrabbit.webdav.DavResourceLocator;import org.apache.jackrabbit.webdav.DavServletResponse;import org.apache.jackrabbit.webdav.DavSession;import org.apache.jackrabbit.webdav.MultiStatusResponse;import org.apache.jackrabbit.webdav.io.InputContext;import org.apache.jackrabbit.webdav.io.OutputContext;import org.apache.jackrabbit.webdav.jcr.JcrDavException;import org.apache.jackrabbit.webdav.jcr.JcrDavSession;import org.apache.jackrabbit.webdav.jcr.lock.JcrActiveLock;import org.apache.jackrabbit.webdav.lock.ActiveLock;import org.apache.jackrabbit.webdav.lock.LockDiscovery;import org.apache.jackrabbit.webdav.lock.LockInfo;import org.apache.jackrabbit.webdav.lock.LockManager;import org.apache.jackrabbit.webdav.lock.Scope;import org.apache.jackrabbit.webdav.lock.SupportedLock;import org.apache.jackrabbit.webdav.lock.Type;import org.apache.jackrabbit.webdav.observation.ObservationConstants;import org.apache.jackrabbit.webdav.property.DavProperty;import org.apache.jackrabbit.webdav.property.DavPropertyIterator;import org.apache.jackrabbit.webdav.property.DavPropertyName;import org.apache.jackrabbit.webdav.property.DavPropertyNameSet;import org.apache.jackrabbit.webdav.property.DavPropertySet;import org.apache.jackrabbit.webdav.property.DefaultDavProperty;import org.apache.jackrabbit.webdav.property.ResourceType;import org.apache.jackrabbit.webdav.property.DavPropertyNameIterator;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import javax.jcr.Item;import javax.jcr.Node;import javax.jcr.NodeIterator;import javax.jcr.PathNotFoundException;import javax.jcr.RepositoryException;import javax.jcr.Session;import javax.jcr.lock.Lock;import java.io.IOException;import java.io.OutputStream;import java.util.ArrayList;import java.util.Date;import java.util.HashMap;import java.util.Iterator;import java.util.List;import java.util.Map;import java.util.Collections;/** * DavResourceImpl implements a DavResource. */public class DavResourceImpl implements DavResource, JcrConstants {    /**     * the default logger     */    private static final Logger log = LoggerFactory.getLogger(DavResourceImpl.class);    private static final HashMap reservedNamespaces = new HashMap();    static {        reservedNamespaces.put(DavConstants.NAMESPACE.getPrefix(), DavConstants.NAMESPACE.getURI());        reservedNamespaces.put(ObservationConstants.NAMESPACE.getPrefix(), ObservationConstants.NAMESPACE.getURI());    }    private DavResourceFactory factory;    private LockManager lockManager;    private JcrDavSession session;    private Node node;    private DavResourceLocator locator;    private DavPropertySet properties = new DavPropertySet();    private boolean inited = false;    private boolean isCollection = true;    private ItemFilter filter;    private IOManager ioManager;    private PropertyManager propManager;    private long modificationTime = IOUtil.UNDEFINED_TIME;    /**     * Create a new {@link DavResource}.     *     * @param locator     * @param factory     * @param session     */    public DavResourceImpl(DavResourceLocator locator, DavResourceFactory factory,                           DavSession session, ResourceConfig config) throws DavException {        JcrDavSession.checkImplementation(session);        this.session = (JcrDavSession)session;        this.factory = factory;        this.locator = locator;        this.filter = config.getItemFilter();        this.ioManager = config.getIOManager();        this.propManager = config.getPropertyManager();        if (locator != null && locator.getRepositoryPath() != null) {            try {                Item item = getJcrSession().getItem(locator.getRepositoryPath());                if (item != null && item.isNode()) {                    node = (Node) item;                    // define what is a collection in webdav                    isCollection = config.isCollectionResource(node);                }            } catch (PathNotFoundException e) {                // ignore: exists field evaluates to false            } catch (RepositoryException e) {                // some other error                throw new JcrDavException(e);            }        } else {            throw new DavException(DavServletResponse.SC_NOT_FOUND);        }    }    /**     * @return DavResource#COMPLIANCE_CLASS     * @see org.apache.jackrabbit.webdav.DavResource#getComplianceClass()     */    public String getComplianceClass() {        return DavResource.COMPLIANCE_CLASS;    }    /**     * @return DavResource#METHODS     * @see org.apache.jackrabbit.webdav.DavResource#getSupportedMethods()     */    public String getSupportedMethods() {        return DavResource.METHODS;    }    /**     * @see DavResource#exists() )     */    public boolean exists() {        return node != null;    }    /**     * @see DavResource#isCollection()     */    public boolean isCollection() {        return isCollection;    }    /**     * Package protected method that allows to define whether this resource     * represents a collection or not.     *     * @param isCollection     */    void setIsCollection(boolean isCollection) {        this.isCollection = isCollection;    }    /**     * @see org.apache.jackrabbit.webdav.DavResource#getLocator()     */    public DavResourceLocator getLocator() {        return locator;    }    /**     * @see DavResource#getResourcePath()     */    public String getResourcePath() {        return locator.getResourcePath();    }    /**     * @see DavResource#getHref()     */    public String getHref() {        return locator.getHref(isCollection());    }    /**     * Returns the the last segment of the resource path.<p>     * Note that this must not correspond to the name of the underlying     * repository item for two reasons:<ul>     * <li>SameNameSiblings have an index appended to their item name.</li>     * <li>the resource path may differ from the item path.</li>     * </ul>     * Using the item name as DAV:displayname caused problems with XP built-in     * client in case of resources representing SameNameSibling nodes.     *     * @see DavResource#getDisplayName()     */    public String getDisplayName() {        String resPath = getResourcePath();        return (resPath != null) ? Text.getName(resPath) : resPath;    }    /**     * @see org.apache.jackrabbit.webdav.DavResource#getModificationTime()     */    public long getModificationTime() {        initProperties();        return modificationTime;    }    /**     * If this resource exists and the specified context is not <code>null</code>     * this implementation build a new {@link ExportContext} based on the specified     * context and forwards the export to its <code>IOManager</code>. If the     * {@link IOManager#exportContent(ExportContext, DavResource)} fails,     * an <code>IOException</code> is thrown.     *     * @see DavResource#spool(OutputContext)     * @see ResourceConfig#getIOManager()     * @throws IOException if the export fails.     */    public void spool(OutputContext outputContext) throws IOException {        if (exists() && outputContext != null) {            ExportContext exportCtx = getExportContext(outputContext);            if (!ioManager.exportContent(exportCtx, this)) {                throw new IOException("Unexpected Error while spooling resource.");            }        }    }    /**     * @see DavResource#getProperty(org.apache.jackrabbit.webdav.property.DavPropertyName)     */    public DavProperty getProperty(DavPropertyName name) {        initProperties();        return properties.get(name);    }    /**     * @see DavResource#getProperties()     */    public DavPropertySet getProperties() {        initProperties();        return properties;    }    /**     * @see DavResource#getPropertyNames()     */    public DavPropertyName[] getPropertyNames() {        return getProperties().getPropertyNames();    }    /**     * Fill the set of properties     */    protected void initProperties() {        if (!exists() || inited) {            return;        }        try {            propManager.exportProperties(getPropertyExportContext(), isCollection());        } catch (RepositoryException e) {            log.warn("Error while accessing resource properties", e);        }        // set (or reset) fundamental properties        if (getDisplayName() != null) {            properties.add(new DefaultDavProperty(DavPropertyName.DISPLAYNAME, getDisplayName()));        }        if (isCollection()) {            properties.add(new ResourceType(ResourceType.COLLECTION));            // Windows XP support            properties.add(new DefaultDavProperty(DavPropertyName.ISCOLLECTION, "1"));        } else {            properties.add(new ResourceType(ResourceType.DEFAULT_RESOURCE));            // Windows XP support            properties.add(new DefaultDavProperty(DavPropertyName.ISCOLLECTION, "0"));        }        /* set current lock information. If no lock is set to this resource,        an empty lockdiscovery will be returned in the response. */        properties.add(new LockDiscovery(getLock(Type.WRITE, Scope.EXCLUSIVE)));        /* lock support information: all locks are lockable. */        SupportedLock supportedLock = new SupportedLock();        supportedLock.addEntry(Type.WRITE, Scope.EXCLUSIVE);        properties.add(supportedLock);        inited = true;    }    /**     * @param property     * @throws DavException     * @see DavResource#setProperty(org.apache.jackrabbit.webdav.property.DavProperty)     */    public void setProperty(DavProperty property) throws DavException {        alterProperty(property);    }    /**     * @param propertyName     * @throws DavException     * @see DavResource#removeProperty(org.apache.jackrabbit.webdav.property.DavPropertyName)     */    public void removeProperty(DavPropertyName propertyName) throws DavException {        alterProperty(propertyName);    }    private void alterProperty(Object prop) throws DavException {        if (isLocked(this)) {            throw new DavException(DavServletResponse.SC_LOCKED);        }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -