Package intrade.scripts

Source Code of intrade.scripts.FetchMarketOverview

package intrade.scripts;

import intrade.entities.MarketXML;
import intrade.utils.PMF;

import java.io.IOException;
import java.net.URL;
import java.text.DateFormat;

import javax.jdo.PersistenceManager;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.w3c.dom.Document;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

import com.google.appengine.api.datastore.Key;
import com.google.appengine.api.datastore.KeyFactory;
import com.google.appengine.api.taskqueue.Queue;
import com.google.appengine.api.taskqueue.QueueFactory;
import com.google.appengine.api.taskqueue.TaskOptions;
import com.google.appengine.api.taskqueue.TaskOptions.Builder;

@SuppressWarnings("serial")
public class FetchMarketOverview extends HttpServlet {

  public static String  url  = "http://api.intrade.com/jsp/XML/MarketData/xml.jsp";

  public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {

    resp.setContentType("text/plain");

    // DEBUG
    // MarketXML.time_threshold_minutes = 15;

    String t = req.getParameter("time_threshold_minutes");
    if (t != null) {
      try {
        int i = Integer.parseInt(t);
        MarketXML.time_threshold_minutes = i;
      } catch (Exception e) {

      }
    }

    String u = req.getParameter("url");
    if (u != null) {
      try {
        URL param = new URL(u);
        url = param.toString();
      } catch (Exception e) {

      }
    }

    PersistenceManager pm = PMF.get().getPersistenceManager();

    MarketXML m = null;
    Key k = KeyFactory.createKey(MarketXML.class.getSimpleName(), url);
    try {
      // Check if the file is fetched already

      resp.getWriter().println("Checking if URL is fetched: " + url);
      m = pm.getObjectById(MarketXML.class, k);
      resp.getWriter().println("It is fetched...");
      resp.getWriter().println("----------------------------------------------------");
      resp.getWriter().println("Current timestamp:" + DateFormat.getDateTimeInstance().format(m.getTimestamp()));
      resp.getWriter().println("Last retrieved:" + DateFormat.getDateTimeInstance().format(m.getLastretrieved()));
      resp.getWriter().println("----------------------------------------------------");
      Long last = m.getLastretrieved();

      // It is fetched. Refresh it.
      resp.getWriter().print("Refreshing...");
      resp.getWriter().flush();
      m.refresh();

      if (m.getLastretrieved() == last) {
        resp.getWriter().println(
            "Not enough time passed since last retrieval. Current limit is " + MarketXML.time_threshold_minutes
                + " minutes");
      } else {
        resp.getWriter().println("Got new copy");
      }
      resp.getWriter().println("----------------------------------------------------");
      resp.getWriter().println("New timestamp:" + DateFormat.getDateTimeInstance().format(m.getTimestamp()));
      resp.getWriter().println("New retrieval:" + DateFormat.getDateTimeInstance().format(m.getLastretrieved()));
      resp.getWriter().println("----------------------------------------------------");

    } catch (Exception e) {
      // URL not fetched before
      // Create object

      resp.getWriter().println("It is not fetched...fetching");
      resp.getWriter().flush();
      m = new MarketXML(url);

      System.out.println("Start fetching");

      m.fetch();

      resp.getWriter().println("New timestamp:" + DateFormat.getDateTimeInstance().format(m.getTimestamp()));
      resp.getWriter().println("Storing...");
      resp.getWriter().flush();
      pm.makePersistent(m);

    }

    pm.close();

    Document d = m.getXML();
    Queue queue = QueueFactory.getDefaultQueue();
    NodeList n = d.getElementsByTagName("EventClass");
    for (int i = 0; i < n.getLength(); i++) {

      Node nd = n.item(i);
      String event_id = nd.getAttributes().getNamedItem("id").getNodeValue();
      resp.getWriter().println("Adding in queue EventClass:" + event_id);
      queue.add(Builder.withUrl("/processEventClass").method(TaskOptions.Method.GET).param("eventclass", event_id));
    }

    resp.getWriter().println("Done!");

  }

}
TOP

Related Classes of intrade.scripts.FetchMarketOverview

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.