Revision: 6664
http://squirrel-sql.svn.sourceforge.net/squirrel-sql/?rev=6664&view=rev
Author: gerdwagner
Date: 2012-09-28 16:42:27 +0000 (Fri, 28 Sep 2012)
Log Message:
-----------
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/pom.xml
trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/ResultTab.java
trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/BooleanIndexedColumn.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/DoubleIndexedColumn.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/IntegerIndexedColumn.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/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/StringIndexedColumn.java
trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/TimestampIndexedColumn.java
trunk/sql12/app/src/main/resources/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/I18NStrings.properties
trunk/sql12/app/src/test/java/net/sourceforge/squirrel_sql/client/gui/builders/SquirrelTabbedPaneTest.java
trunk/sql12/doc/src/main/resources/changes.txt
trunk/sql12/installer/pom.xml
Added Paths:
-----------
trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/CallDepthComboModel.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
Removed Paths:
-------------
trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/OverwiewCtrl.java
trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/OverwiewPanel.java
Modified: trunk/sql12/app/pom.xml
===================================================================
--- trunk/sql12/app/pom.xml 2012-09-25 19:13:24 UTC (rev 6663)
+++ trunk/sql12/app/pom.xml 2012-09-28 16:42:27 UTC (rev 6664)
@@ -106,6 +106,16 @@
<version>${fest-version}</version>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>org.jfree</groupId>
+ <artifactId>jfreechart</artifactId>
+ <version>1.0.14</version>
+ </dependency>
+ <dependency>
+ <groupId>org.jfree</groupId>
+ <artifactId>jcommon</artifactId>
+ <version>1.0.17</version>
+ </dependency>
</dependencies>
<build>
<!-- Filter in the version from the version-plugin below, into Version.properties.
Modified: trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/ResultTab.java
===================================================================
--- trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/ResultTab.java 2012-09-25 19:13:24 UTC (rev 6663)
+++ trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/ResultTab.java 2012-09-28 16:42:27 UTC (rev 6664)
@@ -38,7 +38,7 @@
import javax.swing.event.ChangeListener;
import net.sourceforge.squirrel_sql.client.session.*;
-import net.sourceforge.squirrel_sql.client.session.mainpanel.overview.OverwiewCtrl;
+import net.sourceforge.squirrel_sql.client.session.mainpanel.overview.OverviewCtrl;
import net.sourceforge.squirrel_sql.fw.datasetviewer.*;
import net.sourceforge.squirrel_sql.fw.gui.MultipleLineLabel;
import net.sourceforge.squirrel_sql.fw.id.IHasIdentifier;
@@ -476,7 +476,7 @@
final int overViewIx = _tp.getTabCount();
- final OverwiewCtrl ctrl = new OverwiewCtrl(_session);
+ final OverviewCtrl ctrl = new OverviewCtrl(_session);
_tp.addTab(ctrl.getTitle(), ctrl.getPanel());
_tp.addChangeListener(new ChangeListener()
Added: trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/CallDepthComboModel.java
===================================================================
--- trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/CallDepthComboModel.java (rev 0)
+++ trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/CallDepthComboModel.java 2012-09-28 16:42:27 UTC (rev 6664)
@@ -0,0 +1,83 @@
+package net.sourceforge.squirrel_sql.client.session.mainpanel.overview;
+
+import net.sourceforge.squirrel_sql.client.session.mainpanel.overview.datascale.ScaleFactory;
+
+import java.util.prefs.Preferences;
+
+public class CallDepthComboModel
+{
+ public static final String PREF_KEY_OVERVIEW_BAR_CHART_CALL_DEPTH = "Squirrel.overview.bar.calldepth";
+
+
+ private int _callDepth;
+
+ public CallDepthComboModel(int callDepth)
+ {
+ _callDepth = callDepth;
+ }
+
+ public static CallDepthComboModel[] createModels()
+ {
+ return new CallDepthComboModel[]
+ {
+ new CallDepthComboModel(ScaleFactory.DEFAULT_CALL_DEPTH),
+ new CallDepthComboModel(ScaleFactory.DEFAULT_CALL_DEPTH + 1),
+ new CallDepthComboModel(ScaleFactory.DEFAULT_CALL_DEPTH + 2),
+ new CallDepthComboModel(ScaleFactory.DEFAULT_CALL_DEPTH + 3),
+ new CallDepthComboModel(ScaleFactory.DEFAULT_CALL_DEPTH + 4),
+ new CallDepthComboModel(ScaleFactory.DEFAULT_CALL_DEPTH + 5),
+ new CallDepthComboModel(ScaleFactory.DEFAULT_CALL_DEPTH + 6),
+ };
+ }
+
+ @Override
+ public String toString()
+ {
+ return "" + (int)(Math.pow(2, _callDepth-1) + 0.5d);
+ }
+
+ public static CallDepthComboModel getDefaultSelected()
+ {
+ int callDepth = Preferences.userRoot().getInt(PREF_KEY_OVERVIEW_BAR_CHART_CALL_DEPTH, ScaleFactory.DEFAULT_CALL_DEPTH);
+
+ for (CallDepthComboModel callDepthComboModel : createModels())
+ {
+ if(callDepthComboModel._callDepth == callDepth)
+ {
+ return callDepthComboModel;
+ }
+ }
+
+ return createModels()[0];
+
+ }
+
+ @Override
+ public boolean equals(Object o)
+ {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+
+ CallDepthComboModel that = (CallDepthComboModel) o;
+
+ if (_callDepth != that._callDepth) return false;
+
+ return true;
+ }
+
+ @Override
+ public int hashCode()
+ {
+ return _callDepth;
+ }
+
+ public static void saveSelection(CallDepthComboModel selectedItem)
+ {
+ Preferences.userRoot().putInt(PREF_KEY_OVERVIEW_BAR_CHART_CALL_DEPTH, selectedItem._callDepth);
+ }
+
+ public int getCallDepth()
+ {
+ return _callDepth;
+ }
+}
Added: 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 (rev 0)
+++ trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/ChartHandler.java 2012-09-28 16:42:27 UTC (rev 6664)
@@ -0,0 +1,177 @@
+package net.sourceforge.squirrel_sql.client.session.mainpanel.overview;
+
+import net.sourceforge.squirrel_sql.client.IApplication;
+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.DataScaleListener;
+import net.sourceforge.squirrel_sql.client.session.mainpanel.overview.datascale.Interval;
+import net.sourceforge.squirrel_sql.client.session.mainpanel.overview.datascale.ScaleFactory;
+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;
+
+public class ChartHandler
+{
+
+ public static final int MAX_LEGEND_ENTRIES = 10;
+
+ public static void doChart(DataScale dataScale, int callDepth, IApplication app)
+ {
+ try
+ {
+ ArrayList<Object[]> rows = new ArrayList<Object[]>();
+
+ for (Interval interval : dataScale.getIntervals())
+ {
+ rows.addAll(interval.getResultRows());
+ }
+
+
+ ScaleFactory scaleFactory = new ScaleFactory(rows, dataScale.getColumnIx(), dataScale.getColumnDisplayDefinition(), callDepth);
+
+ DataScaleListener dumDataScaleListener = new DataScaleListener()
+ {
+ @Override
+ public void intervalSelected(Interval interval)
+ {
+ }
+
+ @Override
+ public void showInTableWin(Interval interval)
+ {
+ }
+
+ @Override
+ public void showInTable(Interval interval)
+ {
+ }
+ };
+
+ DataScale newScale = scaleFactory.createScale(dumDataScaleListener);
+
+
+ DefaultCategoryDataset categoryDataset = new DefaultCategoryDataset();
+
+ String category = dataScale.getColumnDisplayDefinition().getColumnName();
+
+ for (Interval interval : newScale.getIntervals())
+ {
+ categoryDataset.addValue(interval.getLen(), interval.getLabel(), category);
+ }
+
+ String title = "Chart for column: " + dataScale.getColumnDisplayDefinition().getColumnName();
+
+ JFreeChart chart = ChartFactory.createBarChart(
+ title, // chart title
+ category, // domain axis label
+ "Count", // range axis label
+ categoryDataset, // data
+ PlotOrientation.VERTICAL,
+ false, // include legend
+ true, // tooltips?
+ false // URLs?
+ );
+
+ JFrame f = new JFrame(title);
+
+ final ImageIcon icon = app.getResources().getIcon(SquirrelResources.IImageNames.APPLICATION_ICON);
+ if (icon != null)
+ {
+ f.setIconImage(icon.getImage());
+ }
+
+
+ LegendTitle legendtitle = new LegendTitle(createLegendItemSource(chart));
+ BlockContainer blockcontainer = new BlockContainer(new BorderArrangement());
+ //blockcontainer.setBorder(new BlockBorder(1.0D, 1.0D, 1.0D, 1.0D));
+ LabelBlock labelblock = new LabelBlock(createLabel(newScale, rows), new Font("SansSerif", 1, 12));
+ //labelblock.setTextAnchor(RectangleAnchor.TOP_LEFT);
+ labelblock.setPadding(5D, 5D, 5D, 5D);
+ blockcontainer.add(labelblock, RectangleEdge.TOP);
+ //LabelBlock labelblock1 = new LabelBlock(createLabel(newScale, rows));
+ //labelblock1.setPadding(8D, 20D, 2D, 5D);
+ //blockcontainer.add(labelblock1, RectangleEdge.BOTTOM);
+ BlockContainer blockcontainer1 = legendtitle.getItemContainer();
+ blockcontainer1.setPadding(2D, 10D, 5D, 2D);
+ blockcontainer.add(blockcontainer1);
+ legendtitle.setWrapper(blockcontainer);
+ legendtitle.setPosition(RectangleEdge.BOTTOM);
+ legendtitle.setHorizontalAlignment(HorizontalAlignment.LEFT);
+ chart.addSubtitle(legendtitle);
+
+
+ ChartPanel chartPanel = new ChartPanel(chart);
+ f.getContentPane().add(chartPanel);
+
+
+ f.setLocation(app.getMainFrame().getLocationOnScreen());
+ f.setSize(app.getMainFrame().getSize());
+
+ f.setVisible(true);
+ }
+ catch (Exception e)
+ {
+ throw new RuntimeException(e);
+ }
+
+ }
+
+ private static String createLabel(DataScale dataScale, ArrayList<Object[]> rows)
+ {
+ String ret = "Contains " + rows.size() + " query result values in " + dataScale.getIntervals().size() + " intervals";
+
+ String intervalWidth = dataScale.getIntervalWidth();
+ if(null != intervalWidth)
+ {
+ ret += " of width " + intervalWidth;
+ }
+
+ ret += ".\nLegend shows the first and the last query result value of intervals. Intervals that contain no values are omitted.";
+
+
+ return ret;
+ }
+
+ private static LegendItemSource createLegendItemSource(final JFreeChart chart)
+ {
+ return new LegendItemSource()
+ {
+ @Override
+ public LegendItemCollection getLegendItems()
+ {
+ return reduceLegendItems(chart);
+ }
+ };
+ }
+
+ private static LegendItemCollection reduceLegendItems(JFreeChart chart)
+ {
+ LegendItemCollection legendItems = chart.getPlot().getLegendItems();
+
+ LegendItemCollection ret = new LegendItemCollection();
+
+ for (int i = 0; i < legendItems.getItemCount(); i++)
+ {
+ if(MAX_LEGEND_ENTRIES < i && MAX_LEGEND_ENTRIES < legendItems.getItemCount())
+ {
+ ret.add(new LegendItem("..."));
+ ret.add(legendItems.get(legendItems.getItemCount() - 1));
+ break;
+ }
+
+ ret.add(legendItems.get(i));
+ }
+
+ return ret;
+ }
+}
Added: 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 (rev 0)
+++ trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/ColumnComboModel.java 2012-09-28 16:42:27 UTC (rev 6664)
@@ -0,0 +1,47 @@
+package net.sourceforge.squirrel_sql.client.session.mainpanel.overview;
+
+import net.sourceforge.squirrel_sql.fw.datasetviewer.ColumnDisplayDefinition;
+
+public class ColumnComboModel
+{
+ private ColumnDisplayDefinition _columnDefinition;
+
+ public ColumnComboModel(ColumnDisplayDefinition columnDefinition)
+ {
+ _columnDefinition = columnDefinition;
+ }
+
+ public static ColumnComboModel[] createColumnComboModels(ColumnDisplayDefinition[] columnDefinitions)
+ {
+ ColumnComboModel[] ret = new ColumnComboModel[columnDefinitions.length];
+
+ for (int i = 0; i < columnDefinitions.length; i++)
+ {
+ ret[i] = new ColumnComboModel(columnDefinitions[i]);
+ }
+
+ return ret;
+ }
+
+ @Override
+ public String toString()
+ {
+ return _columnDefinition.getColumnName();
+ }
+
+ @Override
+ public int hashCode()
+ {
+ return _columnDefinition.getFullTableColumnName().hashCode();
+ }
+
+ @Override
+ public boolean equals(Object o)
+ {
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+
+ ColumnComboModel that = (ColumnComboModel) o;
+ return _columnDefinition.getFullTableColumnName().equals(that._columnDefinition.getFullTableColumnName());
+ }
+}
Copied: trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/OverviewCtrl.java (from rev 6661, trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/OverwiewCtrl.java)
===================================================================
--- trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/OverviewCtrl.java (rev 0)
+++ trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/OverviewCtrl.java 2012-09-28 16:42:27 UTC (rev 6664)
@@ -0,0 +1,404 @@
+package net.sourceforge.squirrel_sql.client.session.mainpanel.overview;
+
+import net.sourceforge.squirrel_sql.client.IApplication;
+import net.sourceforge.squirrel_sql.client.gui.desktopcontainer.DialogWidget;
+import net.sourceforge.squirrel_sql.client.session.DefaultDataModelImplementationDetails;
+import net.sourceforge.squirrel_sql.client.session.ISession;
+import net.sourceforge.squirrel_sql.client.session.mainpanel.overview.datascale.*;
+import net.sourceforge.squirrel_sql.fw.datasetviewer.*;
+import net.sourceforge.squirrel_sql.fw.util.StringManager;
+import net.sourceforge.squirrel_sql.fw.util.StringManagerFactory;
+
+import javax.swing.*;
+import javax.swing.table.DefaultTableColumnModel;
+import javax.swing.table.TableColumn;
+import javax.swing.table.TableColumnModel;
+import java.awt.*;
+import java.awt.datatransfer.Clipboard;
+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;
+
+public class OverviewCtrl
+{
+ private static final StringManager s_stringMgr = StringManagerFactory.getStringManager(OverviewCtrl.class);
+
+ private OverviewHolder _overviewHolder = new OverviewHolder();
+ private OverviewPanel _overviewPanel;
+ private IApplication _app;
+ private ISession _session;
+
+ public OverviewCtrl(final ISession session)
+ {
+ _session = session;
+ _app = session.getApplication();
+ _overviewPanel = new OverviewPanel(_app.getResources());
+
+ _overviewPanel.btnNext.addActionListener(new ActionListener()
+ {
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ onNext();
+ }
+ });
+
+ _overviewPanel.btnPrev.addActionListener(new ActionListener()
+ {
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ onPrev();
+ }
+ });
+
+ _overviewPanel.btnShowInTable.addActionListener(new ActionListener()
+ {
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ onShowInTable();
+ }
+ });
+
+
+ _overviewPanel.btnShowInTableWin.addActionListener(new ActionListener()
+ {
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ onShowInTableWin();
+ }
+ });
+
+
+ _overviewPanel.btnReport.addActionListener(new ActionListener()
+ {
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ onReport();
+ }
+ });
+
+ _overviewPanel.btnChart.addActionListener(new ActionListener()
+ {
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ onChart();
+ }
+ });
+
+ _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)
+ {
+ if(ItemEvent.SELECTED == e.getStateChange())
+ {
+ CallDepthComboModel.saveSelection((CallDepthComboModel) _overviewPanel.cboCallDepth.getSelectedItem());
+ }
+
+ }
+
+ 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
+ {
+ DataScaleTableModel dstm = _overviewHolder.getDataScaleTable().getDataScaleTableModel();
+
+ StringWriter sw = new StringWriter();
+ PrintWriter pw = new PrintWriter(sw);
+
+
+ pw.println("<html>");
+ pw.println("<body>");
+
+ for( int i = 0; i < dstm.getRowCount(); i++ )
+ {
+
+ DataScale dataScale = dstm.getDataScaleAt(i);
+
+ pw.println("<h1>Column name " + dataScale.getColumn() +":</h1>");
+ pw.println("<table border=\"1\">");
+ pw.println("<tr>");
+
+ ArrayList<String> intervalReports = dataScale.getIntervalReports();
+
+ for( String toolTip : intervalReports )
+ {
+ pw.println("<td>" + toolTip + "</td>");
+ }
+ pw.println("<tr>");
+ pw.println("</table>");
+
+ pw.println();
+ }
+
+ pw.println("</body>");
+ pw.println("</html>");
+ pw.flush();
+ sw.flush();
+ pw.close();
+ sw.close();
+
+ Clipboard clip = Toolkit.getDefaultToolkit().getSystemClipboard();
+ StringSelection data = new StringSelection(sw.getBuffer().toString());
+ clip.setContents(data, data);
+ }
+ catch(IOException e)
+ {
+ throw new RuntimeException(e);
+ }
+ }
+
+
+ private void onShowInTableWin()
+ {
+ DataSetViewerTablePanel simpleTable = createSimpleTable();
+ openWindowForTable(simpleTable);
+ }
+
+ private void openWindowForTable(DataSetViewerTablePanel simpleTable)
+ {
+ Window parent = SwingUtilities.windowForComponent(_overviewPanel.btnShowInTableWin);
+
+ OverviewFrame overviewFrame = new OverviewFrame(simpleTable, _app, parent);
+ _app.getMainFrame().addWidget(overviewFrame);
+ overviewFrame.setLayer(JLayeredPane.PALETTE_LAYER);
+ overviewFrame.setVisible(true);
+ DialogWidget.centerWithinDesktop(overviewFrame);
+ }
+
+ private void onShowInTable()
+ {
+ _overviewHolder.setOverview(createSimpleTable());
+ initGui();
+ }
+
+
+ private void onShowIntervalInTable(Interval interval)
+ {
+ List<Object[]> rows = interval.getResultRows();
+ ColumnDisplayDefinition[] columnDisplayDefinitions = _overviewHolder.getDataScaleTable().getColumnDisplayDefinitions();
+
+ _overviewHolder.setOverview(createSimpleTable(rows, columnDisplayDefinitions));
+ initGui();
+ }
+
+ private void onShowIntervalInTableWin(Interval interval)
+ {
+ List<Object[]> rows = interval.getResultRows();
+ ColumnDisplayDefinition[] columnDisplayDefinitions = _overviewHolder.getDataScaleTable().getColumnDisplayDefinitions();
+
+ openWindowForTable(createSimpleTable(rows, columnDisplayDefinitions));
+ }
+
+
+ private DataSetViewerTablePanel createSimpleTable()
+ {
+ List<Object[]> allRows = _overviewHolder.getDataScaleTable().getAllRows();
+ ColumnDisplayDefinition[] columnDisplayDefinitions = _overviewHolder.getDataScaleTable().getColumnDisplayDefinitions();
+
+ return createSimpleTable(allRows, columnDisplayDefinitions);
+ }
+
+ private DataSetViewerTablePanel createSimpleTable(List<Object[]> allRows, ColumnDisplayDefinition[] columnDisplayDefinitions)
+ {
+ try
+ {
+ OverviewDataSet ods = new OverviewDataSet(allRows, columnDisplayDefinitions);
+
+ DataSetViewerTablePanel dsv = new DataSetViewerTablePanel();
+ dsv.init(null, new DefaultDataModelImplementationDetails(_session));
+ dsv.show(ods);
+ return dsv;
+ }
+ catch (DataSetException e)
+ {
+ throw new RuntimeException(e);
+ }
+ }
+
+
+ private void onPrev()
+ {
+ _overviewHolder.setParent();
+ initGui();
+
+ }
+
+ private void onNext()
+ {
+ _overviewHolder.setKid();
+ initGui();
+ }
+
+ public String getTitle()
+ {
+ return s_stringMgr.getString("OverwiewCtrl.title");
+ }
+
+ public Component getPanel()
+ {
+ return _overviewPanel;
+ }
+
+ public void init(ResultSetDataSet rsds)
+ {
+ if(false == _overviewHolder.isEmpty())
+ {
+ return;
+ }
+
+ List<Object[]> rows = rsds.getAllDataForReadOnly();
+ DataSetDefinition dataSetDefinition = rsds.getDataSetDefinition();
+ ColumnDisplayDefinition[] columnDefinitions = dataSetDefinition.getColumnDefinitions();
+
+ initScales(rows, columnDefinitions);
+ }
+
+ private void onIntervalSelected(Interval interval, ColumnDisplayDefinition[] columnDefinitions)
+ {
+ if (false == interval.containsAllRows())
+ {
+ List<Object[]> rows = interval.getResultRows();
+ initScales(rows, columnDefinitions);
+ }
+ }
+
+
+ private void initScales(List<Object[]> rows, final ColumnDisplayDefinition[] columnDefinitions)
+ {
+ if(0 == rows.size())
+ {
+ initScaleTable(new DataScale[0], rows, columnDefinitions);
+ return;
+ }
+
+
+ DataScale[] scales = new DataScale[columnDefinitions.length];
+
+ DataScaleListener dataScaleListener = new DataScaleListener()
+ {
+ @Override
+ public void intervalSelected(Interval interval)
+ {
+ onIntervalSelected(interval, columnDefinitions);
+ }
+
+ @Override
+ public void showInTableWin(Interval interval)
+ {
+ onShowIntervalInTableWin(interval);
+ }
+
+ @Override
+ public void showInTable(Interval interval)
+ {
+ onShowIntervalInTable(interval);
+ }
+ };
+
+
+ for (int i = 0; i < columnDefinitions.length; i++)
+ {
+ scales[i] = new ScaleFactory(rows, i, columnDefinitions[i]).createScale(dataScaleListener);
+ }
+
+ initScaleTable(scales, rows, columnDefinitions);
+ }
+
+ private void initScaleTable(DataScale[] scales, List<Object[]> rows, ColumnDisplayDefinition[] columnDefinitions)
+ {
+ DataScaleTableModel dataScaleTableModel = new DataScaleTableModel(scales);
+ DataScaleTable dataScaleTable = new DataScaleTable(dataScaleTableModel, rows, columnDefinitions);
+
+ TableColumnModel tcm = new DefaultTableColumnModel();
+ dataScaleTable.setColumnModel(tcm);
+
+ for (int i = 0; i < DataScaleTableModel.getColumnNames().length; i++)
+ {
+ TableColumn col = new TableColumn(i);
+ col.setHeaderValue(DataScaleTableModel.getColumnNames()[i]);
+ if (DataScaleTableModel.COL_NAME_COLUMN.equals(DataScaleTableModel.getColumnNames()[i]))
+ {
+ col.setPreferredWidth(DataScaleTableColumnWidthsPersister.getColumnWidthForColName(DataScaleTableModel.COL_NAME_COLUMN));
+ }
+ else if (DataScaleTableModel.COL_NAME_DATA.equals(DataScaleTableModel.getColumnNames()[i]))
+ {
+ col.setPreferredWidth(DataScaleTableColumnWidthsPersister.getColumnWidthForColName(DataScaleTableModel.COL_NAME_DATA));
+ }
+ tcm.addColumn(col);
+ }
+
+ _overviewHolder.setOverview(dataScaleTable);
+ initGui();
+
+ }
+
+ private void initGui()
+ {
+ _overviewPanel.btnPrev.setEnabled(_overviewHolder.hasParent());
+ _overviewPanel.btnNext.setEnabled(_overviewHolder.hasKid());
+
+ _overviewPanel.btnShowInTable.setEnabled(_overviewHolder.canShowInSimpleTable());
+ _overviewPanel.btnShowInTableWin.setEnabled(_overviewHolder.canShowInSimpleTable());
+
+ _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);
+ _overviewPanel.btnReport.setEnabled(true);
+ }
+ else
+ {
+ _overviewPanel.cboColumns.setEnabled(false);
+ _overviewPanel.btnChart.setEnabled(false);
+ _overviewPanel.btnReport.setEnabled(false);
+ }
+
+ }
+}
Copied: trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/OverviewPanel.java (from rev 6661, trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/OverwiewPanel.java)
===================================================================
--- trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/OverviewPanel.java (rev 0)
+++ trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/OverviewPanel.java 2012-09-28 16:42:27 UTC (rev 6664)
@@ -0,0 +1,123 @@
+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.DataScaleTable;
+import net.sourceforge.squirrel_sql.fw.util.StringManager;
+import net.sourceforge.squirrel_sql.fw.util.StringManagerFactory;
+
+import javax.swing.*;
+import java.awt.*;
+
+public class OverviewPanel extends JPanel
+{
+ JScrollPane scrollPane = new JScrollPane();
+
+ private static final StringManager s_stringMgr = StringManagerFactory.getStringManager(OverviewPanel.class);
+
+
+ JButton btnPrev;
+ JButton btnNext;
+
+ JButton btnShowInTableWin;
+ JButton btnShowInTable;
+
+ JButton btnReport;
+ JComboBox cboColumns;
+ JButton btnChart;
+
+ JComboBox cboCallDepth;
+
+
+ public OverviewPanel(SquirrelResources rsrc)
+ {
+ 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);
+ }
+
+ private JPanel createButtonPanel(SquirrelResources rsrc)
+ {
+ JPanel ret = new JPanel(new GridBagLayout());
+
+ GridBagConstraints gbc;
+
+ gbc = new GridBagConstraints(0,0,1,1,0,0,GridBagConstraints.NORTHEAST, GridBagConstraints.NONE, new Insets(0,0,0,5),0,0);
+ btnPrev = new JButton(rsrc.getIcon(SquirrelResources.IImageNames.PREV_SCALE));
+ btnPrev.setToolTipText(s_stringMgr.getString("OverwiewPanel.prevOverview"));
+ btnPrev.setEnabled(false);
+ ret.add(btnPrev, gbc);
+
+
+ gbc = new GridBagConstraints(1,0,1,1,0,0,GridBagConstraints.NORTHEAST, GridBagConstraints.NONE, new Insets(0,0,0,20),0,0);
+ btnNext = new JButton(rsrc.getIcon(SquirrelResources.IImageNames.NEXT_SCALE));
+ btnNext.setToolTipText(s_stringMgr.getString("OverwiewPanel.nextOverview"));
+ btnNext.setEnabled(false);
+ ret.add(btnNext, gbc);
+
+ gbc = new GridBagConstraints(2,0,1,1,0,0,GridBagConstraints.NORTHEAST, GridBagConstraints.NONE, new Insets(0,0,0,5),0,0);
+ btnShowInTable = new JButton(s_stringMgr.getString("OverwiewPanel.showInTable"));
+ btnShowInTable.setToolTipText(s_stringMgr.getString("OverwiewPanel.showInTableToolTip"));
+ ret.add(btnShowInTable, gbc);
+
+ gbc = new GridBagConstraints(3,0,1,1,0,0,GridBagConstraints.NORTHEAST, GridBagConstraints.NONE, new Insets(0,0,0,5),0,0);
+ btnShowInTableWin = new JButton(s_stringMgr.getString("OverwiewPanel.showTableInWin"));
+ btnShowInTableWin.setToolTipText(s_stringMgr.getString("OverwiewPanel.showTableInWinToolTip"));
+ ret.add(btnShowInTableWin, gbc);
+
+ gbc = new GridBagConstraints(4,0,1,1,0,0,GridBagConstraints.NORTHEAST, GridBagConstraints.NONE, new Insets(0,10,0,0),0,0);
+ btnReport = new JButton(s_stringMgr.getString("OverwiewPanel.report"));
+ btnReport.setToolTipText(s_stringMgr.getString("OverwiewPanel.reportToolTip"));
+ ret.add(btnReport, gbc);
+
+
+ gbc = new GridBagConstraints(5,0,1,1,1,1,GridBagConstraints.NORTHEAST, GridBagConstraints.HORIZONTAL, new Insets(5,5,5,5),0,0);
+ 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);
+
+ 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);
+ }
+}
Deleted: trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/OverwiewCtrl.java
===================================================================
--- trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/OverwiewCtrl.java 2012-09-25 19:13:24 UTC (rev 6663)
+++ trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/OverwiewCtrl.java 2012-09-28 16:42:27 UTC (rev 6664)
@@ -1,337 +0,0 @@
-package net.sourceforge.squirrel_sql.client.session.mainpanel.overview;
-
-import net.sourceforge.squirrel_sql.client.IApplication;
-import net.sourceforge.squirrel_sql.client.gui.desktopcontainer.DialogWidget;
-import net.sourceforge.squirrel_sql.client.session.DefaultDataModelImplementationDetails;
-import net.sourceforge.squirrel_sql.client.session.ISession;
-import net.sourceforge.squirrel_sql.client.session.mainpanel.overview.datascale.*;
-import net.sourceforge.squirrel_sql.fw.datasetviewer.*;
-import net.sourceforge.squirrel_sql.fw.util.StringManager;
-import net.sourceforge.squirrel_sql.fw.util.StringManagerFactory;
-
-import javax.swing.*;
-import javax.swing.table.DefaultTableColumnModel;
-import javax.swing.table.TableColumn;
-import javax.swing.table.TableColumnModel;
-import java.awt.*;
-import java.awt.datatransfer.Clipboard;
-import java.awt.datatransfer.StringSelection;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.io.StringWriter;
-import java.util.ArrayList;
-import java.util.List;
-
-public class OverwiewCtrl
-{
- private static final StringManager s_stringMgr = StringManagerFactory.getStringManager(OverwiewCtrl.class);
-
- private OverviewHolder _overviewHolder = new OverviewHolder();
- private OverwiewPanel _overwiewPanel;
- private IApplication _app;
- private ISession _session;
-
- public OverwiewCtrl(final ISession session)
- {
- _session = session;
- _app = session.getApplication();
- _overwiewPanel = new OverwiewPanel(_app.getResources());
-
- _overwiewPanel.btnNext.addActionListener(new ActionListener()
- {
- @Override
- public void actionPerformed(ActionEvent e)
- {
- onNext();
- }
- });
-
- _overwiewPanel.btnPrev.addActionListener(new ActionListener()
- {
- @Override
- public void actionPerformed(ActionEvent e)
- {
- onPrev();
- }
- });
-
- _overwiewPanel.btnShowInTable.addActionListener(new ActionListener()
- {
- @Override
- public void actionPerformed(ActionEvent e)
- {
- onShowInTable();
- }
- });
-
-
- _overwiewPanel.btnShowInTableWin.addActionListener(new ActionListener()
- {
- @Override
- public void actionPerformed(ActionEvent e)
- {
- onShowInTableWin();
- }
- });
-
-
- _overwiewPanel.btnReport.addActionListener(new ActionListener()
- {
- @Override
- public void actionPerformed(ActionEvent e)
- {
- onReport();
- }
- });
- }
-
- private void onReport()
- {
- try
- {
- DataScaleTableModel dstm = _overviewHolder.getDataScaleTable().getDataScaleTableModel();
-
- StringWriter sw = new StringWriter();
- PrintWriter pw = new PrintWriter(sw);
-
-
- pw.println("<html>");
- pw.println("<body>");
-
- for( int i = 0; i < dstm.getRowCount(); i++ )
- {
-
- DataScale dataScale = dstm.getDataScaleAt(i);
-
- pw.println("<h1>Column name " + dataScale.getColumn() +":</h1>");
- pw.println("<table border=\"1\">");
- pw.println("<tr>");
-
- ArrayList<String> intervalReports = dataScale.getIntervalReports();
-
- for( String toolTip : intervalReports )
- {
- pw.println("<td>" + toolTip + "</td>");
- }
- pw.println("<tr>");
- pw.println("</table>");
-
- pw.println();
- }
-
- pw.println("</body>");
- pw.println("</html>");
- pw.flush();
- sw.flush();
- pw.close();
- sw.close();
-
- Clipboard clip = Toolkit.getDefaultToolkit().getSystemClipboard();
- StringSelection data = new StringSelection(sw.getBuffer().toString());
- clip.setContents(data, data);
- }
- catch(IOException e)
- {
- throw new RuntimeException(e);
- }
- }
-
-
- private void onShowInTableWin()
- {
- DataSetViewerTablePanel simpleTable = createSimpleTable();
- openWindowForTable(simpleTable);
- }
-
- private void openWindowForTable(DataSetViewerTablePanel simpleTable)
- {
- Window parent = SwingUtilities.windowForComponent(_overwiewPanel.btnShowInTableWin);
-
- OverviewFrame overviewFrame = new OverviewFrame(simpleTable, _app, parent);
- _app.getMainFrame().addWidget(overviewFrame);
- overviewFrame.setLayer(JLayeredPane.PALETTE_LAYER);
- overviewFrame.setVisible(true);
- DialogWidget.centerWithinDesktop(overviewFrame);
- }
-
- private void onShowInTable()
- {
- _overviewHolder.setOverview(createSimpleTable());
- initGui();
- }
-
-
- private void onShowIntervalInTable(Interval interval)
- {
- List<Object[]> rows = interval.getResultRows();
- ColumnDisplayDefinition[] columnDisplayDefinitions = _overviewHolder.getDataScaleTable().getColumnDisplayDefinitions();
-
- _overviewHolder.setOverview(createSimpleTable(rows, columnDisplayDefinitions));
- initGui();
- }
-
- private void onShowIntervalInTableWin(Interval interval)
- {
- List<Object[]> rows = interval.getResultRows();
- ColumnDisplayDefinition[] columnDisplayDefinitions = _overviewHolder.getDataScaleTable().getColumnDisplayDefinitions();
-
- openWindowForTable(createSimpleTable(rows, columnDisplayDefinitions));
- }
-
-
- private DataSetViewerTablePanel createSimpleTable()
- {
- List<Object[]> allRows = _overviewHolder.getDataScaleTable().getAllRows();
- ColumnDisplayDefinition[] columnDisplayDefinitions = _overviewHolder.getDataScaleTable().getColumnDisplayDefinitions();
-
- return createSimpleTable(allRows, columnDisplayDefinitions);
- }
-
- private DataSetViewerTablePanel createSimpleTable(List<Object[]> allRows, ColumnDisplayDefinition[] columnDisplayDefinitions)
- {
- try
- {
- OverviewDataSet ods = new OverviewDataSet(allRows, columnDisplayDefinitions);
-
- DataSetViewerTablePanel dsv = new DataSetViewerTablePanel();
- dsv.init(null, new DefaultDataModelImplementationDetails(_session));
- dsv.show(ods);
- return dsv;
- }
- catch (DataSetException e)
- {
- throw new RuntimeException(e);
- }
- }
-
-
- private void onPrev()
- {
- _overviewHolder.setParent();
- initGui();
-
- }
-
- private void onNext()
- {
- _overviewHolder.setKid();
- initGui();
- }
-
- public String getTitle()
- {
- return s_stringMgr.getString("OverwiewCtrl.title");
- }
-
- public Component getPanel()
- {
- return _overwiewPanel;
- }
-
- public void init(ResultSetDataSet rsds)
- {
- if(false == _overviewHolder.isEmpty())
- {
- return;
- }
-
-
- List<Object[]> rows = rsds.getAllDataForReadOnly();
- DataSetDefinition dataSetDefinition = rsds.getDataSetDefinition();
- ColumnDisplayDefinition[] columnDefinitions = dataSetDefinition.getColumnDefinitions();
-
- initScales(rows, columnDefinitions);
- }
-
- private void onIntervalSelected(Interval interval, ColumnDisplayDefinition[] columnDefinitions)
- {
- if (false == interval.containsAllRows())
- {
- List<Object[]> rows = interval.getResultRows();
- initScales(rows, columnDefinitions);
- }
- }
-
-
- private void initScales(List<Object[]> rows, final ColumnDisplayDefinition[] columnDefinitions)
- {
- if(0 == rows.size())
- {
- initScaleTable(new DataScale[0], rows, columnDefinitions);
- return;
- }
-
-
- DataScale[] scales = new DataScale[columnDefinitions.length];
-
- DataScaleListener dataScaleListener = new DataScaleListener()
- {
- @Override
- public void intervalSelected(Interval interval)
- {
- onIntervalSelected(interval, columnDefinitions);
- }
-
- @Override
- public void showInTableWin(Interval interval)
- {
- onShowIntervalInTableWin(interval);
- }
-
- @Override
- public void showInTable(Interval interval)
- {
- onShowIntervalInTable(interval);
- }
- };
-
-
- for (int i = 0; i < columnDefinitions.length; i++)
- {
- scales[i] = new ScaleFactory(rows, i, columnDefinitions[i]).createScale(dataScaleListener);
- }
-
- initScaleTable(scales, rows, columnDefinitions);
- }
-
- private void initScaleTable(DataScale[] scales, List<Object[]> rows, ColumnDisplayDefinition[] columnDefinitions)
- {
- DataScaleTableModel dataScaleTableModel = new DataScaleTableModel(scales);
- DataScaleTable dataScaleTable = new DataScaleTable(dataScaleTableModel, rows, columnDefinitions);
-
- TableColumnModel tcm = new DefaultTableColumnModel();
- dataScaleTable.setColumnModel(tcm);
-
- for (int i = 0; i < DataScaleTableModel.getColumnNames().length; i++)
- {
- TableColumn col = new TableColumn(i);
- col.setHeaderValue(DataScaleTableModel.getColumnNames()[i]);
- if (DataScaleTableModel.COL_NAME_COLUMN.equals(DataScaleTableModel.getColumnNames()[i]))
- {
- col.setPreferredWidth(DataScaleTableColumnWidthsPersister.getColumnWidthForColName(DataScaleTableModel.COL_NAME_COLUMN));
- }
- else if (DataScaleTableModel.COL_NAME_DATA.equals(DataScaleTableModel.getColumnNames()[i]))
- {
- col.setPreferredWidth(DataScaleTableColumnWidthsPersister.getColumnWidthForColName(DataScaleTableModel.COL_NAME_DATA));
- }
- tcm.addColumn(col);
- }
-
- _overviewHolder.setOverview(dataScaleTable);
- initGui();
-
- }
-
- private void initGui()
- {
- _overwiewPanel.btnPrev.setEnabled(_overviewHolder.hasParent());
- _overwiewPanel.btnNext.setEnabled(_overviewHolder.hasKid());
-
- _overwiewPanel.btnShowInTable.setEnabled(_overviewHolder.canShowInSimpleTable());
- _overwiewPanel.btnShowInTableWin.setEnabled(_overviewHolder.canShowInSimpleTable());
-
- _overwiewPanel.scrollPane.setViewportView(_overviewHolder.getComponent());
- }
-}
Deleted: trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/OverwiewPanel.java
===================================================================
--- trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/OverwiewPanel.java 2012-09-25 19:13:24 UTC (rev 6663)
+++ trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/OverwiewPanel.java 2012-09-28 16:42:27 UTC (rev 6664)
@@ -1,85 +0,0 @@
-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.DataScaleTable;
-import net.sourceforge.squirrel_sql.fw.util.StringManager;
-import net.sourceforge.squirrel_sql.fw.util.StringManagerFactory;
-
-import javax.swing.*;
-import java.awt.*;
-
-public class OverwiewPanel extends JPanel
-{
- JScrollPane scrollPane = new JScrollPane();
-
- private static final StringManager s_stringMgr = StringManagerFactory.getStringManager(OverwiewPanel.class);
-
-
- JButton btnPrev;
- JButton btnNext;
-
- JButton btnShowInTableWin;
- JButton btnShowInTable;
-
- JButton btnReport;
-
-
- public OverwiewPanel(SquirrelResources rsrc)
- {
- 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);
- }
-
- private JPanel createButtonPanel(SquirrelResources rsrc)
- {
- JPanel ret = new JPanel(new GridBagLayout());
-
- GridBagConstraints gbc;
-
- gbc = new GridBagConstraints(0,0,1,1,0,0,GridBagConstraints.NORTHEAST, GridBagConstraints.NONE, new Insets(0,0,0,5),0,0);
- btnPrev = new JButton(rsrc.getIcon(SquirrelResources.IImageNames.PREV_SCALE));
- btnPrev.setToolTipText(s_stringMgr.getString("OverwiewPanel.prevOverview"));
- btnPrev.setEnabled(false);
- ret.add(btnPrev, gbc);
-
-
- gbc = new GridBagConstraints(1,0,1,1,0,0,GridBagConstraints.NORTHEAST, GridBagConstraints.NONE, new Insets(0,0,0,20),0,0);
- btnNext = new JButton(rsrc.getIcon(SquirrelResources.IImageNames.NEXT_SCALE));
- btnNext.setToolTipText(s_stringMgr.getString("OverwiewPanel.nextOverview"));
- btnNext.setEnabled(false);
- ret.add(btnNext, gbc);
-
- gbc = new GridBagConstraints(2,0,1,1,0,0,GridBagConstraints.NORTHEAST, GridBagConstraints.NONE, new Insets(0,0,0,5),0,0);
- btnShowInTable = new JButton(s_stringMgr.getString("OverwiewPanel.showInTable"));
- btnShowInTable.setToolTipText(s_stringMgr.getString("OverwiewPanel.showInTableToolTip"));
- ret.add(btnShowInTable, gbc);
-
- gbc = new GridBagConstraints(3,0,1,1,0,0,GridBagConstraints.NORTHEAST, GridBagConstraints.NONE, new Insets(0,0,0,5),0,0);
- btnShowInTableWin = new JButton(s_stringMgr.getString("OverwiewPanel.showTableInWin"));
- btnShowInTableWin.setToolTipText(s_stringMgr.getString("OverwiewPanel.showTableInWinToolTip"));
- ret.add(btnShowInTableWin, gbc);
-
- gbc = new GridBagConstraints(4,0,1,1,0,0,GridBagConstraints.NORTHEAST, GridBagConstraints.NONE, new Insets(0,10,0,0),0,0);
- btnReport = new JButton(s_stringMgr.getString("OverwiewPanel.report"));
- btnReport.setToolTipText(s_stringMgr.getString("OverwiewPanel.reportToolTip"));
- ret.add(btnReport, gbc);
-
- gbc = new GridBagConstraints(5,0,1,1,1,1,GridBagConstraints.NORTHEAST, GridBagConstraints.HORIZONTAL, new Insets(5,5,5,5),0,0);
- ret.add(new JPanel(), 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/BooleanIndexedColumn.java
===================================================================
--- trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/BooleanIndexedColumn.java 2012-09-25 19:13:24 UTC (rev 6663)
+++ trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/BooleanIndexedColumn.java 2012-09-28 16:42:27 UTC (rev 6664)
@@ -96,6 +96,12 @@
};
}
+ @Override
+ public String calculateDist(Object beginData, Object endData)
+ {
+ return null;
+ }
+
private Object onGetMid(Object min, Object max)
{
return asBoolean(min) && asBoolean(max);
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-09-25 19:13:24 UTC (rev 6663)
+++ trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/DataScale.java 2012-09-28 16:42:27 UTC (rev 6664)
@@ -1,5 +1,7 @@
package net.sourceforge.squirrel_sql.client.session.mainpanel.overview.datascale;
+import net.sourceforge.squirrel_sql.fw.datasetviewer.ColumnDisplayDefinition;
+
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
@@ -15,15 +17,17 @@
private String _column;
private DataScaleListener _dataScaleListener;
private int _columnIndex;
+ private ColumnDisplayDefinition _columnDisplayDefinition;
private HashMap<JButton, Interval> _intervalByButton = new HashMap<JButton, Interval>();
- public DataScale(String column, DataScaleListener dataScaleListener, int columnIndex)
+ 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()
@@ -144,4 +148,29 @@
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.
+ }
}
Modified: trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/DoubleIndexedColumn.java
===================================================================
--- trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/DoubleIndexedColumn.java 2012-09-25 19:13:24 UTC (rev 6663)
+++ trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/DoubleIndexedColumn.java 2012-09-28 16:42:27 UTC (rev 6664)
@@ -94,6 +94,19 @@
};
}
+ @Override
+ public String calculateDist(Object beginData, Object endData)
+ {
+ if(null == beginData || null == endData)
+ {
+ return "" + 0;
+ }
+
+
+ return String.format("%.3f",(((Number)endData).doubleValue() - ((Number)beginData).doubleValue()));
+
+ }
+
private Object onGetMid(Object min, Object max)
{
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-09-25 19:13:24 UTC (rev 6663)
+++ trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/IndexedColumn.java 2012-09-28 16:42:27 UTC (rev 6664)
@@ -123,4 +123,11 @@
return ret;
}
+
+ public ColumnDisplayDefinition getColumnDisplayDefinition()
+ {
+ return _colDef;
+ }
+
+ public abstract String calculateDist(Object beginData, Object endData);
}
Modified: trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/IntegerIndexedColumn.java
===================================================================
--- trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/IntegerIndexedColumn.java 2012-09-25 19:13:24 UTC (rev 6663)
+++ trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/IntegerIndexedColumn.java 2012-09-28 16:42:27 UTC (rev 6664)
@@ -94,6 +94,17 @@
};
}
+ @Override
+ public String calculateDist(Object beginData, Object endData)
+ {
+ if(null == beginData || null == endData)
+ {
+ return "" + 0;
+ }
+
+ return "" + ((Integer)endData - (Integer)beginData);
+ }
+
private Object onGetMid(Object min, Object max)
{
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-09-25 19:13:24 UTC (rev 6663)
+++ trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/Interval.java 2012-09-28 16:42:27 UTC (rev 6664)
@@ -154,4 +154,9 @@
{
return getLen() == _indexedColumn.size();
}
+
+ public String getWidth()
+ {
+ return _indexedColumn.calculateDist(_beginData, _endData);
+ }
}
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-09-25 19:13:24 UTC (rev 6663)
+++ trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/ScaleFactory.java 2012-09-28 16:42:27 UTC (rev 6664)
@@ -9,14 +9,21 @@
public class ScaleFactory
{
/**
- * 2^(CALL_DEPTH-1) is the maximum number of intervals that will be generated.
+ * 2^(DEFAULT_CALL_DEPTH-1) is the maximum number of intervals that will be generated.
*/
- private static final int CALL_DEPTH = 4;
+ public static final int DEFAULT_CALL_DEPTH = 4;
private IndexedColumn _indexedColumn;
+ private int _callDepth;
public ScaleFactory(List<Object[]> rows, int colIx, ColumnDisplayDefinition colDef)
{
+ this(rows, colIx, colDef, DEFAULT_CALL_DEPTH);
+ }
+
+ public ScaleFactory(List<Object[]> rows, int colIx, ColumnDisplayDefinition colDef, int callDepth)
+ {
_indexedColumn = IndexedColumnFactory.create(rows, colIx, colDef);
+ _callDepth = callDepth;
}
public DataScale createScale(DataScaleListener dataScaleListener)
@@ -24,7 +31,7 @@
Object min = _indexedColumn.getMin();
Object max = _indexedColumn.getMax();
- DataScale ret = new DataScale(_indexedColumn.getColumnName(), dataScaleListener, _indexedColumn.getColumnIndex());
+ DataScale ret = new DataScale(_indexedColumn.getColumnName(), dataScaleListener, _indexedColumn.getColumnIndex(), _indexedColumn.getColumnDisplayDefinition());
if(0 == _indexedColumn.compareObjects(min, max))
{
@@ -122,7 +129,7 @@
{
++callDepth[0];
- if(CALL_DEPTH == callDepth[0])
+ if(_callDepth == callDepth[0])
{
return;
}
Modified: trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/StringIndexedColumn.java
===================================================================
--- trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/StringIndexedColumn.java 2012-09-25 19:13:24 UTC (rev 6663)
+++ trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/StringIndexedColumn.java 2012-09-28 16:42:27 UTC (rev 6664)
@@ -86,4 +86,10 @@
{
return new StringCalculator(_charRange);
}
+
+ @Override
+ public String calculateDist(Object beginData, Object endData)
+ {
+ return null;
+ }
}
Modified: trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/TimestampIndexedColumn.java
===================================================================
--- trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/TimestampIndexedColumn.java 2012-09-25 19:13:24 UTC (rev 6663)
+++ trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/session/mainpanel/overview/datascale/TimestampIndexedColumn.java 2012-09-28 16:42:27 UTC (rev 6664)
@@ -96,6 +96,65 @@
};
}
+ @Override
+ public String calculateDist(Object beginData, Object endData)
+ {
+ if(null == beginData || null == endData)
+ {
+ return "" + 0;
+ }
+
+ Date dBeg = (Date) beginData;
+ Date dEnd = (Date) endData;
+
+
+ long diff = dEnd.getTime() - dBeg.getTime();
+
+ long diffInDays = diff/1000/86400;
+ long diffInHours = (diff/1000 - 86400*diffInDays) / 3600;
+ long diffInMins = (diff/1000 - 86400*diffInDays - 3600*diffInHours) / 60;
+ long diffInSecs = (diff/1000 - 86400*diffInDays - 3600*diffInHours - 60*diffInMins);
+ long diffMillis = diff % 1000;
+
+ if(0 == diff)
+ {
+ return "" + 0;
+ }
+
+ String ret = "(";
+
+
+
+
+ if(0 < diffInDays)
+ {
+ ret += (diffInDays + " days ");
+ }
+
+ if(0 < dif...
[truncated message content] |