View Javadoc

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  	 * Remove private data when done rendering.
46  	 * @param ev
47  	 */
48  	public void pageDetached(PageEvent ev) {
49  		_bags = null;
50  	}
51  	
52  	/**
53  	 * @return All keywords from Keywordbags that contain all keywordids that are
54  	 * present in the selectedkeywordids-list.
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  	 * @return A String varying from "1px" to "6px", depending on a discriminator-value.
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 }