From 9a5fdc330e7beb065779c8440a5ffc25787bae91 Mon Sep 17 00:00:00 2001 From: Omertron Date: Sun, 10 Oct 2010 14:54:35 +0000 Subject: [PATCH] Updated methods to return lists rather than single movies --- .../moviejukebox/themoviedb/TheMovieDb.java | 169 +++++++- .../themoviedb/tools/DOMParser.java | 361 +++++++++--------- 2 files changed, 322 insertions(+), 208 deletions(-) diff --git a/themoviedbapi/src/com/moviejukebox/themoviedb/TheMovieDb.java b/themoviedbapi/src/com/moviejukebox/themoviedb/TheMovieDb.java index ef4c11962..5dc4d172b 100644 --- a/themoviedbapi/src/com/moviejukebox/themoviedb/TheMovieDb.java +++ b/themoviedbapi/src/com/moviejukebox/themoviedb/TheMovieDb.java @@ -14,11 +14,17 @@ package com.moviejukebox.themoviedb; import java.net.URLEncoder; +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; import java.util.logging.ConsoleHandler; import java.util.logging.Level; import java.util.logging.Logger; import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; import com.moviejukebox.themoviedb.model.MovieDB; import com.moviejukebox.themoviedb.model.Person; @@ -96,23 +102,39 @@ public class TheMovieDb { * @param language The two digit language code. E.g. en=English * @return A movie bean with the data extracted */ - public MovieDB moviedbSearch(String movieTitle, String language) { + public List moviedbSearch(String movieTitle, String language) { MovieDB movie = null; + List movieList = new ArrayList(); + // If the title is null, then exit - if (movieTitle == null || movieTitle.equals("")) - return movie; + if (!isValidString(movieTitle)) { + return movieList; + } Document doc = null; try { String searchUrl = buildSearchUrl("Movie.search", URLEncoder.encode(movieTitle, "UTF-8"), validateLanguage(language)); doc = DOMHelper.getEventDocFromUrl(searchUrl); - movie = DOMParser.parseMovieInfo(doc); - + NodeList nlMovies = doc.getElementsByTagName("movie"); + if (nlMovies == null) { + return movieList; + } + + for (int loop = 0; loop < nlMovies.getLength(); loop++) { + Node nMovie = nlMovies.item(loop); + if (nMovie.getNodeType() == Node.ELEMENT_NODE) { + Element eMovie = (Element) nMovie; + movie = DOMParser.parseMovieInfo(eMovie); + if (movie != null) { + movieList.add(movie); + } + } + } } catch (Exception error) { logger.severe("TheMovieDb Error: " + error.getMessage()); } - return movie; + return movieList; } /** @@ -123,11 +145,12 @@ public class TheMovieDb { * @return A movie bean with the data extracted */ public MovieDB moviedbImdbLookup(String imdbID, String language) { - MovieDB movie = null; + MovieDB movie = new MovieDB(); // If the imdbID is null, then exit - if (imdbID == null || imdbID.equals("")) + if (!isValidString(imdbID)) { return movie; + } Document doc = null; @@ -135,8 +158,18 @@ public class TheMovieDb { String searchUrl = buildSearchUrl("Movie.imdbLookup", imdbID, validateLanguage(language)); doc = DOMHelper.getEventDocFromUrl(searchUrl); - movie = DOMParser.parseMovieInfo(doc); - + NodeList nlMovies = doc.getElementsByTagName("movie"); + if (nlMovies == null) { + return movie; + } + + for (int loop = 0; loop < nlMovies.getLength(); loop++) { + Node nMovie = nlMovies.item(loop); + if (nMovie.getNodeType() == Node.ELEMENT_NODE) { + Element eMovie = (Element) nMovie; + movie = DOMParser.parseMovieInfo(eMovie); + } + } } catch (Exception error) { logger.severe("TheMovieDb Error: " + error.getMessage()); } @@ -169,7 +202,7 @@ public class TheMovieDb { */ public MovieDB moviedbGetInfo(String tmdbID, MovieDB movie, String language) { // If the tmdbID is null, then exit - if (tmdbID == null || tmdbID.equals("") || tmdbID.equalsIgnoreCase("UNKNOWN")) + if (!isValidString(tmdbID)) return movie; Document doc = null; @@ -178,8 +211,18 @@ public class TheMovieDb { String searchUrl = buildSearchUrl("Movie.getInfo", tmdbID, validateLanguage(language)); doc = DOMHelper.getEventDocFromUrl(searchUrl); - movie = DOMParser.parseMovieInfo(doc); - + NodeList nlMovies = doc.getElementsByTagName("movie"); + if (nlMovies == null) { + return movie; + } + + for (int loop = 0; loop < nlMovies.getLength(); loop++) { + Node nMovie = nlMovies.item(loop); + if (nMovie.getNodeType() == Node.ELEMENT_NODE) { + Element eMovie = (Element) nMovie; + movie = DOMParser.parseMovieInfo(eMovie); + } + } } catch (Exception error) { logger.severe("TheMovieDb Error: " + error.getMessage()); } @@ -201,7 +244,7 @@ public class TheMovieDb { */ public MovieDB moviedbGetImages(String searchTerm, MovieDB movie, String language) { // If the searchTerm is null, then exit - if (searchTerm == null || searchTerm.equals("") || searchTerm.equalsIgnoreCase("UNKNOWN")) + if (isValidString(searchTerm)) return movie; Document doc = null; @@ -210,7 +253,18 @@ public class TheMovieDb { String searchUrl = buildSearchUrl("Movie.getImages", searchTerm, validateLanguage(language)); doc = DOMHelper.getEventDocFromUrl(searchUrl); - movie = DOMParser.parseMovieInfo(doc); + NodeList nlMovies = doc.getElementsByTagName("movie"); + if (nlMovies == null) { + return movie; + } + + for (int loop = 0; loop < nlMovies.getLength(); loop++) { + Node nMovie = nlMovies.item(loop); + if (nMovie.getNodeType() == Node.ELEMENT_NODE) { + Element eMovie = (Element) nMovie; + movie = DOMParser.parseMovieInfo(eMovie); + } + } } catch (Exception error) { logger.severe("TheMovieDb Error: " + error.getMessage()); @@ -229,7 +283,7 @@ public class TheMovieDb { */ public Person personSearch(String personName, String language) { Person person = new Person(); - if (personName == null || personName.equals("")) { + if (!isValidString(personName)) { return person; } @@ -256,7 +310,7 @@ public class TheMovieDb { */ public Person personGetInfo(String personID, String language) { Person person = new Person(); - if (personID == null || personID.equals("")) { + if (!isValidString(personID)) { return person; } @@ -284,7 +338,7 @@ public class TheMovieDb { */ public Person personGetVersion(String personID, String language) { Person person = new Person(); - if (personID == null || personID.equals("")) { + if (!isValidString(personID)) { return person; } @@ -308,7 +362,7 @@ public class TheMovieDb { * @return */ private String validateLanguage(String language) { - if (language == null) { + if (!isValidString(language)) { return defaultLanguage; } else { /* @@ -327,4 +381,81 @@ public class TheMovieDb { } } } + + /** + * Check the string passed to see if it contains a value. + * @param testString The string to test + * @return False if the string is empty, null or UNKNOWN, True otherwise + */ + public static boolean isValidString(String testString) { + if (testString == null) { + return false; + } + + if (testString.equalsIgnoreCase(MovieDB.UNKNOWN)) { + return false; + } + + if (testString.trim().equals("")) { + return false; + } + + return true; + } + + /** + * Search a list of movies and return the one that matches the title & year + * @param movieList The list of movies to search + * @param title The title to search for + * @param year The year of the title to search for + * @return The matching movie + */ + public static MovieDB findMovie(Collection movieList, String title, String year) { + if (movieList == null || movieList.isEmpty()) { + return null; + } + + System.out.println("Looking for: " + title + " - Year: " + year); + + for (MovieDB moviedb : movieList) { + if (compareMovies(moviedb, title, year)) { + System.out.println("Matched: " + moviedb.getTitle()); + return moviedb; + } else { + System.out.println("Not Matched: " + moviedb.getTitle() + " - " + moviedb.getReleaseDate()); + } + } + + return null; + } + + /** + * Compare the MovieDB object with a title & year + * @param moviedb The moviedb object to compare too + * @param title The title of the movie to compare + * @param year The year of the movie to compare + * @return True if there is a match, False otherwise. + */ + public static boolean compareMovies(MovieDB moviedb, String title, String year) { + if (!isValidString(title)) { + return false; + } + + if (isValidString(year)) { + if (isValidString(moviedb.getReleaseDate())) { + // Compare with year + String movieYear = moviedb.getReleaseDate().substring(0, 4); + logger.fine("Comparing against: " + moviedb.getTitle() + " - " + moviedb.getReleaseDate() + " - " + movieYear); + if (moviedb.getTitle().equalsIgnoreCase(title) && movieYear.equals(year)) { + return true; + } + } + } else { + // Compare without year + if (moviedb.getTitle().equalsIgnoreCase(title)) { + return true; + } + } + return false; + } } diff --git a/themoviedbapi/src/com/moviejukebox/themoviedb/tools/DOMParser.java b/themoviedbapi/src/com/moviejukebox/themoviedb/tools/DOMParser.java index 33ac6b61d..6e9431a80 100644 --- a/themoviedbapi/src/com/moviejukebox/themoviedb/tools/DOMParser.java +++ b/themoviedbapi/src/com/moviejukebox/themoviedb/tools/DOMParser.java @@ -32,229 +32,212 @@ import com.moviejukebox.themoviedb.model.Studio; public class DOMParser { static Logger logger = TheMovieDb.getLogger(); - public static MovieDB parseMovieInfo(Document doc) { + public static MovieDB parseMovieInfo(Element movieElement) { // Inspired by http://www.java-tips.org/java-se-tips/javax.xml.parsers/how-to-read-xml-file-in-java.html - MovieDB movie = null; - NodeList movieNodeList, subNodeList; - Node movieNode, subNode; - Element movieElement, subElement; + MovieDB movie = new MovieDB(); + NodeList subNodeList; + Node subNode; + Element subElement; try { - movie = new MovieDB(); - movieNodeList = doc.getElementsByTagName("movie"); + movie.setPopularity(DOMHelper.getValueFromElement(movieElement, "popularity")); + movie.setTranslated(DOMHelper.getValueFromElement(movieElement, "translated")); + movie.setAdult(DOMHelper.getValueFromElement(movieElement, "adult")); + movie.setLanguage(DOMHelper.getValueFromElement(movieElement, "language")); + movie.setOriginalName(DOMHelper.getValueFromElement(movieElement, "original_name")); + movie.setTitle(DOMHelper.getValueFromElement(movieElement, "name")); + movie.setAlternativeName(DOMHelper.getValueFromElement(movieElement, "alternative_name")); + movie.setType(DOMHelper.getValueFromElement(movieElement, "type")); + movie.setId(DOMHelper.getValueFromElement(movieElement, "id")); + movie.setImdb(DOMHelper.getValueFromElement(movieElement, "imdb_id")); + movie.setUrl(DOMHelper.getValueFromElement(movieElement, "url")); + movie.setOverview(DOMHelper.getValueFromElement(movieElement, "overview")); + movie.setRating(DOMHelper.getValueFromElement(movieElement, "rating")); + movie.setTagline(DOMHelper.getValueFromElement(movieElement, "tagline")); + movie.setCertification(DOMHelper.getValueFromElement(movieElement, "certification")); + movie.setReleaseDate(DOMHelper.getValueFromElement(movieElement, "released")); + movie.setRuntime(DOMHelper.getValueFromElement(movieElement, "runtime")); + movie.setBudget(DOMHelper.getValueFromElement(movieElement, "budget")); + movie.setRevenue(DOMHelper.getValueFromElement(movieElement, "revenue")); + movie.setHomepage(DOMHelper.getValueFromElement(movieElement, "homepage")); + movie.setTrailer(DOMHelper.getValueFromElement(movieElement, "trailer")); - // Only get the first movie from the list - movieNode = movieNodeList.item(0); - - if (movieNode == null) { - logger.finest("Movie not found"); - return movie; - } - - if (movieNode.getNodeType() == Node.ELEMENT_NODE) { - movieElement = (Element) movieNode; - - // DOMHelper.getValueFromElement(movieElement, "") - - movie.setPopularity(DOMHelper.getValueFromElement(movieElement, "popularity")); - movie.setTranslated(DOMHelper.getValueFromElement(movieElement, "translated")); - movie.setAdult(DOMHelper.getValueFromElement(movieElement, "adult")); - movie.setLanguage(DOMHelper.getValueFromElement(movieElement, "language")); - movie.setOriginalName(DOMHelper.getValueFromElement(movieElement, "original_name")); - movie.setTitle(DOMHelper.getValueFromElement(movieElement, "name")); - movie.setAlternativeName(DOMHelper.getValueFromElement(movieElement, "alternative_name")); - movie.setType(DOMHelper.getValueFromElement(movieElement, "type")); - movie.setId(DOMHelper.getValueFromElement(movieElement, "id")); - movie.setImdb(DOMHelper.getValueFromElement(movieElement, "imdb_id")); - movie.setUrl(DOMHelper.getValueFromElement(movieElement, "url")); - movie.setOverview(DOMHelper.getValueFromElement(movieElement, "overview")); - movie.setRating(DOMHelper.getValueFromElement(movieElement, "rating")); - movie.setTagline(DOMHelper.getValueFromElement(movieElement, "tagline")); - movie.setCertification(DOMHelper.getValueFromElement(movieElement, "certification")); - movie.setReleaseDate(DOMHelper.getValueFromElement(movieElement, "released")); - movie.setRuntime(DOMHelper.getValueFromElement(movieElement, "runtime")); - movie.setBudget(DOMHelper.getValueFromElement(movieElement, "budget")); - movie.setRevenue(DOMHelper.getValueFromElement(movieElement, "revenue")); - movie.setHomepage(DOMHelper.getValueFromElement(movieElement, "homepage")); - movie.setTrailer(DOMHelper.getValueFromElement(movieElement, "trailer")); - - // Process the "categories" - subNodeList = doc.getElementsByTagName("categories"); + // Process the "categories" + subNodeList = movieElement.getElementsByTagName("categories"); - for (int nodeLoop = 0; nodeLoop < subNodeList.getLength(); nodeLoop++) { - subNode = subNodeList.item(nodeLoop); - if (subNode.getNodeType() == Node.ELEMENT_NODE) { - subElement = (Element) subNode; + for (int nodeLoop = 0; nodeLoop < subNodeList.getLength(); nodeLoop++) { + subNode = subNodeList.item(nodeLoop); + if (subNode.getNodeType() == Node.ELEMENT_NODE) { + subElement = (Element) subNode; - NodeList castList = subNode.getChildNodes(); - for (int i = 0; i < castList.getLength(); i++) { - Node personNode = castList.item(i); - if (personNode.getNodeType() == Node.ELEMENT_NODE) { - subElement = (Element) personNode; - Category category = new Category(); + NodeList castList = subNode.getChildNodes(); + for (int i = 0; i < castList.getLength(); i++) { + Node personNode = castList.item(i); + if (personNode.getNodeType() == Node.ELEMENT_NODE) { + subElement = (Element) personNode; + Category category = new Category(); - category.setType(subElement.getAttribute("type")); - category.setUrl(subElement.getAttribute("url")); - category.setName(subElement.getAttribute("name")); - category.setId(subElement.getAttribute("id")); - - movie.addCategory(category); - } + category.setType(subElement.getAttribute("type")); + category.setUrl(subElement.getAttribute("url")); + category.setName(subElement.getAttribute("name")); + category.setId(subElement.getAttribute("id")); + + movie.addCategory(category); } } } - - // Process the "studios" - subNodeList = doc.getElementsByTagName("studios"); + } + + // Process the "studios" + subNodeList = movieElement.getElementsByTagName("studios"); - for (int nodeLoop = 0; nodeLoop < subNodeList.getLength(); nodeLoop++) { - subNode = subNodeList.item(nodeLoop); - if (subNode.getNodeType() == Node.ELEMENT_NODE) { - subElement = (Element) subNode; + for (int nodeLoop = 0; nodeLoop < subNodeList.getLength(); nodeLoop++) { + subNode = subNodeList.item(nodeLoop); + if (subNode.getNodeType() == Node.ELEMENT_NODE) { + subElement = (Element) subNode; - NodeList studioList = subNode.getChildNodes(); - for (int i = 0; i < studioList.getLength(); i++) { - Node studioNode = studioList.item(i); - if (studioNode.getNodeType() == Node.ELEMENT_NODE) { - subElement = (Element) studioNode; - Studio studio = new Studio(); + NodeList studioList = subNode.getChildNodes(); + for (int i = 0; i < studioList.getLength(); i++) { + Node studioNode = studioList.item(i); + if (studioNode.getNodeType() == Node.ELEMENT_NODE) { + subElement = (Element) studioNode; + Studio studio = new Studio(); - studio.setUrl(subElement.getAttribute("url")); - studio.setName(subElement.getAttribute("name")); - studio.setId(subElement.getAttribute("id")); - - movie.addStudio(studio); - } + studio.setUrl(subElement.getAttribute("url")); + studio.setName(subElement.getAttribute("name")); + studio.setId(subElement.getAttribute("id")); + + movie.addStudio(studio); } } } - - // Process the "countries" - subNodeList = doc.getElementsByTagName("countries"); + } + + // Process the "countries" + subNodeList = movieElement.getElementsByTagName("countries"); - for (int nodeLoop = 0; nodeLoop < subNodeList.getLength(); nodeLoop++) { - subNode = subNodeList.item(nodeLoop); - if (subNode.getNodeType() == Node.ELEMENT_NODE) { - subElement = (Element) subNode; + for (int nodeLoop = 0; nodeLoop < subNodeList.getLength(); nodeLoop++) { + subNode = subNodeList.item(nodeLoop); + if (subNode.getNodeType() == Node.ELEMENT_NODE) { + subElement = (Element) subNode; - NodeList countryList = subNode.getChildNodes(); - for (int i = 0; i < countryList.getLength(); i++) { - Node countryNode = countryList.item(i); - if (countryNode.getNodeType() == Node.ELEMENT_NODE) { - subElement = (Element) countryNode; - Country country = new Country(); + NodeList countryList = subNode.getChildNodes(); + for (int i = 0; i < countryList.getLength(); i++) { + Node countryNode = countryList.item(i); + if (countryNode.getNodeType() == Node.ELEMENT_NODE) { + subElement = (Element) countryNode; + Country country = new Country(); - country.setName(subElement.getAttribute("name")); - country.setCode(subElement.getAttribute("code")); - country.setUrl(subElement.getAttribute("url")); + country.setName(subElement.getAttribute("name")); + country.setCode(subElement.getAttribute("code")); + country.setUrl(subElement.getAttribute("url")); - movie.addProductionCountry(country); - } + movie.addProductionCountry(country); } } } - - // Process the "cast" - subNodeList = doc.getElementsByTagName("cast"); + } + + // Process the "cast" + subNodeList = movieElement.getElementsByTagName("cast"); - for (int nodeLoop = 0; nodeLoop < subNodeList.getLength(); nodeLoop++) { - subNode = subNodeList.item(nodeLoop); - if (subNode.getNodeType() == Node.ELEMENT_NODE) { - subElement = (Element) subNode; + for (int nodeLoop = 0; nodeLoop < subNodeList.getLength(); nodeLoop++) { + subNode = subNodeList.item(nodeLoop); + if (subNode.getNodeType() == Node.ELEMENT_NODE) { + subElement = (Element) subNode; - NodeList castList = subNode.getChildNodes(); - for (int i = 0; i < castList.getLength(); i++) { - Node personNode = castList.item(i); - if (personNode.getNodeType() == Node.ELEMENT_NODE) { - subElement = (Element) personNode; - Person person = new Person(); + NodeList castList = subNode.getChildNodes(); + for (int i = 0; i < castList.getLength(); i++) { + Node personNode = castList.item(i); + if (personNode.getNodeType() == Node.ELEMENT_NODE) { + subElement = (Element) personNode; + Person person = new Person(); - person.setName(subElement.getAttribute("name")); - person.setCharacter(subElement.getAttribute("character")); - person.setJob(subElement.getAttribute("job")); - person.setId(subElement.getAttribute("id")); - person.addArtwork(Artwork.ARTWORK_TYPE_PERSON, - Artwork.ARTWORK_SIZE_THUMB, - subElement.getAttribute("thumb"), "-1"); - person.setDepartment(subElement.getAttribute("department")); - person.setUrl(subElement.getAttribute("url")); - person.setOrder(subElement.getAttribute("order")); - person.setCastId(subElement.getAttribute("cast_id")); - - movie.addPerson(person); - } + person.setName(subElement.getAttribute("name")); + person.setCharacter(subElement.getAttribute("character")); + person.setJob(subElement.getAttribute("job")); + person.setId(subElement.getAttribute("id")); + person.addArtwork(Artwork.ARTWORK_TYPE_PERSON, + Artwork.ARTWORK_SIZE_THUMB, + subElement.getAttribute("thumb"), "-1"); + person.setDepartment(subElement.getAttribute("department")); + person.setUrl(subElement.getAttribute("url")); + person.setOrder(subElement.getAttribute("order")); + person.setCastId(subElement.getAttribute("cast_id")); + + movie.addPerson(person); } } } - - /* - * This processes the image elements. There are two formats to deal with: - * Movie.imdbLookup, Movie.getInfo & Movie.search: - * - * - * - * - * - * Movie.getImages: - * - * - * - * - * - * - * - * - * - * - * - * - * - */ - subNodeList = doc.getElementsByTagName("images"); + } + + /* + * This processes the image elements. There are two formats to deal with: + * Movie.imdbLookup, Movie.getInfo & Movie.search: + * + * + * + * + * + * Movie.getImages: + * + * + * + * + * + * + * + * + * + * + * + * + * + */ + subNodeList = movieElement.getElementsByTagName("images"); - for (int nodeLoop = 0; nodeLoop < subNodeList.getLength(); nodeLoop++) { - subNode = subNodeList.item(nodeLoop); + for (int nodeLoop = 0; nodeLoop < subNodeList.getLength(); nodeLoop++) { + subNode = subNodeList.item(nodeLoop); + + if (subNode.getNodeType() == Node.ELEMENT_NODE) { - if (subNode.getNodeType() == Node.ELEMENT_NODE) { - - NodeList artworkNodeList = subNode.getChildNodes(); - for (int artworkLoop = 0; artworkLoop < artworkNodeList.getLength(); artworkLoop++) { - Node artworkNode = artworkNodeList.item(artworkLoop); - if (artworkNode.getNodeType() == Node.ELEMENT_NODE) { - subElement = (Element) artworkNode; + NodeList artworkNodeList = subNode.getChildNodes(); + for (int artworkLoop = 0; artworkLoop < artworkNodeList.getLength(); artworkLoop++) { + Node artworkNode = artworkNodeList.item(artworkLoop); + if (artworkNode.getNodeType() == Node.ELEMENT_NODE) { + subElement = (Element) artworkNode; - if (subElement.getNodeName().equalsIgnoreCase("image")) { - // This is the format used in Movie.imdbLookup, Movie.getInfo & Movie.search - Artwork artwork = new Artwork(); - artwork.setType(subElement.getAttribute("type")); - artwork.setSize(subElement.getAttribute("size")); - artwork.setUrl(subElement.getAttribute("url")); - artwork.setId(subElement.getAttribute("id")); - movie.addArtwork(artwork); - } else if (subElement.getNodeName().equalsIgnoreCase("backdrop") || - subElement.getNodeName().equalsIgnoreCase("poster")) { - // This is the format used in Movie.getImages - String artworkId = subElement.getAttribute("id"); - String artworkType = subElement.getNodeName(); - - // We need to decode and loop round the child nodes to get the data - NodeList imageNodeList = subElement.getChildNodes(); - for (int imageLoop = 0; imageLoop < imageNodeList.getLength(); imageLoop++) { - Node imageNode = imageNodeList.item(imageLoop); - if (imageNode.getNodeType() == Node.ELEMENT_NODE) { - Element imageElement = (Element) imageNode; - Artwork artwork = new Artwork(); - artwork.setId(artworkId); - artwork.setType(artworkType); - artwork.setUrl(imageElement.getAttribute("url")); - artwork.setSize(imageElement.getAttribute("size")); - movie.addArtwork(artwork); - } + if (subElement.getNodeName().equalsIgnoreCase("image")) { + // This is the format used in Movie.imdbLookup, Movie.getInfo & Movie.search + Artwork artwork = new Artwork(); + artwork.setType(subElement.getAttribute("type")); + artwork.setSize(subElement.getAttribute("size")); + artwork.setUrl(subElement.getAttribute("url")); + artwork.setId(subElement.getAttribute("id")); + movie.addArtwork(artwork); + } else if (subElement.getNodeName().equalsIgnoreCase("backdrop") || + subElement.getNodeName().equalsIgnoreCase("poster")) { + // This is the format used in Movie.getImages + String artworkId = subElement.getAttribute("id"); + String artworkType = subElement.getNodeName(); + + // We need to decode and loop round the child nodes to get the data + NodeList imageNodeList = subElement.getChildNodes(); + for (int imageLoop = 0; imageLoop < imageNodeList.getLength(); imageLoop++) { + Node imageNode = imageNodeList.item(imageLoop); + if (imageNode.getNodeType() == Node.ELEMENT_NODE) { + Element imageElement = (Element) imageNode; + Artwork artwork = new Artwork(); + artwork.setId(artworkId); + artwork.setType(artworkType); + artwork.setUrl(imageElement.getAttribute("url")); + artwork.setSize(imageElement.getAttribute("size")); + movie.addArtwork(artwork); } - } else { - // This is a classic, it should never happen error - logger.severe("UNKNOWN Image type: " + subElement.getNodeName()); } + } else { + // This is a classic, it should never happen error + logger.severe("UNKNOWN Image type: " + subElement.getNodeName()); } } }