Package intrade.scripts

Source Code of intrade.scripts.ProcessContractTrades

package intrade.scripts;

import intrade.entities.Contract;
import intrade.entities.ContractTrade;
import intrade.utils.PMF;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;

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

import com.google.appengine.api.datastore.Blob;

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

  private HttpServletResponse  r;

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

    doGet(req, resp);
  }

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

    try {
      String contract = req.getParameter("contract");
      if (contract != null) {
        resp.getWriter().println("Storing closing prices for contract:" + contract);
      } else {
        return;
      }

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

      r = resp;

      r.setContentType("text/plain");

      fetchTradesForContract(contract);

    } catch (com.google.apphosting.api.DeadlineExceededException e) {
      print("Reached execution time limit. Press refresh to continue.");

    }
  }

  private boolean fetchTradesForContract(String contractid) {

    Blob b = storeTradesfile(contractid);
    boolean fetchedTrades = fetchContractTrades(b, contractid);
    if (!fetchedTrades) {
      return true;

    }

    PersistenceManager pm = PMF.get().getPersistenceManager();
    Contract stored_con = pm.getObjectById(Contract.class, Contract.generateKeyFromID(contractid));

    Long now = (new Date()).getTime();
    if (fetchedTrades) {
      stored_con.setLastretrievedTrades(now);
    }

    pm.close();

    return true;
  }

  private Blob storeTradesfile(String id) {

    Contract c = null;

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

    c = pm.getObjectById(Contract.class, Contract.generateKeyFromID(id));
    c.debug_setResponse(r);
    if (c.fetchTrades()) {
      print("Fetched Trades for contract " + id);
    }
    pm.close();

    return (c != null) ? c.getFileTrades() : null;

  }

  private void print(String message) {

    try {
      r.getWriter().println(message);
      r.getWriter().flush();
      r.flushBuffer();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }

  /**
   * This routine parses the Blob that contains the actual CSV file and
   * generates the appropriate ContractTrade objects, which are
   * then stored in the datastore of the Google App Engine.
   *
   * @param csv
   *          The Blob object
   * @param contractid
   *          The contract ID
   * @return True if everything was processed without error. False is there
   *         was an error
   */
  public boolean fetchContractTrades(Blob csv, String contractid) {

    if (csv == null) {
      print("Could not get blob for contract " + contractid);
      return false;
    }

    String trades = new String(csv.getBytes());

    // We have the file, but there are no CSV data from Intrade. We just
    // stop here...
    if (trades.contains("An error has occurred") || trades.contains("No trades found")) {
      print("No trades for contract " + contractid);
      return true;
    }

    // pm = PMF.get().getPersistenceManager();
    // Contract c = pm.getObjectById(Contract.class,
    // Contract.generateKeyFromID(contractid));
    // pm.close();

    String[] entries = trades.split("\n");

    print("Adding " + (entries.length - 1) + " entries for contract " + contractid);

    Long lastUTC = new Long(-1);
    ArrayList<ContractTrade> prices = new ArrayList<ContractTrade>();
    for (int i = 0; i < entries.length; i++) {
      if (entries[i].startsWith("Date"))
        continue;

      ContractTrade ct = parseContractTradeCSV(entries[i], contractid);
      prices.add(ct);
      print(ct.toString());

      if (ct.getDate() > lastUTC)
        lastUTC = ct.getDate();

    }

    PersistenceManager pm = PMF.get().getPersistenceManager();
    pm.makePersistentAll(prices);
    Contract con = pm.getObjectById(Contract.class, Contract.generateKeyFromID(contractid));
    con.setLastUTCInsertedTrades(lastUTC);
    pm.close();

    return true;
  }

  private static ContractTrade parseContractTradeCSV(String l, String contract_id) {

    String[] entries = l.split(",");

    Long timeStamp = Long.parseLong(entries[0].trim());
    Double price = Double.parseDouble(entries[2].trim());
    Long volume = Long.parseLong(entries[3].trim());

    ContractTrade ct = new ContractTrade(contract_id, timeStamp, price, volume);

    return ct;
  }

}
TOP

Related Classes of intrade.scripts.ProcessContractTrades

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.