package org.discogs.model; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import org.discogs.ws.Discogs; import org.w3c.dom.Element; import org.w3c.dom.NodeList; public class Release extends DiscogsObject { private static final SimpleDateFormat RELEASED_FORMAT = new SimpleDateFormat("yyyy-MM-dd"); private static final SimpleDateFormat RELEASED_FORMAT_MONTH = new SimpleDateFormat("yyyy-MM"); private static final SimpleDateFormat RELEASED_FORMAT_YEAR = new SimpleDateFormat("yyyy"); public Release(Element releaseElem, Discogs client) { super(releaseElem, client); } public String getId() { return getStringByPath("@id"); } public String getStatus() { return getStringByPath("@status"); } public List<ReleaseArtist> getArtists() { List<ReleaseArtist> results = new ArrayList<ReleaseArtist>(); Element aE = (Element) getNodeByPath("artists"); if (aE != null) { NodeList cn = aE.getElementsByTagName("artist"); for (int i = 0; i < cn.getLength(); i++) results.add(new ReleaseArtist((Element) cn.item(i), client)); } return results; } public String getTitle() { return getStringByPath("title"); } public List<LabelRelease> getLabelReleases() { List<LabelRelease> results = new ArrayList<LabelRelease>(); NodeList cn = element.getElementsByTagName("label"); for (int i = 0; i < cn.getLength(); i++) results.add(new LabelRelease((Element) cn.item(i), client)); return results; } public List<ReleaseArtist> getExtraArtists() { List<ReleaseArtist> results = new ArrayList<ReleaseArtist>(); Element aE = (Element) getNodeByPath("extraartists"); if (aE != null) { NodeList cn = aE.getElementsByTagName("artist"); for (int i = 0; i < cn.getLength(); i++) results.add(new ReleaseArtist((Element) cn.item(i), client)); } return results; } public List<Format> getFormats() { List<Format> results = new ArrayList<Format>(); Element aE = (Element) getNodeByPath("formats"); if (aE != null) { NodeList cn = aE.getElementsByTagName("format"); for (int i = 0; i < cn.getLength(); i++) results.add(new Format((Element) cn.item(i))); } return results; } public List<String> getGenres() { List<String> genres = new ArrayList<String>(); Element gE = (Element) getNodeByPath("genres"); if (gE != null) { NodeList ges = gE.getElementsByTagName("genre"); for (int i = 0; i < ges.getLength(); i++) { Element curr = (Element) ges.item(i); genres.add(curr.getFirstChild().getNodeValue()); } } return genres; } public List<String> getStyles() { List<String> genres = new ArrayList<String>(); Element gE = (Element) getNodeByPath("styles"); if (gE != null) { NodeList ges = gE.getElementsByTagName("style"); for (int i = 0; i < ges.getLength(); i++) { Element curr = (Element) ges.item(i); genres.add(curr.getFirstChild().getNodeValue()); } } return genres; } public String getCountry() { return getStringByPath("country"); } public Date getReleaseDate() { String dateStr = getReleaseDateRaw(); if (dateStr == null) return null; try { return RELEASED_FORMAT.parse(dateStr); } catch (ParseException e) { try { return RELEASED_FORMAT_MONTH.parse(dateStr); } catch (ParseException ee) { try { return RELEASED_FORMAT_YEAR.parse(dateStr); } catch (ParseException eee) { System.err.println("Error parsing date from: " + dateStr + ". Add parse format"); eee.printStackTrace(); return null; } } } } public String getReleaseDateRaw() { return getStringByPath("released"); } public String getNotes() { return getStringByPath("notes"); } public String getMasterId() { return getStringByPath("master_id"); } public List<Track> getTracks() { List<Track> tracks = new ArrayList<Track>(); Element gE = (Element) getNodeByPath("tracklist"); if (gE != null) { NodeList ges = gE.getElementsByTagName("track"); for (int i = 0; i < ges.getLength(); i++) { Element curr = (Element) ges.item(i); tracks.add(new Track(curr)); } } return tracks; } }