View Javadoc
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.browser;
20  
21  import org.apache.chemistry.opencmis.commons.data.ObjectList;
22  import org.apache.chemistry.opencmis.commons.enums.IncludeRelationships;
23  import org.apache.chemistry.opencmis.commons.exceptions.CmisRuntimeException;
24  import org.apache.chemistry.opencmis.commons.impl.Constants;
25  import static org.apache.chemistry.opencmis.commons.impl.Constants.PARAM_ACL;
26  import static org.apache.chemistry.opencmis.commons.impl.Constants.PARAM_CHANGE_LOG_TOKEN;
27  import static org.apache.chemistry.opencmis.commons.impl.Constants.PARAM_FILTER;
28  import static org.apache.chemistry.opencmis.commons.impl.Constants.PARAM_POLICY_IDS;
29  import static org.apache.chemistry.opencmis.commons.impl.Constants.PARAM_PROPERTIES;
30  import org.apache.chemistry.opencmis.commons.impl.JSONConstants;
31  import org.apache.chemistry.opencmis.commons.impl.JSONConverter;
32  import org.apache.chemistry.opencmis.commons.impl.TypeCache;
33  import org.apache.chemistry.opencmis.commons.impl.json.JSONObject;
34  import org.apache.chemistry.opencmis.commons.impl.server.TypeCacheImpl;
35  import org.apache.chemistry.opencmis.commons.server.CallContext;
36  import org.apache.chemistry.opencmis.commons.server.CmisService;
37  import org.apache.chemistry.opencmis.commons.spi.Holder;
38  import static org.apache.chemistry.opencmis.server.shared.HttpUtils.getBigIntegerParameter;
39  import static org.apache.chemistry.opencmis.server.shared.HttpUtils.getBooleanParameter;
40  import static org.apache.chemistry.opencmis.server.shared.HttpUtils.getEnumParameter;
41  import static org.apache.chemistry.opencmis.server.shared.HttpUtils.getStringParameter;
42  
43  import java.math.BigInteger;
44  
45  import javax.servlet.http.HttpServletRequest;
46  import javax.servlet.http.HttpServletResponse;
47  
48  
49  /**
50   * Discovery Service operations.
51   */
52  public class DiscoveryService
53  {
54      private DiscoveryService(  )
55      {
56      }
57  
58      /**
59       * query.
60       */
61      public static void query( CallContext context, CmisService service, String repositoryId,
62          HttpServletRequest request, HttpServletResponse response )
63          throws Exception
64      {
65          // get parameters
66          String statement = getStringParameter( request, Constants.PARAM_Q );
67          Boolean searchAllVersions = getBooleanParameter( request, Constants.PARAM_SEARCH_ALL_VERSIONS );
68          Boolean includeAllowableActions = getBooleanParameter( request, Constants.PARAM_ALLOWABLE_ACTIONS );
69          IncludeRelationships includeRelationships = getEnumParameter( request, Constants.PARAM_RELATIONSHIPS,
70                  IncludeRelationships.class );
71          String renditionFilter = getStringParameter( request, Constants.PARAM_RENDITION_FILTER );
72          BigInteger maxItems = getBigIntegerParameter( request, Constants.PARAM_MAX_ITEMS );
73          BigInteger skipCount = getBigIntegerParameter( request, Constants.PARAM_SKIP_COUNT );
74  
75          // execute
76          ObjectList results = service.query( repositoryId, statement, searchAllVersions, includeAllowableActions,
77                  includeRelationships, renditionFilter, maxItems, skipCount, null );
78  
79          if ( results == null )
80          {
81              throw new CmisRuntimeException( "Results are null!" );
82          }
83  
84          TypeCache typeCache = new TypeCacheImpl( repositoryId, service );
85          JSONObject jsonResults = JSONConverter.convert( results, typeCache, true );
86  
87          response.setStatus( HttpServletResponse.SC_OK );
88          BrowserBindingUtils.writeJSON( jsonResults, request, response );
89      }
90  
91      /**
92       * getContentChanges.
93       */
94      public static void getContentChanges( CallContext context, CmisService service, String repositoryId,
95          HttpServletRequest request, HttpServletResponse response )
96          throws Exception
97      {
98          // get parameters
99          String changeLogToken = getStringParameter( request, PARAM_CHANGE_LOG_TOKEN );
100         Boolean includeProperties = getBooleanParameter( request, PARAM_PROPERTIES );
101         String filter = getStringParameter( request, PARAM_FILTER );
102         Boolean includePolicyIds = getBooleanParameter( request, PARAM_POLICY_IDS );
103         Boolean includeAcl = getBooleanParameter( request, PARAM_ACL );
104         BigInteger maxItems = getBigIntegerParameter( request, Constants.PARAM_MAX_ITEMS );
105 
106         Holder<String> changeLogTokenHolder = new Holder<String>( changeLogToken );
107         ObjectList changes = service.getContentChanges( repositoryId, changeLogTokenHolder, includeProperties, filter,
108                 includePolicyIds, includeAcl, maxItems, null );
109 
110         TypeCache typeCache = new TypeCacheImpl( repositoryId, service );
111         JSONObject jsonChanges = JSONConverter.convert( changes, typeCache, false );
112         jsonChanges.put( JSONConstants.JSON_OBJECTLIST_CHANGE_LOG_TOKEN, changeLogTokenHolder.getValue(  ) );
113 
114         response.setStatus( HttpServletResponse.SC_OK );
115         BrowserBindingUtils.writeJSON( jsonChanges, request, response );
116     }
117 }