context.ui.control.tabular.TabularViewController.java Source code

Java tutorial

Introduction

Here is the source code for context.ui.control.tabular.TabularViewController.java

Source

/*
     
 * Copyright (c) 2015 University of Illinois Board of Trustees, All rights reserved.   
 * Developed at GSLIS/ the iSchool, by Dr. Jana Diesner, Amirhossein Aleyasen,    
 * Chieh-Li Chin, Shubhanshu Mishra, Kiumars Soltani, and Liang Tao.     
 *   
 * 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 2 of the License, or 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 context.ui.control.tabular;

import context.core.entity.TabularData;
import java.net.URL;
import java.text.Collator;
import java.text.DecimalFormat;
import java.util.Comparator;
import java.util.List;
import java.util.ResourceBundle;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.value.ObservableValue;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Label;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.layout.AnchorPane;
import javafx.util.Callback;
import org.apache.commons.lang3.math.NumberUtils;

/**
 * FXML Controller class
 *
 * @author Amirhossein Aleyasen <aleyase2@illinois.edu>
 */
public class TabularViewController extends AnchorPane implements Initializable {

    /**
     *
     */
    public static String path = "/context/ui/control/tabular/TabularView.fxml";

    @FXML
    private Label titleLabel;
    @FXML
    private TableView<List<String>> tableView;
    private TabularData data;
    private boolean roundDoubles;

    /**
     *
     * @return
     */
    public boolean isRoundDoubles() {
        return roundDoubles;
    }

    /**
     *
     * @param roundDoubles
     */
    public void setRoundDoubles(boolean roundDoubles) {
        this.roundDoubles = roundDoubles;
    }

    /**
     *
     * @return
     */
    public TabularData getData() {
        return data;
    }

    /**
     *
     * @param data
     */
    public void setData(TabularData data) {
        this.data = data;
        initialTableData();
    }

    /**
     *
     * @return
     */
    public Label getTitleLabel() {
        return titleLabel;
    }

    /**
     *
     * @param columnIndex
     */
    public void setSortedColumn(int columnIndex) {
        if (tableView.getColumns() != null & columnIndex < tableView.getColumns().size()) {
            TableColumn tc = tableView.getColumns().get(columnIndex);
            tc.setSortType(TableColumn.SortType.DESCENDING);
            tableView.getSortOrder().add(tc);
        }
    }

    /**
     * Initializes the controller class.
     * @param rb
     */
    @Override
    public void initialize(URL url, ResourceBundle rb) {
    }

    private void initialTableData() {
        data.loadTableData();
        //        double minWidth = tableView.getWidth() / data.getHeaders().size();
        tableView.setColumnResizePolicy(TableView.CONSTRAINED_RESIZE_POLICY);
        int index = 0;
        for (String header : data.getHeaders()) {
            final int j = index;
            TableColumn tableColumn = new TableColumn(header);

            tableColumn.setComparator(new Comparator<String>() {
                @Override
                public int compare(String s1, String s2) {
                    if (NumberUtils.isNumber(s1) && NumberUtils.isNumber(s2)) {
                        return Double.compare(Double.parseDouble(s1), Double.parseDouble(s2));
                    }
                    return Collator.getInstance().compare(s1, s2);
                }
            });
            tableColumn.setCellValueFactory(
                    new Callback<TableColumn.CellDataFeatures<List<String>, String>, ObservableValue<String>>() {
                        public ObservableValue<String> call(TableColumn.CellDataFeatures<List<String>, String> p) {
                            final String val = p.getValue().get(j);
                            if (isRoundDoubles() && NumberUtils.isNumber(val) && val.contains(".")) {
                                DecimalFormat df = new DecimalFormat("#.##");
                                Double d = Double.parseDouble(val);
                                return new SimpleStringProperty(df.format(d));
                            } else {
                                return new SimpleStringProperty(val);
                            }
                        }
                    });
            index++;
            tableView.getColumns().add(tableColumn);
            //            if (index < data.getHeaders().size() - 1) {
            //                tableColumn.setMinWidth(minWidth);
            //            }
            //            System.out.println("width=" + tableColumn.getMinWidth());
        }
        System.out.println("columns Count:" + tableView.getColumns().size());
        //  which will make your table view dynamic 
        //        ObservableList<ObservableList> csvData = FXCollections.observableArrayList();
        //
        //        for (List<StringProperty> dataList : data.getRows()) {
        //            ObservableList<String> row = FXCollections.observableArrayList();
        //            for (StringProperty rowData : dataList) {
        //                row.add(rowData.get());
        //            }
        //            csvData.add(row); // add each row to cvsData
        //        }
        System.out.println("Rows Count=" + data.getRows().size());
        tableView.setItems(data.getRows()); // finally add data to tableview
        System.out.println("after Rows Count=" + tableView.getItems().size());

    }

}