MultiplexedApiCall.java

package eu.javaexperience.rpc.bulk;

import java.util.List;

import eu.javaexperience.datareprez.DataObject;
import eu.javaexperience.interfaces.simple.getBy.GetBy1;
import eu.javaexperience.reflect.Mirror;
import eu.javaexperience.rpc.RpcTools;
import eu.javaexperience.rpc.RpcFacility;
import eu.javaexperience.rpc.RpcRequest;

public class MultiplexedApiCall extends BulkApiRequestApi
{
	protected final List<RpcFacility> apis;
	protected final GetBy1<RpcRequest, DataObject> requestCreator;
	
	public MultiplexedApiCall(List<RpcFacility> apis, GetBy1<RpcRequest, DataObject> requestCreator)
	{
		this.apis = apis;
		this.requestCreator = requestCreator;
	}

	@Override
	public DataObject handleSingleRequest(DataObject obj)
	{
		String ns = obj.optString("N");
		for(RpcFacility api:apis)
		{
			if(Mirror.equals(ns, api.getRpcName()))
			{
				return api.dispatch(requestCreator.getBy(obj));
			}
		}
		RpcTools.throwUnknownNamespace(ns);
		return null;
	}
}