/* * Copyright 2010 Nabeel Mukhtar * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * */ package com.github.api.v2.services.impl; import com.github.api.v2.schema.Feed; import com.github.api.v2.services.FeedService; import com.github.api.v2.services.GitHubException; import com.github.api.v2.services.constant.GitHubApiUrls; import com.github.api.v2.services.constant.ParameterNames; import com.github.api.v2.services.constant.GitHubApiUrls.GitHubApiUrlBuilder; import com.google.gson.GsonBuilder; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.reflect.TypeToken; /** * The Class FeedServiceImpl. */ public class FeedServiceImpl extends BaseGitHubService implements FeedService { /** * Instantiates a new feed service impl. */ public FeedServiceImpl() { // by default we compress contents requestHeaders.put("Accept-Encoding", "gzip, deflate"); } /* (non-Javadoc) * @see com.github.api.v2.services.FeedService#getCommitFeed(java.lang.String, java.lang.String, java.lang.String, int) */ @Override public Feed getCommitFeed(String userName, String repositoryName, String branchName, int count) { GitHubApiUrlBuilder builder = createGitHubApiUrlBuilder(GitHubApiUrls.FeedUrls.GET_COMMIT_FEED_URL); String apiUrl = builder.withField(ParameterNames.USER_NAME, userName).withField(ParameterNames.REPOSITORY_NAME, repositoryName).withField(ParameterNames.BRANCH, branchName).withParameter(ParameterNames.NUM, String.valueOf(count)).buildUrl(); return unmarshall(apiUrl); } /* (non-Javadoc) * @see com.github.api.v2.services.FeedService#getNetworkFeed(java.lang.String, java.lang.String, int) */ @Override public Feed getNetworkFeed(String userName, String repositoryName, int count) { GitHubApiUrlBuilder builder = createGitHubApiUrlBuilder(GitHubApiUrls.FeedUrls.GET_NETWORK_FEED_URL); String apiUrl = builder.withField(ParameterNames.USER_NAME, userName).withField(ParameterNames.REPOSITORY_NAME, repositoryName).withParameter(ParameterNames.NUM, String.valueOf(count)).buildUrl(); return unmarshall(apiUrl); } /* (non-Javadoc) * @see com.github.api.v2.services.FeedService#getPrivateUserFeed(java.lang.String, int) */ @Override public Feed getPrivateUserFeed(String userName, int count) { GitHubApiUrlBuilder builder = createGitHubApiUrlBuilder(GitHubApiUrls.FeedUrls.GET_PRIVATE_USER_FEED_URL); String apiUrl = builder.withField(ParameterNames.USER_NAME, userName).withParameter(ParameterNames.NUM, String.valueOf(count)).buildUrl(); return unmarshall(apiUrl); } /* (non-Javadoc) * @see com.github.api.v2.services.FeedService#getPublicTimelineFeed(int) */ @Override public Feed getPublicTimelineFeed(int count) { GitHubApiUrlBuilder builder = createGitHubApiUrlBuilder(GitHubApiUrls.FeedUrls.GET_PUBLIC_TIMELINE_FEED_URL); String apiUrl = builder.withParameter(ParameterNames.NUM, String.valueOf(count)).buildUrl(); return unmarshall(apiUrl); } /* (non-Javadoc) * @see com.github.api.v2.services.FeedService#getPublicUserFeed(java.lang.String, int) */ @Override public Feed getPublicUserFeed(String userName, int count) { GitHubApiUrlBuilder builder = createGitHubApiUrlBuilder(GitHubApiUrls.FeedUrls.GET_PUBLIC_USER_FEED_URL); String apiUrl = builder.withField(ParameterNames.USER_NAME, userName).withParameter(ParameterNames.NUM, String.valueOf(count)).buildUrl(); return unmarshall(apiUrl); } /* (non-Javadoc) * @see com.github.api.v2.services.FeedService#getWikiFeed(java.lang.String, java.lang.String, int) */ @Override public Feed getWikiFeed(String userName, String repositoryName, int count) { GitHubApiUrlBuilder builder = createGitHubApiUrlBuilder(GitHubApiUrls.FeedUrls.GET_WIKI_FEED_URL); String apiUrl = builder.withField(ParameterNames.USER_NAME, userName).withField(ParameterNames.REPOSITORY_NAME, repositoryName).withParameter(ParameterNames.NUM, String.valueOf(count)).buildUrl(); return unmarshall(apiUrl); } /* (non-Javadoc) * @see com.github.api.v2.services.FeedService#getBlogFeed(int) */ @Override public Feed getBlogFeed(int count) { GitHubApiUrlBuilder builder = createGitHubApiUrlBuilder(GitHubApiUrls.FeedUrls.GET_BLOG_FEED_URL); String apiUrl = builder.withParameter(ParameterNames.NUM, String.valueOf(count)).buildUrl(); return unmarshall(apiUrl); } /* (non-Javadoc) * @see com.github.api.v2.services.FeedService#getDiscussionsFeed(int) */ @Override public Feed getDiscussionsFeed(int count) { GitHubApiUrlBuilder builder = createGitHubApiUrlBuilder(GitHubApiUrls.FeedUrls.GET_DISCUSSIONS_FEED_URL); String apiUrl = builder.withParameter(ParameterNames.NUM, String.valueOf(count)).buildUrl(); return unmarshall(apiUrl); } /* (non-Javadoc) * @see com.github.api.v2.services.FeedService#getDiscussionsFeed(java.lang.String, int) */ @Override public Feed getDiscussionsFeed(String topic, int count) { GitHubApiUrlBuilder builder = createGitHubApiUrlBuilder(GitHubApiUrls.FeedUrls.GET_DISCUSSIONS_FEED_BY_TOPIC_URL); String apiUrl = builder.withField(ParameterNames.KEYWORD, topic).withParameter(ParameterNames.NUM, String.valueOf(count)).buildUrl(); return unmarshall(apiUrl); } /* (non-Javadoc) * @see com.github.api.v2.services.FeedService#getJobPositionsFeed(int) */ @Override public Feed getJobPositionsFeed(int count) { GitHubApiUrlBuilder builder = createGitHubApiUrlBuilder(GitHubApiUrls.FeedUrls.GET_JOB_POSITIONS_FEED_URL); String apiUrl = builder.withParameter(ParameterNames.NUM, String.valueOf(count)).buildUrl(); return unmarshall(apiUrl); } /** * Unmarshall. * * @param apiUrl * the api url * * @return the feed */ protected Feed unmarshall(String apiUrl) { JsonObject response = unmarshall(callApiGet(apiUrl)); if (response.isJsonObject()) { JsonObject json = response.getAsJsonObject(); int status = json.get("responseStatus").getAsInt(); if (status != 200) { throw new GitHubException(json.get("responseDetails").getAsString()); } JsonElement data = json.get("responseData"); if (data != null) { return unmarshall(new TypeToken<Feed>(){}, data.getAsJsonObject().get("feed")); } } return null; } /* (non-Javadoc) * @see com.github.api.v2.services.impl.BaseGitHubService#getGsonBuilder() */ protected GsonBuilder getGsonBuilder() { GsonBuilder gson = super.getGsonBuilder(); gson.setDateFormat("EEE', 'dd' 'MMM' 'yyyy' 'HH:mm:ss' 'Z"); return gson; } // @SuppressWarnings("unchecked") // private Feed populateFeed(SyndFeed feed) { // Feed retVal = new Feed(); // retVal.setAuthor(feed.getAuthor()); // retVal.setDescription(feed.getDescription()); // retVal.setLink(feed.getLink()); // retVal.setTitle(feed.getTitle()); // List<FeedEntry> entries = new ArrayList<FeedEntry>(feed.getEntries().size()); // retVal.setEntries(entries); // // for (SyndEntry entry : (List<SyndEntry>) feed.getEntries()) { // FeedEntry feedEntry = new FeedEntry(); // feedEntry.setAuthor(entry.getAuthor()); //// feedEntry.setCategories(entry.getCategories()); // if (entry.getContents() != null) { // StringBuilder builder = new StringBuilder(); // for (SyndContent content : (List<SyndContent>) entry.getContents()) { // builder.append(content.getValue()); // } // feedEntry.setContent(builder.toString()); // } // feedEntry.setLink(entry.getLink()); // feedEntry.setPublishedDate(entry.getPublishedDate()); // feedEntry.setTitle(entry.getTitle()); // // entries.add(feedEntry); // } // return retVal; // } // // /** // * Creates the git hub api url builder. // * // * @param urlFormat // * the url format // * // * @return the git hub api url builder // */ // protected GitHubApiUrlBuilder createGitHubApiUrlBuilder(String urlFormat) { // return new GitHubApiUrlBuilder(urlFormat); // } }