Commit 32d9f240 authored by Sabrina Oralkova's avatar Sabrina Oralkova
Browse files

Refactoring

parent b919bd5b
Loading
Loading
Loading
Loading
+12 −9
Original line number Diff line number Diff line
package cz.fidentis.analyst.gui.task.batch.distanceheatmap;
package cz.fidentis.analyst.gui.elements.colorscalepanel;

import javax.swing.*;
import java.awt.*;
@@ -12,11 +12,7 @@ public class ColorScalePanel extends JPanel {

    private final BufferedImage colorScaleImage;

    private static final double MIN = 0.0;
    private static double MAX;

    public ColorScalePanel(int width, int height, double maxHue) {
        MAX = maxHue;
    public ColorScalePanel(int width, int height) {
        colorScaleImage = createColorScaleImage(width, height);
        setPreferredSize(new Dimension(width, height));
    }
@@ -32,8 +28,7 @@ public class ColorScalePanel extends JPanel {
        WritableRaster raster = image.getRaster();

        for (int pixelRow = 0; pixelRow < height; pixelRow++) {
            //TODO - make note about the weird number
            double value = ((1 - MAX) / height) * pixelRow + 0.561;
            double value = (double) pixelRow / height;
            Color color = getColorForValue(value);

            for (int pixelColumn = 0; pixelColumn < width; pixelColumn++) {
@@ -50,6 +45,14 @@ public class ColorScalePanel extends JPanel {
    }

    private Color getColorForValue(double value) {
        return Color.getHSBColor((float) value, 1.0f, 1.0f);
        float progress = (float) value;

        // This is a calculation of continuous scale for range of blue colors from dark and saturated to bright and light
        // Calculates saturation from 0.1 up to 1.0
        float saturation = 0.1f + progress * 0.9f;
        // Calculates brightness from 1.0 down to 0.5
        float brightness = 1.0f - progress * 0.5f;

        return Color.getHSBColor(0.61f, saturation, brightness);
    }
}
 No newline at end of file
+54 −46
Original line number Diff line number Diff line
@@ -21,9 +21,8 @@ public class Heatmap {
    private final FacesProxy faces;
    private final JScrollPane scrollPane;
    private final Map<String, TableColumn> deletedColumns = new HashMap<>();

    JTable table;
    DefaultTableModel defaultTableModel;
    private final JTable table;
    private final DefaultTableModel defaultTableModel;

    private double[][] distances;
    private Double biggestDistance;
@@ -34,7 +33,6 @@ public class Heatmap {

    private final Color whiteColor = Color.white;

    private final double scalePercentage = 0.5;
    private final int additionalColumn = 1;
    private final int additionalRow = 1;
    private final int doubleClick = 2;
@@ -48,10 +46,10 @@ public class Heatmap {
     * @param panelHeight height of the panel for the heatmap table
     * @param panelWidth  width of the panel for the heatmap table
     */
    public Heatmap(FacesProxy faces, int panelHeight, int panelWidth) {
    public Heatmap(FacesProxy faces, double panelHeight, double panelWidth) {
        this.faces = faces;
        this.panelHeight = panelHeight;
        this.panelWidth = panelWidth;
        this.panelHeight = (int) panelHeight;
        this.panelWidth = (int) panelWidth;

        this.table = new JTable();
        this.defaultTableModel = setTableModel();
@@ -101,20 +99,15 @@ public class Heatmap {
        int heatmapHeight = cellSize * (table.getRowCount() + additionalRow) + additionalBorderPixels;
        int heatmapWidth = cellSize * (table.getColumnCount() + additionalColumn) + additionalBorderPixels;
        int sliderWidth = scrollPane.getVerticalScrollBar().getWidth();
        int heatmapSliderWidth = heatmapWidth + sliderWidth;


        if (heatmapHeight < panelHeight && heatmapWidth + sliderWidth < panelWidth) {
        if (heatmapHeight < panelHeight && heatmapSliderWidth < panelWidth) {
            scrollPane.setSize(heatmapWidth, heatmapHeight);
        } else if (heatmapHeight >= panelHeight && heatmapWidth + sliderWidth < panelWidth) {
            scrollPane.setSize(heatmapWidth + sliderWidth, panelHeight);
        } else if (heatmapHeight < panelHeight && heatmapWidth + sliderWidth >= panelWidth) {
        } else if (heatmapHeight < panelHeight) {
            scrollPane.setSize(panelWidth, heatmapHeight + sliderWidth);
        } else {
            scrollPane.setSize(panelWidth, panelHeight);
        }
        } else scrollPane.setSize(Math.min(heatmapSliderWidth, panelWidth), panelHeight);
    }

    //TODO - remove the highlighting of the header
    private JTableHeader createTableHeader() {
        return new JTableHeader(table.getColumnModel()) {
            @Override
@@ -161,15 +154,12 @@ public class Heatmap {
        }
    }

    //TODO - refactoring

    /**
     * Initialise the table to default settings as after loading the data
     */
    public void initializeTable(boolean createRowHeader) {
        setRowColumnCount();
        setTableSize();

        setTableHeaderSize();

        if (createRowHeader) {
@@ -179,9 +169,8 @@ public class Heatmap {
        setHeaderText();
        setHeadersToVisible();

        rowHeader.setRowHeaderWidth(cellSize);
        rowHeader.setRowHeaderHeight(cellSize);

        setRowHeaderHeight();
        setRowHeaderWidth();
        setCellHeight();
        setCellWidth();
    }
@@ -201,6 +190,14 @@ public class Heatmap {
        defaultTableModel.setColumnIdentifiers(facesNames);
    }

    private void setRowHeaderHeight() {
        rowHeader.setRowHeaderWidth(cellSize);
    }

    private void setRowHeaderWidth() {
        rowHeader.setRowHeaderHeight(cellSize);
    }

    private void setCellHeight() {
        table.setRowHeight(cellSize);
    }
@@ -224,7 +221,7 @@ public class Heatmap {
    }

    private void createMouseColumnHandler() {
        MouseColumnHandler mouseColumnHandler = new MouseColumnHandler(table, defaultTableModel);
        MouseColumnHandler mouseColumnHandler = new MouseColumnHandler(table);
        table.getTableHeader().addMouseListener(mouseColumnHandler);
        table.getTableHeader().addMouseMotionListener(mouseColumnHandler);
    }
@@ -255,8 +252,6 @@ public class Heatmap {
        this.biggestDistance = maxDistance;
    }
    
    //TODO - refactoring

    /**
     * Sets the colors to cells while generating the values and after every change to the heatmap
     */
@@ -265,28 +260,31 @@ public class Heatmap {
            table.getColumnModel().getColumn(i).setCellRenderer(new DefaultTableCellRenderer() {
                @Override
                public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
                    double cellValue;

                    if (value != null) {
                        String numericString = String.valueOf(value).replace(",", ".");
                        cellValue = Double.parseDouble(numericString);
                    } else {
                        cellValue = Double.parseDouble("0");
                    }
                    double cellValue = value != null ? Double.parseDouble(value.toString()) : Double.parseDouble("0");

                    final Component c = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
                    float hue = (float) ((1 - cellValue / (biggestDistance)) * scalePercentage + 0.561);
                    Color color = Color.getHSBColor(hue, 0.85f, 0.85f);
                    Color color = getColor(cellValue);

                    c.setBackground(color);
                    c.setForeground(color);

                    return c;
                }
            });
        }
    }

    private Color getColor(double cellValue) {
        float progress = (float) (cellValue / biggestDistance);

        // This is a calculation of continuous scale for range of blue colors from dark and saturated to bright and light
        // Calculates brightness from 0.5 up to 1.0
        float brightness = 0.5f + progress * 0.5f;
        // Calculates saturation from 1.0 down to 0.1
        float saturation = Math.max(0.1f, 1.0f - Math.max(0, progress - 0.5f) * 1.8f); //todo

        return Color.getHSBColor(0.61f, saturation, brightness);
    }

    private Object[] getDistancesOfRow(String returningRow) {
        Object[] rowsDistances = new Object[distances.length + additionalRow];

@@ -384,23 +382,24 @@ public class Heatmap {
        return scrollPane;
    }

    //TODO - header
    /**
     * Removes clicked column, adds it to a list of removed rows/columns and resets the table size
     * @param columnModel heatmap column model
     * @param removedColumn clicked colum for removal
     */
    public void removeColumn(TableColumnModel columnModel, TableColumn removedColumn) {
        deletedColumns.put(removedColumn.getHeaderValue().toString(), removedColumn);
        columnModel.removeColumn(removedColumn);
        setTableSize();
    }

    //TODO - header
    //TODO - refactoring
    //TODO - try to create hiddenRows
    /**
     * Removes clicked row, adds it to a list of removed rows/columns and resets the table size
     * @param removedRow clicked row for removal
     */
    public void removeRow(int removedRow) {
        defaultTableModel.removeRow(removedRow);

        setTableSize();

        table.getTableHeader().revalidate();
        table.getTableHeader().repaint();
    }

    /**
@@ -421,6 +420,15 @@ public class Heatmap {
        scrollPane.setVisible(true);
    }

    /**
     * Sets heatmap table visible
     */
    public void setHeatmapVisibleIfNonVisible() {
        if (!isHeatmapVisible()) {
            setHeatmapVisible();
        }
    }

    /**
     * Sets heatmap table not visible
     */
+11 −11
Original line number Diff line number Diff line
package cz.fidentis.analyst.gui.elements.heatmaptable;

import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.lang.ref.WeakReference;

/**
 * Handler for moving columns in the heatmap
 *
 * @author Sabrina Oralkova
 */
public class MouseColumnHandler implements MouseListener, MouseMotionListener {

    private Integer column = null;

    private Integer column;
    private final WeakReference<JTable> table;
    private final WeakReference<DefaultTableModel> tableModel;

    public MouseColumnHandler(JTable table, DefaultTableModel model) {
    public MouseColumnHandler(JTable table) {
        this.table = new WeakReference<>(table);
        this.tableModel = new WeakReference<>(model);
    }

    @Override
@@ -28,8 +25,8 @@ public class MouseColumnHandler implements MouseListener, MouseMotionListener {

    @Override
    public void mousePressed(MouseEvent event) {
        JTable table;
        if((table = this.table.get()) == null) {
        JTable table = this.table.get();
        if(table == null) {
            return;
        }
        column = table.columnAtPoint(event.getPoint());
@@ -48,14 +45,14 @@ public class MouseColumnHandler implements MouseListener, MouseMotionListener {

    @Override
    public void mouseDragged(MouseEvent event) {
        JTable table;
        if((table = this.table.get()) == null) {
        JTable table = this.table.get();
        if(table == null) {
            return;
        }

        int viewColumnIndex = table.columnAtPoint(event.getPoint());

        if(column == null || viewColumnIndex == column || viewColumnIndex < 0 || viewColumnIndex >= table.getColumnCount()) {
        if(column == null || viewColumnIndex == column || isIndexOutOfRange(viewColumnIndex, table)) {
            return;
        }

@@ -67,4 +64,7 @@ public class MouseColumnHandler implements MouseListener, MouseMotionListener {
    @Override
    public void mouseMoved(MouseEvent event) {}

    private boolean isIndexOutOfRange(int viewColumnIndex, JTable table) {
        return viewColumnIndex < 0 || viewColumnIndex >= table.getColumnCount();
    }
}
+14 −10
Original line number Diff line number Diff line
@@ -8,17 +8,17 @@ import java.awt.event.MouseMotionListener;
import java.lang.ref.WeakReference;

/**
 * Handler for moving rows in the heatmap
 *
 * @author Sabrina Oralkova
 */
public class MouseHandler implements MouseListener, MouseMotionListener {

    private Integer row = null;
public class MouseRowHandler implements MouseListener, MouseMotionListener {

    private Integer row;
    private final WeakReference<JTable> table;
    private final WeakReference<DefaultTableModel> tableModel;

    public MouseHandler(JTable table, DefaultTableModel model) {
    public MouseRowHandler(JTable table, DefaultTableModel model) {
        this.table = new WeakReference<>(table);
        this.tableModel = new WeakReference<>(model);
    }
@@ -28,8 +28,8 @@ public class MouseHandler implements MouseListener, MouseMotionListener {

    @Override
    public void mousePressed(MouseEvent event) {
        JTable table;
        if((table = this.table.get()) == null) {
        JTable table = this.table.get();
        if(table == null) {
            return;
        }
        int viewRowIndex = table.rowAtPoint(event.getPoint());
@@ -49,16 +49,17 @@ public class MouseHandler implements MouseListener, MouseMotionListener {

    @Override
    public void mouseDragged(MouseEvent event) {
        JTable table;
        DefaultTableModel tableModel;
        if((table = this.table.get()) == null || (tableModel = this.tableModel.get()) == null) {
        JTable table = this.table.get();
        DefaultTableModel tableModel = this.tableModel.get();

        if(table == null || tableModel == null) {
            return;
        }

        int viewRowIndex = table.rowAtPoint(event.getPoint());
        int currentRow = table.convertRowIndexToModel(viewRowIndex);

        if(row == null || currentRow == row || currentRow < 0 || currentRow >= table.getRowCount()) {
        if(row == null || currentRow == row || isIndexOutOfRange(currentRow, table)) {
            return;
        }

@@ -70,4 +71,7 @@ public class MouseHandler implements MouseListener, MouseMotionListener {
    @Override
    public void mouseMoved(MouseEvent event) {}

    private boolean isIndexOutOfRange(int currentRow, JTable table) {
        return currentRow < 0 || currentRow >= table.getRowCount();
    }
}
+36 −36
Original line number Diff line number Diff line
@@ -38,42 +38,6 @@ public class RowHeader {
        rowHeader.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
    }

    private JTable createRowHeaderTable(DefaultTableModel defaultTableModel) {
        return new JTable(defaultTableModel, createRowHeaderModel()) {
            public String getToolTipText(MouseEvent e) {
                return getValueAt(rowAtPoint(e.getPoint()), columnAtPoint(e.getPoint())).toString();
            }
        };
    }

    private TableColumnModel createRowHeaderModel() {
        return new DefaultTableColumnModel() {
            boolean first = true;

            public void addColumn(TableColumn tc) {
                if (first) {
                    super.addColumn(tc);
                    tc.setHeaderValue("");
                    first = false;
                }
            }
        };
    }

    private void createMouseRowHandler(DefaultTableModel defaultTableModel) {
        MouseHandler mouseHandler = new MouseHandler(rowHeader, defaultTableModel);
        rowHeader.addMouseListener(mouseHandler);
        rowHeader.addMouseMotionListener(mouseHandler);
    }

    private void createJViewport(JScrollPane scrollPane) {
        rowHeaderView = new JViewport();
        rowHeaderView.setView(rowHeader);
        rowHeaderView.setPreferredSize(rowHeader.getMaximumSize());

        scrollPane.setRowHeaderView(rowHeaderView);
    }

    /**
     * Gets the row header for a table
     *
@@ -112,4 +76,40 @@ public class RowHeader {
        rowHeader.getColumnModel().getColumn(0).setPreferredWidth(cellSize);
        rowHeaderView.setPreferredSize(rowHeader.getMaximumSize());
    }

    private JTable createRowHeaderTable(DefaultTableModel defaultTableModel) {
        return new JTable(defaultTableModel, createRowHeaderModel()) {
            public String getToolTipText(MouseEvent e) {
                return getValueAt(rowAtPoint(e.getPoint()), columnAtPoint(e.getPoint())).toString();
            }
        };
    }

    private TableColumnModel createRowHeaderModel() {
        return new DefaultTableColumnModel() {
            boolean first = true;

            public void addColumn(TableColumn tc) {
                if (first) {
                    super.addColumn(tc);
                    tc.setHeaderValue("");
                    first = false;
                }
            }
        };
    }

    private void createMouseRowHandler(DefaultTableModel defaultTableModel) {
        MouseRowHandler mouseRowHandler = new MouseRowHandler(rowHeader, defaultTableModel);
        rowHeader.addMouseListener(mouseRowHandler);
        rowHeader.addMouseMotionListener(mouseRowHandler);
    }

    private void createJViewport(JScrollPane scrollPane) {
        rowHeaderView = new JViewport();
        rowHeaderView.setView(rowHeader);
        rowHeaderView.setPreferredSize(rowHeader.getMaximumSize());

        scrollPane.setRowHeaderView(rowHeaderView);
    }
}
Loading