Revision: 6676
http://squirrel-sql.svn.sourceforge.net/squirrel-sql/?rev=6676&view=rev
Author: gerdwagner
Date: 2012-10-06 20:55:15 +0000 (Sat, 06 Oct 2012)
Log Message:
-----------
More --> Overview tab: Now offers functionality to view query result data in bar charts. (Uses JFreeChart: http://www.jfree.org/jfreechart/)
Modified Paths:
--------------
trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/gui/desktopcontainer/docktabdesktop/SmallTabButton.java
trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/resources/SquirrelResources.java
trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/ChartHandler.java
trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/ColumnComboModel.java
trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/OverviewCtrl.java
trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/OverviewPanel.java
trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/DataScale.java
trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/IndexedColumn.java
trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/IndexedColumnFactory.java
trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/Interval.java
trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/ScaleFactory.java
trunk/sql12/app/src/main/resources/net/sourceforge/squirrel_sql/client/resources/squirrel.properties
trunk/sql12/app/src/main/resources/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/I18NStrings.properties
trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/datasetviewer/ColumnDisplayDefinition.java
Added Paths:
-----------
trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/ChartBarConfigButtonHandlerListener.java
trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/ChartConfigController.java
trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/ChartConfigMode.java
trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/ChartConfigPanel.java
trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/ChartConfigPanelTab.java
trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/ChartConfigPanelTabController.java
trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/ChartConfigPanelTabMode.java
trunk/sql12/app/src/main/resources/net/sourceforge/squirrel_sql/client/resources/images/aggcount.png
trunk/sql12/app/src/main/resources/net/sourceforge/squirrel_sql/client/resources/images/aggmax.png
trunk/sql12/app/src/main/resources/net/sourceforge/squirrel_sql/client/resources/images/aggmin.png
trunk/sql12/app/src/main/resources/net/sourceforge/squirrel_sql/client/resources/images/aggsum.png
trunk/sql12/app/src/main/resources/net/sourceforge/squirrel_sql/client/resources/images/aggxy.png
trunk/sql12/app/src/main/resources/net/sourceforge/squirrel_sql/client/resources/images/tab-detach-small.png
trunk/sql12/app/src/main/resources/net/sourceforge/squirrel_sql/client/resources/images/tab-detach.png
Modified: trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/gui/desktopcontainer/docktabdesktop/SmallTabButton.java
===================================================================
--- trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/gui/desktopcontainer/docktabdesktop/SmallTabButton.java 2012-10-02 23:25:27 UTC (rev 6675)
+++ trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/gui/desktopcontainer/docktabdesktop/SmallTabButton.java 2012-10-06 20:55:15 UTC (rev 6676)
@@ -7,17 +7,32 @@
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.image.BufferedImage;
-import java.awt.image.ImageObserver;
-public class SmallTabButton extends JButton
+public class SmallTabButton<T> extends JButton
{
private Icon _icon;
+ private T _userObject;
- public SmallTabButton(String toolTipText, Icon icon)
+
+ public SmallTabButton(String toolTipText, ImageIcon icon)
{
+ this(toolTipText, icon, null);
+ }
+
+ public SmallTabButton(String toolTipText, ImageIcon icon, T userObject)
+ {
_icon = icon;
- int size = 17;
+ _userObject = userObject;
+ int size;
+ if (null == icon)
+ {
+ size = 17;
+ }
+ else
+ {
+ size = Math.max(_icon.getIconWidth(), _icon.getIconHeight()) + 5;
+ }
setPreferredSize(new Dimension(size, size));
setToolTipText(toolTipText);
@@ -108,6 +123,20 @@
}
+ @Override
+ public void setIcon(Icon icon)
+ {
+ _icon = icon;
+ repaint();
+ }
+ public T getUserObject()
+ {
+ return _userObject;
+ }
+ public void setUserObject(T userObject)
+ {
+ _userObject = userObject;
+ }
}
Modified: trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/resources/SquirrelResources.java
===================================================================
--- trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/resources/SquirrelResources.java 2012-10-02 23:25:27 UTC (rev 6675)
+++ trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/resources/SquirrelResources.java 2012-10-06 20:55:15 UTC (rev 6676)
@@ -84,6 +84,15 @@
String SMALL_FILE = "smallFile";
String SMALL_FILE_CHANGED = "smallFileChanged";
+
+ String TAB_DETACH = "tabDetach";
+ String TAB_DETACH_SMALL = "tabDetachSmall";
+
+ String AGG_COUNT = "aggCount";
+ String AGG_SUM = "aggSum";
+ String AGG_XY = "aggXy";
+ String AGG_MIN = "aggMin";
+ String AGG_MAX = "aggMax";
}
public SquirrelResources(String rsrcBundleBaseName)
Added: trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/ChartBarConfigButtonHandlerListener.java
===================================================================
--- trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/ChartBarConfigButtonHandlerListener.java (rev 0)
+++ trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/ChartBarConfigButtonHandlerListener.java 2012-10-06 20:55:15 UTC (rev 6676)
@@ -0,0 +1,6 @@
+package net.sourceforge.squirrel_sql.client.session.mainpanel.overview;
+
+public interface ChartBarConfigButtonHandlerListener
+{
+ void modeSelected(ChartConfigMode mode);
+}
Added: trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/ChartConfigController.java
===================================================================
--- trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/ChartConfigController.java (rev 0)
+++ trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/ChartConfigController.java 2012-10-06 20:55:15 UTC (rev 6676)
@@ -0,0 +1,58 @@
+package net.sourceforge.squirrel_sql.client.session.mainpanel.overview;
+
+import net.sourceforge.squirrel_sql.client.IApplication;
+import net.sourceforge.squirrel_sql.client.session.mainpanel.overview.datascale.DataScale;
+import net.sourceforge.squirrel_sql.client.session.mainpanel.overview.datascale.DataScaleTable;
+import net.sourceforge.squirrel_sql.fw.util.StringManager;
+import net.sourceforge.squirrel_sql.fw.util.StringManagerFactory;
+
+import javax.swing.*;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.ItemEvent;
+import java.awt.event.ItemListener;
+import java.util.ArrayList;
+
+public class ChartConfigController
+{
+ private static final StringManager s_stringMgr = StringManagerFactory.getStringManager(ChartConfigController.class);
+ private ChartConfigPanel _chartConfigPanel;
+ private final ChartConfigPanelTabController[] _chartConfigPanelTabControllers;
+
+ public ChartConfigController(IApplication app)
+ {
+
+ _chartConfigPanelTabControllers = new ChartConfigPanelTabController[]
+ {
+ new ChartConfigPanelTabController(app, ChartConfigPanelTabMode.SINGLE_COLUMN),
+ new ChartConfigPanelTabController(app, ChartConfigPanelTabMode.XY_CHART),
+ //new ChartConfigPanelTabController(app, ChartConfigPanelTabMode.XYZ_CHART)
+ };
+
+
+ ArrayList<ChartConfigPanelTab> chartConfigPanelTabs = new ArrayList<ChartConfigPanelTab>();
+
+ for (ChartConfigPanelTabController chartConfigPanelTabController : _chartConfigPanelTabControllers)
+ {
+ chartConfigPanelTabs.add(chartConfigPanelTabController.getPanel());
+ }
+
+ _chartConfigPanel = new ChartConfigPanel(chartConfigPanelTabs);
+
+ }
+
+ public JScrollPane getPanel()
+ {
+ return _chartConfigPanel;
+ }
+
+ public void setDataScaleTable(DataScaleTable dataScaleTable)
+ {
+ for (ChartConfigPanelTabController chartConfigPanelTabController : _chartConfigPanelTabControllers)
+ {
+ chartConfigPanelTabController.setDataScaleTable(dataScaleTable);
+ }
+ }
+}
+
+
Added: trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/ChartConfigMode.java
===================================================================
--- trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/ChartConfigMode.java (rev 0)
+++ trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/ChartConfigMode.java 2012-10-06 20:55:15 UTC (rev 6676)
@@ -0,0 +1,106 @@
+package net.sourceforge.squirrel_sql.client.session.mainpanel.overview;
+
+import net.sourceforge.squirrel_sql.client.resources.SquirrelResources;
+import net.sourceforge.squirrel_sql.client.session.mainpanel.overview.datascale.DataScale;
+import net.sourceforge.squirrel_sql.client.session.mainpanel.overview.datascale.IndexedColumnFactory;
+import net.sourceforge.squirrel_sql.fw.datasetviewer.ColumnDisplayDefinition;
+import net.sourceforge.squirrel_sql.fw.util.StringManager;
+
+import java.util.ArrayList;
+
+public enum ChartConfigMode
+{
+ COUNT("overview.ChartConfigMode.modusCount", "overview.ChartConfigMode.modusCountAxisLabel", SquirrelResources.IImageNames.AGG_COUNT),
+ SUM("overview.ChartConfigMode.modusSum", "overview.ChartConfigMode.modusSumAxisLabel", SquirrelResources.IImageNames.AGG_SUM),
+
+ XY_COUNT_DISTINCT("overview.ChartConfigMode.modusCountDistinct", "overview.ChartConfigMode.modusCountDistinctAxisLabel", SquirrelResources.IImageNames.AGG_COUNT),
+ XY_SUM_COL("overview.ChartConfigMode.modusSum", "overview.ChartConfigMode.modusSumAxisLabelOfColumn", SquirrelResources.IImageNames.AGG_SUM);
+// XY_MIN("overview.ChartConfigMode.modusMin", "overview.ChartConfigMode.modusMinAxisLabel", SquirrelResources.IImageNames.AGG_MIN),
+// XY_MAX("overview.ChartConfigMode.modusMax", "overview.ChartConfigMode.modusMaxAxisLabel", SquirrelResources.IImageNames.AGG_MAX);
+
+ private final String _modusI18nKey;
+ private String _axisLabelI18nKey;
+ private final String _modusIconName;
+ private StringManager _s_stringMgr;
+
+ ChartConfigMode(String modusI18nKey, String axisLabelI18nKey, String modusIconName)
+ {
+ _modusI18nKey = modusI18nKey;
+ _axisLabelI18nKey = axisLabelI18nKey;
+ _modusIconName = modusIconName;
+ }
+
+
+
+
+ public static ChartConfigMode[] getAvailableValues(ColumnDisplayDefinition columnDisplayDefinition, ChartConfigPanelTabMode chartConfigPanelTabMode, StringManager s_stringMgr)
+ {
+ ArrayList<ChartConfigMode> ret = new ArrayList<ChartConfigMode>();
+
+ for (ChartConfigMode chartConfigMode : values())
+ {
+ chartConfigMode.setStringManager(s_stringMgr);
+ }
+
+ if (ChartConfigPanelTabMode.SINGLE_COLUMN == chartConfigPanelTabMode)
+ {
+ ret.add(COUNT);
+
+ if(IndexedColumnFactory.isSumable(columnDisplayDefinition))
+ {
+ ret.add(SUM);
+ }
+ }
+ else if (ChartConfigPanelTabMode.XY_CHART == chartConfigPanelTabMode)
+ {
+ ret.add(XY_COUNT_DISTINCT);
+
+ if(IndexedColumnFactory.isSumable(columnDisplayDefinition))
+ {
+ ret.add(XY_SUM_COL);
+ }
+
+// if(IndexedColumnFactory.isOrderable(columnDisplayDefinition))
+// {
+// ret.add(XY_MIN);
+// ret.add(XY_MAX);
+// }
+ }
+
+ return ret.toArray(new ChartConfigMode[ret.size()]);
+ }
+
+ private void setStringManager(StringManager s_stringMgr)
+ {
+ _s_stringMgr = s_stringMgr;
+ }
+
+ @Override
+ public String toString()
+ {
+ return _s_stringMgr.getString(_modusI18nKey);
+ }
+
+ public String getYAxisLabel(DataScale yAxisDataScale)
+ {
+ if(null == yAxisDataScale)
+ {
+ return _s_stringMgr.getString(_axisLabelI18nKey);
+ }
+ else
+ {
+ String col = yAxisDataScale.getColumnDisplayDefinition().getTableName();
+
+ if(null != col && 0 < col.trim().length())
+ {
+ col += "." + yAxisDataScale.getColumnDisplayDefinition().getColumnName();
+ }
+ else
+ {
+ col = yAxisDataScale.getColumnDisplayDefinition().getColumnName();
+ }
+
+ return _s_stringMgr.getString(_axisLabelI18nKey, col);
+ }
+ }
+}
Added: trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/ChartConfigPanel.java
===================================================================
--- trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/ChartConfigPanel.java (rev 0)
+++ trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/ChartConfigPanel.java 2012-10-06 20:55:15 UTC (rev 6676)
@@ -0,0 +1,29 @@
+package net.sourceforge.squirrel_sql.client.session.mainpanel.overview;
+
+import net.sourceforge.squirrel_sql.client.gui.builders.UIFactory;
+import net.sourceforge.squirrel_sql.client.gui.builders.UIFactoryAdapter;
+import net.sourceforge.squirrel_sql.fw.util.StringManager;
+import net.sourceforge.squirrel_sql.fw.util.StringManagerFactory;
+
+import javax.swing.*;
+import java.util.ArrayList;
+
+public class ChartConfigPanel extends JScrollPane
+{
+ private static final StringManager s_stringMgr = StringManagerFactory.getStringManager(ChartConfigController.class);
+
+
+ public ChartConfigPanel(ArrayList<ChartConfigPanelTab> chartConfigPanelTabs)
+ {
+
+ JTabbedPane tabbedPane = UIFactory.getInstance().createTabbedPane();
+
+ for (ChartConfigPanelTab chartConfigPanelTab : chartConfigPanelTabs)
+ {
+ tabbedPane.add(chartConfigPanelTab.getTabTitle(), chartConfigPanelTab);
+ }
+
+ setViewportView(tabbedPane);
+ }
+
+}
Added: trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/ChartConfigPanelTab.java
===================================================================
--- trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/ChartConfigPanelTab.java (rev 0)
+++ trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/ChartConfigPanelTab.java 2012-10-06 20:55:15 UTC (rev 6676)
@@ -0,0 +1,98 @@
+package net.sourceforge.squirrel_sql.client.session.mainpanel.overview;
+
+import net.sourceforge.squirrel_sql.fw.util.StringManager;
+import net.sourceforge.squirrel_sql.fw.util.StringManagerFactory;
+
+import javax.swing.*;
+import java.awt.*;
+
+public class ChartConfigPanelTab extends JPanel
+{
+ private static final StringManager s_stringMgr = StringManagerFactory.getStringManager(ChartConfigController.class);
+
+ JComboBox cboXColumns;
+ JComboBox cboYColumns;
+ JButton btnChart;
+ JComboBox cboCallDepth;
+ JComboBox cboYAxisKind;
+ private ChartConfigPanelTabMode _chartConfigPanelTabMode;
+
+
+ public ChartConfigPanelTab(ChartConfigPanelTabMode chartConfigPanelTabMode)
+ {
+ super(new GridBagLayout());
+ _chartConfigPanelTabMode = chartConfigPanelTabMode;
+
+ GridBagConstraints gbc;
+
+ gbc = new GridBagConstraints(0,0,1,1,0,0,GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(15,5,5,5),0,0);
+ add(new JLabel(s_stringMgr.getString("OverviewPanel.XAxis")), gbc);
+
+ gbc = new GridBagConstraints(1,0,1,1,0,0,GridBagConstraints.EAST, GridBagConstraints.HORIZONTAL, new Insets(15,10,5,5),0,0);
+ cboXColumns = new JComboBox();
+ add(cboXColumns, gbc);
+
+
+ if (chartConfigPanelTabMode == ChartConfigPanelTabMode.SINGLE_COLUMN)
+ {
+ gbc = new GridBagConstraints(0,1,1,1,0,0,GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(0,10,5,5),0,0);
+ add(new JLabel(s_stringMgr.getString("OverviewPanel.YAxis")), gbc);
+
+ gbc = new GridBagConstraints(1,1,1,1,0,0,GridBagConstraints.EAST, GridBagConstraints.HORIZONTAL, new Insets(0,10,5,5),0,0);
+ cboYAxisKind = new JComboBox();
+ add(cboYAxisKind, gbc);
+ }
+ else if(chartConfigPanelTabMode == ChartConfigPanelTabMode.XY_CHART)
+ {
+ gbc = new GridBagConstraints(0,1,1,1,0,0,GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(0,10,5,5),0,0);
+ add(new JLabel(s_stringMgr.getString("OverviewPanel.YAxis")), gbc);
+
+ gbc = new GridBagConstraints(1,1,1,1,0,0,GridBagConstraints.EAST, GridBagConstraints.HORIZONTAL, new Insets(0,10,5,5),0,0);
+ cboYColumns = new JComboBox();
+ add(cboYColumns, gbc);
+
+ gbc = new GridBagConstraints(2,1,1,1,0,0,GridBagConstraints.EAST, GridBagConstraints.HORIZONTAL, new Insets(0,0,5,5),0,0);
+ add(createAsKindPanel(), gbc);
+ }
+
+
+ gbc = new GridBagConstraints(0,2,1,1,0,0,GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(0,10,5,5),0,0);
+ add(new JLabel(s_stringMgr.getString("OverviewPanel.maxBarCount")), gbc);
+
+ gbc = new GridBagConstraints(1,2,1,1,0,0,GridBagConstraints.EAST, GridBagConstraints.HORIZONTAL, new Insets(0,10,5,5),0,0);
+ cboCallDepth = new JComboBox();
+ add(cboCallDepth, gbc);
+
+
+
+
+ gbc = new GridBagConstraints(0,3,2,1,0,0,GridBagConstraints.EAST, GridBagConstraints.HORIZONTAL, new Insets(15,10,5,0),0,0);
+ btnChart = new JButton(s_stringMgr.getString("OverviewPanel.showChartEndButton"));
+ add(btnChart, gbc);
+
+
+
+ int gbcCol = chartConfigPanelTabMode == ChartConfigPanelTabMode.SINGLE_COLUMN ? 4:5;
+ gbc = new GridBagConstraints(0,gbcCol,3,1,0,1,GridBagConstraints.EAST, GridBagConstraints.BOTH, new Insets(0,0,0,0),0,0);
+ add(new JPanel(), gbc);
+
+
+ gbc = new GridBagConstraints(3,0,1,4,1,0,GridBagConstraints.EAST, GridBagConstraints.BOTH, new Insets(0,0,0,0),0,0);
+ add(new JPanel(), gbc);
+ }
+
+ private JPanel createAsKindPanel()
+ {
+ JPanel pnl = new JPanel(new BorderLayout(5,0));
+ pnl.add(new JLabel(s_stringMgr.getString("OverviewPanel.as")), BorderLayout.WEST);
+
+ cboYAxisKind = new JComboBox();
+ pnl.add(cboYAxisKind, BorderLayout.CENTER);
+ return pnl;
+ }
+
+ public String getTabTitle()
+ {
+ return s_stringMgr.getString(_chartConfigPanelTabMode.getTabTitleKey());
+ }
+}
Added: trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/ChartConfigPanelTabController.java
===================================================================
--- trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/ChartConfigPanelTabController.java (rev 0)
+++ trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/ChartConfigPanelTabController.java 2012-10-06 20:55:15 UTC (rev 6676)
@@ -0,0 +1,134 @@
+package net.sourceforge.squirrel_sql.client.session.mainpanel.overview;
+
+
+import net.sourceforge.squirrel_sql.client.IApplication;
+import net.sourceforge.squirrel_sql.client.session.mainpanel.overview.datascale.DataScale;
+import net.sourceforge.squirrel_sql.client.session.mainpanel.overview.datascale.DataScaleTable;
+import net.sourceforge.squirrel_sql.fw.util.StringManager;
+import net.sourceforge.squirrel_sql.fw.util.StringManagerFactory;
+
+import javax.swing.*;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.ItemEvent;
+import java.awt.event.ItemListener;
+
+public class ChartConfigPanelTabController
+{
+ private static final StringManager s_stringMgr = StringManagerFactory.getStringManager(ChartConfigController.class);
+ private IApplication _app;
+ private ChartConfigPanelTabMode _chartConfigPanelTabMode;
+ private ChartConfigPanelTab _chartConfigPanelTab;
+ private DataScaleTable _dataScaleTable;
+
+
+ public ChartConfigPanelTabController(IApplication app, ChartConfigPanelTabMode chartConfigPanelTabMode)
+ {
+ _app = app;
+ _chartConfigPanelTabMode = chartConfigPanelTabMode;
+ _chartConfigPanelTab = new ChartConfigPanelTab(chartConfigPanelTabMode);
+
+ _chartConfigPanelTab.cboCallDepth.setModel(new DefaultComboBoxModel(CallDepthComboModel.createModels()));
+ _chartConfigPanelTab.cboCallDepth.setSelectedItem(CallDepthComboModel.getDefaultSelected());
+
+ if (_chartConfigPanelTabMode == ChartConfigPanelTabMode.SINGLE_COLUMN)
+ {
+ _chartConfigPanelTab.cboXColumns.addItemListener(new ItemListener()
+ {
+ @Override
+ public void itemStateChanged(ItemEvent e)
+ {
+ onColumnSelected(e, ChartConfigPanelTabController.this._chartConfigPanelTab.cboXColumns);
+ }
+ });
+ }
+ else if (_chartConfigPanelTabMode == ChartConfigPanelTabMode.XY_CHART)
+ {
+ _chartConfigPanelTab.cboYColumns.addItemListener(new ItemListener()
+ {
+ @Override
+ public void itemStateChanged(ItemEvent e)
+ {
+ onColumnSelected(e, ChartConfigPanelTabController.this._chartConfigPanelTab.cboYColumns);
+ }
+ });
+ }
+
+ _chartConfigPanelTab.btnChart.addActionListener(new ActionListener()
+ {
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ onChart();
+ }
+ });
+
+ }
+
+ public void setDataScaleTable(DataScaleTable dataScaleTable)
+ {
+ _dataScaleTable = dataScaleTable;
+
+
+ if (_chartConfigPanelTabMode == ChartConfigPanelTabMode.SINGLE_COLUMN)
+ {
+ fillColumnCombo(_chartConfigPanelTab.cboXColumns);
+ }
+ else if (_chartConfigPanelTabMode == ChartConfigPanelTabMode.XY_CHART)
+ {
+ fillColumnCombo(_chartConfigPanelTab.cboXColumns);
+ fillColumnCombo(_chartConfigPanelTab.cboYColumns);
+ }
+
+
+ onColumnSelected(null, _chartConfigPanelTab.cboXColumns);
+ }
+
+ private void fillColumnCombo(JComboBox cboColumns)
+ {
+ ColumnComboModel formerSelectedItem = (ColumnComboModel) cboColumns.getSelectedItem();
+ DefaultComboBoxModel defaultComboBoxModel = new DefaultComboBoxModel(ColumnComboModel.createColumnComboModels(_dataScaleTable));
+ cboColumns.setModel(defaultComboBoxModel);
+ cboColumns.setSelectedItem(formerSelectedItem);
+
+
+ if(null == cboColumns.getSelectedItem())
+ {
+ cboColumns.setSelectedIndex(0);
+ }
+ }
+
+
+ private void onColumnSelected(ItemEvent e, JComboBox cboColumns)
+ {
+ if (null == e || ItemEvent.SELECTED == e.getStateChange())
+ {
+ ColumnComboModel selectedColumn = (ColumnComboModel) cboColumns.getSelectedItem();
+ _chartConfigPanelTab.cboYAxisKind.setModel(new DefaultComboBoxModel(ChartConfigMode.getAvailableValues(selectedColumn.getColumnDisplayDefinition(), _chartConfigPanelTabMode,s_stringMgr)));
+ }
+ }
+
+
+ private void onChart()
+ {
+ ColumnComboModel selectedXAxisColumn = (ColumnComboModel) _chartConfigPanelTab.cboXColumns.getSelectedItem();
+ DataScale xAxisDataScale = _dataScaleTable.getDataScaleTableModel().getDataScaleAt(selectedXAxisColumn.getColumnIndexInDataScale());
+
+ DataScale yAxisDataScale = null;
+ if(_chartConfigPanelTabMode == ChartConfigPanelTabMode.XY_CHART)
+ {
+ ColumnComboModel selectedYAxisColumn = (ColumnComboModel) _chartConfigPanelTab.cboYColumns.getSelectedItem();
+ yAxisDataScale = _dataScaleTable.getDataScaleTableModel().getDataScaleAt(selectedYAxisColumn.getColumnIndexInDataScale());
+ }
+
+ CallDepthComboModel selItem = (CallDepthComboModel) _chartConfigPanelTab.cboCallDepth.getSelectedItem();
+
+ ChartHandler.doChart(xAxisDataScale, yAxisDataScale, selItem.getCallDepth(), _app, (ChartConfigMode) _chartConfigPanelTab.cboYAxisKind.getSelectedItem());
+ }
+
+
+ public ChartConfigPanelTab getPanel()
+ {
+ return _chartConfigPanelTab;
+ }
+}
Added: trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/ChartConfigPanelTabMode.java
===================================================================
--- trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/ChartConfigPanelTabMode.java (rev 0)
+++ trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/ChartConfigPanelTabMode.java 2012-10-06 20:55:15 UTC (rev 6676)
@@ -0,0 +1,20 @@
+package net.sourceforge.squirrel_sql.client.session.mainpanel.overview;
+
+public enum ChartConfigPanelTabMode
+{
+ SINGLE_COLUMN("overview.ChartConfigController.tabSingleColChart"),
+ XY_CHART("overview.ChartConfigController.tabXYChart"),
+ XYZ_CHART("overview.ChartConfigController.tabXYZChart");
+
+ private String _tabTitleKey;
+
+ ChartConfigPanelTabMode(String tabTitleKey)
+ {
+ _tabTitleKey = tabTitleKey;
+ }
+
+ public String getTabTitleKey()
+ {
+ return _tabTitleKey;
+ }
+}
Modified: trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/ChartHandler.java
===================================================================
--- trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/ChartHandler.java 2012-10-02 23:25:27 UTC (rev 6675)
+++ trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/ChartHandler.java 2012-10-06 20:55:15 UTC (rev 6676)
@@ -6,38 +6,41 @@
import net.sourceforge.squirrel_sql.client.session.mainpanel.overview.datascale.DataScaleListener;
import net.sourceforge.squirrel_sql.client.session.mainpanel.overview.datascale.Interval;
import net.sourceforge.squirrel_sql.client.session.mainpanel.overview.datascale.ScaleFactory;
+import net.sourceforge.squirrel_sql.fw.util.StringManager;
+import net.sourceforge.squirrel_sql.fw.util.StringManagerFactory;
import org.jfree.chart.*;
import org.jfree.chart.block.*;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.title.LegendTitle;
import org.jfree.data.category.DefaultCategoryDataset;
-import org.jfree.text.TextBlockAnchor;
import org.jfree.ui.HorizontalAlignment;
-import org.jfree.ui.RectangleAnchor;
import org.jfree.ui.RectangleEdge;
import javax.swing.*;
import java.awt.*;
import java.util.ArrayList;
+import java.util.HashSet;
public class ChartHandler
{
+ private static final StringManager s_stringMgr = StringManagerFactory.getStringManager(ChartHandler.class);
+
public static final int MAX_LEGEND_ENTRIES = 10;
- public static void doChart(DataScale dataScale, int callDepth, IApplication app)
+ public static void doChart(DataScale xAxisDataScale, DataScale yAxisDataScale, int callDepth, IApplication app, ChartConfigMode mode)
{
try
{
ArrayList<Object[]> rows = new ArrayList<Object[]>();
- for (Interval interval : dataScale.getIntervals())
+ for (Interval xAxisInterval : xAxisDataScale.getIntervals())
{
- rows.addAll(interval.getResultRows());
+ rows.addAll(xAxisInterval.getResultRows());
}
- ScaleFactory scaleFactory = new ScaleFactory(rows, dataScale.getColumnIx(), dataScale.getColumnDisplayDefinition(), callDepth);
+ ScaleFactory scaleFactory = new ScaleFactory(rows, xAxisDataScale.getColumnIx(), xAxisDataScale.getColumnDisplayDefinition(), callDepth);
DataScaleListener dumDataScaleListener = new DataScaleListener()
{
@@ -62,19 +65,19 @@
DefaultCategoryDataset categoryDataset = new DefaultCategoryDataset();
- String category = dataScale.getColumnDisplayDefinition().getColumnName();
+ String category = xAxisDataScale.getColumnDisplayDefinition().getColumnName();
for (Interval interval : newScale.getIntervals())
{
- categoryDataset.addValue(interval.getLen(), interval.getLabel(), category);
+ categoryDataset.addValue(calculateValue(interval, mode, yAxisDataScale), interval.getLabel(), category);
}
- String title = "Chart for column: " + dataScale.getColumnDisplayDefinition().getColumnName();
+ String title = "Chart for column: " + xAxisDataScale.getColumnDisplayDefinition().getColumnName();
JFreeChart chart = ChartFactory.createBarChart(
title, // chart title
category, // domain axis label
- "Count", // range axis label
+ mode.getYAxisLabel(yAxisDataScale), // range axis label
categoryDataset, // data
PlotOrientation.VERTICAL,
false, // include legend
@@ -126,6 +129,58 @@
}
+ private static double calculateValue(Interval interval, ChartConfigMode mode, DataScale yAxisDataScale)
+ {
+ switch(mode)
+ {
+ case COUNT:
+ return interval.getLen();
+ case SUM:
+
+ double retSum = 0;
+ for (int i = 0; i < interval.getLen(); i++)
+ {
+ Object o = interval.get(i);
+ if (null != o)
+ {
+ retSum += ((Number) o).doubleValue();
+ }
+ }
+ return retSum;
+ case XY_COUNT_DISTINCT:
+ HashSet distinctSet = new HashSet();
+
+ for (int i = 0; i < interval.getLen(); i++)
+ {
+ int dataSetRowIndex = interval.getDataSetRowIndex(i);
+ Object obj = yAxisDataScale.getIndexedColumn().getRow(dataSetRowIndex);
+ distinctSet.add(obj);
+ }
+
+ return distinctSet.size();
+ case XY_SUM_COL:
+ double retXYSumCol = 0;
+
+ for (int i = 0; i < interval.getLen(); i++)
+ {
+ int dataSetRowIndex = interval.getDataSetRowIndex(i);
+ Object obj = yAxisDataScale.getIndexedColumn().getRow(dataSetRowIndex);
+ if (null != obj)
+ {
+ retXYSumCol += ((Number) obj).doubleValue();
+ }
+ }
+
+ return retXYSumCol;
+
+ default:
+ throw new IllegalStateException("Dont know how to handle mode: " + mode);
+
+
+
+ }
+ }
+
private static String createLabel(DataScale dataScale, ArrayList<Object[]> rows)
{
String ret = "Contains " + rows.size() + " query result values in " + dataScale.getIntervals().size() + " intervals";
Modified: trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/ColumnComboModel.java
===================================================================
--- trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/ColumnComboModel.java 2012-10-02 23:25:27 UTC (rev 6675)
+++ trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/ColumnComboModel.java 2012-10-06 20:55:15 UTC (rev 6676)
@@ -1,23 +1,26 @@
package net.sourceforge.squirrel_sql.client.session.mainpanel.overview;
+import net.sourceforge.squirrel_sql.client.session.mainpanel.overview.datascale.DataScaleTable;
import net.sourceforge.squirrel_sql.fw.datasetviewer.ColumnDisplayDefinition;
public class ColumnComboModel
{
private ColumnDisplayDefinition _columnDefinition;
+ private int _columnIndexInDataScale;
- public ColumnComboModel(ColumnDisplayDefinition columnDefinition)
+ public ColumnComboModel(ColumnDisplayDefinition columnDefinition, int columnIndexInDataScale)
{
_columnDefinition = columnDefinition;
+ _columnIndexInDataScale = columnIndexInDataScale;
}
- public static ColumnComboModel[] createColumnComboModels(ColumnDisplayDefinition[] columnDefinitions)
+ public static ColumnComboModel[] createColumnComboModels(DataScaleTable dataScaleTable)
{
- ColumnComboModel[] ret = new ColumnComboModel[columnDefinitions.length];
+ ColumnComboModel[] ret = new ColumnComboModel[dataScaleTable.getColumnDisplayDefinitions().length];
- for (int i = 0; i < columnDefinitions.length; i++)
+ for (int i = 0; i < dataScaleTable.getColumnDisplayDefinitions().length; i++)
{
- ret[i] = new ColumnComboModel(columnDefinitions[i]);
+ ret[i] = new ColumnComboModel(dataScaleTable.getColumnDisplayDefinitions()[i], i);
}
return ret;
@@ -32,7 +35,7 @@
@Override
public int hashCode()
{
- return _columnDefinition.getFullTableColumnName().hashCode();
+ return (_columnDefinition.getFullTableColumnName() + "+++" +_columnIndexInDataScale).hashCode();
}
@Override
@@ -42,6 +45,16 @@
if (o == null || getClass() != o.getClass()) return false;
ColumnComboModel that = (ColumnComboModel) o;
- return _columnDefinition.getFullTableColumnName().equals(that._columnDefinition.getFullTableColumnName());
+ return _columnDefinition.getFullTableColumnName().equals(that._columnDefinition.getFullTableColumnName()) && _columnIndexInDataScale == that._columnIndexInDataScale;
}
+
+ public ColumnDisplayDefinition getColumnDisplayDefinition()
+ {
+ return _columnDefinition;
+ }
+
+ public int getColumnIndexInDataScale()
+ {
+ return _columnIndexInDataScale;
+ }
}
Modified: trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/OverviewCtrl.java
===================================================================
--- trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/OverviewCtrl.java 2012-10-02 23:25:27 UTC (rev 6675)
+++ trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/OverviewCtrl.java 2012-10-06 20:55:15 UTC (rev 6676)
@@ -18,13 +18,12 @@
import java.awt.datatransfer.StringSelection;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
-import java.awt.event.ItemEvent;
-import java.awt.event.ItemListener;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.List;
+import java.util.prefs.Preferences;
public class OverviewCtrl
{
@@ -34,13 +33,18 @@
private OverviewPanel _overviewPanel;
private IApplication _app;
private ISession _session;
+ private static final String PREF_KEY_CHART_PANEL_SPLIT = "Squirrel.overview.chartPanel.splitloc";
+ private ChartConfigController _chartConfigController;
public OverviewCtrl(final ISession session)
{
_session = session;
_app = session.getApplication();
- _overviewPanel = new OverviewPanel(_app.getResources());
+ _chartConfigController = new ChartConfigController(_app);
+
+ _overviewPanel = new OverviewPanel(_app.getResources(), _chartConfigController.getPanel());
+
_overviewPanel.btnNext.addActionListener(new ActionListener()
{
@Override
@@ -88,49 +92,34 @@
}
});
- _overviewPanel.btnChart.addActionListener(new ActionListener()
+
+ _overviewPanel.btnCreateBarChart.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
- onChart();
+ onCreateBarChart();
}
});
- _overviewPanel.cboCallDepth.setModel(new DefaultComboBoxModel(CallDepthComboModel.createModels()));
- _overviewPanel.cboCallDepth.setSelectedItem(CallDepthComboModel.getDefaultSelected());
-
- _overviewPanel.cboCallDepth.addItemListener(new ItemListener()
- {
- @Override
- public void itemStateChanged(ItemEvent e)
- {
- onCallDepthSelected(e);
- }
- });
-
-
}
- private void onCallDepthSelected(ItemEvent e)
+ private void onCreateBarChart()
{
- if(ItemEvent.SELECTED == e.getStateChange())
+ if(_overviewPanel.btnCreateBarChart.isSelected())
{
- CallDepthComboModel.saveSelection((CallDepthComboModel) _overviewPanel.cboCallDepth.getSelectedItem());
+ _overviewPanel.split.setDividerSize(_overviewPanel.standardDividerSize);
+ _overviewPanel.split.setDividerLocation(Preferences.userRoot().getInt(PREF_KEY_CHART_PANEL_SPLIT, 400));
}
+ else
+ {
+ Preferences.userRoot().putInt(PREF_KEY_CHART_PANEL_SPLIT, _overviewPanel.split.getDividerLocation());
+ _overviewPanel.split.setDividerSize(0);
+ _overviewPanel.split.setDividerLocation(Integer.MAX_VALUE);
+ }
}
- private void onChart()
- {
- int index = _overviewPanel.cboColumns.getSelectedIndex();
- DataScale dataScale = _overviewHolder.getDataScaleTable().getDataScaleTableModel().getDataScaleAt(index);
-
- CallDepthComboModel selItem = (CallDepthComboModel) _overviewPanel.cboCallDepth.getSelectedItem();
-
- ChartHandler.doChart(dataScale, selItem.getCallDepth(), _app);
- }
-
private void onReport()
{
try
@@ -377,28 +366,23 @@
_overviewPanel.scrollPane.setViewportView(_overviewHolder.getComponent());
- if (_overviewHolder.isScaleTable() && 0 < _overviewHolder.getDataScaleTable().getAllRows().size())
- {
- _overviewPanel.cboColumns.setEnabled(true);
- Object selectedItem = _overviewPanel.cboColumns.getSelectedItem();
- DefaultComboBoxModel defaultComboBoxModel = new DefaultComboBoxModel(ColumnComboModel.createColumnComboModels(_overviewHolder.getDataScaleTable().getColumnDisplayDefinitions()));
- _overviewPanel.cboColumns.setModel(defaultComboBoxModel);
- _overviewPanel.cboColumns.setSelectedItem(selectedItem);
- if(null == _overviewPanel.cboColumns.getSelectedItem())
- {
- _overviewPanel.cboColumns.setSelectedIndex(0);
- }
- _overviewPanel.btnChart.setEnabled(true);
+ if (_overviewHolder.isScaleTable() && 0 < _overviewHolder.getDataScaleTable().getAllRows().size())
+ {
_overviewPanel.btnReport.setEnabled(true);
+ _chartConfigController.setDataScaleTable(_overviewHolder.getDataScaleTable());
+ _overviewPanel.btnCreateBarChart.setEnabled(true);
+
}
else
{
- _overviewPanel.cboColumns.setEnabled(false);
- _overviewPanel.btnChart.setEnabled(false);
_overviewPanel.btnReport.setEnabled(false);
+ if (_overviewPanel.btnCreateBarChart.isSelected())
+ {
+ _overviewPanel.btnCreateBarChart.doClick();
+ }
+ _overviewPanel.btnCreateBarChart.setEnabled(false);
}
-
}
}
Modified: trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/OverviewPanel.java
===================================================================
--- trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/OverviewPanel.java 2012-10-02 23:25:27 UTC (rev 6675)
+++ trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/OverviewPanel.java 2012-10-06 20:55:15 UTC (rev 6676)
@@ -7,6 +7,9 @@
import javax.swing.*;
import java.awt.*;
+import java.awt.event.ComponentAdapter;
+import java.awt.event.ComponentEvent;
+import java.awt.event.ComponentListener;
public class OverviewPanel extends JPanel
{
@@ -22,24 +25,32 @@
JButton btnShowInTable;
JButton btnReport;
- JComboBox cboColumns;
- JButton btnChart;
- JComboBox cboCallDepth;
+ JSplitPane split;
+ JToggleButton btnCreateBarChart;
+ int standardDividerSize;
- public OverviewPanel(SquirrelResources rsrc)
+ public OverviewPanel(SquirrelResources rsrc, JScrollPane pnlChartConfig)
{
setLayout(new GridBagLayout());
GridBagConstraints gbc;
gbc = new GridBagConstraints(0,0,1,1,0,0,GridBagConstraints.NORTHEAST, GridBagConstraints.HORIZONTAL, new Insets(5,5,5,5),0,0);
- createButtonPanel(rsrc);
add(createButtonPanel(rsrc), gbc);
+
+
gbc = new GridBagConstraints(0,1,1,1,1,1,GridBagConstraints.NORTHEAST, GridBagConstraints.BOTH, new Insets(5,5,5,5),0,0);
- add(scrollPane, gbc);
+ split = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
+ add(split, gbc);
+ split.setLeftComponent(scrollPane);
+ split.setRightComponent(pnlChartConfig);
+ standardDividerSize = split.getDividerSize();
+
+ split.setDividerSize(0);
+ split.setDividerLocation(Integer.MAX_VALUE);
}
private JPanel createButtonPanel(SquirrelResources rsrc)
@@ -81,41 +92,13 @@
ret.add(new JPanel(), gbc);
- gbc = new GridBagConstraints(6,0,1,1,0,0,GridBagConstraints.NORTHEAST, GridBagConstraints.NONE, new Insets(0,15,0,0),0,0);
- ret.add(createChartPanel(), gbc);
+ gbc = new GridBagConstraints(6,0,1,1,0,0,GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(0,15,0,0),0,0);
+ btnCreateBarChart = new JToggleButton(s_stringMgr.getString("OverwiewPanel.createBarChart"));
+ ret.add(btnCreateBarChart, gbc);
return ret;
}
- private JPanel createChartPanel()
- {
- JPanel ret = new JPanel(new GridBagLayout());
-
- GridBagConstraints gbc;
-
- gbc = new GridBagConstraints(0,0,1,1,0,0,GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(0,0,0,5),0,0);
- ret.add(new JLabel(s_stringMgr.getString("OverviewPanel.showChartBegin")), gbc);
-
- gbc = new GridBagConstraints(1,0,1,1,0,0,GridBagConstraints.NORTHEAST, GridBagConstraints.NONE, new Insets(0,0,0,5),0,0);
- cboColumns = new JComboBox();
- ret.add(cboColumns, gbc);
-
- gbc = new GridBagConstraints(2,0,1,1,0,0,GridBagConstraints.NORTHEAST, GridBagConstraints.NONE, new Insets(0,0,0,10),0,0);
- btnChart = new JButton(s_stringMgr.getString("OverviewPanel.showChartEndButton"));
- ret.add(btnChart, gbc);
-
-
- gbc = new GridBagConstraints(3,0,1,1,0,0,GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(0,0,0,5),0,0);
- ret.add(new JLabel(s_stringMgr.getString("OverviewPanel.maxBarCount")), gbc);
-
- gbc = new GridBagConstraints(4,0,1,1,0,0,GridBagConstraints.NORTHEAST, GridBagConstraints.NONE, new Insets(0,0,0,5),0,0);
- cboCallDepth = new JComboBox();
- ret.add(cboCallDepth, gbc);
-
-
- return ret;
- }
-
public void setTable(DataScaleTable dataScaleTable)
{
scrollPane.setViewportView(dataScaleTable);
Modified: trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/DataScale.java
===================================================================
--- trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/DataScale.java 2012-10-02 23:25:27 UTC (rev 6675)
+++ trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/DataScale.java 2012-10-06 20:55:15 UTC (rev 6676)
@@ -173,4 +173,9 @@
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();
+ }
}
Modified: trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/IndexedColumn.java
===================================================================
--- trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/IndexedColumn.java 2012-10-02 23:25:27 UTC (rev 6675)
+++ trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/IndexedColumn.java 2012-10-06 20:55:15 UTC (rev 6676)
@@ -50,7 +50,13 @@
return _rows.get(rowIx)[_colIx];
}
+ public int getRowIx(int ix)
+ {
+ return _ix.get(ix);
+ }
+
+
public int binarySearch(Object border)
{
return Collections.binarySearch(_ix, new NoIx(border), _comparator);
@@ -93,6 +99,20 @@
return ret;
}
+ public int getFirstIndexOfVal(int startIx)
+ {
+ for (int i = startIx - 1; 0 <= i ; i--)
+ {
+ if(0 != _comparator.compare(new NoIx(get(startIx)), new NoIx(get(i))) )
+ {
+ return i;
+ }
+ }
+
+ return 0;
+ }
+
+
public int compareObjects(Object o1, Object o2)
{
return _comparator.compare(new NoIx(o1), new NoIx(o2));
Modified: trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/IndexedColumnFactory.java
===================================================================
--- trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/IndexedColumnFactory.java 2012-10-02 23:25:27 UTC (rev 6675)
+++ trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/IndexedColumnFactory.java 2012-10-06 20:55:15 UTC (rev 6676)
@@ -35,4 +35,43 @@
return new StringIndexedColumn(rows, colIx,colDef);
}
}
+
+ public static boolean isSumable(ColumnDisplayDefinition columnDisplayDefinition)
+ {
+ switch(columnDisplayDefinition.getSqlType())
+ {
+ case Types.INTEGER:
+ case Types.BIGINT:
+ case Types.SMALLINT:
+ case Types.DOUBLE:
+ case Types.DECIMAL:
+ case Types.FLOAT:
+ case Types.NUMERIC:
+ return true;
+ default:
+ return false;
+ }
+ }
+
+ public static boolean isOrderable(ColumnDisplayDefinition columnDisplayDefinition)
+ {
+ switch(columnDisplayDefinition.getSqlType())
+ {
+ case Types.INTEGER:
+ case Types.BIGINT:
+ case Types.SMALLINT:
+ case Types.DOUBLE:
+ case Types.DECIMAL:
+ case Types.FLOAT:
+ case Types.NUMERIC:
+ case Types.TIME:
+ case Types.TIMESTAMP:
+ case Types.DATE:
+ case Types.BIT:
+ case Types.BOOLEAN:
+ return true;
+ default:
+ return false;
+ }
+ }
}
Modified: trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/Interval.java
===================================================================
--- trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/Interval.java 2012-10-02 23:25:27 UTC (rev 6675)
+++ trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/Interval.java 2012-10-06 20:55:15 UTC (rev 6676)
@@ -159,4 +159,19 @@
{
return _indexedColumn.calculateDist(_beginData, _endData);
}
+
+ public Object get(int i)
+ {
+ return _indexedColumn.get(_firstIx + i);
+ }
+
+ public int getDataSetRowIndex(int intervalIx)
+ {
+ return _indexedColumn.getRowIx(_firstIx + intervalIx);
+ }
+
+ public IndexedColumn getIndexedColumn()
+ {
+ return _indexedColumn;
+ }
}
Modified: trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/ScaleFactory.java
===================================================================
--- trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/ScaleFactory.java 2012-10-02 23:25:27 UTC (rev 6675)
+++ trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/ScaleFactory.java 2012-10-06 20:55:15 UTC (rev 6676)
@@ -48,6 +48,7 @@
Integer lastIx = null;
Object lastBorder = min;
+
for (Object border : borders)
{
int bsRet = _indexedColumn.binarySearch(border);
@@ -56,25 +57,57 @@
if( 0 > bsRet)
{
- ip = (- bsRet - 1) - 1;
+ ip = (- bsRet - 1);
}
else
{
- ip = _indexedColumn.getLastIndexOfVal(bsRet);
+ //ip = _indexedColumn.getFirstIndexOfVal(bsRet);
+ ip = _indexedColumn.getLastIndexOfVal(bsRet)+1;
}
if(null == lastIx)
{
- ret.addInterval(new Interval(_indexedColumn, 0, ip, lastBorder, border));
- lastBorder = border;
- lastIx = ip + 1;
+ //ret.addInterval(new Interval(_indexedColumn, 0, Math.max(0, ip-1), lastBorder, border));
+
+// int firstIx = 0;
+// int endIx = Math.max(0, ip - 1);
+// if (1 == endIx - firstIx)
+// {
+// ret.addInterval(new Interval(_indexedColumn, firstIx, firstIx, _indexedColumn.get(firstIx), _indexedColumn.get(firstIx)));
+// ret.addInterval(new Interval(_indexedColumn, endIx, endIx, _indexedColumn.get(endIx), _indexedColumn.get(endIx)));
+// }
+// else
+// {
+// ret.addInterval(new Interval(_indexedColumn, 0, Math.max(0, ip-1), lastBorder, border));
+// }
+
+ int firstIx = 0;
+ int endIx = Math.max(0, ip - 1);
+ if (1 == createBorders(_indexedColumn.get(firstIx), _indexedColumn.get(endIx)).size())
+ {
+ // This makes sure that the first interval can always drilled down to one single value.
+ // Without this it might happen that the first interval contains two different values and cannot be further drilled down.
+ int lastIndexOfVal = _indexedColumn.getLastIndexOfVal(firstIx);
+ ret.addInterval(new Interval(_indexedColumn, firstIx, lastIndexOfVal, _indexedColumn.get(firstIx), _indexedColumn.get(firstIx)));
+ if (lastIndexOfVal+1 <= endIx)
+ {
+ ret.addInterval(new Interval(_indexedColumn, lastIndexOfVal+1, endIx, _indexedColumn.get(endIx), _indexedColumn.get(endIx)));
+ }
+ }
+ else
+ {
+ ret.addInterval(new Interval(_indexedColumn, 0, Math.max(0, ip-1), lastBorder, border));
+ }
+
+
+ lastIx = ip;
}
else if(ip > lastIx)
{
- ret.addInterval(new Interval(_indexedColumn, lastIx, ip, lastBorder, border));
- lastBorder = border;
- lastIx = ip + 1;
+ ret.addInterval(new Interval(_indexedColumn, lastIx, Math.max(0, ip-1), lastBorder, border));
+ lastIx = ip;
}
+ lastBorder = border;
}
if (_indexedColumn.size() > lastIx)
@@ -115,13 +148,16 @@
divide(min, max, ret, callDepth);
- if(0 == ret.size())
- {
- // There was no value that fits between min and max.
- // Now calling methods expect us to return min as a border.
- ret.add(min);
- }
+// if(0 == ret.size())
+// {
+// // There was no value that fits between min and max.
+// // Now calling methods expect us to return min as a border.
+// ret.add(min);
+// }
+ //ret.add(min);
+ ret.add(max);
+
return ret;
}
Copied: trunk/sql12/app/src/main/resources/net/sourceforge/squirrel_sql/client/resources/images/aggcount.png (from rev 6654, trunk/sql12/plugins/graph/src/main/resources/net/sourceforge/squirrel_sql/plugins/graph/images/aggcount.png)
===================================================================
(Binary files differ)
Copied: trunk/sql12/app/src/main/resources/net/sourceforge/squirrel_sql/client/resources/images/aggmax.png (from rev 6654, trunk/sql12/plugins/graph/src/main/resources/net/sourceforge/squirrel_sql/plugins/graph/images/aggmax.png)
===================================================================
(Binary files differ)
Copied: trunk/sql12/app/src/main/resources/net/sourceforge/squirrel_sql/client/resources/images/aggmin.png (from rev 6654, trunk/sql12/plugins/graph/src/main/resources/net/sourceforge/squirrel_sql/plugins/graph/images/aggmin.png)
===================================================================
(Binary files differ)
Copied: trunk/sql12/app/src/main/resources/net/sourceforge/squirrel_sql/client/resources/images/aggsum.png (from rev 6654, trunk/sql12/plugins/graph/src/main/resources/net/sourceforge/squirrel_sql/plugins/graph/images/aggsum.png)
===================================================================
(Binary files differ)
Added: trunk/sql12/app/src/main/resources/net/sourceforge/squirrel_sql/client/resources/images/aggxy.png
===================================================================
(Binary files differ)
Property changes on: trunk/sql12/app/src/main/resources/net/sourceforge/squirrel_sql/client/resources/images/aggxy.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: trunk/sql12/app/src/main/resources/net/sourceforge/squirrel_sql/client/resources/images/tab-detach-small.png
===================================================================
(Binary files differ)
Property changes on: trunk/sql12/app/src/main/resources/net/sourceforge/squirrel_sql/client/resources/images/tab-detach-small.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Added: trunk/sql12/app/src/main/resources/net/sourceforge/squirrel_sql/client/resources/images/tab-detach.png
===================================================================
(Binary files differ)
Property changes on: trunk/sql12/app/src/main/resources/net/sourceforge/squirrel_sql/client/resources/images/tab-detach.png
___________________________________________________________________
Added: svn:mime-type
+ application/octet-stream
Modified: trunk/sql12/app/src/main/resources/net/sourceforge/squirrel_sql/client/resources/squirrel.properties
===================================================================
--- trunk/sql12/app/src/main/resources/net/sourceforge/squirrel_sql/client/resources/squirrel.properties 2012-10-02 23:25:27 UTC (rev 6675)
+++ trunk/sql12/app/src/main/resources/net/sourceforge/squirrel_sql/client/resources/squirrel.properties 2012-10-06 20:55:15 UTC (rev 6676)
@@ -71,7 +71,17 @@
smallFile.image=smallFile.gif
smallFileChanged.image=smallFileChanged.gif
+tabDetach.image=tab-detach.png
+tabDetachSmall.image=tab-detach-small.png
+
+aggCount.image=aggcount.png
+aggSum.image=aggsum.png
+aggXy.image=aggxy.png
+aggMin.image=aggmin.png
+aggMax.image=aggmax.png
+
+
########
# icons displayed in the drivers list indicating whether
# or not driver could be loaded.
@@ -523,7 +533,7 @@
action.net.sourceforge.squirrel_sql.client.session.mainpanel.ResultTab$CloseAction.name=Close
action.net.sourceforge.squirrel_sql.client.session.mainpanel.ResultTab$CloseAction.tooltip=Close Tab
-action.net.sourceforge.squirrel_sql.client.session.mainpanel.ResultTab$CreateResultTabFrameAction.image=jc/createresultwindow.gif
+action.net.sourceforge.squirrel_sql.client.session.mainpanel.ResultTab$CreateResultTabFrameAction.image=tab-detach.png
action.net.sourceforge.squirrel_sql.client.session.mainpanel.ResultTab$CreateResultTabFrameAction.name=Pop
action.net.sourceforge.squirrel_sql.client.session.mainpanel.ResultTab$CreateResultTabFrameAction.tooltip=Show results in new window
Modified: trunk/sql12/app/src/main/resources/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/I18NStrings.properties
===================================================================
--- trunk/sql12/app/src/main/resources/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/I18NStrings.properties 2012-10-02 23:25:27 UTC (rev 6675)
+++ trunk/sql12/app/src/main/resources/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/I18NStrings.properties 2012-10-06 20:55:15 UTC (rev 6676)
@@ -21,7 +21,37 @@
OverwiewPanel.reportToolTip=Copy report of the current Overview as HTML to clipboard
-OverviewPanel.showChartBegin=Show column
-OverviewPanel.showChartEndButton=in bar chart
+#OverviewPanel.showChartBegin=Show column
+OverviewPanel.XAxis=X axis:
+OverviewPanel.showChartEndButton=Open chart window ...
-OverviewPanel.maxBarCount= with max. bar count
\ No newline at end of file
+OverviewPanel.maxBarCount=max. bar count:
+
+
+overview.ChartConfigMode.modusCount=Bar hight = row count
+overview.ChartConfigMode.modusSum=Bar hight = value sum
+overview.ChartConfigMode.modusMin=Bar hight = value min
+overview.ChartConfigMode.modusMax=Bar hight = value max
+overview.ChartConfigMode.modusCountDistinct=Bar hight = count distinct values
+
+
+
+OverviewPanel.as=as
+
+
+
+OverwiewPanel.createBarChart=Create bar chart
+OverviewPanel.YAxis=Y-axis:
+
+overview.ChartConfigController.tabSingleColChart=Single column chart
+overview.ChartConfigController.tabXYChart=Two column chart
+overview.ChartConfigController.tabXYZChart=Three column 3-Dim chart
+
+
+overview.ChartConfigMode.modusCountAxisLabel=Row count
+overview.ChartConfigMode.modusSumAxisLabel=Sum
+overview.ChartConfigMode.modusSumAxisLabelOfColumn=Sum of column {0}
+
+overview.ChartConfigMode.modusMinAxisLabel=Min of column {0}
+overview.ChartConfigMode.modusMaxAxisLabel=Max of column {0}
+overview.ChartConfigMode.modusCountDistinctAxisLabel=Count distinct of column {0}
Modified: trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/datasetviewer/ColumnDisplayDefinition.java
===================================================================
--- trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/datasetviewer/ColumnDisplayDefinition.java 2012-10-02 23:25:27 UTC (rev 6675)
+++ trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/datasetviewer/ColumnDisplayDefinition.java 2012-10-06 20:55:15 UTC (rev 6676)
@@ -113,6 +113,7 @@
private DialectType _dialectType;
private String _userProperty;
private Integer _absoluteWidth;
+ private String _tableName;
/**
* Ctor. The dialect type is set to GENERIC, so no plugin-overriding is
@@ -225,11 +226,13 @@
String columnLabel = md.getColumnLabel(idx);
String columnName = md.getColumnName(idx);
int displayWidth = columnLabel.length();
-
- // Sometimes, the table name is null. eg if the select statement contains a union clause.
- String fullTableColumnName =
+
+ _tableName = md.getTableName(idx);
+
+ // Sometimes, the table name is null. eg if the select statement contains a union clause.
+ String fullTableColumnName =
new StringBuilder()
- .append(md.getTableName(idx))
+ .append(_tableName)
.append(":")
.append(columnName)
.toString();
@@ -530,4 +533,9 @@
{
return _absoluteWidth;
}
+
+ publi...
[truncated message content] |