package com.activequant.server.web; import java.io.FileInputStream; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Collections; import java.util.Date; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Properties; import java.util.TreeMap; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.servlet.ModelAndView; import com.activequant.domainmodel.TimeStamp; /** * * @author GhostRider * */ @Controller public class MainController { // private Logger log = Logger.getLogger(MainController.class); @Autowired private ServerComponent sc; public MainController() { log.info("Instantiating main controller."); } private SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); @RequestMapping("/") public String index(Map<String, Object> map) { map.put("serverTime", sdf.format(new Date())); return "index"; } @RequestMapping("/about") public String about(Map<String, Object> map) { return "about"; } @RequestMapping("/webstart") public String webstart(Map<String, Object> map) { return "webstart"; } @RequestMapping("/android_app") public String androidApp(Map<String, Object> map) { return "android_app"; } @RequestMapping("/charting") public String charting(Map<String, Object> map) { return "charting"; } @RequestMapping("/server") public String server(Map<String, Object> map) { Properties properties = new Properties(); try { properties.load(new FileInputStream("framework.properties")); } catch (IOException e) { e.printStackTrace(); } TreeMap<String, Object> tmap2 = new TreeMap<String, Object>(); for (Object s : properties.keySet()) { String key = (String) s; tmap2.put(key, properties.get(key)); } properties = new Properties(); try { properties.load(new FileInputStream("aq2server.properties")); } catch (IOException e) { e.printStackTrace(); } TreeMap<String, Object> tmap = new TreeMap<String, Object>(); for (Object s : properties.keySet()) { String key = (String) s; tmap.put(key, properties.get(key)); } map.put("framework", tmap2); map.put("aq2server", tmap); return "server"; } @RequestMapping("/administration") public String administration(Map<String, Object> map) { return "administration"; } @RequestMapping("/components") public String components(Map<String, Object> map) { // class Entry { String name; String lastSeen; String id; String getId() { return id; } } // List<String> pruneList = new ArrayList<String>(); List<Map<String, String>> entries = new ArrayList<Map<String, String>>(); Iterator<String> keyIt = sc.getComponentIdToName().keySet().iterator(); while (keyIt.hasNext()) { String key = keyIt.next(); long lastSeen = sc.getComponentLastSeen().get(key); if (System.currentTimeMillis() - lastSeen > (1000 * 60 * 5)) { pruneList.add(key); } else { Map<String, String> m = new HashMap<String, String>(); m.put("name", sc.getComponentIdToName().get(key)); m.put("id", key); m.put("lastSeen", sdf.format(new Date(sc.getComponentLastSeen() .get(key)))); entries.add(m); } } // map.put("entries", entries); for (String s : pruneList) { sc.getComponentDescriptions().remove(s); sc.getComponentIdToName().remove(s); sc.getComponentLastSeen().remove(s); } return "components"; } @RequestMapping("/license") public String license(Map<String, Object> map) { return "license"; } @RequestMapping("/refdata") public String refdata(Map<String, Object> map) { return "refdata"; } @RequestMapping("/marketdata") public String marketdata(Map<String, Object> map) { return "marketdata"; } @RequestMapping("/traddata") public String traddata(Map<String, Object> map) { return "traddata"; } @RequestMapping("/data_inspector") public ModelAndView data_csv(HttpServletRequest request, HttpServletResponse response) throws Exception { String componentId = request.getParameter("componentId"); Map<String, Object> map = new HashMap<String, Object>(); map.put("seriesid", request.getParameter("seriesid")); map.put("field", request.getParameter("field")); map.put("startdate", request.getParameter("startdate")); map.put("enddate", request.getParameter("enddate")); map.put("freq", request.getParameter("freq")); if(request.getParameter("field")==null) map.put("field", "BID"); if(request.getParameter("startdate")==null) map.put("startdate", "20120101"); if(request.getParameter("enddate")==null) map.put("enddate", "20131231"); if(request.getParameter("freq")==null) map.put("freq", "RAW"); return new ModelAndView("data_csv", map); } @RequestMapping("/documentation") public String documentation(Map<String, Object> map) { return "documentation_main"; } @RequestMapping("/excel_addon") public String excelAddon(Map<String, Object> map) { return "excel_addon"; } @RequestMapping("/video_chat") public String videoChat(Map<String, Object> map) { return "video_chat"; } @RequestMapping(value = "/component/description", method = RequestMethod.GET) public @ResponseBody String description(@RequestParam String componentId) { if (sc.getComponentDescriptions().containsKey(componentId)) return sc.getComponentDescriptions().get(componentId); return "N/A"; } // @RequestMapping(value = "/component2", method = RequestMethod.GET) // public String component2(@RequestParam String componentId, // @RequestParam String msg, // return "component"; // } @RequestMapping(value = "/component", method = RequestMethod.GET) public ModelAndView component2(HttpServletRequest request, HttpServletResponse response) throws Exception { String componentId = request.getParameter("componentId"); Map<String, Object> map = new HashMap<String, Object>(); map.put("description", sc.getComponentDescriptions().get(componentId)); map.put("id", componentId); map.put("name", sc.getComponentIdToName().get(componentId)); String msg = request.getParameter("msg"); if (msg != null) { sc.sendMessage(componentId, msg); map.put("msg", msg); } return new ModelAndView("component", map); } @RequestMapping(value = "/instruments", method = RequestMethod.GET) public ModelAndView instruments(HttpServletRequest request, HttpServletResponse response) throws Exception { String searchString = request.getParameter("searchString"); Map<String, Object> map = new HashMap<String, Object>(); if (searchString != null) map.put("searchString", searchString); else map.put("searchString", "%"); List<String> entries = new ArrayList<String>(); if (searchString != null) { String[] ids = sc.getDaoFactory().instrumentDao() .findIdsLike(searchString); for (String s : ids) entries.add(s); } map.put("entries", entries); // return new ModelAndView("instruments", map); } @RequestMapping(value = "/instrument", method = RequestMethod.GET) public ModelAndView instrument(HttpServletRequest request, HttpServletResponse response) throws Exception { String iid = request.getParameter("iid"); Map<String, Object> map = new HashMap<String, Object>(); if (iid != null) { map.put("iid", iid); Map<String, Object> objMap = sc.getDaoFactory().instrumentDao().loadRaw(iid); List<String> keys = new ArrayList<String>(); keys.addAll(objMap.keySet()); Collections.sort(keys); map.put("keys", keys); map.put("instrument", objMap); // load related mdis. map.put("mdis", sc.getDaoFactory().mdiDao().findIdsFor(iid)); map.put("tdis", sc.getDaoFactory().tradeableDao().findIdsFor(iid)); } // return new ModelAndView("instrument", map); } @RequestMapping(value = "/mdis", method = RequestMethod.GET) public ModelAndView mdis(HttpServletRequest request, HttpServletResponse response) throws Exception { String searchString = request.getParameter("searchString"); Map<String, Object> map = new HashMap<String, Object>(); if (searchString != null) map.put("searchString", searchString); else map.put("searchString", "%"); List<String> entries = new ArrayList<String>(); if (searchString != null) { String[] ids = sc.getDaoFactory().mdiDao() .findIdsLike(searchString); for (String s : ids) entries.add(s); } map.put("entries", entries); // return new ModelAndView("mdis", map); } @RequestMapping(value = "/mdi", method = RequestMethod.GET) public ModelAndView mdi(HttpServletRequest request, HttpServletResponse response) throws Exception { String iid = request.getParameter("mdiid"); if(request.getParameter("subscribe")!=null) { int val = Integer.parseInt(request.getParameter("subscribe")); int depth = Integer.parseInt(request.getParameter("subscriptionDepth")); // let's update our mdi. Map<String, Object> objMap = sc.getDaoFactory().mdiDao().loadRaw(iid); objMap.put("SUBSCRIBED", val); objMap.put("SUBSCRIPTIONDEPTH", depth); sc.getDaoFactory().mdiDao().storeRaw(iid, objMap); } Map<String, Object> map = new HashMap<String, Object>(); if (iid != null) { map.put("mdiid", iid); Map<String, Object> objMap = sc.getDaoFactory().mdiDao().loadRaw(iid); List<String> keys = new ArrayList<String>(); keys.addAll(objMap.keySet()); // let's also check if we have a subscription flag .. if(objMap.containsKey("SUBSCRIBED")){ map.put("subscribed", objMap.get("SUBSCRIBED")); } else{ map.put("subscribed", 0); } Collections.sort(keys); map.put("keys", keys); map.put("mdi", objMap); } // return new ModelAndView("mdi", map); } @RequestMapping(value = "/tdis", method = RequestMethod.GET) public ModelAndView tdis(HttpServletRequest request, HttpServletResponse response) throws Exception { String searchString = request.getParameter("searchString"); Map<String, Object> map = new HashMap<String, Object>(); if (searchString != null) map.put("searchString", searchString); else map.put("searchString", "%"); List<String> entries = new ArrayList<String>(); if (searchString != null) { String[] ids = sc.getDaoFactory().mdiDao() .findIdsLike(searchString); for (String s : ids) entries.add(s); } map.put("entries", entries); // return new ModelAndView("tdis", map); } @RequestMapping(value = "/tdi", method = RequestMethod.GET) public ModelAndView tdi(HttpServletRequest request, HttpServletResponse response) throws Exception { String iid = request.getParameter("tdiid"); Map<String, Object> map = new HashMap<String, Object>(); if (iid != null) { map.put("tdiid", iid); Map<String, Object> objMap = sc.getDaoFactory().tradeableDao().loadRaw(iid); List<String> keys = new ArrayList<String>(); keys.addAll(objMap.keySet()); Collections.sort(keys); map.put("keys", keys); map.put("tdi", objMap); } // return new ModelAndView("tdi", map); } @RequestMapping(value = "/orderevents", method = RequestMethod.GET) public ModelAndView orderEvents(HttpServletRequest request, HttpServletResponse response) throws Exception { Map<String, Object> map = new HashMap<String, Object>(); String date = request.getParameter("date"); if(date!=null){ // ok, we have a date, let's fetch all order events for this date. SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss"); Date d1 = sdf.parse(date+"000000"); Date d2 = sdf.parse(date+"235959"); // String[] ids = sc.getDaoFactory().orderEventDao().findIDsWhereCreationDateBetween(new TimeStamp(d1), new TimeStamp(d2)); map.put("eventIds", ids); map.put("date", date); // } return new ModelAndView("orderevents", map); } @RequestMapping(value = "/orderevent", method = RequestMethod.GET) public ModelAndView orderEvent(HttpServletRequest request, HttpServletResponse response) throws Exception { Map<String, Object> map = new HashMap<String, Object>(); String id = request.getParameter("id"); if(id!=null){ Map<String, Object> objMap = sc.getDaoFactory().orderEventDao().loadRaw(id); List<String> keys = new ArrayList<String>(); keys.addAll(objMap.keySet()); Collections.sort(keys); map.put("keys", keys); map.put("event", objMap); map.put("id", id); // } return new ModelAndView("orderevent", map); } @ResponseBody @RequestMapping(value = "/launch.jnlp", method = RequestMethod.GET) public String jnlp(HttpServletRequest request, HttpServletResponse response) throws Exception { StringBuffer sb = new StringBuffer(); // let's read // return sb.toString(); } }