com.github.dougkelly88.FLIMPlateReaderGUI.SequencingClasses.Classes.FOVTableModel.java Source code

Java tutorial

Introduction

Here is the source code for com.github.dougkelly88.FLIMPlateReaderGUI.SequencingClasses.Classes.FOVTableModel.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.github.dougkelly88.FLIMPlateReaderGUI.SequencingClasses.Classes;

import com.github.dougkelly88.FLIMPlateReaderGUI.GeneralClasses.PlateProperties;
import com.github.dougkelly88.FLIMPlateReaderGUI.GeneralGUIComponents.HCAFLIMPluginFrame;
import java.util.ArrayList;
import javax.swing.table.AbstractTableModel;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;

/**
 *
 * @author dk1109
 */
public class FOVTableModel extends AbstractTableModel {
    public static final int WELL_INDEX = 0;
    public static final int X_INDEX = 1;
    public static final int Y_INDEX = 2;
    public static final int Z_INDEX = 3;
    public static final int GROUP_INDEX = 4;

    final static String um = "(" + "\u00B5" + "m)";

    private ArrayList<FOV> data_ = new ArrayList<FOV>();
    private String[] colNames_ = { "Well", "X" + um, "Y" + um, "Z" + um, "Group" };

    private PlateProperties pp_;

    //    private SeqAcqProps sap_;
    //TODO: remove duplicates!
    public FOVTableModel(PlateProperties pp) {
        pp_ = pp;
    }

    public FOVTableModel(String[] columnNames, PlateProperties pp) {
        this.colNames_ = columnNames;
        pp_ = pp;
    }

    @Override
    public String getColumnName(int col) {
        return colNames_[col];
    }

    @Override
    public Object getValueAt(int row, int col) {
        FOV fov = data_.get(row);
        switch (col) {
        case WELL_INDEX:
            return fov.getWell();
        case X_INDEX:
            return fov.getX();
        case Y_INDEX:
            return fov.getY();
        case Z_INDEX:
            return fov.getZ();
        case GROUP_INDEX:
            return fov.getGroup();
        default:
            return fov;
        }
    }

    public FOV getFOV(int row) {
        FOV fov = data_.get(row);
        return fov;
    }

    @Override
    public Class getColumnClass(int column) {
        switch (column) {
        case WELL_INDEX:
        case GROUP_INDEX:
            return String.class;
        case X_INDEX:
        case Y_INDEX:
        case Z_INDEX:
            return Double.class;
        default:
            return FOV.class;
        }
    }

    @Override
    public int getColumnCount() {
        return 5;
    }

    @Override
    public int getRowCount() {
        return data_.size();
    }

    public ArrayList<FOV> getData() {
        return data_;
    }

    public void addRow(FOV fov) {
        int row = data_.size();
        fov = validateData(fov);
        if (!data_.contains(fov)) {
            data_.add(fov);
            fireTableRowsInserted(row, row);
        }

        //        sap_.setDelaysArray(0, data_);
    }

    public void insertRow(int index, FOV fov) {
        fov = validateData(fov);
        if (!data_.contains(fov)) {
            data_.add(index, fov);
            fireTableRowsInserted(data_.size() - 1, data_.size() - 1);
        }
        //        sap_.setDelaysArray(0, data_);
    }

    public void removeRow(int row) {
        data_.remove(row);
        fireTableRowsDeleted(row, row);
        //        sap_.setDelaysArray(0, data_);
    }

    public void addWholeData(ArrayList<FOV> data) {
        data_.clear();

        data_.addAll(data);

        fireTableDataChanged();
        //        sap_.setDelaysArray(0, data_);
        //        this.addEmptyRow();
    }

    public void clearAllData() {
        data_.clear();
        fireTableDataChanged();
        //        sap_.setDelaysArray(0, data_);
    }

    @Override
    public boolean isCellEditable(int row, int col) {
        switch (col) {
        case WELL_INDEX:
            return false;
        case X_INDEX:
        case Y_INDEX:
        case Z_INDEX:
        case GROUP_INDEX:
            return true;
        default:
            return true;
        }
    }

    @Override
    public void setValueAt(Object value, int row, int column) {
        FOV fov = (FOV) data_.get(row);
        switch (column) {
        case WELL_INDEX:
            fov.setWell((String) value);
            break;
        case X_INDEX:
            value = validateX((Double) value, fov.getPlateProps());
            fov.setX((Double) value);
            break;
        case Y_INDEX:
            value = validateY((Double) value, fov.getPlateProps());
            fov.setY((Double) value);
            break;
        case Z_INDEX:
            fov.setZ((Double) value);
            break;
        case GROUP_INDEX:
            fov.setGroup((String) value);
            break;
        default:
            System.out.println("invalid index");
        }
        fireTableCellUpdated(row, column);
    }

