blob: 742487a7cca5fe89d433de945b13a926c81d63c9 [file] [log] [blame]
/*
* Copyright 2009 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package com.google.gwt.rpc.server;
import com.google.gwt.rpc.client.ast.CommandSink;
import java.io.IOException;
import java.io.OutputStream;
import java.lang.reflect.Field;
/**
* Encapsulates information about a remote client. This type is not intended to
* be implemented by end-users although the behavior of a concrete
* implementation may be modified via the {@link DelegatingClientOracle} type.
*/
public abstract class ClientOracle {
/**
* Not a generally-extensible class.
*/
ClientOracle() {
}
/**
* Create a CommandSink that can encode a payload for the client.
*
* @param out the OutputStream to which the output will be written
* @return a CommandSink
* @throws IOException if the CommandSink cannot write to the OutputStream
*/
public abstract CommandSink createCommandSink(OutputStream out)
throws IOException;
/**
* Returns an identifier that does not conflict with any symbols defined in
* the client. This method does not accumulate any state.
*/
public abstract String createUnusedIdent(String ident);
/**
* Returns the Json castableType data for a given type.
*/
public abstract CastableTypeData getCastableTypeData(Class<?> clazz);
/**
* Given a base type and the unobfuscated field name, find the obfuscated name
* for the field in the client. This will search superclasses as well for the
* first matching field.
*/
public abstract String getFieldId(Class<?> clazz, String fieldName);
/**
* Return the field name for a given enum value.
*/
public abstract String getFieldId(Enum<?> value);
/**
* This is similar to {@link #getFieldId(Class, String)} but does not search
* supertypes. It is intended to be used to access "magic" GWT types.
*/
public abstract String getFieldId(String className, String fieldName);
/**
* Return the name of a field from a client-side id. This will search
* superclasses for the first instance of the named field.
*
* @return The field's declaring class and the name of the field
*/
public abstract Pair<Class<?>, String> getFieldName(Class<?> clazz,
String fieldId);
/**
* Returns the name of the top-level function which implements the named
* method that takes the exact arguments specified. This will search in the
* given class as well as its supertypes.
*/
public abstract String getMethodId(Class<?> clazz, String methodName,
Class<?>... args);
/**
* This is similar to {@link #getMethodId(Class, String, Class...)} but does
* not search supertypes. It is intended to be used to access "magic" GWT
* types.
*/
public abstract String getMethodId(String className, String methodName,
String... jsniArgTypes);
/**
* Returns the fields of a given class that should be serialized. This method
* does not crawl supertypes.
*/
public abstract Field[] getOperableFields(Class<?> clazz);
/**
* Returns the assigned castability queryId of a given type.
*/
public abstract int getQueryId(Class<?> clazz);
/**
* Returns the name of the top-level function that is used as the seed
* function for a given type.
*/
public abstract String getSeedName(Class<?> clazz);
/**
* Returns the deobfuscated name of a type based on the name of the type's
* seed function.
*/
public abstract String getTypeName(String seedName);
/**
* Indicates whether or not the remote client is running as compiled script.
* This may be used to optimize the payload based on assumptions that can be
* mode about web-mode or hosted-mode clients.
*/
public abstract boolean isScript();
}