1 package com
.google
.appengine
.api
.search
;
3 import com
.google
.appengine
.api
.utils
.FutureWrapper
;
4 import com
.google
.apphosting
.api
.ApiProxy
;
5 import com
.google
.protobuf
.ByteString
;
6 import com
.google
.protobuf
.GeneratedMessage
;
7 import com
.google
.protobuf
.InvalidProtocolBufferException
;
9 import java
.util
.concurrent
.Future
;
11 /** Provides support for translation of calls between userland and appserver land. */
12 class SearchApiHelper
{
14 private static final String PACKAGE
= "search";
15 private final ByteString appIdOverride
;
18 this.appIdOverride
= null;
21 SearchApiHelper(String appIdOverride
) {
22 this.appIdOverride
= ByteString
.copyFromUtf8(appIdOverride
);
25 Future
<SearchServicePb
.DeleteDocumentResponse
.Builder
> makeAsyncDeleteDocumentCall(
26 SearchServicePb
.DeleteDocumentParams
.Builder params
, Double deadline
) {
27 SearchServicePb
.DeleteDocumentRequest
.Builder requestBuilder
=
28 SearchServicePb
.DeleteDocumentRequest
.newBuilder().setParams(params
);
29 if (appIdOverride
!= null) {
30 requestBuilder
.setAppId(appIdOverride
);
32 SearchServicePb
.DeleteDocumentResponse
.Builder responseBuilder
=
33 SearchServicePb
.DeleteDocumentResponse
.newBuilder();
34 return makeAsyncCall("DeleteDocument", requestBuilder
.build(), responseBuilder
, deadline
);
37 Future
<SearchServicePb
.DeleteSchemaResponse
.Builder
> makeAsyncDeleteSchemaCall(
38 SearchServicePb
.DeleteSchemaParams
.Builder params
, Double deadline
) {
39 SearchServicePb
.DeleteSchemaRequest
.Builder requestBuilder
=
40 SearchServicePb
.DeleteSchemaRequest
.newBuilder().setParams(params
);
41 if (appIdOverride
!= null) {
42 requestBuilder
.setAppId(appIdOverride
);
44 SearchServicePb
.DeleteSchemaResponse
.Builder responseBuilder
=
45 SearchServicePb
.DeleteSchemaResponse
.newBuilder();
46 return makeAsyncCall("DeleteSchema", requestBuilder
.build(), responseBuilder
, deadline
);
49 Future
<SearchServicePb
.IndexDocumentResponse
.Builder
> makeAsyncIndexDocumentCall(
50 SearchServicePb
.IndexDocumentParams
.Builder params
, Double deadline
) {
51 SearchServicePb
.IndexDocumentRequest
.Builder requestBuilder
=
52 SearchServicePb
.IndexDocumentRequest
.newBuilder().setParams(params
);
53 if (appIdOverride
!= null) {
54 requestBuilder
.setAppId(appIdOverride
);
56 SearchServicePb
.IndexDocumentResponse
.Builder responseBuilder
=
57 SearchServicePb
.IndexDocumentResponse
.newBuilder();
58 return makeAsyncCall("IndexDocument", requestBuilder
.build(), responseBuilder
, deadline
);
61 Future
<SearchServicePb
.ListDocumentsResponse
.Builder
> makeAsyncListDocumentsCall(
62 SearchServicePb
.ListDocumentsParams
.Builder params
, Double deadline
) {
63 SearchServicePb
.ListDocumentsRequest
.Builder requestBuilder
=
64 SearchServicePb
.ListDocumentsRequest
.newBuilder().setParams(params
);
65 if (appIdOverride
!= null) {
66 requestBuilder
.setAppId(appIdOverride
);
68 SearchServicePb
.ListDocumentsResponse
.Builder responseBuilder
=
69 SearchServicePb
.ListDocumentsResponse
.newBuilder();
70 return makeAsyncCall("ListDocuments", requestBuilder
.build(), responseBuilder
, deadline
);
73 Future
<SearchServicePb
.ListIndexesResponse
.Builder
> makeAsyncListIndexesCall(
74 SearchServicePb
.ListIndexesParams params
, Double deadline
) {
75 SearchServicePb
.ListIndexesRequest
.Builder requestBuilder
=
76 SearchServicePb
.ListIndexesRequest
.newBuilder().setParams(params
);
77 if (appIdOverride
!= null) {
78 requestBuilder
.setAppId(appIdOverride
);
80 SearchServicePb
.ListIndexesResponse
.Builder responseBuilder
=
81 SearchServicePb
.ListIndexesResponse
.newBuilder();
82 return makeAsyncCall("ListIndexes", requestBuilder
.build(), responseBuilder
, deadline
);
85 Future
<SearchServicePb
.SearchResponse
.Builder
> makeAsyncSearchCall(
86 SearchServicePb
.SearchParams
.Builder params
, Double deadline
) {
87 SearchServicePb
.SearchRequest
.Builder requestBuilder
=
88 SearchServicePb
.SearchRequest
.newBuilder().setParams(params
);
89 if (appIdOverride
!= null) {
90 requestBuilder
.setAppId(appIdOverride
);
92 SearchServicePb
.SearchResponse
.Builder responseBuilder
=
93 SearchServicePb
.SearchResponse
.newBuilder();
94 return makeAsyncCall("Search", requestBuilder
.build(), responseBuilder
, deadline
);
98 * Makes an asynchronous call.
100 * @param method the method on the API to call
101 * @param request the request to forward to the API
102 * @param responseBuilder the response builder used to fill the response
103 * @param deadline the deadline of the call. if it is null, the default api deadline will be used
105 private <T
extends GeneratedMessage
.Builder
<T
>>
106 Future
<T
> makeAsyncCall(String method
, GeneratedMessage request
, final T responseBuilder
, Double deadline
) {
107 Future
<byte[]> response
;
108 if (deadline
== null) {
109 response
= ApiProxy
.makeAsyncCall(PACKAGE
, method
, request
.toByteArray());
111 ApiProxy
.ApiConfig apiConfig
= new ApiProxy
.ApiConfig();
112 apiConfig
.setDeadlineInSeconds(deadline
);
113 response
= ApiProxy
.makeAsyncCall(PACKAGE
, method
, request
.toByteArray(), apiConfig
);
115 return new FutureWrapper
<byte[], T
>(response
) {
117 protected T
wrap(byte[] responseBytes
) {
118 if (responseBytes
!= null) {
120 responseBuilder
.mergeFrom(responseBytes
);
121 } catch (InvalidProtocolBufferException e
) {
122 throw new SearchServiceException(e
.toString());
125 return responseBuilder
;
129 protected Throwable
convertException(Throwable cause
) {