com.QuarkLabs.BTCeClientJavaFX.OrdersBookController.java Source code

Java tutorial

Introduction

Here is the source code for com.QuarkLabs.BTCeClientJavaFX.OrdersBookController.java

Source

/*
 * BTC-e client for JavaFX
 * Copyright (C) 2014  QuarkDev Solutions <quarkdev.solutions@gmail.com>
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

package com.QuarkLabs.BTCeClientJavaFX;

import com.QuarkLabs.BTCeClientJavaFX.models.OrdersBookEntry;
import com.QuarkLabs.BTCeClientJavaFX.networking.App;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.concurrent.Task;
import javafx.concurrent.WorkerStateEvent;
import javafx.event.EventHandler;
import javafx.fxml.FXML;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.cell.PropertyValueFactory;
import org.json.JSONArray;
import org.json.JSONObject;

import java.net.URL;
import java.util.ResourceBundle;

/**
 * Controller for Orders Book layout
 */
public class OrdersBookController {

    @FXML
    private ResourceBundle resources;

    @FXML
    private URL location;

    @FXML
    private TableView<OrdersBookEntry> asksTable;

    @FXML
    private TableColumn<OrdersBookEntry, Double> asksTablePriceColumn;

    @FXML
    private TableColumn<OrdersBookEntry, Double> asksTableVolumeColumn;

    @FXML
    private TableView<OrdersBookEntry> bidsTable;

    @FXML
    private TableColumn<OrdersBookEntry, Double> bidsTablePriceColumn;

    @FXML
    private TableColumn<OrdersBookEntry, Double> bidsTableVolumeColumn;

    private ObservableList<OrdersBookEntry> asks = FXCollections.observableArrayList();
    private ObservableList<OrdersBookEntry> bids = FXCollections.observableArrayList();
    private String pair;

    @FXML
    void initialize() {

        assert asksTable != null : "fx:id=\"asksTable\" was not injected: check your FXML file 'ordersbooklayout.fxml'.";
        assert asksTablePriceColumn != null : "fx:id=\"asksTablePriceColumn\" was not injected: check your FXML file 'ordersbooklayout.fxml'.";
        assert asksTableVolumeColumn != null : "fx:id=\"asksTableVolumeColumn\" was not injected: check your FXML file 'ordersbooklayout.fxml'.";
        assert bidsTable != null : "fx:id=\"bidsTable\" was not injected: check your FXML file 'ordersbooklayout.fxml'.";
        assert bidsTablePriceColumn != null : "fx:id=\"bidsTablePriceColumn\" was not injected: check your FXML file 'ordersbooklayout.fxml'.";
        assert bidsTableVolumeColumn != null : "fx:id=\"bidsTableVolumeColumn\" was not injected: check your FXML file 'ordersbooklayout.fxml'.";

        asksTable.setItems(asks);
        bidsTable.setItems(bids);

        asksTablePriceColumn.setCellValueFactory(new PropertyValueFactory<OrdersBookEntry, Double>("price"));
        asksTableVolumeColumn.setCellValueFactory(new PropertyValueFactory<OrdersBookEntry, Double>("volume"));

        asksTable.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY);
        bidsTable.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY);

        bidsTablePriceColumn.setCellValueFactory(new PropertyValueFactory<OrdersBookEntry, Double>("price"));
        bidsTableVolumeColumn.setCellValueFactory(new PropertyValueFactory<OrdersBookEntry, Double>("volume"));

        Task<JSONObject> loadOrdersBook = new Task<JSONObject>() {
            @Override
            protected JSONObject call() throws Exception {
                return App.getOrdersBook(pair);
            }
        };
        loadOrdersBook.setOnSucceeded(new EventHandler<WorkerStateEvent>() {
            @Override
            public void handle(WorkerStateEvent workerStateEvent) {
                JSONObject jsonObject = (JSONObject) workerStateEvent.getSource().getValue();
                JSONArray asksArray = jsonObject.optJSONArray("asks");
                JSONArray bidsArray = jsonObject.optJSONArray("bids");
                for (int i = 0; i < asksArray.length(); i++) {
                    JSONArray item = asksArray.optJSONArray(i);
                    OrdersBookEntry ordersBookEntry = new OrdersBookEntry();
                    ordersBookEntry.setPrice(item.optDouble(0));
                    ordersBookEntry.setVolume(item.optDouble(1));
                    asks.add(ordersBookEntry);
                }
                for (int i = 0; i < bidsArray.length(); i++) {
                    JSONArray item = bidsArray.optJSONArray(i);
                    OrdersBookEntry ordersBookEntry = new OrdersBookEntry();
                    ordersBookEntry.setPrice(item.optDouble(0));
                    ordersBookEntry.setVolume(item.optDouble(1));
                    bids.add(ordersBookEntry);
                }
            }
        });
        Thread thread = new Thread(loadOrdersBook);
        thread.start();

    }

    /**
     * Loads Orders Book data
     *
     * @param pair Currency pair
     */
    void injectPair(String pair) {
        this.pair = pair;
    }

}