App Engine Python SDK version 1.9.8
[gae.git] / java / src / main / com / google / appengine / api / search / SearchApiHelper.java
blob200c7e26e3e15c69f212e166f05241f74c79dbb8
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;
17 SearchApiHelper() {
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);
97 /**
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());
110 } else {
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) {
116 @Override
117 protected T wrap(byte[] responseBytes) {
118 if (responseBytes != null) {
119 try {
120 responseBuilder.mergeFrom(responseBytes);
121 } catch (InvalidProtocolBufferException e) {
122 throw new SearchServiceException(e.toString());
125 return responseBuilder;
128 @Override
129 protected Throwable convertException(Throwable cause) {
130 return cause;