gatebass.utils.Get_Report_Parent.java Source code

Java tutorial

Introduction

Here is the source code for gatebass.utils.Get_Report_Parent.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 gatebass.utils;

import static gatebass.GateBass.users;
import gatebass.dataBase.tables.Base_j;
import gatebass.dataBase.tables.IndividualReplica;
import gatebass.dataBase.tables.IndividualWarning;
import gatebass.myControl.MyButtonFont;
import gatebass.utils.ParentControl;
import java.io.File;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import javafx.application.Platform;
import javafx.beans.binding.Bindings;
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.Label;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableRow;
import javafx.scene.control.TableView;
import javafx.scene.control.TextField;
import javafx.scene.input.KeyEvent;
import javafx.scene.input.MouseEvent;
import javafx.stage.FileChooser;
import javafx.stage.Stage;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.google.jhsheets.filtered.FilteredTableView;
import org.google.jhsheets.filtered.operators.BooleanOperator;
import org.google.jhsheets.filtered.operators.NumberOperator;
import org.google.jhsheets.filtered.operators.StringOperator;
import org.google.jhsheets.filtered.tablecolumn.AbstractFilterableTableColumn;
import org.google.jhsheets.filtered.tablecolumn.ColumnFilterEvent;
import org.google.jhsheets.filtered.tablecolumn.FilterableBooleanTableColumn;
import org.google.jhsheets.filtered.tablecolumn.FilterableIntegerTableColumn;
import org.google.jhsheets.filtered.tablecolumn.FilterableLongTableColumn;
import org.google.jhsheets.filtered.tablecolumn.FilterableStringTableColumn;

/**
 * FXML Controller class
 *
 * @author reza
 * @param <T>
 * @param <Y>
 */
public class Get_Report_Parent<T extends Base_j, Y> extends ParentControl {

    @FXML
    public MyButtonFont edit;
    @FXML
    public MyButtonFont review;
    @FXML
    private MyButtonFont export_to_excel;
    @FXML
    private MyButtonFont download_file;

    @FXML
    private Label userName;
    @FXML
    private Label sum;

    @FXML
    public FilteredTableView<T> tableView;
    @FXML
    public TableView<Y> work_table;
    @FXML
    public TableView<IndividualWarning> warning_Table;
    @FXML
    public TableView<IndividualReplica> replica_Table;
    @FXML
    private TextField textField;

    public ObservableList<T> t_List;

