BillionGraves.BillionGravesController.java Source code

Java tutorial

Introduction

Here is the source code for BillionGraves.BillionGravesController.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 BillionGraves;

import java.io.Console;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.ResourceBundle;
import java.util.logging.Level;
import java.util.logging.Logger;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.control.CheckBox;
import javafx.scene.control.ComboBox;
import javafx.scene.control.ListView;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextField;
import javafx.stage.FileChooser;
import org.apache.commons.lang3.StringUtils;
import org.joda.time.DateTime;
import org.joda.time.Interval;
import org.joda.time.Period;

/**
 * FXML Controller class
 *
 * @author DartRA
 */
public class BillionGravesController implements Initializable {

    private final FileChooser myFileChooser = new FileChooser();
    private TextFileReader reader;
    private TextFileReader dataReader;
    private TextFileReader ingestReader;
    private File selectFilePath;
    private List<File> multiFilePath;
    private Map<String, File> namePath;
    private String strFilePath;
    private String strFileName;
    private String currentLine;
    private static String timeStamp;
    private RecordDataFields dataReaderSimpleString;
    private int rowCount;

    String fileGroupIngestTimestamp = MiscUtilities.getGroupTimeStamp();

    ObservableList<String> consoleItems = FXCollections.observableArrayList();

    @FXML
    private Button btnFileChooser;

    @FXML
    private ListView lstViewFiles;

    @FXML
    private Button btnRemove1;

    @FXML
    private Button btnRemove2;

    @FXML
    private Button btnRemove3;

    @FXML
    private Button btnRemove4;

    @FXML
    private Button btnRemove5;

    @FXML
    private ComboBox cbxRowsToPreview;

    @FXML
    private Button btnPreviewData;

    @FXML
    private CheckBox chkBoxTruncate;

    @FXML
    private CheckBox chkBoxUI;

    @FXML
    private Button btnFileIngest;

    @FXML
    private ListView<String> lstConsole;

    @FXML
    private TableView tvDataPreview;
    private ObservableList<String> cellData;

    @FXML
    public void btnFileChooser(ActionEvent event) {
        namePath = new HashMap<>();
        multiFilePath = new MiscUtilities().getFilePath();

        if (multiFilePath != null) {
            for (File b : multiFilePath) {
                strFileName = b.toString();

                if (lstViewFiles.getItems().contains(b.getName())) {
                    break;
                } else {
                    lstViewFiles.getItems().add(b.getName());
                    namePath.put(b.getName(), b);//creates a hash map with filename key and filepath value
                }
            }
        }
        int selectedFileCount = lstViewFiles.getItems().size();
        Map buttonState = MiscUtilities.getButtonState(selectedFileCount);

        btnRemove1.setVisible((boolean) buttonState.get("Button1"));
        btnRemove2.setVisible((boolean) buttonState.get("Button2"));
        btnRemove3.setVisible((boolean) buttonState.get("Button3"));
        btnRemove4.setVisible((boolean) buttonState.get("Button4"));
        btnRemove5.setVisible((boolean) buttonState.get("Button5"));
    }

    public void btnRemove1(ActionEvent event) {
        //need to remove clicked entry from file/filepath hashmap
        namePath.remove(lstViewFiles.getItems().get(0).toString());

        Object remove = lstViewFiles.getItems().remove(0);

        int selectedFileCount = lstViewFiles.getItems().size();
        Map buttonState = MiscUtilities.getButtonState(selectedFileCount);

        btnRemove1.setVisible((boolean) buttonState.get("Button1"));
        btnRemove2.setVisible((boolean) buttonState.get("Button2"));
        btnRemove3.setVisible((boolean) buttonState.get("Button3"));
        btnRemove4.setVisible((boolean) buttonState.get("Button4"));
        btnRemove5.setVisible((boolean) buttonState.get("Button5"));
    }

