git-svn-id: https://stereo.googlecode.com/svn/trunk@441 c67ee986-0855-0410-825f-15918...
[stereo.git] / DACPServer / src / util / command / databases / Browse.java
blob189063472d4acef6015476fc9c697486a2673358
1 package util.command.databases;
3 import interfaces.Constants;
4 import interfaces.DJInterface;
5 import interfaces.Track;
6 import interfaces.collection.Collection;
8 import java.util.ArrayList;
9 import java.util.Collections;
10 import java.util.HashSet;
11 import java.util.List;
12 import java.util.Map;
13 import java.util.Set;
15 import util.command.Command;
16 import util.queryparser.ApplyFilter;
17 import util.queryparser.Filter;
18 import util.queryparser.QueryParser;
19 import api.Response;
21 public class Browse implements Command {
23 private Map<String,String> args;
24 private int container;
25 private Constants code;
26 private Constants field;
28 public Browse(int container, Constants code, Constants field) {
29 this.container = container;
30 this.code = code;
31 this.field = field;
34 public void init(Map<String, String> args) {
35 this.args = args;
37 System.out.println(args);
40 public Response run(DJInterface dj) {
42 Iterable<? extends Track> songs = null;
44 for (Collection<? extends Track> p: dj.library().collections()) {
45 if (p.id() == container) {
46 songs = p.source().tracks();
47 break;
51 if (songs == null) {
52 songs = dj.library().tracks();
55 System.out.println("collection has " + dj.library().size() + " elements");
57 if (args != null && args.containsKey("filter")) {
58 Filter f = QueryParser.parse(args.get("filter"));
59 System.out.println(f);
60 songs = ApplyFilter.filter(f, songs);
63 Set<String> results = new HashSet<String>();
65 for (Track t: songs) {
66 String name = (String)t.get(field);
67 if (name != null) results.add(name);
70 System.out.println("partial result has " + results.size() + " unique");
72 List<String> list = new ArrayList<String>();
73 list.addAll(results);
75 Collections.sort(list);
77 System.out.println("returning " + list.size() + " elements from " + dj.library().size());
79 return new util.response.databases.Browse(code, list);