com.mgl.updater.Updater2.java Source code

Java tutorial

Introduction

Here is the source code for com.mgl.updater.Updater2.java

Source

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.mgl.updater;

import com.ib.controller.NewContract;
import com.ib.controller.Types;
import com.mgl.entities.*;
import com.mgl.io.ConnectionHandler;
import com.mgl.io.TextPaneLogger;
import com.mgl.io.XHelper;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import org.joda.time.DateTime;

import java.text.SimpleDateFormat;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 * @author Michael G. Langer
 */
public class Updater2 {

    private static final String CONTRACT_FILE = "contracts.xml";
    private static final String CONTRACT_FILE_MIN = "contracts_minimal.xml";
    private static final String YMD = "yyyyMMdd";
    private static final int _10s = 10000;
    private static final int _1s = 1000;

    private PropertyChangeListener progressBarListener;

    public Updater2() {

    }

    public Updater2(PropertyChangeListener listener) {
        progressBarListener = listener;
    }

    public static void main(String[] args) {
        Updater2 updater = new Updater2();
        updater.process();
    }

    public void process() {

        List<NewContract> nContractList = XHelper.getInstance().fromFileNameToNCList(CONTRACT_FILE);
        ControllerFactory controllerFactory = new ControllerFactory();
        ContractHelper contractHelper = new ContractHelper();

        TextPaneLogger logger = new TextPaneLogger(progressBarListener);

        try (ConnectionHandler cHandler = new ConnectionHandler(logger)) {
            cHandler.connect();
            progressBarListener.propertyChange(new PropertyChangeEvent(this, "UpdaterLog", null,
                    nContractList.size() + " Contracts to be processed."));

            int counter = 0;
            for (NewContract nc : nContractList) {

                ContractEntity contractEntity = controllerFactory.getContractJpaController()
                        .findContract(nc.symbol());
                if (contractEntity == null) {
                    contractEntity = new ContractEntity(nc.symbol(), nc.exchange(), nc.currency());
                    controllerFactory.getContractJpaController().create(contractEntity);
                }

                BarEntity latestBar = contractHelper.getLatestBar(contractEntity,
                        controllerFactory.getBarJpaController());
                SimpleDateFormat sdf = new SimpleDateFormat(YMD); // move this 2 lines
                String endDateTime = sdf.format(new DateTime().toDate());

                counter++;
                HistoricalDataLoaderWorker handler = null;
                if (latestBar == null) {
                    progressBarListener.propertyChange(
                            new PropertyChangeEvent(this, "UpdaterLog", null, "Processing all " + counter + " of "
                                    + nContractList.size() + " Contract: " + contractEntity.getSymbol()));
                    handler = new HistoricalDataLoaderWorker(nc, contractEntity, cHandler.getController(),
                            endDateTime, 5, Types.DurationUnit.YEAR, controllerFactory.getBarJpaController(),
                            logger);
                } else {
                    DateTime endDate = new DateTime();
                    DateTime startDate = new DateTime(latestBar.getDate().getTime());

                    int days = 0;
                    DateTime nextDay = startDate.plusDays(1);
                    while (nextDay.isBefore(endDate)) {
                        DateTime.Property p = nextDay.dayOfWeek();
                        if (p.get() < 6) {
                            days++;
                        }
                        nextDay = nextDay.plusDays(1);
                    }

                    if (days > 1) { // TODO if after market close it can be 0.
                        progressBarListener.propertyChange(new PropertyChangeEvent(this, "UpdaterLog", null,
                                "Processing " + counter + " of " + nContractList.size() + " Contract: "
                                        + contractEntity.getSymbol() + " days: " + days));
                        handler = new HistoricalDataLoaderWorker(nc, contractEntity, cHandler.getController(),
                                endDateTime, days, controllerFactory.getBarJpaController(), logger);
                    } else {
                        progressBarListener.propertyChange(new PropertyChangeEvent(this, "UpdaterLog", null,
                                "Processing " + counter + " of " + nContractList.size() + " Contract: "
                                        + contractEntity.getSymbol() + " no days"));
                    }
                }
                if (progressBarListener != null) {
                    float f = ((counter * 1f) / nContractList.size()) * 100f;
                    progressBarListener
                            .propertyChange(new PropertyChangeEvent(this, "UpdaterProgress", null, Math.round(f)));
                }
                if (handler != null) {
                    long bMillis = System.currentTimeMillis();
                    handler.execute();
                    handler.get();
                    handler.end();
                    while ((System.currentTimeMillis() - bMillis) < _10s) {
                        Thread.sleep(_1s);
                    }
                }
            }
            progressBarListener.propertyChange(new PropertyChangeEvent(this, "UpdaterLog", null, "End"));
        } catch (Exception e) {
            Logger.getLogger(Updater2.class.getName()).log(Level.SEVERE, null, e);
        }

    }

}