    public void setValueAtRow(FOV fov, int row) {
        fov = validateData(fov);
        data_.set(row, fov);
    }

    private FOV validateData(FOV fov) {
        PlateProperties pp = fov.getPlateProps();
        double xmin = pp.getTopLeftWellOffsetH() - pp.getWellSpacingH() / 2;
        double xmax = pp.getTopLeftWellOffsetH() + (pp.getPlateColumns() - 0.5) * pp.getWellSpacingH();
        double ymin = pp.getTopLeftWellOffsetV() - pp.getWellSpacingV() / 2;
        double ymax = pp.getTopLeftWellOffsetV() + (pp.getPlateRows() - 0.5) * pp.getWellSpacingV();

        if (fov.getX() < xmin) {
            fov.setX(xmin);
        }
        if (fov.getX() > xmax) {
            fov.setX(xmax);
        }
        if (fov.getY() < ymin) {
            fov.setY(ymin);
        }
        if (fov.getY() > ymax) {
            fov.setY(ymax);
        }

        return fov;
    }

    private double validateX(double x, PlateProperties pp) {

        double xmin = pp.getTopLeftWellOffsetH() - pp.getWellSpacingH() / 2;
        double xmax = pp.getTopLeftWellOffsetH() + (pp.getPlateColumns() - 0.5) * pp.getWellSpacingH();

        if (x < xmin) {
            x = xmin;
        }
        if (x > xmax) {
            x = xmax;
        }

        return x;
    }

    private double validateY(double y, PlateProperties pp) {

        double ymin = pp.getTopLeftWellOffsetV() - pp.getWellSpacingV() / 2;
        double ymax = pp.getTopLeftWellOffsetV() + (pp.getPlateRows() - 0.5) * pp.getWellSpacingV();

        if (y < ymin) {
            y = ymin;
        }
        if (y > ymax) {
            y = ymax;
        }

        return y;
    }

    public void setPlateProps(PlateProperties pp) {
        pp_ = pp;
    }

    public void saveFOVTableModelAsSpreadsheet() {

        // Save FilterTable in first sheet of wb .xls
        // Initialize first sheet
        HSSFSheet sheet1 = HCAFLIMPluginFrame.wb.createSheet("XYSequencing");

        // Initialize first row with headers    
        int RowSize = data_.size();
        HSSFRow row0 = sheet1.createRow(0);
        HSSFCell cell00 = row0.createCell(0);
        HSSFCell cell01 = row0.createCell(1);
        HSSFCell cell02 = row0.createCell(2);
        HSSFCell cell03 = row0.createCell(3);
        HSSFCell cell04 = row0.createCell(4);
        cell00.setCellValue("Well");
        cell01.setCellValue("X " + um);
        cell02.setCellValue("Y" + um);
        cell03.setCellValue("Z" + um);
        cell04.setCellValue("Group");

        // write row for row from table to sheet        
        for (int RowNum = 0; RowNum < RowSize; RowNum++) {
            HSSFRow row = sheet1.createRow(RowNum + 1);
            HSSFCell cell0 = row.createCell(0);
            HSSFCell cell1 = row.createCell(1);
            HSSFCell cell2 = row.createCell(2);
            HSSFCell cell3 = row.createCell(3);
            HSSFCell cell4 = row.createCell(4);
            cell0.setCellValue(data_.get(RowNum).getWell());
            cell1.setCellValue(data_.get(RowNum).getX());
            cell2.setCellValue(data_.get(RowNum).getY());
            cell3.setCellValue(data_.get(RowNum).getZ());
            cell4.setCellValue(data_.get(RowNum).getGroup());
        }

        //To change body of generated methods, choose Tools | Templates.
    }

    public void loadFOVTableModelfromSpreadsheet() {
        ArrayList<FOV> load = new ArrayList();
        HSSFSheet worksheet = HCAFLIMPluginFrame.wbLoad.getSheet("XYSequencing");
        int RowSize = worksheet.getPhysicalNumberOfRows();
        for (int RowNum = 0; RowNum < RowSize - 1; RowNum++) {
            HSSFRow row = worksheet.getRow(RowNum + 1);
            HSSFCell cell0 = row.getCell(0);
            HSSFCell cell1 = row.getCell(1);
            HSSFCell cell2 = row.getCell(2);
            HSSFCell cell3 = row.getCell(3);
            HSSFCell cell4 = row.getCell(4);

            FOV fov = new FOV(cell1.getNumericCellValue(), cell2.getNumericCellValue(), cell3.getNumericCellValue(),
                    cell0.getStringCellValue(), pp_);
            fov.setGroup(cell4.getStringCellValue());
            load.add(fov);
        }
        data_ = load;
        fireTableDataChanged();

    }

}