package com.project.gwtyoutube.client; import java.util.HashMap; import java.util.Map.Entry; import com.google.gwt.http.client.UrlBuilder; import com.google.gwt.jsonp.client.JsonpRequestBuilder; import com.google.gwt.user.client.rpc.AsyncCallback; public class YouTubeSearchRequest { private static final String PROTOCOL_HTTP = "http"; private static final String YOUTUBE_SEARCH_API_HOST = "gdata.youtube.com"; private static final String YOUTUBE_SEARCH_PATH = "feeds/api/videos"; public void search(String query, final AsyncCallback<YouTubeResult> callback) { this.search(query, callback, new HashMap<String, String>()); } public void search(String query, final AsyncCallback<YouTubeResult> callback, HashMap<String, String> additionalParams) { String searchUrl = this.buildSearchUrl(query, additionalParams); JsonpRequestBuilder requestBuilder = new JsonpRequestBuilder(); requestBuilder.setCallbackParam(SearchParameters.CALLBACK); requestBuilder.requestObject(searchUrl, new AsyncCallback<YouTubeResult>() { @Override public void onFailure(Throwable caught) { callback.onFailure(caught); } @Override public void onSuccess(YouTubeResult result) { if (null == result) { //TODO: Replace with proper exception. callback.onFailure(new YouTubeSearchNullResultException()); return; } callback.onSuccess(result); }}); } private String buildSearchUrl(String query, HashMap<String, String> additionalParams) { UrlBuilder urlBuilder = new UrlBuilder(); urlBuilder.setProtocol(PROTOCOL_HTTP); urlBuilder.setHost(YOUTUBE_SEARCH_API_HOST); urlBuilder.setPath(YOUTUBE_SEARCH_PATH); urlBuilder.setParameter(SearchParameters.RETURN_TYPE, SearchReturnTypes.JSON_COMPACT); urlBuilder.setParameter(SearchParameters.VERSION, YouTubeVersions.TWO); urlBuilder.setParameter(SearchParameters.SUPPORTED_FORMATS, YouTubeFormats.EMBEDDED); urlBuilder.setParameter(SearchParameters.QUERY, query); for (Entry<String, String> additionalParam : additionalParams.entrySet()) { urlBuilder.setParameter(additionalParam.getKey(), additionalParam.getValue()); } return urlBuilder.buildString(); } }