package glaze.client.wire.tasks;
import glaze.client.sync.SyncClient;
import glaze.client.sync.SyncMap;
import java.io.Serializable;
import org.apache.http.client.methods.HttpUriRequest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class MapCall<T extends Serializable> extends CallableRequest<T>
{
private static final long serialVersionUID = 2241780553418194274L;
private static final Logger LOGGER = LoggerFactory.getLogger(SendCall.class);
private final Class<T> type;
public MapCall(HttpUriRequest request, Class<T> type)
{
this(request, null, type);
setCallback(emptyCallback());
}
public MapCall(HttpUriRequest request, SerializableResponseCallback<T> callback, Class<T> type)
{
super(request, null);
setCallback(callback);
this.type = type;
}
@Override
protected T execute(SyncClient client, HttpUriRequest request)
{
return client.map(new SyncMap<T>(request, type));
}
private SerializableResponseCallback<T> emptyCallback()
{
return new SerializableResponseCallback<T>()
{
private static final long serialVersionUID = 5568234522090415157L;
@Override
public T onException(Exception e)
{
LOGGER.error(e.getMessage(), e);
return null;
}
@Override
public T onResponse(T bean)
{
if (LOGGER.isDebugEnabled())
LOGGER.debug("Provide a callback and do something interesting with {}", bean);
return bean;
}
};
}
}