/*
* Copyright (C) 2005-2012 Team XBMC
* http://xbmc.org
*
* This Program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2, or (at your option)
* any later version.
*
* This Program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with XBMC Remote; see the file license. If not, write to
* the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
* http://www.gnu.org/copyleft/gpl.html
*
*/
package org.xbmc.android.jsonrpc.api.model;
import android.os.Parcel;
import android.os.Parcelable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.codehaus.jackson.JsonNode;
import org.codehaus.jackson.node.ArrayNode;
import org.codehaus.jackson.node.ObjectNode;
import org.xbmc.android.jsonrpc.api.AbstractModel;
public final class PlaylistModel {
/**
* API Name: <tt>Playlist.Item</tt>
* <p/>
* Note: This class is used as parameter only.<br/>
* <i>This class was generated automatically from XBMC's JSON-RPC introspect.</i>
*/
public static class Item extends AbstractModel {
public final static String API_TYPE = "Playlist.Item";
// class members
public final Albumid albumid;
public final Artistid artistid;
public final Directory directory;
public final Episodeid episodeid;
public final File file;
public final Genreid genreid;
public final Movieid movieid;
public final Musicvideoid musicvideoid;
public final Songid songid;
/**
* @param albumid
*/
public Item(Albumid albumid) {
this.albumid = albumid;
this.artistid = null;
this.directory = null;
this.episodeid = null;
this.file = null;
this.genreid = null;
this.movieid = null;
this.musicvideoid = null;
this.songid = null;
}
/**
* @param artistid
*/
public Item(Artistid artistid) {
this.artistid = artistid;
this.albumid = null;
this.directory = null;
this.episodeid = null;
this.file = null;
this.genreid = null;
this.movieid = null;
this.musicvideoid = null;
this.songid = null;
}
/**
* @param directory
*/
public Item(Directory directory) {
this.directory = directory;
this.albumid = null;
this.artistid = null;
this.episodeid = null;
this.file = null;
this.genreid = null;
this.movieid = null;
this.musicvideoid = null;
this.songid = null;
}
/**
* @param episodeid
*/
public Item(Episodeid episodeid) {
this.episodeid = episodeid;
this.albumid = null;
this.artistid = null;
this.directory = null;
this.file = null;
this.genreid = null;
this.movieid = null;
this.musicvideoid = null;
this.songid = null;
}
/**
* @param file
*/
public Item(File file) {
this.file = file;
this.albumid = null;
this.artistid = null;
this.directory = null;
this.episodeid = null;
this.genreid = null;
this.movieid = null;
this.musicvideoid = null;
this.songid = null;
}
/**
* @param genreid
*/
public Item(Genreid genreid) {
this.genreid = genreid;
this.albumid = null;
this.artistid = null;
this.directory = null;
this.episodeid = null;
this.file = null;
this.movieid = null;
this.musicvideoid = null;
this.songid = null;
}
/**
* @param movieid
*/
public Item(Movieid movieid) {
this.movieid = movieid;
this.albumid = null;
this.artistid = null;
this.directory = null;
this.episodeid = null;
this.file = null;
this.genreid = null;
this.musicvideoid = null;
this.songid = null;
}
/**
* @param musicvideoid
*/
public Item(Musicvideoid musicvideoid) {
this.musicvideoid = musicvideoid;
this.albumid = null;
this.artistid = null;
this.directory = null;
this.episodeid = null;
this.file = null;
this.genreid = null;
this.movieid = null;
this.songid = null;
}
/**
* @param songid
*/
public Item(Songid songid) {
this.songid = songid;
this.albumid = null;
this.artistid = null;
this.directory = null;
this.episodeid = null;
this.file = null;
this.genreid = null;
this.movieid = null;
this.musicvideoid = null;
}
@Override
public JsonNode toJsonNode() {
if (albumid != null) {
return albumid.toJsonNode();
}
if (artistid != null) {
return artistid.toJsonNode();
}
if (directory != null) {
return directory.toJsonNode();
}
if (episodeid != null) {
return episodeid.toJsonNode();
}
if (file != null) {
return file.toJsonNode();
}
if (genreid != null) {
return genreid.toJsonNode();
}
if (movieid != null) {
return movieid.toJsonNode();
}
if (musicvideoid != null) {
return musicvideoid.toJsonNode();
}
if (songid != null) {
return songid.toJsonNode();
}
return null; // this is completely excluded. theoretically.
}
/**
* Flatten this object into a Parcel.
* @param parcel the Parcel in which the object should be written.
* @param flags additional flags about how the object should be written.
*/
@Override
public void writeToParcel(Parcel parcel, int flags) {
parcel.writeValue(albumid);
parcel.writeValue(artistid);
parcel.writeValue(directory);
parcel.writeValue(episodeid);
parcel.writeValue(file);
parcel.writeValue(genreid);
parcel.writeValue(movieid);
parcel.writeValue(musicvideoid);
parcel.writeValue(songid);
}
/**
* Construct via parcel.
*/
protected Item(Parcel parcel) {
albumid = parcel.<Albumid>readParcelable(Albumid.class.getClassLoader());
artistid = parcel.<Artistid>readParcelable(Artistid.class.getClassLoader());
directory = parcel.<Directory>readParcelable(Directory.class.getClassLoader());
episodeid = parcel.<Episodeid>readParcelable(Episodeid.class.getClassLoader());
file = parcel.<File>readParcelable(File.class.getClassLoader());
genreid = parcel.<Genreid>readParcelable(Genreid.class.getClassLoader());
movieid = parcel.<Movieid>readParcelable(Movieid.class.getClassLoader());
musicvideoid = parcel.<Musicvideoid>readParcelable(Musicvideoid.class.getClassLoader());
songid = parcel.<Songid>readParcelable(Songid.class.getClassLoader());
}
/**
* Generates instances of this Parcelable class from a Parcel.
*/
public static final Parcelable.Creator<Item> CREATOR = new Parcelable.Creator<Item>() {
@Override
public Item createFromParcel(Parcel parcel) {
return new Item(parcel);
}
@Override
public Item[] newArray(int n) {
return new Item[n];
}
};
@Override
public int describeContents() {
return 0;
}
/**
* Note: This class is used as parameter only.<br/>
* <i>This class was generated automatically from XBMC's JSON-RPC introspect.</i>
*/
public static class File extends AbstractModel {
// field names
public static final String FILE = "file";
// class members
public final String file;
/**
* @param file
*/
public File(String file) {
this.file = file;
}
@Override
public JsonNode toJsonNode() {
final ObjectNode node = OM.createObjectNode();
node.put(FILE, file);
return node;
}
/**
* Flatten this object into a Parcel.
* @param parcel the Parcel in which the object should be written.
* @param flags additional flags about how the object should be written.
*/
@Override
public void writeToParcel(Parcel parcel, int flags) {
parcel.writeValue(file);
}
/**
* Construct via parcel.
*/
protected File(Parcel parcel) {
file = parcel.readString();
}
/**
* Generates instances of this Parcelable class from a Parcel.
*/
public static final Parcelable.Creator<File> CREATOR = new Parcelable.Creator<File>() {
@Override
public File createFromParcel(Parcel parcel) {
return new File(parcel);
}
@Override
public File[] newArray(int n) {
return new File[n];
}
};
@Override
public int describeContents() {
return 0;
}
}
/**
* Note: This class is used as parameter only.<br/>
* <i>This class was generated automatically from XBMC's JSON-RPC introspect.</i>
*/
public static class Directory extends AbstractModel {
// field names
public static final String DIRECTORY = "directory";
// class members
public final String directory;
/**
* @param directory
*/
public Directory(String directory) {
this.directory = directory;
}
@Override
public JsonNode toJsonNode() {
final ObjectNode node = OM.createObjectNode();
node.put(DIRECTORY, directory);
return node;
}
/**
* Flatten this object into a Parcel.
* @param parcel the Parcel in which the object should be written.
* @param flags additional flags about how the object should be written.
*/
@Override
public void writeToParcel(Parcel parcel, int flags) {
parcel.writeValue(directory);
}
/**
* Construct via parcel.
*/
protected Directory(Parcel parcel) {
directory = parcel.readString();
}
/**
* Generates instances of this Parcelable class from a Parcel.
*/
public static final Parcelable.Creator<Directory> CREATOR = new Parcelable.Creator<Directory>() {
@Override
public Directory createFromParcel(Parcel parcel) {
return new Directory(parcel);
}
@Override
public Directory[] newArray(int n) {
return new Directory[n];
}
};
@Override
public int describeContents() {
return 0;
}
}
/**
* Note: This class is used as parameter only.<br/>
* <i>This class was generated automatically from XBMC's JSON-RPC introspect.</i>
*/
public static class Movieid extends AbstractModel {
// field names
public static final String MOVIEID = "movieid";
// class members
public final Integer movieid;
/**
* @param movieid
*/
public Movieid(Integer movieid) {
this.movieid = movieid;
}
@Override
public JsonNode toJsonNode() {
final ObjectNode node = OM.createObjectNode();
node.put(MOVIEID, movieid);
return node;
}
/**
* Flatten this object into a Parcel.
* @param parcel the Parcel in which the object should be written.
* @param flags additional flags about how the object should be written.
*/
@Override
public void writeToParcel(Parcel parcel, int flags) {
parcel.writeValue(movieid);
}
/**
* Construct via parcel.
*/
protected Movieid(Parcel parcel) {
movieid = parcel.readInt();
}
/**
* Generates instances of this Parcelable class from a Parcel.
*/
public static final Parcelable.Creator<Movieid> CREATOR = new Parcelable.Creator<Movieid>() {
@Override
public Movieid createFromParcel(Parcel parcel) {
return new Movieid(parcel);
}
@Override
public Movieid[] newArray(int n) {
return new Movieid[n];
}
};
@Override
public int describeContents() {
return 0;
}
}
/**
* Note: This class is used as parameter only.<br/>
* <i>This class was generated automatically from XBMC's JSON-RPC introspect.</i>
*/
public static class Episodeid extends AbstractModel {
// field names
public static final String EPISODEID = "episodeid";
// class members
public final Integer episodeid;
/**
* @param episodeid
*/
public Episodeid(Integer episodeid) {
this.episodeid = episodeid;
}
@Override
public JsonNode toJsonNode() {
final ObjectNode node = OM.createObjectNode();
node.put(EPISODEID, episodeid);
return node;
}
/**
* Flatten this object into a Parcel.
* @param parcel the Parcel in which the object should be written.
* @param flags additional flags about how the object should be written.
*/
@Override
public void writeToParcel(Parcel parcel, int flags) {
parcel.writeValue(episodeid);
}
/**
* Construct via parcel.
*/
protected Episodeid(Parcel parcel) {
episodeid = parcel.readInt();
}
/**
* Generates instances of this Parcelable class from a Parcel.
*/
public static final Parcelable.Creator<Episodeid> CREATOR = new Parcelable.Creator<Episodeid>() {
@Override
public Episodeid createFromParcel(Parcel parcel) {
return new Episodeid(parcel);
}
@Override
public Episodeid[] newArray(int n) {
return new Episodeid[n];
}
};
@Override
public int describeContents() {
return 0;
}
}
/**
* Note: This class is used as parameter only.<br/>
* <i>This class was generated automatically from XBMC's JSON-RPC introspect.</i>
*/
public static class Musicvideoid extends AbstractModel {
// field names
public static final String MUSICVIDEOID = "musicvideoid";
// class members
public final Integer musicvideoid;
/**
* @param musicvideoid
*/
public Musicvideoid(Integer musicvideoid) {
this.musicvideoid = musicvideoid;
}
@Override
public JsonNode toJsonNode() {
final ObjectNode node = OM.createObjectNode();
node.put(MUSICVIDEOID, musicvideoid);
return node;
}
/**
* Flatten this object into a Parcel.
* @param parcel the Parcel in which the object should be written.
* @param flags additional flags about how the object should be written.
*/
@Override
public void writeToParcel(Parcel parcel, int flags) {
parcel.writeValue(musicvideoid);
}
/**
* Construct via parcel.
*/
protected Musicvideoid(Parcel parcel) {
musicvideoid = parcel.readInt();
}
/**
* Generates instances of this Parcelable class from a Parcel.
*/
public static final Parcelable.Creator<Musicvideoid> CREATOR = new Parcelable.Creator<Musicvideoid>() {
@Override
public Musicvideoid createFromParcel(Parcel parcel) {
return new Musicvideoid(parcel);
}
@Override
public Musicvideoid[] newArray(int n) {
return new Musicvideoid[n];
}
};
@Override
public int describeContents() {
return 0;
}
}
/**
* Note: This class is used as parameter only.<br/>
* <i>This class was generated automatically from XBMC's JSON-RPC introspect.</i>
*/
public static class Artistid extends AbstractModel {
// field names
public static final String ARTISTID = "artistid";
// class members
public final Integer artistid;
/**
* @param artistid
*/
public Artistid(Integer artistid) {
this.artistid = artistid;
}
@Override
public JsonNode toJsonNode() {
final ObjectNode node = OM.createObjectNode();
node.put(ARTISTID, artistid);
return node;
}
/**
* Flatten this object into a Parcel.
* @param parcel the Parcel in which the object should be written.
* @param flags additional flags about how the object should be written.
*/
@Override
public void writeToParcel(Parcel parcel, int flags) {
parcel.writeValue(artistid);
}
/**
* Construct via parcel.
*/
protected Artistid(Parcel parcel) {
artistid = parcel.readInt();
}
/**
* Generates instances of this Parcelable class from a Parcel.
*/
public static final Parcelable.Creator<Artistid> CREATOR = new Parcelable.Creator<Artistid>() {
@Override
public Artistid createFromParcel(Parcel parcel) {
return new Artistid(parcel);
}
@Override
public Artistid[] newArray(int n) {
return new Artistid[n];
}
};
@Override
public int describeContents() {
return 0;
}
}
/**
* Note: This class is used as parameter only.<br/>
* <i>This class was generated automatically from XBMC's JSON-RPC introspect.</i>
*/
public static class Albumid extends AbstractModel {
// field names
public static final String ALBUMID = "albumid";
// class members
public final Integer albumid;
/**
* @param albumid
*/
public Albumid(Integer albumid) {
this.albumid = albumid;
}
@Override
public JsonNode toJsonNode() {
final ObjectNode node = OM.createObjectNode();
node.put(ALBUMID, albumid);
return node;
}
/**
* Flatten this object into a Parcel.
* @param parcel the Parcel in which the object should be written.
* @param flags additional flags about how the object should be written.
*/
@Override
public void writeToParcel(Parcel parcel, int flags) {
parcel.writeValue(albumid);
}
/**
* Construct via parcel.
*/
protected Albumid(Parcel parcel) {
albumid = parcel.readInt();
}
/**
* Generates instances of this Parcelable class from a Parcel.
*/
public static final Parcelable.Creator<Albumid> CREATOR = new Parcelable.Creator<Albumid>() {
@Override
public Albumid createFromParcel(Parcel parcel) {
return new Albumid(parcel);
}
@Override
public Albumid[] newArray(int n) {
return new Albumid[n];
}
};
@Override
public int describeContents() {
return 0;
}
}
/**
* Note: This class is used as parameter only.<br/>
* <i>This class was generated automatically from XBMC's JSON-RPC introspect.</i>
*/
public static class Songid extends AbstractModel {
// field names
public static final String SONGID = "songid";
// class members
public final Integer songid;
/**
* @param songid
*/
public Songid(Integer songid) {
this.songid = songid;
}
@Override
public JsonNode toJsonNode() {
final ObjectNode node = OM.createObjectNode();
node.put(SONGID, songid);
return node;
}
/**
* Flatten this object into a Parcel.
* @param parcel the Parcel in which the object should be written.
* @param flags additional flags about how the object should be written.
*/
@Override
public void writeToParcel(Parcel parcel, int flags) {
parcel.writeValue(songid);
}
/**
* Construct via parcel.
*/
protected Songid(Parcel parcel) {
songid = parcel.readInt();
}
/**
* Generates instances of this Parcelable class from a Parcel.
*/
public static final Parcelable.Creator<Songid> CREATOR = new Parcelable.Creator<Songid>() {
@Override
public Songid createFromParcel(Parcel parcel) {
return new Songid(parcel);
}
@Override
public Songid[] newArray(int n) {
return new Songid[n];
}
};
@Override
public int describeContents() {
return 0;
}
}
/**
* Note: This class is used as parameter only.<br/>
* <i>This class was generated automatically from XBMC's JSON-RPC introspect.</i>
*/
public static class Genreid extends AbstractModel {
// field names
public static final String GENREID = "genreid";
// class members
public final Integer genreid;
/**
* @param genreid
*/
public Genreid(Integer genreid) {
this.genreid = genreid;
}
@Override
public JsonNode toJsonNode() {
final ObjectNode node = OM.createObjectNode();
node.put(GENREID, genreid);
return node;
}
/**
* Flatten this object into a Parcel.
* @param parcel the Parcel in which the object should be written.
* @param flags additional flags about how the object should be written.
*/
@Override
public void writeToParcel(Parcel parcel, int flags) {
parcel.writeValue(genreid);
}
/**
* Construct via parcel.
*/
protected Genreid(Parcel parcel) {
genreid = parcel.readInt();
}
/**
* Generates instances of this Parcelable class from a Parcel.
*/
public static final Parcelable.Creator<Genreid> CREATOR = new Parcelable.Creator<Genreid>() {
@Override
public Genreid createFromParcel(Parcel parcel) {
return new Genreid(parcel);
}
@Override
public Genreid[] newArray(int n) {
return new Genreid[n];
}
};
@Override
public int describeContents() {
return 0;
}
}
}
/**
* API Name: <tt>Playlist.Property.Value</tt>
* <p/>
* Note: This class is used as result only.<br/>
* <i>This class was generated automatically from XBMC's JSON-RPC introspect.</i>
*/
public static class PropertyValue extends AbstractModel {
public final static String API_TYPE = "Playlist.Property.Value";
// field names
public static final String SIZE = "size";
public static final String TYPE = "type";
// class members
public final Integer size;
public final String type;
/**
* @param size
* @param type One of: <tt>unknown</tt>, <tt>video</tt>, <tt>audio</tt>, <tt>picture</tt>, <tt>mixed</tt>. See constants at {@link PlaylistModel.PropertyValue.Type}.
*/
public PropertyValue(Integer size, String type) {
this.size = size;
this.type = type;
}
/**
* Construct from JSON object.
* @param node JSON object representing a PropertyValue object
*/
public PropertyValue(JsonNode node) {
size = parseInt(node, SIZE);
type = parseString(node, TYPE);
}
@Override
public JsonNode toJsonNode() {
final ObjectNode node = OM.createObjectNode();
node.put(SIZE, size);
node.put(TYPE, type); // enum
return node;
}
/**
* Extracts a list of {@link PropertyValue} objects from a JSON array.
* @param obj ObjectNode containing the list of objects.
* @param key Key pointing to the node where the list is stored.
*/
static List<PropertyValue> getPlaylistModelPropertyValueList(JsonNode node, String key) {
if (node.has(key)) {
final ArrayNode a = (ArrayNode)node.get(key);
final List<PropertyValue> l = new ArrayList<PropertyValue>(a.size());
for (int i = 0; i < a.size(); i++) {
l.add(new PropertyValue((JsonNode)a.get(i)));
}
return l;
}
return new ArrayList<PropertyValue>(0);
}
/**
* Flatten this object into a Parcel.
* @param parcel the Parcel in which the object should be written.
* @param flags additional flags about how the object should be written.
*/
@Override
public void writeToParcel(Parcel parcel, int flags) {
parcel.writeValue(size);
parcel.writeValue(type); // enum
}
/**
* Construct via parcel.
*/
protected PropertyValue(Parcel parcel) {
size = parcel.readInt();
type = parcel.readString(); // enum
}
/**
* Generates instances of this Parcelable class from a Parcel.
*/
public static final Parcelable.Creator<PropertyValue> CREATOR = new Parcelable.Creator<PropertyValue>() {
@Override
public PropertyValue createFromParcel(Parcel parcel) {
return new PropertyValue(parcel);
}
@Override
public PropertyValue[] newArray(int n) {
return new PropertyValue[n];
}
};
@Override
public int describeContents() {
return 0;
}
/**
* API Name: <tt>type</tt>
*/
public interface Type {
public final String UNKNOWN = "unknown";
public final String VIDEO = "video";
public final String AUDIO = "audio";
public final String PICTURE = "picture";
public final String MIXED = "mixed";
public final static Set<String> values = new HashSet<String>(Arrays.asList(UNKNOWN, VIDEO, AUDIO, PICTURE, MIXED));
}
}
/**
* API Name: <tt>Playlist.Property.Name</tt>
*/
public interface PropertyName {
public final String TYPE = "type";
public final String SIZE = "size";
public final static Set<String> values = new HashSet<String>(Arrays.asList(TYPE, SIZE));
}
/**
* API Name: <tt>Playlist.Type</tt>
*/
public interface Type {
public final String UNKNOWN = "unknown";
public final String VIDEO = "video";
public final String AUDIO = "audio";
public final String PICTURE = "picture";
public final String MIXED = "mixed";
public final static Set<String> values = new HashSet<String>(Arrays.asList(UNKNOWN, VIDEO, AUDIO, PICTURE, MIXED));
}
}