/*
 * 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;

/**
 * Simple interface to abstract the underlying RequestFactory RPC mechanism. A
 * serialized object of type T is provided, such as a String in the case of JSON
 * requests, and a serialized return value of the same type is returned.
 * @param <T> the type of encoding used to serialize the request (e.g. String)
 */
public interface RequestProcessor<T> {
  /**
   * Decodes request, invokes methods, and re-encoded resulting return values.
   */
  T decodeAndInvokeRequest(T encodedRequest) throws Exception;

  /**
   * Sets the OperationRegistry to be used for looking up invocation metadata.
   * 
   * @param registry an implementation, such as
   *          {@link ReflectionBasedOperationRegistry}
   */
  void setOperationRegistry(OperationRegistry registry);
}