    @Override
    public void setStage(Stage s) {
        super.setStage(s);

        thisStage.getScene().setOnKeyReleased((KeyEvent event) -> {
            switch (event.getCode()) {
            case ENTER:
                if (edit.isDisable()) {
                    review.getOnAction().handle(null);
                } else {
                    edit.getOnAction().handle(null);
                }
                break;
            }
        });

        review.disableProperty().bind(tableView.getSelectionModel().selectedItemProperty().isNull());
        if (!edit.isDisabled()) {
            edit.disableProperty().bind(review.disableProperty());
        }
        download_file.disableProperty().bind(review.disableProperty());

        edit.init("pencil", 15);
        review.init("eye", 15);
        download_file.init("download", 15);
        export_to_excel.init("export", 15);

        download_file.setOnAction((ActionEvent event) -> {
            //            Printer printer = Printer.getDefaultPrinter();
            //            PageLayout pageLayout = printer.createPageLayout(Paper.A4, PageOrientation.PORTRAIT, Printer.MarginType.EQUAL);
            //
            //            double scaleX = pageLayout.getPrintableWidth() / tableView.getBoundsInParent().getWidth();
            //            double scaleY = pageLayout.getPrintableHeight() / tableView.getBoundsInParent().getHeight();
            //            tableView.getTransforms().add(new Scale(scaleX, scaleY));
            //
            //            PrinterJob printerJob = PrinterJob.createPrinterJob();
            //            if (printerJob.showPrintDialog(s) && printerJob.printPage(pageLayout, tableView)) {
            //                printerJob.endJob();
            //                System.out.println("printed");
            //            }
            //            FileChooser fileChooser = new FileChooser();
            //            File file = fileChooser.showSaveDialog(thisStage);
            //            if (file == null) {
            //                return;
            //            }
            //            try {
            //                file.mkdirs();
            //                List<IndividualFile> files_list = databaseHelper.individualFileDao.getAll("individual_id", databaseHelper.individualsDao.queryForId(tableView.getSelectionModel().getSelectedItem().getId()));
            //                for (IndividualFile f : files_list) {
            //                    FileUtils.copyFileToDirectory(new File(f.getAddress()), file);
            //                }
            //            } catch (IOException ex) {
            //                Logger.getLogger(Fxml_Get_Report_Individual_List.class.getName()).log(Level.SEVERE, null, ex);
            //            }
        });

        export_to_excel.setOnAction((ActionEvent event) -> {
            FileChooser fileChooser = new FileChooser();
            fileChooser.setTitle("  ");
            fileChooser.getExtensionFilters().addAll(new FileChooser.ExtensionFilter("Excel(*.xls)", "*.xls"));
            File file = fileChooser.showSaveDialog(thisStage);
            if (file == null) {
                return;
            }
            try {
                FileOutputStream fileOut = new FileOutputStream(file);
                HSSFWorkbook workbook = new HSSFWorkbook();
                HSSFSheet worksheet = workbook.createSheet("");
                int cellCount = 1;
                HSSFRow row = worksheet.createRow(0);
                row.createCell(0).setCellValue("?");
                for (TableColumn tc : tableView.getColumns()) {
                    if (tc.isVisible()) {
                        HSSFCell cell = row.createCell(cellCount);
                        cell.setCellValue(tc.getText() + "");
                        cellCount++;
                    }
                }
                int rowCount = 1;
                for (T lf : tableView.getItems()) {
                    row = worksheet.createRow(rowCount);
                    cellCount = 1;
                    row.createCell(0).setCellValue(rowCount + "");

                    for (TableColumn tc : tableView.getColumns()) {
                        if (tc.isVisible()) {
                            HSSFCell cell = row.createCell(cellCount);
                            try {
                                cell.setCellValue(tc.getCellObservableValue(rowCount - 1).getValue() + "");
                            } catch (Exception e) {
                            }
                            cellCount++;
                        }
                    }
                    rowCount++;
                }

                workbook.write(fileOut);
                fileOut.flush();
                fileOut.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        });

        userName.setText(" : " + users.getName_fa());
        sum.textProperty().bind(Bindings.size(tableView.itemsProperty().get()).asString());
        tableView.setFixedCellSize(35d);

        textField.textProperty()
                .addListener((ObservableValue<? extends String> observable, String oldValue, String newValue) -> {
                    tableFiltered(textFiltered(newValue));
                });

        tableView.addEventHandler(ColumnFilterEvent.FILTER_CHANGED_EVENT, (ColumnFilterEvent event) -> {
            tableFiltered(textFiltered(textField.getText()));
        });

        tableView.getSelectionModel().selectedItemProperty()
                .addListener((ObservableValue<? extends T> observable, T oldValue, T newValue) -> {
                    if (newValue != null) {
                        under_table_update(newValue.getId());
                    } else {
                        replica_Table.getItems().clear();
                        work_table.getItems().clear();
                        warning_Table.getItems().clear();
                    }
                });

        tableView.setRowFactory((TableView<T> param) -> {
            TableRow<T> row = new TableRow<>();
            row.setOnMouseClicked((MouseEvent event) -> {
                if (row.getIndex() == tableView.getSelectionModel().getSelectedIndex()
                        && event.getClickCount() >= 2) {
                    if (edit.isDisable()) {
                        review.getOnAction().handle(null);
                    } else {
                        edit.getOnAction().handle(null);
                    }
                }
            });
            return row;
        });
    }

    @Override
    public void show_And_Wait() {
        Platform.runLater(() -> {
            thisStage.setMaximized(true);
        });
        super.show_And_Wait();
    }

    @Override
    public void on_close() {
        super.on_close();
        thisStage.setMaximized(false);
    }

    public void set_Query(String query) {
        tableView.getItems().setAll(t_List);
    }

    private ObservableList<T> textFiltered(String newValue) {
        final List<T> remove = new ArrayList<>();
        final ObservableList<T> newData = FXCollections.concat(t_List);
        if (!newValue.trim().equals("")) {
            newData.stream().filter((item) -> (!item.get_filter_text().contains(newValue))).forEach((item) -> {
                remove.add(item);
            });
            newData.removeAll(remove);
        }
        return newData;
    }

    private void tableFiltered(ObservableList<T> newData) {

        for (AbstractFilterableTableColumn columns : tableView.getFilteredColumns()) {
            if (columns instanceof FilterableIntegerTableColumn) {
                filterIntColumn(newData, (FilterableIntegerTableColumn) columns);
            } else if (columns instanceof FilterableStringTableColumn) {
                filterStringColumn(newData, (FilterableStringTableColumn) columns);
            } else if (columns instanceof FilterableLongTableColumn) {
                filterDateColumn(newData, (FilterableLongTableColumn) columns);
            } else if (columns instanceof FilterableStringTableColumn) {
                filterBoolColumn(newData, (FilterableBooleanTableColumn) columns);
            }
        }
        tableView.getItems().setAll(newData);
    }

    private void filterIntColumn(ObservableList<T> newData, FilterableIntegerTableColumn<T, Integer> column) {
        final List<T> remove = new ArrayList<>();
        for (NumberOperator<Integer> filter : column.getFilters()) {
            if (filter.getValue() == null) {
                continue;
            }
            for (T item : newData) {
                int itemV;
                try {
                    itemV = Integer.parseInt(column.getCellData(item) + "");
                } catch (Exception e) {
                    remove.add(item);
                    continue;
                }
                if (filter.getType() == NumberOperator.Type.EQUALS) {
                    if (!Objects.equals(itemV, filter.getValue())) {
                        remove.add(item);
                    }
                } else if (filter.getType() == NumberOperator.Type.NOTEQUALS) {
                    if (Objects.equals(itemV, filter.getValue())) {
                        remove.add(item);
                    }
                } else if (filter.getType() == NumberOperator.Type.GREATERTHAN) {
                    if (itemV <= filter.getValue()) {
                        remove.add(item);
                    }
                } else if (filter.getType() == NumberOperator.Type.GREATERTHANEQUALS) {
                    if (itemV < filter.getValue()) {
                        remove.add(item);
                    }
                } else if (filter.getType() == NumberOperator.Type.LESSTHAN) {
                    if (itemV >= filter.getValue()) {
                        remove.add(item);
                    }
                } else if (filter.getType() == NumberOperator.Type.LESSTHANEQUALS) {
                    if (itemV > filter.getValue()) {
                        remove.add(item);
                    }
                }
            }
            newData.removeAll(remove);
        }
    }

    private void filterStringColumn(ObservableList<T> newData, FilterableStringTableColumn<T, Integer> column) {
        final List<T> remove = new ArrayList<>();
        for (StringOperator filter : column.getFilters()) {
            for (T item : newData) {
                String itemV = column.getCellData(item) + "";

                if (filter.getType() == StringOperator.Type.EQUALS) {
                    if (!itemV.equals(filter.getValue())) {
                        remove.add(item);
                    }
                } else if (filter.getType() == StringOperator.Type.NOTEQUALS) {
                    if (itemV.equals(filter.getValue())) {
                        remove.add(item);
                    }
                } else if (filter.getType() == StringOperator.Type.CONTAINS) {
                    if (!itemV.contains(filter.getValue())) {
                        remove.add(item);
                    }
                } else if (filter.getType() == StringOperator.Type.STARTSWITH) {
                    if (!itemV.startsWith(filter.getValue())) {
                        remove.add(item);
                    }
                } else if (filter.getType() == NumberOperator.Type.ENDSWITH) {
                    if (!itemV.endsWith(filter.getValue())) {
                        remove.add(item);
                    }
                }
            }
        }
        newData.removeAll(remove);
    }

    private void filterDateColumn(ObservableList<T> newData, FilterableLongTableColumn<T, Integer> column) {
        final List<T> remove = new ArrayList<>();
        for (NumberOperator<Long> filter : column.getFilters()) {
            try {
                filter.getValue().toString();
            } catch (Exception e) {
                continue;
            }
            for (T item : newData) {
                long itemV;
                try {
                    itemV = Long.parseLong(column.getCellData(item) + "");
                } catch (Exception e) {
                    remove.add(item);
                    continue;
                }
                long filterV = Long.parseLong(filter.getValue().toString().replace("/", ""));
                if (filter.getType() == NumberOperator.Type.EQUALS) {
                    if (!Objects.equals(itemV, filterV)) {
                        remove.add(item);
                    }
                } else if (filter.getType() == NumberOperator.Type.NOTEQUALS) {
                    if (Objects.equals(itemV, filterV)) {
                        remove.add(item);
                    }
                } else if (filter.getType() == NumberOperator.Type.GREATERTHAN) {
                    if (itemV <= filterV) {
                        remove.add(item);
                    }
                } else if (filter.getType() == NumberOperator.Type.GREATERTHANEQUALS) {
                    if (itemV < filterV) {
                        remove.add(item);
                    }
                } else if (filter.getType() == NumberOperator.Type.LESSTHAN) {
                    if (itemV >= filterV) {
                        remove.add(item);
                    }
                } else if (filter.getType() == NumberOperator.Type.LESSTHANEQUALS) {
                    if (itemV > filterV) {
                        remove.add(item);
                    }
                }
            }
        }
        newData.removeAll(remove);
    }

    private void filterBoolColumn(ObservableList<T> newData, FilterableBooleanTableColumn<T, Integer> column) {
        final List<T> remove = new ArrayList<>();
        for (BooleanOperator filter : column.getFilters()) {
            for (T item : newData) {

                boolean itemV;
                try {
                    itemV = Boolean.parseBoolean(column.getCellData(item) + "");
                } catch (Exception e) {
                    remove.add(item);
                    continue;
                }

                if (filter.getType() == BooleanOperator.Type.TRUE) {
                    if (!itemV) {
                        remove.add(item);
                    }
                } else if (filter.getType() == BooleanOperator.Type.FALSE) {
                    if (itemV) {
                        remove.add(item);
                    }
                }
            }
        }
        newData.removeAll(remove);
    }

    public void under_table_update(Integer id) {
    }

}