    public void btnRemove2(ActionEvent event) {
        //need to remove clicked entry from file/filepath hashmap
        namePath.remove(lstViewFiles.getItems().get(1).toString());
        Object remove = lstViewFiles.getItems().remove(1);

        int selectedFileCount = lstViewFiles.getItems().size();
        Map buttonState = MiscUtilities.getButtonState(selectedFileCount);

        btnRemove1.setVisible((boolean) buttonState.get("Button1"));
        btnRemove2.setVisible((boolean) buttonState.get("Button2"));
        btnRemove3.setVisible((boolean) buttonState.get("Button3"));
        btnRemove4.setVisible((boolean) buttonState.get("Button4"));
        btnRemove5.setVisible((boolean) buttonState.get("Button5"));

    }

    public void btnRemove3(ActionEvent event) {
        //need to remove clicked entry from file/filepath hashmap
        namePath.remove(lstViewFiles.getItems().get(2).toString());
        Object remove = lstViewFiles.getItems().remove(2);

        int selectedFileCount = lstViewFiles.getItems().size();
        Map buttonState = MiscUtilities.getButtonState(selectedFileCount);

        btnRemove1.setVisible((boolean) buttonState.get("Button1"));
        btnRemove2.setVisible((boolean) buttonState.get("Button2"));
        btnRemove3.setVisible((boolean) buttonState.get("Button3"));
        btnRemove4.setVisible((boolean) buttonState.get("Button4"));
        btnRemove5.setVisible((boolean) buttonState.get("Button5"));

    }

    public void btnRemove4(ActionEvent event) {
        //need to remove clicked entry from file/filepath hashmap
        namePath.remove(lstViewFiles.getItems().get(3).toString());
        Object remove = lstViewFiles.getItems().remove(3);

        int selectedFileCount = lstViewFiles.getItems().size();
        Map buttonState = MiscUtilities.getButtonState(selectedFileCount);

        btnRemove1.setVisible((boolean) buttonState.get("Button1"));
        btnRemove2.setVisible((boolean) buttonState.get("Button2"));
        btnRemove3.setVisible((boolean) buttonState.get("Button3"));
        btnRemove4.setVisible((boolean) buttonState.get("Button4"));
        btnRemove5.setVisible((boolean) buttonState.get("Button5"));

    }

    public void btnRemove5(ActionEvent event) {
        //need to remove clicked entry from file/filepath hashmap
        namePath.remove(lstViewFiles.getItems().get(4).toString());
        Object remove = lstViewFiles.getItems().remove(4);

        int selectedFileCount = lstViewFiles.getItems().size();
        Map buttonState = MiscUtilities.getButtonState(selectedFileCount);

        btnRemove1.setVisible((boolean) buttonState.get("Button1"));
        btnRemove2.setVisible((boolean) buttonState.get("Button2"));
        btnRemove3.setVisible((boolean) buttonState.get("Button3"));
        btnRemove4.setVisible((boolean) buttonState.get("Button4"));
        btnRemove5.setVisible((boolean) buttonState.get("Button5"));

    }

    @FXML //get the column names
    public void btnPreviewData(ActionEvent event) {
        String hashKey = lstViewFiles.getItems().get(0).toString();//grabs the first file item in the list
        try {
            reader = new TextFileReader(namePath.get(hashKey));

            List<String> columnNames = reader.getColumnNames();

            for (String a : columnNames) {
                TableColumn newColumn = new TableColumn(a);
                tvDataPreview.getColumns().add(newColumn);
            }
        } catch (IOException ex) {
            Logger.getLogger(BillionGravesController.class.getName()).log(Level.SEVERE, null, ex);
        }

        tvDataPreview.setEditable(true);
        tvDataPreview.setItems(reader.getData());

        //get the fielded record data for table display        
        try {
            dataReader = new TextFileReader(namePath.get(hashKey), rowCount);
            //dataReaderSimpleString = new RecordDataFields(selectFilePath, rowCount);
        } catch (IOException ex) {
            Logger.getLogger(BillionGravesController.class.getName()).log(Level.SEVERE, null, ex);
        }
        tvDataPreview.setEditable(true);

        for (int i = 0; i < (dataReader.getAllData().size()); i++) {

        }
        tvDataPreview.setItems(dataReader.getData());
    }

