package com.sleazyweasel.applescriptifier;
import com.google.gson.Gson;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.logging.Logger;
public class ControlServlet extends HttpServlet {
private static final Logger logger = Logger.getLogger(ControlServlet.class.getName());
public static final String CURRENT_VERSION = "2.0";
private AppleScriptTemplate appleScriptTemplate = new AppleScriptTemplateFactory().getActiveTemplate();
private List<String> applications = new ArrayList<String>();
private final MusicPlayer musicPlayer;
public ControlServlet(MusicPlayer musicPlayer) {
this.musicPlayer = musicPlayer;
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse response) throws ServletException, IOException {
updateApplications();
// Set to expire far in the past.
response.setHeader("Expires", "Sat, 6 May 1995 12:00:00 GMT");
// Set standard HTTP/1.1 no-cache headers.
response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");
// Set IE extended HTTP/1.1 no-cache headers (use addHeader).
response.addHeader("Cache-Control", "post-check=0, pre-check=0");
// Set standard HTTP/1.0 no-cache header.
response.setHeader("Pragma", "no-cache");
response.setContentType("application/json; charset=utf-8");
response.setCharacterEncoding("UTF-8");
String pathInfo = req.getPathInfo();
if (pathInfo.startsWith("/apps")) {
Map<String, Object> results = new HashMap<String, Object>();
results.put("version", CURRENT_VERSION);
results.put("supportedApplications", applications);
response.getWriter().append(new Gson().toJson(results));
}
}
private synchronized void updateApplications() {
List<Application> possibleApplications = Application.values();
for (Application application : possibleApplications) {
if (applications.contains(application.displayName()) || !application.fullSupport()) {
continue;
}
logger.info("checking: " + application);
if (Application.MUSECONTROLLER().equals(application)) {
if (musicPlayer.isConfigured()) {
logger.info("adding: " + application);
applications.add(Application.MUSECONTROLLER().displayName());
}
} else {
if (appleScriptTemplate.applicationExists(application)) {
logger.info("adding: " + application);
applications.add(application.displayName());
}
}
}
}
}