/*
 * Copyright 2010 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.requestfactory.server;

import java.lang.reflect.Method;
import java.lang.reflect.Type;

/**
 * Implemented by enums that define the mapping between request objects and
 * service methods.
 */
interface RequestDefinition {
  /**
   * Returns the name of the (domain) class that contains the method to be
   * invoked on the server.
   */
  String getDomainClassName();

  /**
   * Returns the method to be invoked on the server.
   */
  Method getDomainMethod();

  /**
   * Returns the parameter types of the method to be invoked on the server.
   */
  Class<?>[] getParameterTypes();

  Type[] getRequestParameterTypes();

  /**
   * Returns the return type of the method to be invoked on the server.
   */
  Class<?> getReturnType();

  /**
   * Returns true if the domain method is an instance method.
   */
  boolean isInstance();

  /**
   * Returns the name.
   */
  String name();
}