From 62832a83689d60a6deb91af1012bdf95ffbffa13 Mon Sep 17 00:00:00 2001 From: Omertron Date: Sun, 1 Apr 2012 11:10:42 +0000 Subject: [PATCH] fixes issue 16 fixes issue 17 --- .../moviejukebox/themoviedb/TheMovieDb.java | 60 ++++++++- .../themoviedb/model/Company.java | 115 ++++++++++++++++++ .../wrapper/WrapperCompanyMovies.java | 110 +++++++++++++++++ .../themoviedb/TheMovieDbTest.java | 69 +++++++---- 4 files changed, 325 insertions(+), 29 deletions(-) create mode 100644 themoviedbapi/src/main/java/com/moviejukebox/themoviedb/model/Company.java create mode 100644 themoviedbapi/src/main/java/com/moviejukebox/themoviedb/wrapper/WrapperCompanyMovies.java diff --git a/themoviedbapi/src/main/java/com/moviejukebox/themoviedb/TheMovieDb.java b/themoviedbapi/src/main/java/com/moviejukebox/themoviedb/TheMovieDb.java index ad5f8cf50..843216eb0 100644 --- a/themoviedbapi/src/main/java/com/moviejukebox/themoviedb/TheMovieDb.java +++ b/themoviedbapi/src/main/java/com/moviejukebox/themoviedb/TheMovieDb.java @@ -44,6 +44,7 @@ public class TheMovieDb { */ private static final String BASE_MOVIE = "movie/"; private static final String BASE_PERSON = "person/"; + private static final String BASE_COMPANY = "company/"; // Configuration URL private final ApiUrl tmdbConfigUrl = new ApiUrl(this, "configuration"); // Search URLS @@ -71,8 +72,8 @@ public class TheMovieDb { private final ApiUrl tmdbPopularMovieList = new ApiUrl(this, "movie/popular"); private final ApiUrl tmdbTopRatedMovies = new ApiUrl(this, "movie/top-rated"); // Company Info - // - Company Info - // - Company Movies + private final ApiUrl tmdbCompanyInfo = new ApiUrl(this, BASE_COMPANY); + private final ApiUrl tmdbCompanyMovies = new ApiUrl(this, BASE_COMPANY, "/movies"); /* * Jackson JSON configuration */ @@ -632,10 +633,11 @@ public class TheMovieDb { * TODO: Implement more than 20 movies * * @param language + * @param allResults * @return * @throws MovieDbException */ - public List getNowPlayingMovies(String language) throws MovieDbException { + public List getNowPlayingMovies(String language, boolean allResults) throws MovieDbException { URL url = tmdbNowPlaying.getIdUrl("", language); String webPage = WebBrowser.request(url); @@ -655,10 +657,11 @@ public class TheMovieDb { * TODO: Implement more than 20 movies * * @param language + * @param allResults * @return * @throws MovieDbException */ - public List getPopularMovieList(String language) throws MovieDbException { + public List getPopularMovieList(String language, boolean allResults) throws MovieDbException { URL url = tmdbPopularMovieList.getIdUrl("", language); String webPage = WebBrowser.request(url); @@ -678,10 +681,11 @@ public class TheMovieDb { * TODO: Implement more than 20 movies * * @param language + * @param allResults * @return * @throws MovieDbException */ - public List getTopRatedMovies(String language) throws MovieDbException { + public List getTopRatedMovies(String language, boolean allResults) throws MovieDbException { URL url = tmdbTopRatedMovies.getIdUrl("", language); String webPage = WebBrowser.request(url); @@ -693,4 +697,50 @@ public class TheMovieDb { throw new MovieDbException(MovieDbExceptionType.MAPPING_FAILED, webPage, ex); } } + + /** + * This method is used to retrieve the basic information about a production + * company on TMDb. + * + * @param companyId + * @return + * @throws MovieDbException + */ + public Company getCompanyInfo(int companyId) throws MovieDbException { + URL url = tmdbCompanyInfo.getIdUrl(companyId); + String webPage = WebBrowser.request(url); + + try { + return mapper.readValue(webPage, Company.class); + } catch (IOException ex) { + LOGGER.warn("Failed to get company information: " + ex.getMessage()); + throw new MovieDbException(MovieDbExceptionType.MAPPING_FAILED, webPage, ex); + } + } + + /** + * This method is used to retrieve the movies associated with a company. + * These movies are returned in order of most recently released to oldest. + * The default response will return 20 movies per page. + * + * TODO: Implement more than 20 movies + * + * @param companyId + * @param language + * @param allResults + * @return + * @throws MovieDbException + */ + public List getCompanyMovies(int companyId, String language, boolean allResults) throws MovieDbException { + URL url = tmdbCompanyMovies.getIdUrl(companyId, language); + String webPage = WebBrowser.request(url); + + try { + WrapperCompanyMovies resultList = mapper.readValue(webPage, WrapperCompanyMovies.class); + return resultList.getResults(); + } catch (IOException ex) { + LOGGER.warn("Failed to get company movies: " + ex.getMessage()); + throw new MovieDbException(MovieDbExceptionType.MAPPING_FAILED, webPage, ex); + } + } } diff --git a/themoviedbapi/src/main/java/com/moviejukebox/themoviedb/model/Company.java b/themoviedbapi/src/main/java/com/moviejukebox/themoviedb/model/Company.java new file mode 100644 index 000000000..b9cf34965 --- /dev/null +++ b/themoviedbapi/src/main/java/com/moviejukebox/themoviedb/model/Company.java @@ -0,0 +1,115 @@ +/* + * Copyright (c) 2004-2012 YAMJ Members + * http://code.google.com/p/moviejukebox/people/list + * + * Web: http://code.google.com/p/moviejukebox/ + * + * This software is licensed under a Creative Commons License + * See this page: http://code.google.com/p/moviejukebox/wiki/License + * + * For any reuse or distribution, you must make clear to others the + * license terms of this work. + */ +package com.moviejukebox.themoviedb.model; + +import org.apache.log4j.Logger; +import org.codehaus.jackson.annotate.JsonAnySetter; +import org.codehaus.jackson.annotate.JsonProperty; + +/** + * + * @author Stuart + */ +public class Company { + // Logger + private static final Logger LOGGER = Logger.getLogger(Company.class); + // Properties + @JsonProperty("id") + private int companyId; + @JsonProperty("name") + private String name; + @JsonProperty("description") + private String description; + @JsonProperty("headquarters") + private String headquarters; + @JsonProperty("homepage") + private String homepage; + @JsonProperty("logo_path") + private String logoPath; + @JsonProperty("parent_company") + private String parentCompany; + + // + public int getCompanyId() { + return companyId; + } + + public String getDescription() { + return description; + } + + public String getHeadquarters() { + return headquarters; + } + + public String getHomepage() { + return homepage; + } + + public String getLogoPath() { + return logoPath; + } + + public String getName() { + return name; + } + + public String getParentCompany() { + return parentCompany; + } + // + + // + public void setCompanyId(int companyId) { + this.companyId = companyId; + } + + public void setDescription(String description) { + this.description = description; + } + + public void setHeadquarters(String headquarters) { + this.headquarters = headquarters; + } + + public void setHomepage(String homepage) { + this.homepage = homepage; + } + + public void setLogoPath(String logoPath) { + this.logoPath = logoPath; + } + + public void setName(String name) { + this.name = name; + } + + public void setParentCompany(String parentCompany) { + this.parentCompany = parentCompany; + } + // + + /** + * Handle unknown properties and print a message + * + * @param key + * @param value + */ + @JsonAnySetter + public void handleUnknown(String key, Object value) { + StringBuilder sb = new StringBuilder(); + sb.append("Unknown property: '").append(key); + sb.append("' value: '").append(value).append("'"); + LOGGER.warn(sb.toString()); + } +} diff --git a/themoviedbapi/src/main/java/com/moviejukebox/themoviedb/wrapper/WrapperCompanyMovies.java b/themoviedbapi/src/main/java/com/moviejukebox/themoviedb/wrapper/WrapperCompanyMovies.java new file mode 100644 index 000000000..0bdd4bee0 --- /dev/null +++ b/themoviedbapi/src/main/java/com/moviejukebox/themoviedb/wrapper/WrapperCompanyMovies.java @@ -0,0 +1,110 @@ +/* + * Copyright (c) 2004-2012 YAMJ Members + * http://code.google.com/p/moviejukebox/people/list + * + * Web: http://code.google.com/p/moviejukebox/ + * + * This software is licensed under a Creative Commons License + * See this page: http://code.google.com/p/moviejukebox/wiki/License + * + * For any reuse or distribution, you must make clear to others the + * license terms of this work. + */ +package com.moviejukebox.themoviedb.wrapper; + +import com.moviejukebox.themoviedb.model.MovieDb; +import java.util.List; +import org.apache.log4j.Logger; +import org.codehaus.jackson.annotate.JsonAnySetter; +import org.codehaus.jackson.annotate.JsonProperty; + +/** + * + * @author stuart.boston + */ +public class WrapperCompanyMovies { + // Loggers + private static final Logger LOGGER = Logger.getLogger(WrapperCompanyMovies.class); + /* + * Properties + */ + @JsonProperty("id") + private int companyId; + @JsonProperty("page") + private int page; + @JsonProperty("results") + private List results; + @JsonProperty("total_pages") + private int totalPages; + @JsonProperty("total_results") + private int totalResults; + + // + public int getCompanyId() { + return companyId; + } + + public int getPage() { + return page; + } + + public List getResults() { + return results; + } + + public int getTotalPages() { + return totalPages; + } + + public int getTotalResults() { + return totalResults; + } + // + + // + public void setCompanyId(int companyId) { + this.companyId = companyId; + } + + public void setPage(int page) { + this.page = page; + } + + public void setResults(List results) { + this.results = results; + } + + public void setTotalPages(int totalPages) { + this.totalPages = totalPages; + } + + public void setTotalResults(int totalResults) { + this.totalResults = totalResults; + } + // + + /** + * Handle unknown properties and print a message + * @param key + * @param value + */ + @JsonAnySetter + public void handleUnknown(String key, Object value) { + StringBuilder sb = new StringBuilder(); + sb.append("Unknown property: '").append(key); + sb.append("' value: '").append(value).append("'"); + LOGGER.warn(sb.toString()); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder("[ResultList=["); + sb.append("[companyId=").append(companyId); + sb.append("],[page=").append(page); + sb.append("],[pageResults=").append(results.size()); + sb.append("],[totalPages=").append(totalPages); + sb.append("],[totalResults=").append(totalResults); + sb.append("]]"); + return sb.toString(); + } +} diff --git a/themoviedbapi/src/test/java/com/moviejukebox/themoviedb/TheMovieDbTest.java b/themoviedbapi/src/test/java/com/moviejukebox/themoviedb/TheMovieDbTest.java index d18d42b35..79e479611 100644 --- a/themoviedbapi/src/test/java/com/moviejukebox/themoviedb/TheMovieDbTest.java +++ b/themoviedbapi/src/test/java/com/moviejukebox/themoviedb/TheMovieDbTest.java @@ -27,15 +27,16 @@ import org.junit.*; */ public class TheMovieDbTest { + // Logger private static final Logger LOGGER = Logger.getLogger(TheMovieDbTest.class); + // API Key private static final String API_KEY = "5a1a77e2eba8984804586122754f969f"; private static TheMovieDb tmdb; - /* - * Test data - */ - private static final int ID_BLADE_RUNNER = 78; - private static final int ID_STAR_WARS_COLLECTION = 10; - private static final int ID_BRUCE_WILLIS = 62; + // Test data + private static final int ID_MOVIE_BLADE_RUNNER = 78; + private static final int ID_MOVIE_STAR_WARS_COLLECTION = 10; + private static final int ID_PERSON_BRUCE_WILLIS = 62; + private static final int ID_COMPANY_LUCASFILM = 1; public TheMovieDbTest() throws MovieDbException { tmdb = new TheMovieDb(API_KEY); @@ -100,7 +101,7 @@ public class TheMovieDbTest { public void testGetMovieInfo() throws MovieDbException { LOGGER.info("getMovieInfo"); String language = "en"; - MovieDb result = tmdb.getMovieInfo(ID_BLADE_RUNNER, language); + MovieDb result = tmdb.getMovieInfo(ID_MOVIE_BLADE_RUNNER, language); assertEquals("Incorrect movie information", "Blade Runner", result.getOriginalTitle()); } @@ -111,11 +112,11 @@ public class TheMovieDbTest { public void testGetMovieAlternativeTitles() throws MovieDbException { LOGGER.info("getMovieAlternativeTitles"); String country = ""; - List results = tmdb.getMovieAlternativeTitles(ID_BLADE_RUNNER, country); + List results = tmdb.getMovieAlternativeTitles(ID_MOVIE_BLADE_RUNNER, country); assertTrue("No alternative titles found", results.size() > 0); country = "US"; - results = tmdb.getMovieAlternativeTitles(ID_BLADE_RUNNER, country); + results = tmdb.getMovieAlternativeTitles(ID_MOVIE_BLADE_RUNNER, country); assertTrue("No alternative titles found", results.size() > 0); } @@ -126,7 +127,7 @@ public class TheMovieDbTest { @Test public void testGetMovieCasts() throws MovieDbException { LOGGER.info("getMovieCasts"); - List people = tmdb.getMovieCasts(ID_BLADE_RUNNER); + List people = tmdb.getMovieCasts(ID_MOVIE_BLADE_RUNNER); assertTrue("No cast information", people.size() > 0); String name1 = "Harrison Ford"; @@ -154,7 +155,7 @@ public class TheMovieDbTest { public void testGetMovieImages() throws MovieDbException { LOGGER.info("getMovieImages"); String language = ""; - List result = tmdb.getMovieImages(ID_BLADE_RUNNER, language); + List result = tmdb.getMovieImages(ID_MOVIE_BLADE_RUNNER, language); assertFalse("No artwork found", result.isEmpty()); } @@ -164,7 +165,7 @@ public class TheMovieDbTest { @Test public void testGetMovieKeywords() throws MovieDbException { LOGGER.info("getMovieKeywords"); - List result = tmdb.getMovieKeywords(ID_BLADE_RUNNER); + List result = tmdb.getMovieKeywords(ID_MOVIE_BLADE_RUNNER); assertFalse("No keywords found", result.isEmpty()); } @@ -174,7 +175,7 @@ public class TheMovieDbTest { @Test public void testGetMovieReleaseInfo() throws MovieDbException { LOGGER.info("getMovieReleaseInfo"); - List result = tmdb.getMovieReleaseInfo(ID_BLADE_RUNNER, ""); + List result = tmdb.getMovieReleaseInfo(ID_MOVIE_BLADE_RUNNER, ""); assertFalse("Release information missing", result.isEmpty()); } @@ -184,7 +185,7 @@ public class TheMovieDbTest { @Test public void testGetMovieTrailers() throws MovieDbException { LOGGER.info("getMovieTrailers"); - List result = tmdb.getMovieTrailers(ID_BLADE_RUNNER, ""); + List result = tmdb.getMovieTrailers(ID_MOVIE_BLADE_RUNNER, ""); assertFalse("Movie trailers missing", result.isEmpty()); } @@ -194,7 +195,7 @@ public class TheMovieDbTest { @Test public void testGetMovieTranslations() throws MovieDbException { LOGGER.info("getMovieTranslations"); - List result = tmdb.getMovieTranslations(ID_BLADE_RUNNER); + List result = tmdb.getMovieTranslations(ID_MOVIE_BLADE_RUNNER); assertFalse("No translations found", result.isEmpty()); } @@ -205,14 +206,14 @@ public class TheMovieDbTest { public void testGetCollectionInfo() throws MovieDbException { LOGGER.info("getCollectionInfo"); String language = ""; - CollectionInfo result = tmdb.getCollectionInfo(ID_STAR_WARS_COLLECTION, language); + CollectionInfo result = tmdb.getCollectionInfo(ID_MOVIE_STAR_WARS_COLLECTION, language); assertFalse("No collection information", result.getParts().isEmpty()); } @Test public void testCreateImageUrl() throws MovieDbException { LOGGER.info("createImageUrl"); - MovieDb movie = tmdb.getMovieInfo(ID_BLADE_RUNNER, ""); + MovieDb movie = tmdb.getMovieInfo(ID_MOVIE_BLADE_RUNNER, ""); String result = tmdb.createImageUrl(movie.getPosterPath(), "original").toString(); assertTrue("Error compiling image URL", !result.isEmpty()); } @@ -269,8 +270,8 @@ public class TheMovieDbTest { @Test public void testGetPersonInfo() throws MovieDbException { LOGGER.info("getPersonInfo"); - Person result = tmdb.getPersonInfo(ID_BRUCE_WILLIS); - assertTrue("Wrong actor returned", result.getId() == ID_BRUCE_WILLIS); + Person result = tmdb.getPersonInfo(ID_PERSON_BRUCE_WILLIS); + assertTrue("Wrong actor returned", result.getId() == ID_PERSON_BRUCE_WILLIS); } /** @@ -280,7 +281,7 @@ public class TheMovieDbTest { public void testGetPersonCredits() throws MovieDbException { LOGGER.info("getPersonCredits"); - List people = tmdb.getPersonCredits(ID_BRUCE_WILLIS); + List people = tmdb.getPersonCredits(ID_PERSON_BRUCE_WILLIS); assertTrue("No cast information", people.size() > 0); } @@ -291,7 +292,7 @@ public class TheMovieDbTest { public void testGetPersonImages() throws MovieDbException { LOGGER.info("getPersonImages"); - List artwork = tmdb.getPersonImages(ID_BRUCE_WILLIS); + List artwork = tmdb.getPersonImages(ID_PERSON_BRUCE_WILLIS); assertTrue("No cast information", artwork.size() > 0); } @@ -336,7 +337,7 @@ public class TheMovieDbTest { @Test public void testGetNowPlayingMovies() throws MovieDbException { LOGGER.info("getNowPlayingMovies"); - List results = tmdb.getNowPlayingMovies(""); + List results = tmdb.getNowPlayingMovies("", true); assertTrue("No now playing movies found", !results.isEmpty()); } @@ -346,7 +347,7 @@ public class TheMovieDbTest { @Test public void testGetPopularMovieList() throws MovieDbException { LOGGER.info("getPopularMovieList"); - List results = tmdb.getPopularMovieList(""); + List results = tmdb.getPopularMovieList("", true); assertTrue("No popular movies found", !results.isEmpty()); } @@ -356,7 +357,27 @@ public class TheMovieDbTest { @Test public void testGetTopRatedMovies() throws MovieDbException { LOGGER.info("getTopRatedMovies"); - List results = tmdb.getTopRatedMovies(""); + List results = tmdb.getTopRatedMovies("", true); assertTrue("No top rated movies found", !results.isEmpty()); } + + /** + * Test of getCompanyInfo method, of class TheMovieDb. + */ + @Test + public void testGetCompanyInfo() throws Exception { + LOGGER.info("getCompanyInfo"); + Company company = tmdb.getCompanyInfo(ID_COMPANY_LUCASFILM); + assertTrue("No company information found", company.getCompanyId() > 0); + } + + /** + * Test of getCompanyMovies method, of class TheMovieDb. + */ + @Test + public void testGetCompanyMovies() throws Exception { + LOGGER.info("getCompanyMovies"); + List results = tmdb.getCompanyMovies(ID_COMPANY_LUCASFILM, "", true); + assertTrue("No company movies found", !results.isEmpty()); + } }