/**
*
*/
package com.github.lpezet.antiope.samples.yahoo;
import org.apache.http.client.HttpClient;
import com.github.lpezet.antiope.APIClientException;
import com.github.lpezet.antiope.be.APIConfiguration;
import com.github.lpezet.antiope.be.APIWebServiceResponse;
import com.github.lpezet.antiope.be.IAPICredentials;
import com.github.lpezet.antiope.bo.AdvancedAPIClient;
import com.github.lpezet.antiope.dao.DefaultHttpRequestFactory;
import com.github.lpezet.antiope.dao.ExecutionContext;
import com.github.lpezet.antiope.dao.HttpResponseHandler;
import com.github.lpezet.antiope.dao.Request;
import com.github.lpezet.antiope.dao.Response;
import com.github.lpezet.antiope.dao.StaxResponseHandler;
import com.github.lpezet.antiope.metrics.APIRequestMetrics;
import com.github.lpezet.antiope.metrics.IMetrics;
import com.github.lpezet.antiope.transform.StaxUnmarshallerContext;
import com.github.lpezet.antiope.transform.Unmarshaller;
/**
* @author luc
*
*/
public class YahooAdvancedClient extends AdvancedAPIClient<StaxUnmarshallerContext> implements IYahooClient {
public YahooAdvancedClient(APIConfiguration pConfiguration, IAPICredentials pCredentials, HttpClient pHttpClient) {
super(pConfiguration, pCredentials, pHttpClient);
setEndpoint("http://weather.yahooapis.com/");
setHttpRequestFactory(new DefaultHttpRequestFactory());
}
@Override
protected <T> HttpResponseHandler<APIWebServiceResponse<T>> createResponseHandler(ExecutionContext pExecutionContext, Unmarshaller<T, StaxUnmarshallerContext> pUnmarshaller) {
return new StaxResponseHandler<T>(pUnmarshaller);
}
public WeatherResponse getWeather(WeatherRequest pRequest) {
ExecutionContext oContext = createExecutionContext(pRequest);
IMetrics oMetrics = oContext.getMetrics();
Request<WeatherRequest> request = null;
Response<WeatherResponse> response = null;
oMetrics.startEvent(APIRequestMetrics.ClientExecuteTime);
try {
oMetrics.startEvent(APIRequestMetrics.RequestMarshallTime);
try {
request = new WeatherRequestMarshaller().marshall(pRequest);
request.setMetrics(oMetrics);
} finally {
oMetrics.endEvent(APIRequestMetrics.RequestMarshallTime);
}
response = invoke(request, new WeatherResponseUnmarshaller(), oContext);
return response.getAPIResponse();
} catch (Exception e) {
throw new APIClientException(e);
} finally {
endClientExecution(oMetrics, request, response);
}
}
}