    /**
     *
     * @param event
     * @throws SQLException
     */
    @FXML
    public void btnFileIngest(ActionEvent event) throws SQLException {

        long startTime = System.currentTimeMillis();
        //Truncate table is checkbox is selected
        if (chkBoxTruncate.isSelected() == true) {
            consoleItems.add("Truncating Load Table");
            lstConsole.setItems(consoleItems);
        }
        PPOFNLDataWriter truncateTable = new PPOFNLDataWriter(chkBoxTruncate.isSelected());

        System.out.println("Ingesting records");

        consoleItems.add("Ingesting records");
        lstConsole.setItems(consoleItems);
        //Start the data ingest
        for (int i = 0; i < (lstViewFiles.getItems().size()); i++) { //loop to process each selected file*********
            String hashKey = lstViewFiles.getItems().get(i).toString();
            selectFilePath = namePath.get(hashKey);

            String ingestTimeStamp = MiscUtilities.getTimeStamp();//set timestamp for record group field
            System.out.println("  --Ingesting " + selectFilePath);

            consoleItems.add("  --Ingesting " + selectFilePath);
            lstConsole.setItems(consoleItems);

            //get all the data one row at a time and treat        
            try {
                dataReader = new TextFileReader(selectFilePath, currentLine, ingestTimeStamp);

            } catch (IOException ex) {
                Logger.getLogger(BillionGravesController.class.getName()).log(Level.SEVERE, null, ex);
            }
        }

        PPOFNLDataWriter getGrossRecordCount = new PPOFNLDataWriter("GROSS");
        Map<String, Integer> grossCountMap = getGrossRecordCount.grossData;

        consoleItems.add("Removing Duplicate Records");
        lstConsole.setItems(consoleItems);
        PPOFNLDataWriter removeDupes = new PPOFNLDataWriter();//removes dupes and embedded characters from load table.

        consoleItems.add("Assigning Unique Identifiers and Creating Sort Keys");
        lstConsole.setItems(consoleItems);
        PPOFNLDataWriter assignUI = new PPOFNLDataWriter(chkBoxUI.isSelected(), "");//Not ready to use.

        Date endDate = new Date();

        PPOFNLDataWriter getNetRecordCount = new PPOFNLDataWriter("NET");
        Map<String, Integer> netCountMap = getNetRecordCount.netData;

        PPOFNLDataWriter writeLog = new PPOFNLDataWriter(grossCountMap, netCountMap, fileGroupIngestTimestamp);

        long endTime = System.currentTimeMillis();

        Interval interval = new Interval(startTime, endTime);
        Period period = interval.toPeriod();

        consoleItems.add("Total elaped time = " + StringUtils.leftPad(String.valueOf(period.getHours()), 2, "0")
                + ":" + StringUtils.leftPad(String.valueOf(period.getMinutes()), 2, "0") + ":"
                + StringUtils.leftPad(String.valueOf(period.getSeconds()), 2, "0"));
        lstConsole.setItems(consoleItems);

        System.out.println("Total elaped time = " + StringUtils.leftPad(String.valueOf(period.getHours()), 2, "0")
                + ":" + StringUtils.leftPad(String.valueOf(period.getMinutes()), 2, "0") + ":"
                + StringUtils.leftPad(String.valueOf(period.getSeconds()), 2, "0"));

    }

    @FXML
    public void cbxRowsToPreview(ActionEvent event) {
        //System.out.println(cbxRowsToPreview.getSelectionModel().getSelectedItem());
        rowCount = Integer.valueOf(cbxRowsToPreview.getSelectionModel().getSelectedItem().toString());
    }

    @Override
    public void initialize(URL url, ResourceBundle rb) {
        tvDataPreview.getColumns().clear();
        cbxRowsToPreview.getSelectionModel().select(0);

        int selectedFileCount = lstViewFiles.getItems().size();
        Map buttonState = MiscUtilities.getButtonState(selectedFileCount);

        btnRemove1.setVisible((boolean) buttonState.get("Button1"));
        btnRemove2.setVisible((boolean) buttonState.get("Button2"));
        btnRemove3.setVisible((boolean) buttonState.get("Button3"));
        btnRemove4.setVisible((boolean) buttonState.get("Button4"));
        btnRemove5.setVisible((boolean) buttonState.get("Button5"));

    }
}