package com.xenoage.zong.webserver.model.requests; import com.google.gson.JsonObject; import com.google.gson.JsonParser; import com.xenoage.zong.webserver.Webserver; import javax.servlet.ServletException; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.sql.SQLException; import java.util.HashMap; /** * A request to the server. * * @author Andreas Wenger */ public abstract class Request { private static HashMap<String, Class<? extends Request>> classes = new HashMap<>(); static { classes.put("audio", AudioRequest.class); classes.put("cursor", CursorRequest.class); classes.put("open", OpenRequest.class); classes.put("page", PageRequest.class); classes.put("ping", PingRequest.class); } public static Request read(String data) throws ServletException { try { JsonObject o = (JsonObject) (new JsonParser().parse(data)); String action = o.getAsJsonPrimitive("action").getAsString(); //find Java class Class<? extends Request> cls = classes.get(action); //convert JSON object to Java class if (cls == null) throw new ServletException("unknown action: " + action); Request request = Webserver.instance.getGson().fromJson(o, cls); //check integrity request.check(); return request; } catch (Exception ex) { throw new ServletException("incorrect request"); } } public void check() throws IllegalStateException { } public abstract void respond(Webserver server, HttpServletResponse response) throws SQLException, IOException; }