1 package org.musicontroller.gui;
2
3 import java.util.LinkedList;
4 import java.util.List;
5
6 import org.apache.tapestry.annotations.Persist;
7 import org.apache.tapestry.event.PageDetachListener;
8 import org.apache.tapestry.event.PageEvent;
9 import org.apache.tapestry.html.BasePage;
10 import org.musicontroller.core.Keyword;
11 import org.musicontroller.core.Keywordbag;
12 import org.musicontroller.core.Playlist;
13 import org.musicontroller.security.User;
14 import org.musicontroller.service.McService;
15
16 public abstract class Keywords extends BasePage implements PageDetachListener {
17
18 public abstract McService getMcService();
19 public abstract User getUser();
20
21 public abstract Object[] getKeywordinfo();
22 public abstract void setKeywordinfo(Object[] keyword);
23
24 @Persist("client")
25 public abstract List<Long> getSelectedKeywordIds();
26 public abstract void setSelectedKeywordIds(List<Long> selectedkeywords);
27
28 public abstract Long getSelectedKeywordId();
29 public abstract void setSelectedKeywordId(Long selectedkeyword);
30
31 private List<Keywordbag> _bags;
32
33 public Keyword getSelectedKeyword() {
34 return getMcService().getKeywordById(getSelectedKeywordId());
35 }
36
37 private List<Keywordbag> getBags() {
38 if (_bags==null) {
39 _bags = getMcService().getKeywordBagsWithKeywords(getSelectedKeywordIds());
40 }
41 return _bags;
42 }
43
44
45
46
47
48 public void pageDetached(PageEvent ev) {
49 _bags = null;
50 }
51
52
53
54
55
56 public List<Object[]> getKeywords() {
57 return getMcService().listKeywords(getUser(),getBags());
58 }
59
60 public long getKeywordid() {
61 return (Long) getKeywordinfo()[0];
62 }
63
64 public String getKeywordname() {
65 return (String) getKeywordinfo()[1];
66 }
67
68 public String getFontsizeParam() {
69 return getFontsize()+"px";
70 }
71
72 public String getTitle() {
73 String result = getKeywordinfo()[2]+" play";
74 return "1".equals(getKeywordinfo()[2]) ? result : result+"s";
75 }
76
77
78
79
80 public int getFontsize() {
81 int playcount = ((Long) getKeywordinfo()[2]).intValue();
82 int category=1;
83
84 if (playcount>64) category++;
85 if (playcount>128) category++;
86 if (playcount>256) category++;
87 if (playcount>512) category++;
88 if (playcount>1024) category++;
89
90 return category;
91 }
92
93 public void selectKeyword(Long keywordid) {
94 List<Long> selectedkeywords = getSelectedKeywordIds();
95 if (selectedkeywords==null) {
96 selectedkeywords = new LinkedList<Long>();
97 }
98 selectedkeywords.add(keywordid);
99 setSelectedKeywordIds(selectedkeywords);
100 }
101
102 public void deselectKeyword(Long keywordid) {
103 List<Long> selectedkeywords = getSelectedKeywordIds();
104 if (selectedkeywords==null) {
105 return;
106 }
107 selectedkeywords.remove(keywordid);
108 setSelectedKeywordIds(selectedkeywords);
109 }
110
111 public Playlist getMatchingSongs() {
112 return getMcService().songsByKeywordbags(getBags(), getUser(), 50);
113 }
114
115 }