📄 abstractwebdavservlet.java
字号:
DavResource resource) throws IOException, DavException { if (!(resource instanceof ObservationResource)) { response.sendError(DavServletResponse.SC_METHOD_NOT_ALLOWED); return; } ((ObservationResource) resource).unsubscribe(request.getSubscriptionId()); response.setStatus(DavServletResponse.SC_NO_CONTENT); } /** * The POLL method * * @param request * @param response * @param resource * @throws IOException * @throws DavException */ protected void doPoll(WebdavRequest request, WebdavResponse response, DavResource resource) throws IOException, DavException { if (!(resource instanceof ObservationResource)) { response.sendError(DavServletResponse.SC_METHOD_NOT_ALLOWED); return; } EventDiscovery ed = ((ObservationResource) resource).poll( request.getSubscriptionId(), request.getPollTimeout()); response.sendPollResponse(ed); } /** * The VERSION-CONTROL method * * @param request * @param response * @param resource * @throws DavException * @throws IOException */ protected void doVersionControl(WebdavRequest request, WebdavResponse response, DavResource resource) throws DavException, IOException { if (!(resource instanceof VersionableResource)) { response.sendError(DavServletResponse.SC_METHOD_NOT_ALLOWED); return; } ((VersionableResource) resource).addVersionControl(); } /** * The LABEL method * * @param request * @param response * @param resource * @throws DavException * @throws IOException */ protected void doLabel(WebdavRequest request, WebdavResponse response, DavResource resource) throws DavException, IOException { LabelInfo labelInfo = request.getLabelInfo(); if (resource instanceof VersionResource) { ((VersionResource) resource).label(labelInfo); } else if (resource instanceof VersionControlledResource) { ((VersionControlledResource) resource).label(labelInfo); } else { // any other resource type that does not support a LABEL request response.sendError(DavServletResponse.SC_METHOD_NOT_ALLOWED); } } /** * The REPORT method * * @param request * @param response * @param resource * @throws DavException * @throws IOException */ protected void doReport(WebdavRequest request, WebdavResponse response, DavResource resource) throws DavException, IOException { ReportInfo info = request.getReportInfo(); Report report; if (resource instanceof DeltaVResource) { report = ((DeltaVResource) resource).getReport(info); } else if (resource instanceof AclResource) { report = ((AclResource) resource).getReport(info); } else { response.sendError(DavServletResponse.SC_METHOD_NOT_ALLOWED); return; } int statusCode = (report.isMultiStatusReport()) ? DavServletResponse.SC_MULTI_STATUS : DavServletResponse.SC_OK; response.sendXmlResponse(report, statusCode); } /** * The CHECKIN method * * @param request * @param response * @param resource * @throws DavException * @throws IOException */ protected void doCheckin(WebdavRequest request, WebdavResponse response, DavResource resource) throws DavException, IOException { if (!(resource instanceof VersionControlledResource)) { response.sendError(DavServletResponse.SC_METHOD_NOT_ALLOWED); return; } String versionHref = ((VersionControlledResource) resource).checkin(); response.setHeader(DeltaVConstants.HEADER_LOCATION, versionHref); response.setStatus(DavServletResponse.SC_CREATED); } /** * The CHECKOUT method * * @param request * @param response * @param resource * @throws DavException * @throws IOException */ protected void doCheckout(WebdavRequest request, WebdavResponse response, DavResource resource) throws DavException, IOException { if (!(resource instanceof VersionControlledResource)) { response.sendError(DavServletResponse.SC_METHOD_NOT_ALLOWED); return; } ((VersionControlledResource) resource).checkout(); } /** * The UNCHECKOUT method * * @param request * @param response * @param resource * @throws DavException * @throws IOException */ protected void doUncheckout(WebdavRequest request, WebdavResponse response, DavResource resource) throws DavException, IOException { if (!(resource instanceof VersionControlledResource)) { response.sendError(DavServletResponse.SC_METHOD_NOT_ALLOWED); return; } ((VersionControlledResource) resource).uncheckout(); } /** * The MERGE method * * @param request * @param response * @param resource * @throws DavException * @throws IOException */ protected void doMerge(WebdavRequest request, WebdavResponse response, DavResource resource) throws DavException, IOException { if (!(resource instanceof VersionControlledResource)) { response.sendError(DavServletResponse.SC_METHOD_NOT_ALLOWED); return; } MergeInfo info = request.getMergeInfo(); MultiStatus ms = ((VersionControlledResource) resource).merge(info); response.sendMultiStatus(ms); } /** * The UPDATE method * * @param request * @param response * @param resource * @throws DavException * @throws IOException */ protected void doUpdate(WebdavRequest request, WebdavResponse response, DavResource resource) throws DavException, IOException { if (!(resource instanceof VersionControlledResource)) { response.sendError(DavServletResponse.SC_METHOD_NOT_ALLOWED); return; } UpdateInfo info = request.getUpdateInfo(); MultiStatus ms = ((VersionControlledResource) resource).update(info); response.sendMultiStatus(ms); } /** * The MKWORKSPACE method * * @param request * @param response * @param resource * @throws DavException * @throws IOException */ protected void doMkWorkspace(WebdavRequest request, WebdavResponse response, DavResource resource) throws DavException, IOException { if (resource.exists()) { log.warn("Cannot create a new workspace. Resource already exists."); response.sendError(DavServletResponse.SC_FORBIDDEN); return; } DavResource parentResource = resource.getCollection(); if (parentResource == null || !parentResource.exists() || !parentResource.isCollection()) { // parent does not exist or is not a collection response.sendError(DavServletResponse.SC_CONFLICT); return; } if (!(parentResource instanceof DeltaVResource)) { response.sendError(DavServletResponse.SC_METHOD_NOT_ALLOWED); return; } ((DeltaVResource) parentResource).addWorkspace(resource); response.setStatus(DavServletResponse.SC_CREATED); } /** * The MKACTIVITY method * * @param request * @param response * @param resource * @throws DavException * @throws IOException */ protected void doMkActivity(WebdavRequest request, WebdavResponse response, DavResource resource) throws DavException, IOException { if (resource.exists()) { log.warn("Unable to create activity: A resource already exists at the request-URL " + request.getRequestURL()); response.sendError(DavServletResponse.SC_FORBIDDEN); return; } DavResource parentResource = resource.getCollection(); if (parentResource == null || !parentResource.exists() || !parentResource.isCollection()) { // parent does not exist or is not a collection response.sendError(DavServletResponse.SC_CONFLICT); return; } // TODO: improve. see http://issues.apache.org/jira/browse/JCR-394 if (parentResource.getComplianceClass().indexOf(DavCompliance.ACTIVITY) < 0) { response.sendError(DavServletResponse.SC_METHOD_NOT_ALLOWED); return; } if (!(resource instanceof ActivityResource)) { log.error("Unable to create activity: ActivityResource expected"); response.sendError(DavServletResponse.SC_INTERNAL_SERVER_ERROR); return; } // try to add the new activity resource parentResource.addMember(resource, getInputContext(request, request.getInputStream())); // Note: mandatory cache control header has already been set upon response creation. response.setStatus(DavServletResponse.SC_CREATED); } /** * The BASELINECONTROL method * * @param request * @param response * @param resource * @throws DavException * @throws IOException */ protected void doBaselineControl(WebdavRequest request, WebdavResponse response, DavResource resource) throws DavException, IOException { if (!resource.exists()) { log.warn("Unable to add baseline control. Resource does not exist " + resource.getHref()); response.sendError(DavServletResponse.SC_NOT_FOUND); return; } // TODO: improve. see http://issues.apache.org/jira/browse/JCR-394 if (!(resource instanceof VersionControlledResource) || !resource.isCollection()) { log.warn("BaselineControl is not supported by resource " + resource.getHref()); response.sendError(DavServletResponse.SC_METHOD_NOT_ALLOWED); return; } // TODO : missing method on VersionControlledResource throw new DavException(DavServletResponse.SC_NOT_IMPLEMENTED); /* ((VersionControlledResource) resource).addBaselineControl(request.getRequestDocument()); // Note: mandatory cache control header has already been set upon response creation. response.setStatus(DavServletResponse.SC_OK); */ } /** * The SEARCH method * * @param request * @param response * @param resource * @throws DavException * @throws IOException */ protected void doSearch(WebdavRequest request, WebdavResponse response, DavResource resource) throws DavException, IOException { if (!(resource instanceof SearchResource)) { response.sendError(DavServletResponse.SC_METHOD_NOT_ALLOWED); return; } Document doc = request.getRequestDocument(); if (doc != null) { SearchInfo sR = SearchInfo.createFromXml(doc.getDocumentElement()); response.sendMultiStatus(((SearchResource) resource).search(sR)); } else { // request without request body is valid if requested resource // is a 'query' resource. response.sendMultiStatus(((SearchResource) resource).search(null)); } } /** * The ACL method * * @param request * @param response * @param resource * @throws DavException * @throws IOException */ protected void doAcl(WebdavRequest request, WebdavResponse response, DavResource resource) throws DavException, IOException { if (!(resource instanceof AclResource)) { response.sendError(DavServletResponse.SC_METHOD_NOT_ALLOWED); return; } Document doc = request.getRequestDocument(); if (doc == null) { throw new DavException(DavServletResponse.SC_BAD_REQUEST, "ACL request requires a DAV:acl body."); } AclProperty acl = AclProperty.createFromXml(doc.getDocumentElement()); ((AclResource)resource).alterAcl(acl); } /** * Return a new <code>InputContext</code> used for adding resource members * * @param request * @param in * @return * @see #spoolResource(WebdavRequest, WebdavResponse, DavResource, boolean) */ protected InputContext getInputContext(DavServletRequest request, InputStream in) { return new InputContextImpl(request, in); } /** * Return a new <code>OutputContext</code> used for spooling resource properties and * the resource content * * @param response * @param out * @return * @see #doPut(WebdavRequest, WebdavResponse, DavResource) * @see #doPost(WebdavRequest, WebdavResponse, DavResource) * @see #doMkCol(WebdavRequest, WebdavResponse, DavResource) */ protected OutputContext getOutputContext(DavServletResponse response, OutputStream out) { return new OutputContextImpl(response, out); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -