Return-Path: X-Original-To: apmail-chemistry-commits-archive@www.apache.org Delivered-To: apmail-chemistry-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id C70701792C for ; Mon, 6 Apr 2015 17:13:07 +0000 (UTC) Received: (qmail 39190 invoked by uid 500); 6 Apr 2015 17:13:07 -0000 Delivered-To: apmail-chemistry-commits-archive@chemistry.apache.org Received: (qmail 39047 invoked by uid 500); 6 Apr 2015 17:13:07 -0000 Mailing-List: contact commits-help@chemistry.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@chemistry.apache.org Delivered-To: mailing list commits@chemistry.apache.org Received: (qmail 38512 invoked by uid 99); 6 Apr 2015 17:13:07 -0000 Received: from eris.apache.org (HELO hades.apache.org) (140.211.11.105) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 06 Apr 2015 17:13:07 +0000 Received: from hades.apache.org (localhost [127.0.0.1]) by hades.apache.org (ASF Mail Server at hades.apache.org) with ESMTP id 2E9B6AC0418 for ; Mon, 6 Apr 2015 17:13:07 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1671601 [16/44] - in /chemistry/site/trunk/content/java/0.13.0/maven/chemistry-opencmis-server/chemistry-opencmis-server-bindings: ./ css/ images/ images/logos/ xref-test/ xref-test/org/ xref-test/org/apache/ xref-test/org/apache/chemistry... Date: Mon, 06 Apr 2015 17:13:04 -0000 To: commits@chemistry.apache.org From: gabriele@apache.org X-Mailer: svnmailer-1.0.9 Message-Id: <20150406171307.2E9B6AC0418@hades.apache.org> Added: chemistry/site/trunk/content/java/0.13.0/maven/chemistry-opencmis-server/chemistry-opencmis-server-bindings/xref/org/apache/chemistry/opencmis/server/impl/atompub/NavigationService.html URL: http://svn.apache.org/viewvc/chemistry/site/trunk/content/java/0.13.0/maven/chemistry-opencmis-server/chemistry-opencmis-server-bindings/xref/org/apache/chemistry/opencmis/server/impl/atompub/NavigationService.html?rev=1671601&view=auto ============================================================================== --- chemistry/site/trunk/content/java/0.13.0/maven/chemistry-opencmis-server/chemistry-opencmis-server-bindings/xref/org/apache/chemistry/opencmis/server/impl/atompub/NavigationService.html (added) +++ chemistry/site/trunk/content/java/0.13.0/maven/chemistry-opencmis-server/chemistry-opencmis-server-bindings/xref/org/apache/chemistry/opencmis/server/impl/atompub/NavigationService.html Mon Apr 6 17:13:02 2015 @@ -0,0 +1,662 @@ + + + + +NavigationService xref + + + +
+
+1   /*
+2    * Licensed to the Apache Software Foundation (ASF) under one
+3    * or more contributor license agreements.  See the NOTICE file
+4    * distributed with this work for additional information
+5    * regarding copyright ownership.  The ASF licenses this file
+6    * to you under the Apache License, Version 2.0 (the
+7    * "License"); you may not use this file except in compliance
+8    * with the License.  You may obtain a copy of the License at
+9    *
+10   * http://www.apache.org/licenses/LICENSE-2.0
+11   *
+12   * Unless required by applicable law or agreed to in writing,
+13   * software distributed under the License is distributed on an
+14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+15   * KIND, either express or implied.  See the License for the
+16   * specific language governing permissions and limitations
+17   * under the License.
+18   */
+19  package org.apache.chemistry.opencmis.server.impl.atompub;
+20  
+21  import java.math.BigInteger;
+22  import java.util.GregorianCalendar;
+23  import java.util.List;
+24  
+25  import javax.servlet.http.HttpServletRequest;
+26  import javax.servlet.http.HttpServletResponse;
+27  
+28  import org.apache.chemistry.opencmis.commons.data.ObjectData;
+29  import org.apache.chemistry.opencmis.commons.data.ObjectInFolderContainer;
+30  import org.apache.chemistry.opencmis.commons.data.ObjectInFolderData;
+31  import org.apache.chemistry.opencmis.commons.data.ObjectInFolderList;
+32  import org.apache.chemistry.opencmis.commons.data.ObjectList;
+33  import org.apache.chemistry.opencmis.commons.data.ObjectParentData;
+34  import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
+35  import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
+36  import org.apache.chemistry.opencmis.commons.impl.Constants;
+37  import org.apache.chemistry.opencmis.commons.impl.UrlBuilder;
+38  import org.apache.chemistry.opencmis.commons.impl.server.ObjectInfoImpl;
+39  import org.apache.chemistry.opencmis.commons.server.CallContext;
+40  import org.apache.chemistry.opencmis.commons.server.CmisService;
+41  import org.apache.chemistry.opencmis.commons.server.ObjectInfo;
+42  import org.apache.chemistry.opencmis.commons.server.RenditionInfo;
+43  
+44  /**
+45   * Navigation Service operations.
+46   */
+47  public class NavigationService {
+48  
+49      /**
+50       * Children Collection GET.
+51       */
+52      public static class GetChildren extends AbstractAtomPubServiceCall {
+53          public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
+54                  HttpServletResponse response) throws Exception {
+55              assert context != null;
+56              assert service != null;
+57              assert repositoryId != null;
+58              assert request != null;
+59              assert response != null;
+60  
+61              // get parameters
+62              String folderId = getStringParameter(request, Constants.PARAM_ID);
+63              String filter = getStringParameter(request, Constants.PARAM_FILTER);
+64              String orderBy = getStringParameter(request, Constants.PARAM_ORDER_BY);
+65              Boolean includeAllowableActions = getBooleanParameter(request, Constants.PARAM_ALLOWABLE_ACTIONS);
+66              IncludeRelationships includeRelationships = getEnumParameter(request, Constants.PARAM_RELATIONSHIPS,
+67                      IncludeRelationships.class);
+68              String renditionFilter = getStringParameter(request, Constants.PARAM_RENDITION_FILTER);
+69              Boolean includePathSegment = getBooleanParameter(request, Constants.PARAM_PATH_SEGMENT);
+70              BigInteger maxItems = getBigIntegerParameter(request, Constants.PARAM_MAX_ITEMS);
+71              BigInteger skipCount = getBigIntegerParameter(request, Constants.PARAM_SKIP_COUNT);
+72  
+73              // execute
+74              if (stopBeforeService(service)) {
+75                  return;
+76              }
+77  
+78              ObjectInFolderList children = service.getChildren(repositoryId, folderId, filter, orderBy,
+79                      includeAllowableActions, includeRelationships, renditionFilter, includePathSegment, maxItems,
+80                      skipCount, null);
+81  
+82              if (stopAfterService(service)) {
+83                  return;
+84              }
+85  
+86              if (children == null) {
+87                  throw new CmisRuntimeException("Children are null!");
+88              }
+89  
+90              ObjectInfo folderInfo = service.getObjectInfo(repositoryId, folderId);
+91              if (folderInfo == null) {
+92                  throw new CmisRuntimeException("Folder Object Info is missing!");
+93              }
+94  
+95              // set headers
+96              response.setStatus(HttpServletResponse.SC_OK);
+97              response.setContentType(Constants.MEDIATYPE_FEED);
+98  
+99              // write XML
+100             AtomFeed feed = new AtomFeed();
+101             feed.startDocument(response.getOutputStream(), getNamespaces(service));
+102             feed.startFeed(true);
+103 
+104             // write basic Atom feed elements
+105             feed.writeFeedElements(folderInfo.getId(), folderInfo.getAtomId(), folderInfo.getCreatedBy(),
+106                     folderInfo.getName(), folderInfo.getLastModificationDate(), null, children.getNumItems());
+107 
+108             // write links
+109             UrlBuilder baseUrl = compileBaseUrl(request, repositoryId);
+110 
+111             feed.writeServiceLink(baseUrl.toString(), repositoryId);
+112 
+113             UrlBuilder selfLink = compileUrlBuilder(baseUrl, RESOURCE_CHILDREN, folderInfo.getId());
+114             selfLink.addParameter(Constants.PARAM_FILTER, filter);
+115             selfLink.addParameter(Constants.PARAM_ORDER_BY, orderBy);
+116             selfLink.addParameter(Constants.PARAM_ALLOWABLE_ACTIONS, includeAllowableActions);
+117             selfLink.addParameter(Constants.PARAM_RELATIONSHIPS, includeRelationships);
+118             selfLink.addParameter(Constants.PARAM_RENDITION_FILTER, renditionFilter);
+119             selfLink.addParameter(Constants.PARAM_PATH_SEGMENT, includePathSegment);
+120             selfLink.addParameter(Constants.PARAM_MAX_ITEMS, maxItems);
+121             selfLink.addParameter(Constants.PARAM_SKIP_COUNT, skipCount);
+122             feed.writeSelfLink(selfLink.toString(), null);
+123 
+124             feed.writeDescribedByLink(compileUrl(baseUrl, RESOURCE_TYPE, folderInfo.getTypeId()));
+125 
+126             feed.writeAllowableActionsLink(compileUrl(baseUrl, RESOURCE_ALLOWABLEACIONS, folderInfo.getId()));
+127 
+128             feed.writeDownLink(compileUrl(baseUrl, RESOURCE_CHILDREN, folderInfo.getId()), Constants.MEDIATYPE_FEED);
+129 
+130             if (folderInfo.supportsDescendants()) {
+131                 feed.writeDownLink(compileUrl(baseUrl, RESOURCE_DESCENDANTS, folderInfo.getId()),
+132                         Constants.MEDIATYPE_DESCENDANTS);
+133             }
+134 
+135             if (folderInfo.supportsFolderTree()) {
+136                 feed.writeFolderTreeLink(compileUrl(baseUrl, RESOURCE_FOLDERTREE, folderInfo.getId()));
+137             }
+138 
+139             if (folderInfo.hasParent()) {
+140                 feed.writeUpLink(compileUrl(baseUrl, RESOURCE_PARENTS, folderInfo.getId()), Constants.MEDIATYPE_FEED);
+141             }
+142 
+143             if (folderInfo.getRenditionInfos() != null) {
+144                 for (RenditionInfo ri : folderInfo.getRenditionInfos()) {
+145                     feed.writeAlternateLink(compileUrl(baseUrl, RESOURCE_CONTENT, ri.getId()), ri.getContenType(),
+146                             ri.getKind(), ri.getTitle(), ri.getLength());
+147                 }
+148             }
+149 
+150             if (folderInfo.hasAcl()) {
+151                 feed.writeAclLink(compileUrl(baseUrl, RESOURCE_ACL, folderInfo.getId()));
+152             }
+153 
+154             if (folderInfo.supportsPolicies()) {
+155                 feed.writeAclLink(compileUrl(baseUrl, RESOURCE_POLICIES, folderInfo.getId()));
+156             }
+157 
+158             if (folderInfo.supportsRelationships()) {
+159                 feed.writeRelationshipsLink(compileUrl(baseUrl, RESOURCE_RELATIONSHIPS, folderInfo.getId()));
+160             }
+161 
+162             UrlBuilder pagingUrl = new UrlBuilder(compileUrlBuilder(baseUrl, RESOURCE_CHILDREN, folderInfo.getId()));
+163             pagingUrl.addParameter(Constants.PARAM_FILTER, filter);
+164             pagingUrl.addParameter(Constants.PARAM_ORDER_BY, orderBy);
+165             pagingUrl.addParameter(Constants.PARAM_ALLOWABLE_ACTIONS, includeAllowableActions);
+166             pagingUrl.addParameter(Constants.PARAM_RELATIONSHIPS, includeRelationships);
+167             pagingUrl.addParameter(Constants.PARAM_RENDITION_FILTER, renditionFilter);
+168             pagingUrl.addParameter(Constants.PARAM_PATH_SEGMENT, includePathSegment);
+169             feed.writePagingLinks(pagingUrl, maxItems, skipCount, children.getNumItems(), children.hasMoreItems(),
+170                     PAGE_SIZE);
+171 
+172             // write collection
+173             feed.writeCollection(compileUrl(baseUrl, RESOURCE_CHILDREN, folderInfo.getId()), null, "Folder collection",
+174                     Constants.MEDIATYPE_CMISATOM);
+175 
+176             // write entries
+177             if (children.getObjects() != null) {
+178                 AtomEntry entry = new AtomEntry(feed.getWriter());
+179                 for (ObjectInFolderData object : children.getObjects()) {
+180                     if ((object == null) || (object.getObject() == null)) {
+181                         continue;
+182                     }
+183                     writeObjectEntry(service, entry, object.getObject(), null, repositoryId, object.getPathSegment(),
+184                             null, baseUrl, false, context.getCmisVersion());
+185                 }
+186             }
+187 
+188             // write extensions
+189             feed.writeExtensions(children);
+190 
+191             // we are done
+192             feed.endFeed();
+193             feed.endDocument();
+194         }
+195     }
+196 
+197     /**
+198      * Descendants feed GET.
+199      */
+200     public static class GetDescendants extends AbstractAtomPubServiceCall {
+201         public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
+202                 HttpServletResponse response) throws Exception {
+203             assert context != null;
+204             assert service != null;
+205             assert repositoryId != null;
+206             assert request != null;
+207             assert response != null;
+208 
+209             // get parameters
+210             String folderId = getStringParameter(request, Constants.PARAM_ID);
+211             BigInteger depth = getBigIntegerParameter(request, Constants.PARAM_DEPTH);
+212             String filter = getStringParameter(request, Constants.PARAM_FILTER);
+213             Boolean includeAllowableActions = getBooleanParameter(request, Constants.PARAM_ALLOWABLE_ACTIONS);
+214             IncludeRelationships includeRelationships = getEnumParameter(request, Constants.PARAM_RELATIONSHIPS,
+215                     IncludeRelationships.class);
+216             String renditionFilter = getStringParameter(request, Constants.PARAM_RENDITION_FILTER);
+217             Boolean includePathSegment = getBooleanParameter(request, Constants.PARAM_PATH_SEGMENT);
+218 
+219             // execute
+220             if (stopBeforeService(service)) {
+221                 return;
+222             }
+223 
+224             List<ObjectInFolderContainer> descendants = service.getDescendants(repositoryId, folderId, depth, filter,
+225                     includeAllowableActions, includeRelationships, renditionFilter, includePathSegment, null);
+226 
+227             if (stopAfterService(service)) {
+228                 return;
+229             }
+230 
+231             if (descendants == null) {
+232                 throw new CmisRuntimeException("Descendants are null!");
+233             }
+234 
+235             ObjectInfo folderInfo = service.getObjectInfo(repositoryId, folderId);
+236             if (folderInfo == null) {
+237                 throw new CmisRuntimeException("Folder Object Info is missing!");
+238             }
+239 
+240             // set headers
+241             response.setStatus(HttpServletResponse.SC_OK);
+242             response.setContentType(Constants.MEDIATYPE_FEED);
+243 
+244             // write XML
+245             AtomFeed feed = new AtomFeed();
+246             feed.startDocument(response.getOutputStream(), getNamespaces(service));
+247             feed.startFeed(true);
+248 
+249             // write basic Atom feed elements
+250             feed.writeFeedElements(folderInfo.getId(), folderInfo.getAtomId(), folderInfo.getCreatedBy(),
+251                     folderInfo.getName(), folderInfo.getLastModificationDate(), null, null);
+252 
+253             // write links
+254             UrlBuilder baseUrl = compileBaseUrl(request, repositoryId);
+255 
+256             feed.writeServiceLink(baseUrl.toString(), repositoryId);
+257 
+258             UrlBuilder selfLink = compileUrlBuilder(baseUrl, RESOURCE_DESCENDANTS, folderInfo.getId());
+259             selfLink.addParameter(Constants.PARAM_DEPTH, depth);
+260             selfLink.addParameter(Constants.PARAM_FILTER, filter);
+261             selfLink.addParameter(Constants.PARAM_ALLOWABLE_ACTIONS, includeAllowableActions);
+262             selfLink.addParameter(Constants.PARAM_RELATIONSHIPS, includeRelationships);
+263             selfLink.addParameter(Constants.PARAM_RENDITION_FILTER, renditionFilter);
+264             selfLink.addParameter(Constants.PARAM_PATH_SEGMENT, includePathSegment);
+265             feed.writeSelfLink(selfLink.toString(), null);
+266 
+267             feed.writeViaLink(compileUrl(baseUrl, RESOURCE_ENTRY, folderInfo.getId()));
+268 
+269             feed.writeDownLink(compileUrl(baseUrl, RESOURCE_CHILDREN, folderInfo.getId()), Constants.MEDIATYPE_FEED);
+270 
+271             if (folderInfo.supportsFolderTree()) {
+272                 feed.writeFolderTreeLink(compileUrl(baseUrl, RESOURCE_FOLDERTREE, folderInfo.getId()));
+273             }
+274 
+275             if (folderInfo.hasParent()) {
+276                 feed.writeUpLink(compileUrl(baseUrl, RESOURCE_PARENTS, folderInfo.getId()), Constants.MEDIATYPE_FEED);
+277             }
+278 
+279             // write entries
+280             AtomEntry entry = new AtomEntry(feed.getWriter());
+281             for (ObjectInFolderContainer container : descendants) {
+282                 if ((container == null) || (container.getObject() == null)
+283                         || (container.getObject().getObject() == null)) {
+284                     continue;
+285                 }
+286                 writeObjectEntry(service, entry, container.getObject().getObject(), container.getChildren(),
+287                         repositoryId, container.getObject().getPathSegment(), null, baseUrl, false,
+288                         context.getCmisVersion());
+289             }
+290 
+291             // we are done
+292             feed.endFeed();
+293             feed.endDocument();
+294         }
+295     }
+296 
+297     /**
+298      * Folder tree feed GET.
+299      */
+300     public static class GetFolderTree extends AbstractAtomPubServiceCall {
+301         public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
+302                 HttpServletResponse response) throws Exception {
+303             assert context != null;
+304             assert service != null;
+305             assert repositoryId != null;
+306             assert request != null;
+307             assert response != null;
+308 
+309             // get parameters
+310             String folderId = getStringParameter(request, Constants.PARAM_ID);
+311             BigInteger depth = getBigIntegerParameter(request, Constants.PARAM_DEPTH);
+312             String filter = getStringParameter(request, Constants.PARAM_FILTER);
+313             Boolean includeAllowableActions = getBooleanParameter(request, Constants.PARAM_ALLOWABLE_ACTIONS);
+314             IncludeRelationships includeRelationships = getEnumParameter(request, Constants.PARAM_RELATIONSHIPS,
+315                     IncludeRelationships.class);
+316             String renditionFilter = getStringParameter(request, Constants.PARAM_RENDITION_FILTER);
+317             Boolean includePathSegment = getBooleanParameter(request, Constants.PARAM_PATH_SEGMENT);
+318 
+319             // execute
+320             if (stopBeforeService(service)) {
+321                 return;
+322             }
+323 
+324             List<ObjectInFolderContainer> folderTree = service.getFolderTree(repositoryId, folderId, depth, filter,
+325                     includeAllowableActions, includeRelationships, renditionFilter, includePathSegment, null);
+326 
+327             if (stopAfterService(service)) {
+328                 return;
+329             }
+330 
+331             if (folderTree == null) {
+332                 throw new CmisRuntimeException("Folder tree is null!");
+333             }
+334 
+335             ObjectInfo folderInfo = service.getObjectInfo(repositoryId, folderId);
+336             if (folderInfo == null) {
+337                 throw new CmisRuntimeException("Folder Object Info is missing!");
+338             }
+339 
+340             // set headers
+341             response.setStatus(HttpServletResponse.SC_OK);
+342             response.setContentType(Constants.MEDIATYPE_FEED);
+343 
+344             // write XML
+345             AtomFeed feed = new AtomFeed();
+346             feed.startDocument(response.getOutputStream(), getNamespaces(service));
+347             feed.startFeed(true);
+348 
+349             // write basic Atom feed elements
+350             feed.writeFeedElements(folderInfo.getId(), folderInfo.getAtomId(), folderInfo.getCreatedBy(),
+351                     folderInfo.getName(), folderInfo.getLastModificationDate(), null, null);
+352 
+353             // write links
+354             UrlBuilder baseUrl = compileBaseUrl(request, repositoryId);
+355 
+356             feed.writeServiceLink(baseUrl.toString(), repositoryId);
+357 
+358             UrlBuilder selfLink = compileUrlBuilder(baseUrl, RESOURCE_FOLDERTREE, folderInfo.getId());
+359             selfLink.addParameter(Constants.PARAM_DEPTH, depth);
+360             selfLink.addParameter(Constants.PARAM_FILTER, filter);
+361             selfLink.addParameter(Constants.PARAM_ALLOWABLE_ACTIONS, includeAllowableActions);
+362             selfLink.addParameter(Constants.PARAM_RELATIONSHIPS, includeRelationships);
+363             selfLink.addParameter(Constants.PARAM_RENDITION_FILTER, renditionFilter);
+364             selfLink.addParameter(Constants.PARAM_PATH_SEGMENT, includePathSegment);
+365             feed.writeSelfLink(selfLink.toString(), null);
+366 
+367             feed.writeViaLink(compileUrl(baseUrl, RESOURCE_ENTRY, folderInfo.getId()));
+368 
+369             feed.writeDownLink(compileUrl(baseUrl, RESOURCE_CHILDREN, folderInfo.getId()), Constants.MEDIATYPE_FEED);
+370 
+371             if (folderInfo.supportsDescendants()) {
+372                 feed.writeDownLink(compileUrl(baseUrl, RESOURCE_DESCENDANTS, folderInfo.getId()),
+373                         Constants.MEDIATYPE_DESCENDANTS);
+374             }
+375 
+376             if (folderInfo.hasParent()) {
+377                 feed.writeUpLink(compileUrl(baseUrl, RESOURCE_PARENTS, folderInfo.getId()), Constants.MEDIATYPE_FEED);
+378             }
+379 
+380             // write entries
+381             AtomEntry entry = new AtomEntry(feed.getWriter());
+382             for (ObjectInFolderContainer container : folderTree) {
+383                 if ((container == null) || (container.getObject() == null)
+384                         || (container.getObject().getObject() == null)) {
+385                     continue;
+386                 }
+387                 writeObjectEntry(service, entry, container.getObject().getObject(), container.getChildren(),
+388                         repositoryId, container.getObject().getPathSegment(), null, baseUrl, false,
+389                         context.getCmisVersion());
+390             }
+391 
+392             // we are done
+393             feed.endFeed();
+394             feed.endDocument();
+395         }
+396     }
+397 
+398     /**
+399      * Object parents feed GET.
+400      */
+401     public static class GetFolderParent extends AbstractAtomPubServiceCall {
+402         public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
+403                 HttpServletResponse response) throws Exception {
+404             assert context != null;
+405             assert service != null;
+406             assert repositoryId != null;
+407             assert request != null;
+408             assert response != null;
+409 
+410             // get parameters
+411             String folderId = getStringParameter(request, Constants.PARAM_ID);
+412             String filter = getStringParameter(request, Constants.PARAM_FILTER);
+413 
+414             // execute
+415             if (stopBeforeService(service)) {
+416                 return;
+417             }
+418 
+419             ObjectData object = service.getFolderParent(repositoryId, folderId, filter, null);
+420 
+421             if (stopAfterService(service)) {
+422                 return;
+423             }
+424 
+425             if (object == null) {
+426                 throw new CmisRuntimeException("Object is null!");
+427             }
+428 
+429             ObjectInfo objectInfo = service.getObjectInfo(repositoryId, folderId);
+430             if (objectInfo == null) {
+431                 throw new CmisRuntimeException("Object Info is missing!");
+432             }
+433 
+434             // set headers
+435             response.setStatus(HttpServletResponse.SC_OK);
+436             response.setContentType(Constants.MEDIATYPE_ENTRY);
+437 
+438             // write XML
+439             UrlBuilder baseUrl = compileBaseUrl(request, repositoryId);
+440 
+441             AtomEntry entry = new AtomEntry();
+442             entry.startDocument(response.getOutputStream(), getNamespaces(service));
+443             writeObjectEntry(service, entry, object, null, repositoryId, null, null, baseUrl, true,
+444                     context.getCmisVersion());
+445             entry.endDocument();
+446         }
+447     }
+448 
+449     /**
+450      * Object parents feed GET.
+451      */
+452     public static class GetObjectParents extends AbstractAtomPubServiceCall {
+453         public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
+454                 HttpServletResponse response) throws Exception {
+455             assert context != null;
+456             assert service != null;
+457             assert repositoryId != null;
+458             assert request != null;
+459             assert response != null;
+460 
+461             // get parameters
+462             String objectId = getStringParameter(request, Constants.PARAM_ID);
+463             String filter = getStringParameter(request, Constants.PARAM_FILTER);
+464             Boolean includeAllowableActions = getBooleanParameter(request, Constants.PARAM_ALLOWABLE_ACTIONS);
+465             IncludeRelationships includeRelationships = getEnumParameter(request, Constants.PARAM_RELATIONSHIPS,
+466                     IncludeRelationships.class);
+467             String renditionFilter = getStringParameter(request, Constants.PARAM_RENDITION_FILTER);
+468             Boolean includeRelativePathSegment = getBooleanParameter(request, Constants.PARAM_RELATIVE_PATH_SEGMENT);
+469 
+470             // execute
+471             if (stopBeforeService(service)) {
+472                 return;
+473             }
+474 
+475             List<ObjectParentData> parents = service.getObjectParents(repositoryId, objectId, filter,
+476                     includeAllowableActions, includeRelationships, renditionFilter, includeRelativePathSegment, null);
+477 
+478             if (stopAfterService(service)) {
+479                 return;
+480             }
+481 
+482             if (parents == null) {
+483                 throw new CmisRuntimeException("Parents are null!");
+484             }
+485 
+486             ObjectInfo objectInfo = service.getObjectInfo(repositoryId, objectId);
+487             if (objectInfo == null) {
+488                 throw new CmisRuntimeException("Object Info is missing!");
+489             }
+490 
+491             // set headers
+492             response.setStatus(HttpServletResponse.SC_OK);
+493             response.setContentType(Constants.MEDIATYPE_FEED);
+494 
+495             // write XML
+496             AtomFeed feed = new AtomFeed();
+497             feed.startDocument(response.getOutputStream(), getNamespaces(service));
+498             feed.startFeed(true);
+499 
+500             // write basic Atom feed elements
+501             feed.writeFeedElements(objectInfo.getId(), objectInfo.getAtomId(), objectInfo.getCreatedBy(),
+502                     objectInfo.getName(), objectInfo.getLastModificationDate(), null, null);
+503 
+504             // write links
+505             UrlBuilder baseUrl = compileBaseUrl(request, repositoryId);
+506 
+507             feed.writeServiceLink(baseUrl.toString(), repositoryId);
+508 
+509             UrlBuilder selfLink = compileUrlBuilder(baseUrl, RESOURCE_PARENTS, objectInfo.getId());
+510             selfLink.addParameter(Constants.PARAM_FILTER, filter);
+511             selfLink.addParameter(Constants.PARAM_ALLOWABLE_ACTIONS, includeAllowableActions);
+512             selfLink.addParameter(Constants.PARAM_RELATIONSHIPS, includeRelationships);
+513             selfLink.addParameter(Constants.PARAM_RENDITION_FILTER, renditionFilter);
+514             selfLink.addParameter(Constants.PARAM_RELATIVE_PATH_SEGMENT, includeRelativePathSegment);
+515             feed.writeSelfLink(selfLink.toString(), null);
+516 
+517             // write entries
+518             AtomEntry entry = new AtomEntry(feed.getWriter());
+519             for (ObjectParentData object : parents) {
+520                 if ((object == null) || (object.getObject() == null)) {
+521                     continue;
+522                 }
+523                 writeObjectEntry(service, entry, object.getObject(), null, repositoryId, null,
+524                         object.getRelativePathSegment(), baseUrl, false, context.getCmisVersion());
+525             }
+526 
+527             // we are done
+528             feed.endFeed();
+529             feed.endDocument();
+530         }
+531     }
+532 
+533     /**
+534      * Checked Out Collection GET.
+535      */
+536     public static class GetCheckedOutDocs extends AbstractAtomPubServiceCall {
+537         public void serve(CallContext context, CmisService service, String repositoryId, HttpServletRequest request,
+538                 HttpServletResponse response) throws Exception {
+539             assert context != null;
+540             assert service != null;
+541             assert repositoryId != null;
+542             assert request != null;
+543             assert response != null;
+544 
+545             // get parameters
+546             String folderId = getStringParameter(request, Constants.PARAM_FOLDER_ID);
+547             String filter = getStringParameter(request, Constants.PARAM_FILTER);
+548             String orderBy = getStringParameter(request, Constants.PARAM_ORDER_BY);
+549             Boolean includeAllowableActions = getBooleanParameter(request, Constants.PARAM_ALLOWABLE_ACTIONS);
+550             IncludeRelationships includeRelationships = getEnumParameter(request, Constants.PARAM_RELATIONSHIPS,
+551                     IncludeRelationships.class);
+552             String renditionFilter = getStringParameter(request, Constants.PARAM_RENDITION_FILTER);
+553             BigInteger maxItems = getBigIntegerParameter(request, Constants.PARAM_MAX_ITEMS);
+554             BigInteger skipCount = getBigIntegerParameter(request, Constants.PARAM_SKIP_COUNT);
+555 
+556             // execute
+557             if (stopBeforeService(service)) {
+558                 return;
+559             }
+560 
+561             ObjectList checkedOut = service.getCheckedOutDocs(repositoryId, folderId, filter, orderBy,
+562                     includeAllowableActions, includeRelationships, renditionFilter, maxItems, skipCount, null);
+563 
+564             if (stopAfterService(service)) {
+565                 return;
+566             }
+567 
+568             if (checkedOut == null) {
+569                 throw new CmisRuntimeException("Checked Out list is null!");
+570             }
+571 
+572             ObjectInfo folderInfo = null;
+573             if (folderId != null) {
+574                 folderInfo = service.getObjectInfo(repositoryId, folderId);
+575                 if (folderInfo == null) {
+576                     throw new CmisRuntimeException("Folder Object Info is missing!");
+577                 }
+578             } else {
+579                 folderInfo = new ObjectInfoImpl();
+580                 GregorianCalendar now = new GregorianCalendar();
+581 
+582                 ((ObjectInfoImpl) folderInfo).setId("uri:x-checkedout");
+583                 ((ObjectInfoImpl) folderInfo).setName("Checked Out");
+584                 ((ObjectInfoImpl) folderInfo).setCreatedBy("");
+585                 ((ObjectInfoImpl) folderInfo).setCreationDate(now);
+586                 ((ObjectInfoImpl) folderInfo).setLastModificationDate(now);
+587                 ((ObjectInfoImpl) folderInfo).setHasParent(false);
+588                 ((ObjectInfoImpl) folderInfo).setSupportsDescendants(false);
+589                 ((ObjectInfoImpl) folderInfo).setSupportsFolderTree(false);
+590             }
+591 
+592             // set headers
+593             response.setStatus(HttpServletResponse.SC_OK);
+594             response.setContentType(Constants.MEDIATYPE_FEED);
+595 
+596             // write XML
+597             AtomFeed feed = new AtomFeed();
+598             feed.startDocument(response.getOutputStream(), getNamespaces(service));
+599             feed.startFeed(true);
+600 
+601             // write basic Atom feed elements
+602             feed.writeFeedElements(folderInfo.getId(), folderInfo.getAtomId(), folderInfo.getCreatedBy(),
+603                     folderInfo.getName(), folderInfo.getLastModificationDate(), null, checkedOut.getNumItems());
+604 
+605             // write links
+606             UrlBuilder baseUrl = compileBaseUrl(request, repositoryId);
+607 
+608             feed.writeServiceLink(baseUrl.toString(), repositoryId);
+609 
+610             UrlBuilder selfLink = compileUrlBuilder(baseUrl, RESOURCE_CHECKEDOUT, folderInfo.getId());
+611             selfLink.addParameter(Constants.PARAM_FILTER, filter);
+612             selfLink.addParameter(Constants.PARAM_ORDER_BY, orderBy);
+613             selfLink.addParameter(Constants.PARAM_ALLOWABLE_ACTIONS, includeAllowableActions);
+614             selfLink.addParameter(Constants.PARAM_RELATIONSHIPS, includeRelationships);
+615             selfLink.addParameter(Constants.PARAM_MAX_ITEMS, maxItems);
+616             selfLink.addParameter(Constants.PARAM_SKIP_COUNT, skipCount);
+617             feed.writeSelfLink(selfLink.toString(), null);
+618 
+619             UrlBuilder pagingUrl = compileUrlBuilder(baseUrl, RESOURCE_CHECKEDOUT, folderInfo.getId());
+620             pagingUrl.addParameter(Constants.PARAM_FILTER, filter);
+621             pagingUrl.addParameter(Constants.PARAM_ORDER_BY, orderBy);
+622             pagingUrl.addParameter(Constants.PARAM_ALLOWABLE_ACTIONS, includeAllowableActions);
+623             pagingUrl.addParameter(Constants.PARAM_RELATIONSHIPS, includeRelationships);
+624             pagingUrl.addParameter(Constants.PARAM_RENDITION_FILTER, renditionFilter);
+625             feed.writePagingLinks(pagingUrl, maxItems, skipCount, checkedOut.getNumItems(), checkedOut.hasMoreItems(),
+626                     PAGE_SIZE);
+627 
+628             // write entries
+629             if (checkedOut.getObjects() != null) {
+630                 AtomEntry entry = new AtomEntry(feed.getWriter());
+631                 for (ObjectData object : checkedOut.getObjects()) {
+632                     if (object == null) {
+633                         continue;
+634                     }
+635                     writeObjectEntry(service, entry, object, null, repositoryId, null, null, baseUrl, false,
+636                             context.getCmisVersion());
+637                 }
+638             }
+639 
+640             // write extensions
+641             feed.writeExtensions(checkedOut);
+642 
+643             // we are done
+644             feed.endFeed();
+645             feed.endDocument();
+646         }
+647     }
+648 }
+
+
+ +