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

📄 abstractresource.java

📁 jsr170接口的java实现。是个apache的开源项目。
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
     */    public void addLockManager(LockManager lockMgr) {        if (lockMgr instanceof TxLockManagerImpl) {            txMgr = (TxLockManagerImpl) lockMgr;        }    }    /**     * @see org.apache.jackrabbit.webdav.DavResource#getFactory()     */    public DavResourceFactory getFactory() {        return factory;    }    //--------------------------------------------------------------------------    /**     * @see org.apache.jackrabbit.webdav.transaction.TransactionResource#getSession()     * @see org.apache.jackrabbit.webdav.observation.ObservationResource#getSession()     */    public DavSession getSession() {        return session;    }    //--------------------------------------< TransactionResource interface >---    /**     * @see TransactionResource#init(TxLockManager, String)     */    public void init(TxLockManager txMgr, String transactionId) {        this.txMgr = (TxLockManagerImpl) txMgr;        this.transactionId = transactionId;    }    /**     * @see TransactionResource#unlock(String, org.apache.jackrabbit.webdav.transaction.TransactionInfo)     */    public void unlock(String lockToken, TransactionInfo tInfo) throws DavException {        txMgr.releaseLock(tInfo, lockToken, this);    }    /**     * @see TransactionResource#getTransactionId()     */    public String getTransactionId() {        return transactionId;    }    //-------------------------------------------< DeltaVResource interface >---    /**     * @param optionsInfo     * @return object to be used in the OPTIONS response body or <code>null</code>     * @see DeltaVResource#getOptionResponse(org.apache.jackrabbit.webdav.version.OptionsInfo)     */    public OptionsResponse getOptionResponse(OptionsInfo optionsInfo) {        OptionsResponse oR = null;        if (optionsInfo != null) {            oR = new OptionsResponse();            // currently only DAV:version-history-collection-set and            // DAV:workspace-collection-set is supported.            if (optionsInfo.containsElement(DeltaVConstants.XML_VH_COLLECTION_SET, DeltaVConstants.NAMESPACE)) {                String[] hrefs = new String[] {                    getLocatorFromItemPath(ItemResourceConstants.VERSIONSTORAGE_PATH).getHref(true)                };                oR.addEntry(DeltaVConstants.XML_VH_COLLECTION_SET, DeltaVConstants.NAMESPACE, hrefs);            }            if (optionsInfo.containsElement(DeltaVConstants.XML_WSP_COLLECTION_SET, DeltaVConstants.NAMESPACE)) {                // workspaces cannot be created anywhere.                oR.addEntry(DeltaVConstants.XML_WSP_COLLECTION_SET, DeltaVConstants.NAMESPACE, new String[0]);            }        }        return oR;    }    /**     * @param reportInfo     * @return the requested report     * @throws DavException     * @see DeltaVResource#getReport(org.apache.jackrabbit.webdav.version.report.ReportInfo)     */    public Report getReport(ReportInfo reportInfo) throws DavException {        if (reportInfo == null) {            throw new DavException(DavServletResponse.SC_BAD_REQUEST, "A REPORT request must provide a valid XML request body.");        }        if (!exists()) {            throw new DavException(DavServletResponse.SC_NOT_FOUND);        }        if (supportedReports.isSupportedReport(reportInfo)) {            Report report = ReportType.getType(reportInfo).createReport(this, reportInfo);            return report;        } else {            throw new DavException(DavServletResponse.SC_UNPROCESSABLE_ENTITY, "Unkown report "+ reportInfo.getReportName() +"requested.");        }    }    /**     * The JCR api does not provide methods to create new workspaces. Calling     * <code>addWorkspace</code> on this resource will always fail.     *     * @param workspace     * @throws DavException Always throws.     * @see DeltaVResource#addWorkspace(org.apache.jackrabbit.webdav.DavResource)     */    public void addWorkspace(DavResource workspace) throws DavException {        throw new DavException(DavServletResponse.SC_FORBIDDEN);    }    /**     * Return an array of <code>DavResource</code> objects that are referenced     * by the property with the specified name.     *     * @param hrefPropertyName     * @return array of <code>DavResource</code>s     * @throws DavException     * @see DeltaVResource#getReferenceResources(org.apache.jackrabbit.webdav.property.DavPropertyName)     */    public DavResource[] getReferenceResources(DavPropertyName hrefPropertyName) throws DavException {        DavProperty prop = getProperty(hrefPropertyName);        if (prop == null || !(prop instanceof HrefProperty)) {            throw new DavException(DavServletResponse.SC_CONFLICT, "Unknown Href-Property '"+hrefPropertyName+"' on resource "+getResourcePath());        }        List hrefs = ((HrefProperty)prop).getHrefs();        DavResource[] refResources = new DavResource[hrefs.size()];        Iterator hrefIter = hrefs.iterator();        int i = 0;        while (hrefIter.hasNext()) {            refResources[i] = getResourceFromHref((String)hrefIter.next());            i++;        }        return refResources;    }    /**     * Retrieve the <code>DavResource</code> object that is represented by     * the given href String.     *     * @param href     * @return <code>DavResource</code> object     */    private DavResource getResourceFromHref(String href) throws DavException {        // build a new locator: remove trailing prefix        DavResourceLocator locator = getLocator();        String prefix = locator.getPrefix();        DavResourceLocator loc = locator.getFactory().createResourceLocator(prefix, href);        // create a new resource object        try {            DavResource res;            if (getRepositorySession().itemExists(loc.getRepositoryPath())) {                res = createResourceFromLocator(loc);            } else {                throw new DavException(DavServletResponse.SC_NOT_FOUND);            }            return res;        } catch (RepositoryException e) {            throw new JcrDavException(e);        }    }    //-------------------------------------------< SearchResource interface >---    /**     * @return     * @see org.apache.jackrabbit.webdav.search.SearchResource#getQueryGrammerSet()     */    public QueryGrammerSet getQueryGrammerSet() {        return new SearchResourceImpl(getLocator(), session).getQueryGrammerSet();    }    /**     * @param sInfo     * @return     * @throws DavException     * @see SearchResource#search(org.apache.jackrabbit.webdav.search.SearchInfo)     */    public MultiStatus search(SearchInfo sInfo) throws DavException {        return new SearchResourceImpl(getLocator(), session).search(sInfo);    }    //--------------------------------------------------------------------------    /**     * Fill the set of default properties     */    protected void initProperties() {        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"));        }        // todo: add etag        // default last modified        String lastModified = IOUtil.getLastModified(getModificationTime());        properties.add(new DefaultDavProperty(DavPropertyName.GETLASTMODIFIED, lastModified));        // default creation time        properties.add(new DefaultDavProperty(DavPropertyName.CREATIONDATE, DavConstants.creationDateFormat.format(new Date(0))));        // supported lock property        properties.add(supportedLock);        // set current lock information. If no lock is applied to this resource,        // an empty lockdiscovery will be returned in the response.        properties.add(new LockDiscovery(getLocks()));        properties.add(new SupportedMethodSetProperty(getSupportedMethods().split(",\\s")));	// DeltaV properties	properties.add(supportedReports);	// creator-displayname, comment: not value available from jcr	properties.add(new DefaultDavProperty(DeltaVConstants.CREATOR_DISPLAYNAME, null, true));	properties.add(new DefaultDavProperty(DeltaVConstants.COMMENT, null, true));	// 'workspace' property as defined by RFC 3253	String workspaceHref = getWorkspaceHref();	if (workspaceHref != null) {	    properties.add(new HrefProperty(DeltaVConstants.WORKSPACE, workspaceHref, true));	}	// TODO: required supported-live-property-set    }    /**     * Create a new <code>DavResource</code> from the given locator.     * @param loc     * @return new <code>DavResource</code>     */    protected DavResource createResourceFromLocator(DavResourceLocator loc)            throws DavException {        DavResource res = factory.createResource(loc, session);        if (res instanceof AbstractResource) {            ((AbstractResource)res).transactionId = this.transactionId;        }        return res;    }    /**     * Build a <code>DavResourceLocator</code> from the given itemPath path.     *     * @param itemPath     * @return a new <code>DavResourceLocator</code>     * @see DavLocatorFactory#createResourceLocator(String, String, String)     */    protected DavResourceLocator getLocatorFromItemPath(String itemPath) {        DavResourceLocator loc = locator.getFactory().createResourceLocator(locator.getPrefix(), locator.getWorkspacePath(), itemPath, false);        return loc;    }    /**     * Build a new {@link DavResourceLocator} from the given repository item.     *     * @param repositoryItem     * @return a new locator for the specified item.     * @see #getLocatorFromItemPath(String)     */    protected DavResourceLocator getLocatorFromItem(Item repositoryItem) {        String itemPath = null;        try {            if (repositoryItem != null) {                itemPath = repositoryItem.getPath();            }        } catch (RepositoryException e) {            // ignore: should not occur            log.warn(e.getMessage());        }        return getLocatorFromItemPath(itemPath);    }    /**     * Shortcut for <code>getSession().getRepositorySession()</code>     *     * @return repository session present in the {@link AbstractResource#session}.     */    protected Session getRepositorySession() {        return session.getRepositorySession();    }    /**     * Define the set of locks supported by this resource.     *     * @see org.apache.jackrabbit.webdav.lock.SupportedLock     */    abstract protected void initLockSupport();    /**     * Define the set of reports supported by this resource.     *     * @see org.apache.jackrabbit.webdav.version.report.SupportedReportSetProperty     */    /**     * Define the set of reports supported by this resource.     *     * @see org.apache.jackrabbit.webdav.version.report.SupportedReportSetProperty     * @see AbstractResource#initSupportedReports()     */    protected void initSupportedReports() {        if (exists()) {            supportedReports = new SupportedReportSetProperty(new ReportType[] {                ReportType.EXPAND_PROPERTY,                NodeTypesReport.NODETYPES_REPORT,                LocateByUuidReport.LOCATE_BY_UUID_REPORT,                RegisteredNamespacesReport.REGISTERED_NAMESPACES_REPORT,                RepositoryDescriptorsReport.REPOSITORY_DESCRIPTORS_REPORT            });        }    }    /**     * Retrieve the href of the workspace the current session belongs to.     *     * @return href of the workspace     */    abstract protected String getWorkspaceHref();    //--------------------------------------------------------------------------    /**     * Register the specified event listener with the observation manager present     * the repository session.     *     * @param listener     * @param nodePath     * @throws javax.jcr.RepositoryException     */    void registerEventListener(EventListener listener, String nodePath) throws RepositoryException {        getRepositorySession().getWorkspace().getObservationManager().addEventListener(listener, EListener.ALL_EVENTS, nodePath, true, null, null, false);    }    /**     * Unregister the specified event listener with the observation manager present     * the repository session.     *     * @param listener     * @throws javax.jcr.RepositoryException     */    void unregisterEventListener(EventListener listener) throws RepositoryException {        getRepositorySession().getWorkspace().getObservationManager().removeEventListener(listener);    }    //------------------------------------------------------< inner classes >---    /**     * Simple EventListener that creates a new {@link org.apache.jackrabbit.webdav.MultiStatusResponse} object     * for each event and adds it to the specified {@link org.apache.jackrabbit.webdav.MultiStatus}.     */    class EListener implements EventListener {        private static final int ALL_EVENTS = Event.NODE_ADDED | Event.NODE_REMOVED | Event.PROPERTY_ADDED | Event.PROPERTY_CHANGED | Event.PROPERTY_REMOVED;        private final DavPropertyNameSet propNameSet;        private MultiStatus ms;        EListener(DavPropertyNameSet propNameSet, MultiStatus ms) {            this.propNameSet = propNameSet;            this.ms = ms;        }        /**         * @see EventListener#onEvent(javax.jcr.observation.EventIterator)         */        public void onEvent(EventIterator events) {            while (events.hasNext()) {                try {                    Event e = events.nextEvent();                    DavResourceLocator loc = getLocatorFromItemPath(e.getPath());                    DavResource res = createResourceFromLocator(loc);                    ms.addResponse(new MultiStatusResponse(res, propNameSet));                } catch (DavException e) {                    // should not occur                    log.error("Error while building MultiStatusResponse from Event: " + e.getMessage());                } catch (RepositoryException e) {                    // should not occur                    log.error("Error while building MultiStatusResponse from Event: " + e.getMessage());                }            }        }    }}

⌨️ 快捷键说明

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