Package se.despotify.domain.media

Source Code of se.despotify.domain.media.Album

package se.despotify.domain.media;

import se.despotify.domain.Store;
import se.despotify.util.SpotifyURI;
import se.despotify.util.XMLElement;

import java.util.zip.Adler32;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;

public class Album extends Media implements Visitable {
  private String name;
  private Artist artist;
  private String cover;
  private Float popularity;
  private List<Track> tracks;
  private Restrictions restrictions;
  private Copyright copyright;

  public Album() {
    super();
  }

  public Album(String hexUUID) {
    super(hexUUID);
  }

  public Album(byte[] UUID) {
    super(UUID);
  }

  public Album(byte[] UUID, String hexUUID) {
    super(UUID, hexUUID);
  }

  public Album(byte[] UUID, String hexUUID, String name, Artist artist) {
    super(UUID, hexUUID);
    this.name = name;
    this.artist = artist;
  }


  @Override
  protected int getUUIDlength() {
    return 16;
  }

  @Override
  protected Pattern getHexUUIDpattern() {
    return hexUUIDpattern32;
  }

  @Override
  public String getSpotifyURL() {
    return "spotify:album:" + SpotifyURI.toURI(getUUID());
  }

  @Override
  public String getHttpURL() {
    return "http://open.spotify.com/album/" + SpotifyURI.toURI(getUUID());
  }

  @Override
  public void accept(Visitor visitor) {
    visitor.visit(this);
  }


  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }

  public Artist getArtist() {
    return artist;
  }

  public void setArtist(Artist artist) {
    this.artist = artist;
  }

  public String getCover() {
    return cover;
  }

  public void setCover(String cover) {
    this.cover = cover;
  }

  public Float getPopularity() {
    return popularity;
  }

  public void setPopularity(Float popularity) {
    this.popularity = popularity;
  }

  public List<Track> getTracks() {
    return tracks;
  }

  public void setTracks(List<Track> tracks) {
    this.tracks = tracks;
  }

  public Restrictions getRestrictions() {
    return restrictions;
  }

  public void setRestrictions(Restrictions restrictions) {
    this.restrictions = restrictions;
  }

  public Copyright getCopyright() {
    return copyright;
  }

  public void setCopyright(Copyright copyright) {
    this.copyright = copyright;
  }

  public static Album fromXMLElement(XMLElement albumElement, Store store) {


    Album album = store.getAlbum(albumElement.getChildText("id"));

    if (albumElement.hasChild("name")) {
      album.name = albumElement.getChildText("name");
    }

    if (albumElement.hasChild("artist-id")) {
      album.artist = store.getArtist(albumElement.getChildText("artist-id"));
    }

    if (albumElement.hasChild("artist") || albumElement.hasChild("artist-name")) {
      album.artist.setName(albumElement.hasChild("artist") ? albumElement.getChildText("artist") : albumElement.getChildText("artist-name"));
    }


    /* Set cover. */
    if (albumElement.hasChild("cover")) {
      String value = albumElement.getChildText("cover");
      if (!"".equals(value)) {
        album.cover = value;
      }
    }


    /* Set popularity. */
    if (albumElement.hasChild("popularity")) {
      album.popularity = Float.parseFloat(albumElement.getChildText("popularity"));
    }


    /* Set tracks. */
    if (albumElement.hasChild("discs")) {

      List<Track> tracks = new ArrayList<Track>();

      for (XMLElement discElement : albumElement.getChild("discs").getChildren("disc")) {

        int discNumber = Integer.valueOf(discElement.getChildText("disc-number"));
        for (XMLElement trackElement : discElement.getChildren("track")) {
          Track track = Track.fromXMLElement(trackElement, store);
          track.setDiscNumber(discNumber);
          tracks.add(track);
        }
      }

      XMLElement restrictionsNode = albumElement.getChild("restrictions");
      if (restrictionsNode != null) {
        album.restrictions = Restrictions.fromXMLElement(restrictionsNode);
      }

      if (albumElement.hasChild("copyright")) {
        Copyright copyright = new Copyright();
        for (XMLElement copyrightNode : albumElement.getChild("copyright").getChildren()) {
          if ("c".equals(copyrightNode.getElement().getNodeName())) {
            copyright.setC(copyrightNode.getText());
          } else if ("p".equals(copyrightNode.getElement().getNodeName())) {
            copyright.setP(copyrightNode.getText());
          } else {
            log.warn("Unknown copyright type " + copyrightNode.getElement().getNodeName());
          }
        }
        album.copyright = copyright;
      }

      album.setTracks(tracks);

    }

    /* TODO: album-type, copyright, discs, ... */


    return album;
  }


  public static Album fromURI(String uri) {
    Album album = new Album();

    album.setUUID(SpotifyURI.toHex(uri));

    return album;
  }


  public long calculateChecksum() {
    Adler32 adler = new Adler32();
    for (Track track : tracks) {
      adler.update(track.getUUID());
      adler.update(0x01);
    }
    return adler.getValue();
  }

  @Override
  public String toString() {
    return "Album{" +
        "hexUUID='" + getHexUUID() + '\'' +
        ", name='" + name + '\'' +
        ", artist=" + (artist == null ? null : artist.getHexUUID()) +
        ", cover='" + cover + '\'' +
        ", popularity=" + popularity +
        ", tracks=" + (tracks == null ? null : tracks.size()) +
        ", restrictions=" + restrictions +
        ", copyright=" + copyright +
        '}';
  }
}
TOP

Related Classes of se.despotify.domain.media.Album

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.