1 package org.musicontroller.gui.edit;
2
3 import java.io.File;
4 import java.io.FileInputStream;
5 import java.io.FileOutputStream;
6 import java.io.IOException;
7 import java.io.InputStream;
8 import java.util.Collection;
9
10 import org.apache.tapestry.IExternalPage;
11 import org.apache.tapestry.IRequestCycle;
12 import org.apache.tapestry.annotations.InjectObject;
13 import org.apache.tapestry.engine.ExternalServiceParameter;
14 import org.apache.tapestry.engine.IEngineService;
15 import org.apache.tapestry.engine.ILink;
16 import org.apache.tapestry.html.BasePage;
17 import org.apache.tapestry.request.IUploadFile;
18 import org.musicontroller.core.Playlist;
19 import org.musicontroller.service.McService;
20 import org.varienaja.util.coverart.CoverArtManager;
21 import org.varienaja.util.coverart.CoverArtSearchResult;
22 import org.varienaja.util.coverart.ImageScaler;
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49 public abstract class CoverArtEdit extends BasePage implements IExternalPage {
50
51
52
53 private final static int MAXDISPLAYWIDTH=600;
54
55 public abstract long getPlaylistId();
56 public abstract void setPlaylistId(long id);
57 public abstract void setPlaylistName(String playlistname);
58 public abstract String getPlaylistName();
59 public abstract void setBandName(String bandname);
60 public abstract String getBandName();
61 public abstract Playlist getPlaylist();
62 public abstract void setPlaylist(Playlist playlist);
63 public abstract String getReturnPage();
64 public abstract void setReturnPage(String returnPage);
65 public abstract IUploadFile getUploadFile();
66 public abstract McService getMcService();
67 public abstract void setCoverArtCandidate(CoverArtSearchResult index);
68 public abstract CoverArtSearchResult getCoverArtCandidate();
69
70 @InjectObject("engine-service:external")
71 public abstract IEngineService getExternalService();
72
73
74
75
76
77
78
79
80
81 public void activateExternalPage(Object[] args, IRequestCycle cycle) {
82 long playlistid = -1;
83 if(args[0]==null) {
84
85 Playlist transientPlaylist = new Playlist();
86 transientPlaylist.setId(playlistid);
87 setPlaylist(transientPlaylist);
88
89 if(args.length>2 && args[2]!=null) {
90 setBandName((String)args[2]);
91 }
92 if(args.length>3 && args[3]!=null) {
93 setPlaylistName((String)args[3]);
94 getPlaylist().setName(getPlaylistName());
95 }
96 } else {
97 playlistid = (Long) args[0];
98 setPlaylist(getMcService().getPlaylistById(playlistid));
99 }
100 String returnPage = (String) args[1];
101 setPlaylistId(playlistid);
102 setReturnPage(returnPage);
103 }
104
105
106
107
108
109 public void uploadCoverArt() {
110 if (getUploadFile() == null) {
111 return;
112 }
113
114 InputStream fis = getUploadFile().getStream();
115 FileOutputStream fos = null;
116
117 try {
118 fos = new FileOutputStream(new File(getUploadFile().getFileName()));
119 byte[] buffer = new byte[1024];
120 while (true) {
121 int length = fis.read(buffer);
122 if (length < 0) {
123 break;
124 }
125 fos.write(buffer, 0, length);
126 }
127 fis.close();
128 fos.close();
129 File uploaded = new File(getUploadFile().getFileName());
130 CoverArtManager.purge(getPlaylistId());
131 CoverArtManager.add(getPlaylistId(), new FileInputStream(uploaded));
132 } catch (IOException ioe) {
133 ioe.printStackTrace();
134 } finally {
135 if (fis != null) {
136 try {
137 fis.close();
138 } catch (IOException ioe) {
139 }
140 }
141 if (fos != null) {
142 try {
143 fos.close();
144 } catch (IOException ioe) {
145 }
146 }
147 }
148 }
149
150
151
152
153
154
155
156 public Collection<CoverArtSearchResult> getCoverArtList() {
157 if (isPersistentPlaylist()) {
158 return getMcService().getCoverArtList(getPlaylist());
159 } else {
160 String bandname = null;
161 if(isPersistentPlaylist()) {
162 try {
163 bandname = getPlaylist().getSongs().iterator().next().getSong().getBand().getName();
164 } catch (Exception e) {
165 bandname = "Various";
166 }
167 } else {
168 bandname = getBandName();
169 }
170 return getMcService().getCoverArtList(bandname, getPlaylist().getName());
171 }
172 }
173
174
175
176
177
178
179
180
181
182 public ILink selectCoverArt(IRequestCycle cycle, CoverArtSearchResult selected) {
183 try {
184 if(isPersistentPlaylist()) {
185 getMcService().setPlaylistCoverArt(getPlaylist(),selected);
186 }
187 if(getReturnPage()!=null) {
188 IEngineService service = getExternalService();
189 ExternalServiceParameter parameter = new ExternalServiceParameter(getReturnPage(), new Object[]{getPlaylist().getId(),selected,getPlaylist().getName()});
190 ILink link = service.getLink(false, parameter);
191 return link;
192 }
193 } catch (IOException e) {
194
195 }
196 return null;
197 }
198
199
200
201
202
203 public boolean isPersistentPlaylist() {
204 return getPlaylistId()>=0;
205 }
206
207
208
209
210
211 public int getHeight() {
212 CoverArtSearchResult casr = getCoverArtCandidate();
213 if (casr.getWidth()>MAXDISPLAYWIDTH) {
214 return ImageScaler.calculateNewDimension(casr.getWidth(), casr.getHeight(), MAXDISPLAYWIDTH).height;
215 } else {
216 return casr.getHeight();
217 }
218 }
219
220
221
222
223
224 public int getWidth() {
225 CoverArtSearchResult casr = getCoverArtCandidate();
226 if (casr.getWidth()>MAXDISPLAYWIDTH) {
227 return ImageScaler.calculateNewDimension(casr.getWidth(), casr.getHeight(), MAXDISPLAYWIDTH).width;
228 } else {
229 return casr.getWidth();
230 }
231 }
232
233 }