/*******************************************************************************
* Copyright (c) 2012-2017 Codenvy, S.A.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Codenvy, S.A. - initial API and implementation
*******************************************************************************/
package org.eclipse.che.api.core.jsonrpc.commons.reception;
import org.eclipse.che.api.core.jsonrpc.commons.JsonRpcErrorTransmitter;
import org.eclipse.che.api.core.jsonrpc.commons.RequestHandlerManager;
import org.slf4j.Logger;
import java.util.function.BiFunction;
import static com.google.common.base.Preconditions.checkNotNull;
import static org.slf4j.LoggerFactory.getLogger;
/**
* Function configurator to define a function to be applied when we
* handle incoming JSON RPC request with params object that is
* represented by a single object while the result of a function is
* also a single object.
*
* @param <P>
* type of params object
* @param <R>
* type of result object
*/
public class FunctionConfiguratorOneToOne<P, R> {
private final static Logger LOGGER = getLogger(FunctionConfiguratorOneToOne.class);
private final RequestHandlerManager handlerManager;
private final String method;
private final Class<P> pClass;
private final Class<R> rClass;
FunctionConfiguratorOneToOne(RequestHandlerManager handlerManager, String method, Class<P> pClass, Class<R> rClass) {
this.handlerManager = handlerManager;
this.method = method;
this.pClass = pClass;
this.rClass = rClass;
}
/**
* Define a function to be applied
*
* @param biFunction
* function
*/
public void withFunction(BiFunction<String, P, R> biFunction) {
checkNotNull(biFunction, "Request function must not be null");
LOGGER.debug("Configuring incoming request binary: " +
"function for method: " + method + ", " +
"params object class: " + pClass + ", " +
"result object class: " + rClass);
handlerManager.registerOneToOne(method, pClass, rClass, biFunction);
}
}