Version 1.7.4
[gae.git] / java / src / main / com / google / appengine / tools / remoteapi / RemoteApiDelegate.java
blob7afe28ab23eee762685ee0add89897f7b501df7b
1 // Copyright 2010 Google Inc. All Rights Reserved.
3 package com.google.appengine.tools.remoteapi;
5 import com.google.apphosting.api.ApiProxy.Delegate;
6 import com.google.apphosting.api.ApiProxy.Environment;
8 /**
9 * Handles App Engine API calls by making HTTP requests to a remote server.
10 * The exact mechanism by which the requests are made is an implementation
11 * detail of subclasses. Users of this class are expected to call
12 * {@link #shutdown()} when they are done with an instance.
15 abstract class RemoteApiDelegate implements Delegate<Environment> {
16 private final RemoteRpc remoteRpc;
17 private final RemoteDatastore remoteDatastore;
19 /**
20 * Factory method.
22 public static RemoteApiDelegate newInstance(RemoteRpc remoteRpc, RemoteApiOptions options, Delegate<Environment> containerDelegate) {
23 return containerDelegate != null ?
24 new HostedRemoteApiDelegate(remoteRpc, options, containerDelegate) :
25 new StandaloneRemoteApiDelegate(remoteRpc, options);
28 /**
29 * Do not call directly, use
30 * {@link #newInstance(RemoteRpc, RemoteApiOptions, Delegate)} instead.
32 RemoteApiDelegate(RemoteRpc rpc, RemoteApiOptions options) {
33 this.remoteRpc = rpc;
34 this.remoteDatastore = new RemoteDatastore(remoteRpc, options);
37 void resetRpcCount() {
38 remoteRpc.resetRpcCount();
41 int getRpcCount() {
42 return remoteRpc.getRpcCount();
45 final byte[] makeDefaultSyncCall(
46 Environment env, String serviceName, String methodName, byte[] request) {
47 if (serviceName.equals(RemoteDatastore.DATASTORE_SERVICE)) {
48 return remoteDatastore.handleDatastoreCall(methodName, request);
49 } else {
50 return remoteRpc.call(serviceName, methodName, "", request);
54 /**
55 * Perform any necessary clean up and shut down.
57 public abstract void shutdown();