View Javadoc

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  //TODO this class's name is incorrect
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  		//De inkomende parameter is een array met een visitid
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  }