1 package org.musicontroller.streaming;
2
3 import java.io.IOException;
4 import java.io.OutputStream;
5 import java.io.PrintStream;
6 import java.util.HashMap;
7 import java.util.Map;
8
9 import javax.servlet.http.HttpServletRequest;
10
11 import org.apache.log4j.Logger;
12 import org.apache.tapestry.IRequestCycle;
13 import org.apache.tapestry.engine.ExternalService;
14 import org.apache.tapestry.engine.IEngineService;
15 import org.apache.tapestry.engine.ILink;
16 import org.apache.tapestry.services.LinkFactory;
17 import org.apache.tapestry.services.ServiceConstants;
18 import org.apache.tapestry.util.ContentType;
19 import org.apache.tapestry.web.WebResponse;
20
21
22 public class PlaylistGenerator extends ExternalService implements IEngineService {
23 private static final Logger log = Logger.getLogger(PlaylistGenerator.class);
24
25 HttpServletRequest _req = null;
26 public HttpServletRequest getServletRequest() {
27 return _req;
28 }
29 public void setServletRequest(HttpServletRequest req) {
30 _req = req;
31 }
32
33 public static final String SERVICE_NAME = "plgen";
34 private LinkFactory _linkFactory;
35 private WebResponse _response;
36
37 public ILink getLink(boolean post, Object parameter) {
38
39 Object[] params = (Object[]) parameter;
40 String userid = Long.toString((Long) params[0]);
41 String passhash = (String) params[1];
42
43 Map<String,String> parameters = new HashMap<String,String>();
44 parameters.put(ServiceConstants.SERVICE, getName());
45 parameters.put("userid",userid);
46 parameters.put("passhash", passhash);
47
48 return _linkFactory.constructLink(this, false, parameters, true);
49 }
50
51 public void service(IRequestCycle cycle) throws IOException {
52 log.debug("Transferring .pls-file to client: "+getServletRequest().getRemoteAddr());
53
54 String servername = cycle.getInfrastructure().getRequest().getServerName();
55 int serverport = cycle.getInfrastructure().getRequest().getServerPort();
56 String uri = cycle.getInfrastructure().getRequest().getRequestURI();
57 long userid = Long.parseLong(cycle.getParameter("userid"));
58 String passhash = cycle.getParameter("passhash");
59
60 try {
61 _response.setHeader("Content-Disposition","attachment; filename=mc.pls");
62 OutputStream out = _response.getOutputStream(new ContentType("audio/scpls"));
63 PrintStream ps = new PrintStream(out);
64 ps.println("[playlist]");
65 ps.println("numberofentries=1");
66 ps.println("File1=http://"+servername+":"+serverport+uri+"?service=stream&userid="+userid+"&passhash="+passhash);
67 ps.println("Title1=MusiController");
68 ps.println("Length1=-1");
69
70 ps.close();
71 } catch (Exception e) {
72 log.fatal("Error while transferring .pls-file to client: "+e.getMessage());
73 }
74 }
75
76 public String getName() {
77 return SERVICE_NAME;
78 }
79
80 public void setLinkFactory(LinkFactory linkFactory) {
81 _linkFactory = linkFactory;
82 }
83
84 public void setResponse(WebResponse response) {
85 _response = response;
86 }
87
88 }