git-svn-id: https://stereo.googlecode.com/svn/trunk@441 c67ee986-0855-0410-825f-15918...
[stereo.git] / DACPServer / src / util / response / Databases.java
blob17571f156e85aca21a8b8498d13ac14d4cd7273b
1 package util.response;
3 import java.util.ArrayList;
4 import java.util.Iterator;
5 import java.util.List;
7 import interfaces.Constants;
8 import api.Node;
9 import api.Reader;
10 import api.Response;
11 import api.Writer;
13 public class Databases extends Response {
15 private final List<Database> databases;
17 public static Databases read(Reader reader) {
19 List<Database> databases = new ArrayList<Database>();
21 for (Constants code: reader) {
22 if (code == Constants.dmap_listing) {
23 Reader list = reader.nextComposite(code);
25 for (Constants itemCode: list) {
26 if (itemCode == Constants.dmap_listingitem) {
27 Reader item = list.nextComposite(itemCode);
29 Database database = Database.read(item);
30 databases.add(database);
36 return new Databases(databases);
39 public Databases(int id, long persistentId, String name, int tracks, int containers) {
40 super(Constants.daap_serverdatabases, Response.OK);
42 databases = new ArrayList<Database>();
43 databases.add(new Database(id, persistentId, name, tracks, containers, 3));
46 private Databases(List<Database> databases) {
47 super(Constants.daap_serverdatabases, Response.OK);
49 this.databases = databases;
52 public void write(Writer writer) {
54 writer.appendList(Constants.dmap_listing, (byte)0, databases);
58 public Iterator<Database> databases() {
59 return databases.iterator();
62 public int size() {
63 return databases.size();
66 public static class Database implements Node {
68 private final int id;
69 private final long persistentId;
70 private final String name;
71 private final int tracks;
72 private final int containers;
73 private final int editStatus;
75 public static Database read(Reader reader) {
76 int id = 0;
77 long persistentId = 0;
78 String name = null;
79 int tracks = 0;
80 int containers = 0;
81 int editStatus = 0;
83 for (Constants node: reader) {
84 switch (node) {
85 case dmap_itemid: id = reader.nextInteger(node); break;
86 case dmap_persistentid: persistentId = reader.nextLong(node); break;
87 case dmap_itemname: name = reader.nextString(node); break;
88 case dmap_itemcount: tracks = reader.nextInteger(node); break;
89 case dmap_containercount: containers = reader.nextInteger(node); break;
90 case dmap_editstatus: editStatus = reader.nextInteger(node); break;
94 return new Database(id, persistentId, name, tracks, containers, editStatus);
97 public Database(int id, long persistentId, String name, int tracks, int containers, int editStatus) {
98 this.id = id;
99 this.persistentId = persistentId;
100 this.name = name;
101 this.tracks = tracks;
102 this.containers = containers;
103 this.editStatus = editStatus;
106 public Constants type() {
107 return Constants.dmap_listingitem;
110 public void write(Writer writer) {
111 writer.appendInteger(Constants.dmap_itemid, id);
112 writer.appendLong(Constants.dmap_persistentid, persistentId);
113 writer.appendString(Constants.dmap_itemname, name);
114 writer.appendInteger(Constants.dmap_itemcount, tracks);
115 writer.appendInteger(Constants.dmap_containercount, containers);
116 writer.appendInteger(Constants.dmap_editstatus, editStatus);
119 public boolean equals(Object o) {
120 if (o == this) return true;
121 if (!(o instanceof Database)) return false;
123 Database that = (Database)o;
125 return this.id == that.id
126 && this.persistentId == that.persistentId;
129 public int id() {
130 return id;
133 public long persistentId() {
134 return persistentId;
137 public String name() {
138 return name;
141 public int tracks() {
142 return tracks;
145 public int containers() {
146 return containers;
149 public int editStatus() {
150 return editStatus;
156 public static Node buildDatabaseResponse(int items, int containers) throws UnsupportedEncodingException {
158 Composite response = createResponse(DACPConstants.avdb);
160 Composite list = createList(response, DACPConstants.mlcl, 0, 1);
162 Composite item = new Composite(DACPConstants.mlit);
163 list.append(item);
165 item.append(new IntegerNode(DACPConstants.miid, 1));
166 item.append(new LongNode(DACPConstants.mper, 0xf35226b7c8ee14d3l)); //this id matches the id in the mdns broadcast
167 item.append(new StringNode(DACPConstants.minm, "Memphis Stereo"));
168 item.append(new IntegerNode(DACPConstants.mimc, items)); //item count
169 item.append(new IntegerNode(DACPConstants.mctc, containers)); //container count
171 return response;