package net.sourceforge.squirrel_sql.client.session.mainpanel.overview.datascale; import net.sourceforge.squirrel_sql.fw.datasetviewer.ColumnDisplayDefinition; import net.sourceforge.squirrel_sql.fw.util.SquirrelConstants; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import java.util.HashMap; public class DataScale implements Comparable<DataScale> { private DataScalePanel _panel; private ArrayList<Interval> _intervals = new ArrayList<Interval>(); private String _column; private DataScaleListener _dataScaleListener; private int _columnIndex; private ColumnDisplayDefinition _columnDisplayDefinition; private HashMap<JButton, Interval> _intervalByButton = new HashMap<JButton, Interval>(); private Color _defaultButtonBackgroundColor; public DataScale(String column, DataScaleListener dataScaleListener, int columnIndex, ColumnDisplayDefinition columnDisplayDefinition) { _column = column; _dataScaleListener = dataScaleListener; // Needed just to define reasonable sorting of data column in overview table _columnIndex = columnIndex; _columnDisplayDefinition = columnDisplayDefinition; } public String getColumn() { return _column; } public void addInterval(Interval interval) { _intervals.add(interval); } public DataScalePanel getPanel() { if(null == _panel) { double[] wights = new double[_intervals.size()]; for (int i = 0; i < _intervals.size(); i++) { wights[i] = _intervals.get(i).getWight(); } _panel = new DataScalePanel(new DataScaleLayout(wights)); for (int i = 0; i < _intervals.size(); i++) { _panel.add(createButton(i)); } } return _panel; } private JButton createButton(final int intervalIx) { final String text = _intervals.get(intervalIx).getLabel(); final JButton ret = new JButton(text); _defaultButtonBackgroundColor = ret.getBackground(); ret.setToolTipText(_intervals.get(intervalIx).getToolTip()); ret.setBorder(BorderFactory.createLineBorder(Color.black)); ret.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { onButtonPressed(_intervals.get(intervalIx), ret); } }); _intervalByButton.put(ret, _intervals.get(intervalIx)); return ret; } private void onButtonPressed(Interval interval, JButton ret) { _dataScaleListener.intervalSelected(interval, ret); } public double getSumWeights() { double ret = 0; for (Interval interval : _intervals) { ret += interval.getWight(); } return ret; } public int getSumLens() { int ret = 0; for (Interval interval : _intervals) { ret += interval.getLen(); } return ret; } @Override public int compareTo(DataScale other) { return ((Integer)_columnIndex).compareTo(other._columnIndex); } void showInTableSelected(JButton buttonPopupWasOpenedAt) { _dataScaleListener.showInTable(_intervalByButton.get(buttonPopupWasOpenedAt)); } void showInTableWin(JButton buttonPopupWasOpenedAt) { _dataScaleListener.showInTableWin(_intervalByButton.get(buttonPopupWasOpenedAt)); } public JButton[] getButtons() { return _intervalByButton.keySet().toArray(new JButton[_intervalByButton.keySet().size()]); } public ArrayList<String> getIntervalReports() { ArrayList<String> ret = new ArrayList<String>(); for( int i = 0; i < _intervals.size(); i++ ) { ret.add(_intervals.get(i).getReport()); } return ret; } public ArrayList<Interval> getIntervals() { return _intervals; } public int getColumnIx() { return _columnIndex; } public ColumnDisplayDefinition getColumnDisplayDefinition() { return _columnDisplayDefinition; } public String getIntervalWidth() { if(0 == _intervals.size()) { return null; } return _intervals.get(_intervals.size()-1).getWidth(); // Take the last because the first may start with NULL and no width can be calculated from that. } public IndexedColumn getIndexedColumn() { return _intervals.get(0).getIndexedColumn(); } public void initButtonColor(JButton intervalButtonClicked) { for (JButton btn : getButtons()) { if(btn == intervalButtonClicked) { btn.setBackground(SquirrelConstants.TRACE_COLOR); } else { btn.setBackground(_defaultButtonBackgroundColor); } } } }