Revision: 6273
http://squirrel-sql.svn.sourceforge.net/squirrel-sql/?rev=6273&view=rev
Author: gerdwagner
Date: 2011-05-28 08:46:10 +0000 (Sat, 28 May 2011)
Log Message:
-----------
More Query Builder
Modified Paths:
--------------
trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/AggregateFunctions.java
trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/ColumnInfo.java
trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/GraphController.java
trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/GraphPanelController.java
trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/GraphPluginResources.java
trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/ModeManager.java
trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/QueryColumnPanel.java
trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/QueryData.java
trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/TableFrameController.java
trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/querybuilder/GraphQueryOrderPanelCtrl.java
trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/querybuilder/QueryBuilderController.java
trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/querybuilder/sqlgen/FromClauseGenerator.java
trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/querybuilder/sqlgen/QueryBuilderSQLGenerator.java
trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/querybuilder/sqlgen/SelectClauseGenerator.java
trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/querybuilder/sqlgen/SelectClauseRes.java
trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/xmlbeans/GraphControllerXmlBean.java
trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/xmlbeans/QueryDataXmlBean.java
trunk/sql12/plugins/graph/src/main/resources/net/sourceforge/squirrel_sql/plugins/graph/GraphPluginResources.properties
trunk/sql12/plugins/graph/src/main/resources/net/sourceforge/squirrel_sql/plugins/graph/I18NStrings.properties
trunk/sql12/plugins/graph/src/main/resources/net/sourceforge/squirrel_sql/plugins/graph/querybuilder/I18NStrings.properties
Added Paths:
-----------
trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/Sorting.java
trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/querybuilder/GraphQueryOrderPanel.java
trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/querybuilder/OrderCol.java
trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/querybuilder/OrderStructure.java
trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/querybuilder/QueryOrderTableModel.java
trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/xmlbeans/OrderStructureXmlBean.java
trunk/sql12/plugins/graph/src/main/resources/net/sourceforge/squirrel_sql/plugins/graph/images/sort.png
trunk/sql12/plugins/graph/src/main/resources/net/sourceforge/squirrel_sql/plugins/graph/images/sort_asc.gif
trunk/sql12/plugins/graph/src/main/resources/net/sourceforge/squirrel_sql/plugins/graph/images/sort_desc.gif
Modified: trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/AggregateFunctions.java
===================================================================
--- trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/AggregateFunctions.java 2011-05-25 19:12:16 UTC (rev 6272)
+++ trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/AggregateFunctions.java 2011-05-28 08:46:10 UTC (rev 6273)
@@ -7,13 +7,13 @@
public enum AggregateFunctions
{
- NONE(0, "<NONE>",AGG_FCT, AggFct18n.s_stringMgr.getString("AggregateFunctions.undefined"), AggFct18n.s_stringMgr.getString("AggregateFunctions.undefinedTT")),
- SUM(1, "SUM", AGG_SUM, AggFct18n.s_stringMgr.getString("AggregateFunctions.sum"), AggFct18n.s_stringMgr.getString("AggregateFunctions.sumTT")),
- MAX(2, "MAX", AGG_MAX, AggFct18n.s_stringMgr.getString("AggregateFunctions.max"), AggFct18n.s_stringMgr.getString("AggregateFunctions.maxTT")),
- MIN(3, "MIN", AGG_MIN, AggFct18n.s_stringMgr.getString("AggregateFunctions.min"), AggFct18n.s_stringMgr.getString("AggregateFunctions.minTT")),
- COUNT(4, "COUNT", AGG_COUNT, AggFct18n.s_stringMgr.getString("AggregateFunctions.count"), AggFct18n.s_stringMgr.getString("AggregateFunctions.countTT"));
+ NONE(0, "<NONE>",AGG_FCT, AggFctI18n.s_stringMgr.getString("AggregateFunctions.undefined"), AggFctI18n.s_stringMgr.getString("AggregateFunctions.undefinedTT")),
+ SUM(1, "SUM", AGG_SUM, AggFctI18n.s_stringMgr.getString("AggregateFunctions.sum"), AggFctI18n.s_stringMgr.getString("AggregateFunctions.sumTT")),
+ MAX(2, "MAX", AGG_MAX, AggFctI18n.s_stringMgr.getString("AggregateFunctions.max"), AggFctI18n.s_stringMgr.getString("AggregateFunctions.maxTT")),
+ MIN(3, "MIN", AGG_MIN, AggFctI18n.s_stringMgr.getString("AggregateFunctions.min"), AggFctI18n.s_stringMgr.getString("AggregateFunctions.minTT")),
+ COUNT(4, "COUNT", AGG_COUNT, AggFctI18n.s_stringMgr.getString("AggregateFunctions.count"), AggFctI18n.s_stringMgr.getString("AggregateFunctions.countTT"));
- public static final Object CLIENT_PROP_NAME = AggregateFunctions.class.getName();
+ public static final String CLIENT_PROP_NAME = AggregateFunctions.class.getName();
private int _index;
private String _image;
@@ -74,8 +74,7 @@
}
}
-class AggFct18n
+class AggFctI18n
{
- static final StringManager s_stringMgr = StringManagerFactory.getStringManager(AggFct18n.class);
-
+ static final StringManager s_stringMgr = StringManagerFactory.getStringManager(AggFctI18n.class);
}
Modified: trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/ColumnInfo.java
===================================================================
--- trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/ColumnInfo.java 2011-05-25 19:12:16 UTC (rev 6272)
+++ trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/ColumnInfo.java 2011-05-28 08:46:10 UTC (rev 6273)
@@ -72,6 +72,7 @@
queryDataXmlBean.setAggregateFunctionIndex(_queryData.getAggregateFunction().getIndex());
queryDataXmlBean.setFilterValue(_queryData.getFilterValue());
queryDataXmlBean.setInSelectClause(_queryData.isInSelectClause());
+ queryDataXmlBean.setSortingIndex(_queryData.getSorting().getIndex());
ret.setQueryDataXmlBean(queryDataXmlBean);
Modified: trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/GraphController.java
===================================================================
--- trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/GraphController.java 2011-05-25 19:12:16 UTC (rev 6272)
+++ trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/GraphController.java 2011-05-28 08:46:10 UTC (rev 6273)
@@ -3,6 +3,7 @@
import net.sourceforge.squirrel_sql.client.session.ISession;
import net.sourceforge.squirrel_sql.client.session.mainpanel.objecttree.ObjectTreeNode;
import net.sourceforge.squirrel_sql.fw.sql.ITableInfo;
+import net.sourceforge.squirrel_sql.plugins.graph.querybuilder.WhereTreeNodeStructure;
import net.sourceforge.squirrel_sql.plugins.graph.window.TabToWindowHandler;
import net.sourceforge.squirrel_sql.plugins.graph.xmlbeans.*;
@@ -129,7 +130,9 @@
ZoomerXmlBean zoomerXmlBean = graphControllerXmlBean.getZoomerXmlBean();
PrintXmlBean printXmlBean = graphControllerXmlBean.getPrintXmlBean();
boolean queryHideNoJoins = graphControllerXmlBean.isQueryHideNoJoins();
- _panelController.initMode(modeIndex, zoomerXmlBean, printXmlBean, queryHideNoJoins, graphControllerXmlBean.getWhereTreeNodeStructure());
+ WhereTreeNodeStructure whereTreeNodeStructure = graphControllerXmlBean.getWhereTreeNodeStructure();
+ OrderStructureXmlBean orderStructure = graphControllerXmlBean.getOrderStructure();
+ _panelController.initMode(modeIndex, zoomerXmlBean, printXmlBean, queryHideNoJoins, whereTreeNodeStructure, orderStructure);
_panelController.getDesktopController().setShowConstraintNames(graphControllerXmlBean.isShowConstraintNames());
_panelController.getDesktopController().setShowQualifiedTableNames(graphControllerXmlBean.isShowQualifiedTableNames());
@@ -137,7 +140,7 @@
else
{
_tabToWindowHandler.setTitle(_plugin.patchName(_tabToWindowHandler.getTitle(), _session));
- _panelController.initMode(Mode.DEFAULT, null, null, false, null);
+ _panelController.initMode(Mode.DEFAULT, null, null, false, null, null);
}
_tabToWindowHandler.showGraph();
@@ -226,6 +229,7 @@
xmlBean.setModeIndex(_panelController.getModeManager().getMode().getIndex());
xmlBean.setQueryHideNoJoins(_panelController.getModeManager().isQueryHideNoJoins());
xmlBean.setWhereTreeNodeStructure(_panelController.getModeManager().getWhereTreeNodeStructure());
+ xmlBean.setOrderStructure(_panelController.getModeManager().getOrderStructure());
Vector<TableFrameController> tblCtrls = _tableFramesModel.getTblCtrls();
Modified: trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/GraphPanelController.java
===================================================================
--- trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/GraphPanelController.java 2011-05-25 19:12:16 UTC (rev 6272)
+++ trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/GraphPanelController.java 2011-05-28 08:46:10 UTC (rev 6273)
@@ -2,6 +2,7 @@
import net.sourceforge.squirrel_sql.client.session.ISession;
import net.sourceforge.squirrel_sql.plugins.graph.querybuilder.WhereTreeNodeStructure;
+import net.sourceforge.squirrel_sql.plugins.graph.xmlbeans.OrderStructureXmlBean;
import net.sourceforge.squirrel_sql.plugins.graph.xmlbeans.PrintXmlBean;
import net.sourceforge.squirrel_sql.plugins.graph.xmlbeans.ZoomerXmlBean;
@@ -98,10 +99,13 @@
return _graphPanel;
}
- public void initMode(Mode mode, ZoomerXmlBean zoomerXmlBean, PrintXmlBean printXmlBean, boolean queryHideNoJoins, WhereTreeNodeStructure whereTreeNodeStructure)
+ public void initMode(Mode mode, ZoomerXmlBean zoomerXmlBean, PrintXmlBean printXmlBean, boolean queryHideNoJoins, WhereTreeNodeStructure whereTreeNodeStructure, OrderStructureXmlBean orderStructure)
{
- _modeManager.initMode(mode, zoomerXmlBean, printXmlBean, queryHideNoJoins, whereTreeNodeStructure, _graphDesktopController.createEdgesListener(), _graphDesktopController.getDesktopPane());
+ EdgesListener edgesListener = _graphDesktopController.createEdgesListener();
+ GraphDesktopPane desktopPane = _graphDesktopController.getDesktopPane();
+ _modeManager.initMode(mode, zoomerXmlBean, printXmlBean, queryHideNoJoins, whereTreeNodeStructure, orderStructure, edgesListener, desktopPane);
+
onModeChanged();
_modeManager.addModeManagerListener(new ModeManagerListener()
{
Modified: trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/GraphPluginResources.java
===================================================================
--- trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/GraphPluginResources.java 2011-05-25 19:12:16 UTC (rev 6272)
+++ trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/GraphPluginResources.java 2011-05-28 08:46:10 UTC (rev 6273)
@@ -17,6 +17,10 @@
String FILTER = "Filter";
String FILTER_CHECKED = "FilterChecked";
+ String SORT_NONE = "sort";
+ String SORT_ASC = "sort_asc";
+ String SORT_DESC = "sort_desc";
+
String AGG_FCT = "AggFct";
String AGG_FCT_CHECKED = "AggFctChecked";
String AGG_SUM = "AggSum";
Modified: trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/ModeManager.java
===================================================================
--- trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/ModeManager.java 2011-05-25 19:12:16 UTC (rev 6272)
+++ trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/ModeManager.java 2011-05-28 08:46:10 UTC (rev 6273)
@@ -3,6 +3,7 @@
import net.sourceforge.squirrel_sql.client.session.ISession;
import net.sourceforge.squirrel_sql.plugins.graph.querybuilder.QueryBuilderController;
import net.sourceforge.squirrel_sql.plugins.graph.querybuilder.WhereTreeNodeStructure;
+import net.sourceforge.squirrel_sql.plugins.graph.xmlbeans.OrderStructureXmlBean;
import net.sourceforge.squirrel_sql.plugins.graph.xmlbeans.PrintXmlBean;
import net.sourceforge.squirrel_sql.plugins.graph.xmlbeans.ZoomerXmlBean;
@@ -122,7 +123,7 @@
return _mnuMode.getMode();
}
- public void initMode(Mode mode, ZoomerXmlBean zoomerXmlBean, PrintXmlBean printXmlBean, boolean queryHideNoJoins, WhereTreeNodeStructure whereTreeNodeStructure, EdgesListener edgesListener, GraphDesktopPane desktopPane)
+ public void initMode(Mode mode, ZoomerXmlBean zoomerXmlBean, PrintXmlBean printXmlBean, boolean queryHideNoJoins, WhereTreeNodeStructure whereTreeNodeStructure, OrderStructureXmlBean orderStructure, EdgesListener edgesListener, GraphDesktopPane desktopPane)
{
StartButtonHandler startButtonHandler;
GraphPluginResources rsrc = new GraphPluginResources(_plugin);
@@ -131,7 +132,7 @@
_zoomPrintController = new ZoomPrintController(zoomerXmlBean, printXmlBean, edgesListener, desktopPane, _session, _plugin, startButtonHandler);
startButtonHandler = new StartButtonHandler(_graphControllerFacade, rsrc);
- _queryBuilderController = new QueryBuilderController(_tableFramesModel, _graphControllerFacade, queryHideNoJoins, whereTreeNodeStructure, _session, _plugin, startButtonHandler);
+ _queryBuilderController = new QueryBuilderController(_tableFramesModel, _graphControllerFacade, queryHideNoJoins, whereTreeNodeStructure, orderStructure, _session, _plugin, startButtonHandler);
startButtonHandler = new StartButtonHandler(_graphControllerFacade, rsrc);
_defaultController = new DefaultController(startButtonHandler);
@@ -170,4 +171,9 @@
{
return _queryBuilderController.getWhereTreeNodeStructure();
}
+
+ public OrderStructureXmlBean getOrderStructure()
+ {
+ return _queryBuilderController.getOrderStructure();
+ }
}
Modified: trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/QueryColumnPanel.java
===================================================================
--- trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/QueryColumnPanel.java 2011-05-25 19:12:16 UTC (rev 6272)
+++ trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/QueryColumnPanel.java 2011-05-28 08:46:10 UTC (rev 6273)
@@ -21,6 +21,7 @@
private JCheckBox chkSelect;
private JButton btnAggFct;
private JButton btnFilter;
+ private JButton btnSorting;
private QueryColumnTextField txtColumn;
private String _tableName;
private ColumnInfo _columnInfo;
@@ -29,7 +30,8 @@
- private JPopupMenu _popUp;
+ private JPopupMenu _popUpAggregate;
+ private JPopupMenu _popUpSorting;
QueryColumnPanel(final GraphPlugin graphPlugin, String tableName, ColumnInfo columnInfo, DndCallback dndCallback, ISession session)
{
@@ -45,6 +47,8 @@
GridBagConstraints gbc;
+ int xPos = 0;
+
chkSelect = new JCheckBox();
chkSelect.setToolTipText(s_stringMgr.getString("QueryColumn.select"));
chkSelect.setBackground(GraphTextAreaFactory.TEXTAREA_BG);
@@ -57,14 +61,56 @@
onChkSelectedChanged();
}
});
- gbc = new GridBagConstraints(0,0,1,1,0,0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0,0,0,0), 0,0);
+ gbc = new GridBagConstraints(xPos,0,1,1,0,0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0,0,0,0), 0,0);
pnlButtons.add(chkSelect, gbc);
+ initAggregate(pnlButtons, ++xPos);
+
+ initFilter(graphPlugin, pnlButtons, ++xPos);
+
+ initSorting(pnlButtons, ++xPos);
+
+ add(pnlButtons, BorderLayout.WEST);
+ txtColumn = new QueryColumnTextField(_columnInfo.toString(), dndCallback, _session);
+ txtColumn.setEditable(false);
+ txtColumn.setBackground(GraphTextAreaFactory.TEXTAREA_BG);
+ txtColumn.setBorder(BorderFactory.createEmptyBorder());
+
+ add(txtColumn, BorderLayout.CENTER);
+ }
+
+ private void initFilter(final GraphPlugin graphPlugin, JPanel pnlButtons, int xPos)
+ {
+ GridBagConstraints gbc;
+ btnFilter = new JButton();
+ initFilterButtonIcon();
+ btnFilter.setToolTipText(s_stringMgr.getString("QueryColumn.filterButton"));
+
+
+ btnFilter.setBackground(GraphTextAreaFactory.TEXTAREA_BG);
+ btnFilter.setBorder(BorderFactory.createEmptyBorder());
+ btnFilter.setFocusable(false);
+ btnFilter.addActionListener(new ActionListener()
+ {
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ showFilterDialog(graphPlugin);
+ }
+ });
+
+ gbc = new GridBagConstraints(xPos,0,1,1,0,0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0,5,0,5), 0,0);
+ pnlButtons.add(btnFilter, gbc);
+ }
+
+ private void initAggregate(JPanel pnlButtons, int xPos)
+ {
+ GridBagConstraints gbc;
btnAggFct = new JButton();
btnAggFct.setBackground(GraphTextAreaFactory.TEXTAREA_BG);
btnAggFct.setBorder(BorderFactory.createEmptyBorder());
//btnAggFct.setEnabled(false);
- gbc = new GridBagConstraints(1,0,1,1,0,0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0,0,0,0), 0,0);
+ gbc = new GridBagConstraints(xPos,0,1,1,0,0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0,0,0,0), 0,0);
pnlButtons.add(btnAggFct, gbc);
btnAggFct.setEnabled(chkSelect.isSelected());
btnAggFct.addActionListener(new ActionListener()
@@ -78,7 +124,7 @@
onAggSelected(_columnInfo.getQueryData().getAggregateFunction(), false);
- _popUp = new JPopupMenu();
+ _popUpAggregate = new JPopupMenu();
for (final AggregateFunctions af : AggregateFunctions.values())
{
JMenuItem menuItem = new JMenuItem(af.toString(), _graphPluginResources.getIcon(af.getImage()));
@@ -93,39 +139,54 @@
}
});
- _popUp.add(menuItem);
+ _popUpAggregate.add(menuItem);
}
+ }
-
- btnFilter = new JButton();
- initFilterButtonIcon();
- btnFilter.setToolTipText(s_stringMgr.getString("QueryColumn.filterButton"));
-
-
- btnFilter.setBackground(GraphTextAreaFactory.TEXTAREA_BG);
- btnFilter.setBorder(BorderFactory.createEmptyBorder());
- btnFilter.setFocusable(false);
- btnFilter.addActionListener(new ActionListener()
+ private void initSorting(JPanel pnlButtons, int xPos)
+ {
+ GridBagConstraints gbc;
+ btnSorting = new JButton();
+ btnSorting.setBackground(GraphTextAreaFactory.TEXTAREA_BG);
+ btnSorting.setBorder(BorderFactory.createEmptyBorder());
+ gbc = new GridBagConstraints(xPos,0,1,1,0,0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0,0,0,3), 0,0);
+ pnlButtons.add(btnSorting, gbc);
+ btnSorting.addActionListener(new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
- showFilterDialog(graphPlugin);
+ onBtnSorting(e);
}
});
+ onSortingSelected(_columnInfo.getQueryData().getSorting(), false);
- gbc = new GridBagConstraints(2,0,1,1,0,0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0,5,0,3), 0,0);
- pnlButtons.add(btnFilter, gbc);
- add(pnlButtons, BorderLayout.WEST);
- txtColumn = new QueryColumnTextField(_columnInfo.toString(), dndCallback, _session);
- txtColumn.setEditable(false);
- txtColumn.setBackground(GraphTextAreaFactory.TEXTAREA_BG);
- txtColumn.setBorder(BorderFactory.createEmptyBorder());
+ _popUpSorting = new JPopupMenu();
+ for (final Sorting sorting : Sorting.values())
+ {
+ JMenuItem menuItem = new JMenuItem(sorting.toString(), _graphPluginResources.getIcon(sorting.getImage()));
+ menuItem.putClientProperty(Sorting.CLIENT_PROP_NAME, sorting);
- add(txtColumn, BorderLayout.CENTER);
+ menuItem.addActionListener(new ActionListener()
+ {
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ onSortingSelected(sorting, true);
+ }
+ });
+
+ _popUpSorting.add(menuItem);
+ }
}
+ private void onBtnSorting(ActionEvent e)
+ {
+ _popUpSorting.show(btnSorting, 0, 0);
+ }
+
+
private void onChkSelectedChanged()
{
_columnInfo.getQueryData().setInSelectClause(chkSelect.isSelected());
@@ -152,9 +213,21 @@
}
}
+ private void onSortingSelected(Sorting sorting, boolean fireChanged)
+ {
+ btnSorting.setIcon(_graphPluginResources.getIcon(sorting.getImage()));
+ btnSorting.setToolTipText(sorting.getToolTip());
+ _columnInfo.getQueryData().setSorting(sorting);
+
+ if (fireChanged)
+ {
+ _columnInfo.getColumnInfoModelEventDispatcher().fireChanged(TableFramesModelChangeType.COLUMN_SELECT);
+ }
+ }
+
private void onBtnAggFct(ActionEvent e)
{
- _popUp.show(btnAggFct, 0, 0);
+ _popUpAggregate.show(btnAggFct, 0, 0);
}
private void initFilterButtonIcon()
Modified: trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/QueryData.java
===================================================================
--- trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/QueryData.java 2011-05-25 19:12:16 UTC (rev 6272)
+++ trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/QueryData.java 2011-05-28 08:46:10 UTC (rev 6273)
@@ -9,6 +9,7 @@
private QueryFilterOperators _operator = QueryFilterOperators.EQUAL;
private AggregateFunctions _aggregateFunction = AggregateFunctions.NONE;
private boolean _inSelectClause;
+ private Sorting _sorting = Sorting.NONE;
public QueryData(QueryDataXmlBean queryDataXmlBean)
{
@@ -18,6 +19,7 @@
_filterValue = queryDataXmlBean.getFilterValue();
_operator = QueryFilterOperators.getForIndex(queryDataXmlBean.getOperatorIndex());
_aggregateFunction = AggregateFunctions.getForIndex(queryDataXmlBean.getAggregateFunctionIndex());
+ _sorting = Sorting.getByIndex(queryDataXmlBean.getSortingIndex());
}
}
@@ -92,4 +94,24 @@
_filterValue = null;
_operator = QueryFilterOperators.EQUAL;
}
+
+ public Sorting getSorting()
+ {
+ return _sorting;
+ }
+
+ public void setSorting(Sorting sorting)
+ {
+ _sorting = sorting;
+ }
+
+ public boolean isSorted()
+ {
+ return _sorting != Sorting.NONE;
+ }
+
+ public boolean isSortedAsc()
+ {
+ return _sorting != Sorting.ASC;
+ }
}
Added: trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/Sorting.java
===================================================================
--- trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/Sorting.java (rev 0)
+++ trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/Sorting.java 2011-05-28 08:46:10 UTC (rev 6273)
@@ -0,0 +1,86 @@
+package net.sourceforge.squirrel_sql.plugins.graph;
+
+import net.sourceforge.squirrel_sql.fw.util.StringManager;
+import net.sourceforge.squirrel_sql.fw.util.StringManagerFactory;
+
+import static net.sourceforge.squirrel_sql.plugins.graph.GraphPluginResources.IKeys.*;
+
+
+public enum Sorting
+{
+
+
+ NONE(0, "<Not sorted>", SORT_NONE, SortingI18n.s_stringMgr.getString("Sorting.notSorted"), SortingI18n.s_stringMgr.getString("Sorting.notSortedTT")),
+ ASC(1, "ASC", SORT_ASC, SortingI18n.s_stringMgr.getString("Sorting.sortedAsc"), SortingI18n.s_stringMgr.getString("Sorting.sortedAscTT")),
+ DESC(2, "DESC", SORT_DESC, SortingI18n.s_stringMgr.getString("Sorting.sortedDesc"), SortingI18n.s_stringMgr.getString("Sorting.sortedDescTT"));
+
+ public static final String CLIENT_PROP_NAME = Sorting.class.getName();
+
+
+ private int _index;
+ private String _sql;
+ private String _image;
+ private String _name;
+ private String _toolTip;
+
+ Sorting(int index, String sql, String image, String name, String toolTip)
+ {
+ _index = index;
+ _sql = sql;
+ _image = image;
+ _name = name;
+ _toolTip = toolTip;
+ }
+
+ public int getIndex()
+ {
+ return _index;
+ }
+
+ public static Sorting getByIndex(int id)
+ {
+ for (Sorting sorting : values())
+ {
+ if(sorting._index == id)
+ {
+ return sorting;
+ }
+ }
+
+ throw new IllegalArgumentException("Unknown sorting ID");
+ }
+
+ public String getImage()
+ {
+ return _image;
+ }
+
+ public String getSql()
+ {
+ return _sql;
+ }
+
+ public String getName()
+ {
+ return _name;
+ }
+
+ public String getToolTip()
+ {
+ return _toolTip;
+ }
+
+
+ @Override
+ public String toString()
+ {
+ return _name;
+ }
+}
+
+class SortingI18n
+{
+ static final StringManager s_stringMgr = StringManagerFactory.getStringManager(SortingI18n.class);
+
+}
+
Modified: trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/TableFrameController.java
===================================================================
--- trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/TableFrameController.java 2011-05-25 19:12:16 UTC (rev 6272)
+++ trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/TableFrameController.java 2011-05-28 08:46:10 UTC (rev 6273)
@@ -800,7 +800,20 @@
public ITableInfo getTableInfo()
{
_session.getSchemaInfo().waitTillTablesLoaded();
- return _session.getSchemaInfo().getITableInfos(_catalog, _schema, new ObjFilterMatcher(_tableName), new String[]{"TABLE"})[0];
+ ITableInfo[] tableInfos = _session.getSchemaInfo().getITableInfos(_catalog, _schema, new ObjFilterMatcher(_tableName), new String[]{"TABLE"});
+
+ /////////////////////////////////////////////////////////////////////////////////////
+ // This used to cause a ArrayIndexOutOfBoundsException
+ if(0 == tableInfos.length)
+ {
+ String errMsg = s_stringMgr.getString("TableFrameController.tableDoesNotExist", _tableName);
+ _session.getApplication().getMessageHandler().showErrorMessage(errMsg);
+ throw new IllegalStateException(errMsg);
+ }
+ //
+ //////////////////////////////////////////////////////////////////////////////////////
+
+ return tableInfos[0];
}
Added: trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/querybuilder/GraphQueryOrderPanel.java
===================================================================
--- trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/querybuilder/GraphQueryOrderPanel.java (rev 0)
+++ trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/querybuilder/GraphQueryOrderPanel.java 2011-05-28 08:46:10 UTC (rev 6273)
@@ -0,0 +1,59 @@
+package net.sourceforge.squirrel_sql.plugins.graph.querybuilder;
+
+import net.sourceforge.squirrel_sql.fw.gui.SortableTable;
+import net.sourceforge.squirrel_sql.fw.gui.SortableTableModel;
+import net.sourceforge.squirrel_sql.fw.util.StringManager;
+import net.sourceforge.squirrel_sql.fw.util.StringManagerFactory;
+import net.sourceforge.squirrel_sql.plugins.graph.HideDockButtonHandler;
+
+import javax.swing.*;
+import java.awt.*;
+
+public class GraphQueryOrderPanel extends JPanel
+{
+ private static final StringManager s_stringMgr = StringManagerFactory.getStringManager(GraphQueryOrderPanel.class);
+
+ JTable tblOrder;
+ JButton btnUp;
+ JButton btnDown;
+
+ public GraphQueryOrderPanel(HideDockButtonHandler hideDockButtonHandler)
+ {
+ setLayout(new BorderLayout());
+ add(createButtonPanel(hideDockButtonHandler), BorderLayout.NORTH);
+
+ tblOrder = new JTable();
+ tblOrder.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
+ tblOrder.getTableHeader().setResizingAllowed(true);
+ tblOrder.getTableHeader().setReorderingAllowed(false);
+ tblOrder.setAutoCreateColumnsFromModel(false);
+ tblOrder.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
+ add(new JScrollPane(tblOrder), BorderLayout.CENTER);
+ }
+
+ private JPanel createButtonPanel(HideDockButtonHandler hideDockButtonHandler)
+ {
+ JPanel ret = new JPanel(new GridBagLayout());
+
+ GridBagConstraints gbc;
+
+ gbc = new GridBagConstraints(0,0,1,1,0,0,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5,5,5,5),0,0);
+ ret.add(hideDockButtonHandler.getHideButton(),gbc);
+
+ gbc = new GridBagConstraints(1,0,1,1,0,0,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5,5,5,5),0,0);
+ ret.add(new JLabel(s_stringMgr.getString("graph.GraphQueryOrderPanel.orderLabel")),gbc);
+
+ gbc = new GridBagConstraints(2,0,1,1,0,0,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5,5,5,5),0,0);
+ btnUp = new JButton(s_stringMgr.getString("graph.GraphQueryOrderPanel.moveUp"));
+ ret.add(btnUp,gbc);
+
+ gbc = new GridBagConstraints(3,0,1,1,0,0,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(5,5,5,5),0,0);
+ btnDown = new JButton(s_stringMgr.getString("graph.GraphQueryOrderPanel.moveDown"));
+ ret.add(btnDown,gbc);
+
+ gbc = new GridBagConstraints(4,0,1,1,1,1,GridBagConstraints.WEST, GridBagConstraints.HORIZONTAL, new Insets(5,5,5,5),0,0);
+ ret.add(new JPanel(), gbc);
+
+ return ret;
+ }
+}
Modified: trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/querybuilder/GraphQueryOrderPanelCtrl.java
===================================================================
--- trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/querybuilder/GraphQueryOrderPanelCtrl.java 2011-05-25 19:12:16 UTC (rev 6272)
+++ trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/querybuilder/GraphQueryOrderPanelCtrl.java 2011-05-28 08:46:10 UTC (rev 6273)
@@ -1,14 +1,124 @@
package net.sourceforge.squirrel_sql.plugins.graph.querybuilder;
+import net.sourceforge.squirrel_sql.fw.gui.SortableTable;
+import net.sourceforge.squirrel_sql.fw.gui.SortableTableModel;
+import net.sourceforge.squirrel_sql.plugins.graph.*;
+import net.sourceforge.squirrel_sql.plugins.graph.xmlbeans.OrderStructureXmlBean;
+
import javax.swing.*;
+import javax.swing.table.TableModel;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.util.ArrayList;
public class GraphQueryOrderPanelCtrl
{
+ private GraphQueryOrderPanel _panel;
+ public GraphQueryOrderPanelCtrl(HideDockButtonHandler hideDockButtonHandler, OrderStructureXmlBean orderStructure)
+ {
+ _panel = new GraphQueryOrderPanel(hideDockButtonHandler);
+ QueryOrderTableModel tableModel = new QueryOrderTableModel(orderStructure);
+ _panel.tblOrder.setModel(tableModel);
+ _panel.tblOrder.setColumnModel(tableModel.getColumnModel());
+
+ _panel.btnUp.addActionListener(new ActionListener()
+ {
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ onMoveUp();
+ }
+ });
+
+ _panel.btnDown.addActionListener(new ActionListener()
+ {
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ onMoveDown();
+ }
+ });
+ }
+
public JPanel getGraphQueryOrderPanel()
{
- JPanel ret = new JPanel();
- ret.add(new JLabel("Order"));
- return ret;
+ return _panel;
}
+
+ public OrderStructure syncOrderCols(TableFramesModel tableFramesModel)
+ {
+ ArrayList<OrderCol> newOrderCols = new ArrayList<OrderCol>();
+
+ for (TableFrameController tfc : tableFramesModel.getTblCtrls())
+ {
+ for (ColumnInfo columnInfo : tfc.getColumnInfos())
+ {
+ if(columnInfo.getQueryData().isSorted())
+ {
+ newOrderCols.add(new OrderCol(tfc.getTableInfo().getSimpleName(), columnInfo));
+ }
+ }
+ }
+
+ QueryOrderTableModel tableModel = (QueryOrderTableModel) _panel.tblOrder.getModel();
+ tableModel.updateOrderCols(newOrderCols);
+
+ return new OrderStructure(tableModel.getOrderCols());
+ }
+
+
+ private void onMoveUp()
+ {
+ int[] selRows = _panel.tblOrder.getSelectedRows();
+
+ if (null == selRows || 0 == selRows.length)
+ {
+ return;
+ }
+
+ QueryOrderTableModel model = (QueryOrderTableModel) _panel.tblOrder.getModel();
+ int[] newSelRows = model.moveUp(selRows);
+
+
+ DefaultListSelectionModel selectionModel = (DefaultListSelectionModel) _panel.tblOrder.getSelectionModel();
+ selectionModel.clearSelection();
+
+ for (int newSelRow : newSelRows)
+ {
+ selectionModel.addSelectionInterval(newSelRow, newSelRow);
+ }
+ _panel.tblOrder.scrollRectToVisible(_panel.tblOrder.getCellRect(newSelRows[0], 0, false));
+ }
+
+ private void onMoveDown()
+ {
+ int[] selRows = _panel.tblOrder.getSelectedRows();
+
+ if (null == selRows || 0 == selRows.length)
+ {
+ return;
+ }
+
+ QueryOrderTableModel model = (QueryOrderTableModel) _panel.tblOrder.getModel();
+ int[] newSelRows = model.moveDown(selRows);
+
+
+
+ DefaultListSelectionModel selectionModel = (DefaultListSelectionModel) _panel.tblOrder.getSelectionModel();
+ selectionModel.clearSelection();
+
+ for (int newSelRow : newSelRows)
+ {
+ selectionModel.addSelectionInterval(newSelRow, newSelRow);
+ }
+ _panel.tblOrder.scrollRectToVisible(_panel.tblOrder.getCellRect(newSelRows[newSelRows.length-1], 0, false));
+
+ }
+
+ public OrderStructureXmlBean getOrderStructure()
+ {
+ QueryOrderTableModel model = (QueryOrderTableModel) _panel.tblOrder.getModel();
+ return new OrderStructureXmlBean(model.getOrderCols());
+ }
}
Added: trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/querybuilder/OrderCol.java
===================================================================
--- trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/querybuilder/OrderCol.java (rev 0)
+++ trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/querybuilder/OrderCol.java 2011-05-28 08:46:10 UTC (rev 6273)
@@ -0,0 +1,78 @@
+package net.sourceforge.squirrel_sql.plugins.graph.querybuilder;
+
+import net.sourceforge.squirrel_sql.plugins.graph.AggregateFunctions;
+import net.sourceforge.squirrel_sql.plugins.graph.ColumnInfo;
+
+public class OrderCol
+{
+ private String _qualifiedCol;
+ private boolean _ascending;
+ private boolean _aggregated;
+
+
+ /**
+ * Needed for XML deserialization.
+ */
+ public OrderCol()
+ {
+ }
+
+ public OrderCol(String simpleTableName, ColumnInfo columnInfo)
+ {
+ _qualifiedCol = simpleTableName + "." + columnInfo.getColumnName();
+ _ascending = columnInfo.getQueryData().isSortedAsc();
+ _aggregated = (AggregateFunctions.NONE != columnInfo.getQueryData().getAggregateFunction());
+
+ }
+
+ public String getQualifiedCol()
+ {
+ return _qualifiedCol;
+ }
+
+
+ /**
+ * Needed for XML deserialization.
+ */
+ public void setQualifiedCol(String qualifiedCol)
+ {
+ _qualifiedCol = qualifiedCol;
+ }
+
+ public boolean isAscending()
+ {
+ return _ascending;
+ }
+
+ public void setAscending(boolean b)
+ {
+ _ascending = b;
+ }
+
+ public boolean isAggregated()
+ {
+ return _aggregated;
+ }
+
+ public void setAggregated(boolean aggregated)
+ {
+ _aggregated = aggregated;
+ }
+
+ @Override
+ public int hashCode()
+ {
+ return _qualifiedCol.hashCode();
+ }
+
+ @Override
+ public boolean equals(Object obj)
+ {
+ if(false == obj instanceof OrderCol )
+ {
+ return false;
+ }
+
+ return _qualifiedCol.equals(((OrderCol)obj)._qualifiedCol);
+ }
+}
Added: trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/querybuilder/OrderStructure.java
===================================================================
--- trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/querybuilder/OrderStructure.java (rev 0)
+++ trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/querybuilder/OrderStructure.java 2011-05-28 08:46:10 UTC (rev 6273)
@@ -0,0 +1,49 @@
+package net.sourceforge.squirrel_sql.plugins.graph.querybuilder;
+
+import net.sourceforge.squirrel_sql.plugins.graph.querybuilder.sqlgen.SelectClauseRes;
+
+public class OrderStructure
+{
+ private OrderCol[] _orderCols;
+
+ public OrderStructure(OrderCol[] orderCols)
+ {
+ _orderCols = orderCols;
+ }
+
+ public String generateOrderBy(SelectClauseRes selectClause)
+ {
+ String ret = "";
+
+ for (int i = 0; i < _orderCols.length; i++)
+ {
+ if (0 == i)
+ {
+ ret += "ORDER BY " + getOrderExpression(_orderCols[i], selectClause);
+ }
+ else
+ {
+ ret += ", " + getOrderExpression(_orderCols[i], selectClause);
+ }
+ }
+
+ return ret;
+
+ }
+
+ private String getOrderExpression(OrderCol orderCol, SelectClauseRes selectClause)
+ {
+ String direction = orderCol.isAscending() ? " ASC" : "";
+
+ if (orderCol.isAggregated())
+ {
+ // For aggregate functions we append the position of the column in the where clause.
+ // This should word acording to C. J. Date The SQL standard.
+ return selectClause.getSQLSelectPositionForCol(orderCol.getQualifiedCol()) + direction;
+ }
+ else
+ {
+ return orderCol.getQualifiedCol() + direction;
+ }
+ }
+}
Modified: trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/querybuilder/QueryBuilderController.java
===================================================================
--- trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/querybuilder/QueryBuilderController.java 2011-05-25 19:12:16 UTC (rev 6272)
+++ trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/querybuilder/QueryBuilderController.java 2011-05-28 08:46:10 UTC (rev 6273)
@@ -7,6 +7,7 @@
import net.sourceforge.squirrel_sql.fw.util.StringManagerFactory;
import net.sourceforge.squirrel_sql.plugins.graph.*;
import net.sourceforge.squirrel_sql.plugins.graph.querybuilder.sqlgen.QueryBuilderSQLGenerator;
+import net.sourceforge.squirrel_sql.plugins.graph.xmlbeans.OrderStructureXmlBean;
import javax.swing.*;
import java.awt.*;
@@ -43,7 +44,7 @@
private SessionAdapter _sessionAdapter;
private GraphDockHandleAdmin _graphDockHandleAdmin;
- public QueryBuilderController(TableFramesModel tableFramesModel, GraphControllerFacade graphControllerFacade, boolean queryHideNoJoins, WhereTreeNodeStructure whereTreeNodeStructure, ISession session, GraphPlugin plugin, StartButtonHandler startButtonHandler)
+ public QueryBuilderController(TableFramesModel tableFramesModel, GraphControllerFacade graphControllerFacade, boolean queryHideNoJoins, WhereTreeNodeStructure whereTreeNodeStructure, OrderStructureXmlBean orderStructure, ISession session, GraphPlugin plugin, StartButtonHandler startButtonHandler)
{
_tableFramesModel = tableFramesModel;
_graphControllerFacade = graphControllerFacade;
@@ -83,7 +84,7 @@
GraphPluginResources rsrc = new GraphPluginResources(plugin);
_graphQuerySQLPanelCtrl = new GraphQuerySQLPanelCtrl(_session, new HideDockButtonHandler(_btnSQL, rsrc), createSQLSyncListener());
_graphQueryResultPanelCtrl = new GraphQueryResultPanelCtrl(_session, new HideDockButtonHandler(_btnResult, rsrc), createResultSyncListener());
- _graphQueryOrderPanelCtrl = new GraphQueryOrderPanelCtrl();
+ _graphQueryOrderPanelCtrl = new GraphQueryOrderPanelCtrl(new HideDockButtonHandler(_btnOrder, rsrc), orderStructure);
_graphQueryWherePanelCtrl = new GraphQueryWherePanelCtrl(_session, new HideDockButtonHandler(_btnWhere, rsrc), rsrc, whereTreeNodeStructure);
initHandels();
@@ -133,12 +134,13 @@
@Override
public void synRequested()
{
- WhereTreeNodeStructure wts = _graphQueryWherePanelCtrl.syncWhereCols(_tableFramesModel);
- _graphQueryResultPanelCtrl.execSQL(new QueryBuilderSQLGenerator(_session).generateSQL(_tableFramesModel, wts));
+ syncResult();
}
};
}
+
+
private SyncListener createSQLSyncListener()
{
return new SyncListener()
@@ -146,30 +148,30 @@
@Override
public void synRequested()
{
- WhereTreeNodeStructure wts = _graphQueryWherePanelCtrl.syncWhereCols(_tableFramesModel);
- _graphQuerySQLPanelCtrl.setSQL(new QueryBuilderSQLGenerator(_session).generateSQL(_tableFramesModel, wts));
+ syncSql();
}
};
}
-
private void onModelChanged(TableFramesModelChangeType changeType)
{
if (_sqlDockHandle.isShowing() && _graphQuerySQLPanelCtrl.isAutoSync())
{
- WhereTreeNodeStructure wts = _graphQueryWherePanelCtrl.syncWhereCols(_tableFramesModel);
- _graphQuerySQLPanelCtrl.setSQL(new QueryBuilderSQLGenerator(_session).generateSQL(_tableFramesModel, wts));
+ syncSql();
}
else if(_resultDockHandle.isShowing() && _graphQueryResultPanelCtrl.isAutoSync())
{
- WhereTreeNodeStructure wts = _graphQueryWherePanelCtrl.syncWhereCols(_tableFramesModel);
- _graphQueryResultPanelCtrl.execSQL(new QueryBuilderSQLGenerator(_session).generateSQL(_tableFramesModel, wts));
+ syncResult();
}
else if(_whereDockHandle.isShowing())
{
_graphQueryWherePanelCtrl.syncWhereCols(_tableFramesModel);
}
+ else if(_orderDockHandle.isShowing())
+ {
+ _graphQueryOrderPanelCtrl.syncOrderCols(_tableFramesModel);
+ }
if(null != changeType && changeType == TableFramesModelChangeType.CONSTRAINT && _chkHideNoJoins.isSelected() && _tableFramesModel.containsUniddenNoJoins())
{
@@ -182,6 +184,21 @@
}
}
+ private void syncResult()
+ {
+ OrderStructure orderStructure = _graphQueryOrderPanelCtrl.syncOrderCols(_tableFramesModel);
+ WhereTreeNodeStructure wts = _graphQueryWherePanelCtrl.syncWhereCols(_tableFramesModel);
+ _graphQueryResultPanelCtrl.execSQL(new QueryBuilderSQLGenerator(_session).generateSQL(_tableFramesModel, wts, orderStructure));
+ }
+
+ private void syncSql()
+ {
+ OrderStructure orderStructure = _graphQueryOrderPanelCtrl.syncOrderCols(_tableFramesModel);
+ WhereTreeNodeStructure wts = _graphQueryWherePanelCtrl.syncWhereCols(_tableFramesModel);
+ _graphQuerySQLPanelCtrl.setSQL(new QueryBuilderSQLGenerator(_session).generateSQL(_tableFramesModel, wts, orderStructure));
+ }
+
+
private void initHandels()
{
_graphDockHandleAdmin = new GraphDockHandleAdmin(new GraphDockHandleAdminListerner()
@@ -243,4 +260,9 @@
{
return _graphQueryWherePanelCtrl.getWhereTreeNodeStructure();
}
+
+ public OrderStructureXmlBean getOrderStructure()
+ {
+ return _graphQueryOrderPanelCtrl.getOrderStructure();
+ }
}
Added: trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/querybuilder/QueryOrderTableModel.java
===================================================================
--- trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/querybuilder/QueryOrderTableModel.java (rev 0)
+++ trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/querybuilder/QueryOrderTableModel.java 2011-05-28 08:46:10 UTC (rev 6273)
@@ -0,0 +1,204 @@
+package net.sourceforge.squirrel_sql.plugins.graph.querybuilder;
+
+import net.sourceforge.squirrel_sql.fw.util.StringManager;
+import net.sourceforge.squirrel_sql.fw.util.StringManagerFactory;
+import net.sourceforge.squirrel_sql.plugins.graph.xmlbeans.OrderStructureXmlBean;
+
+import javax.swing.*;
+import javax.swing.table.*;
+import java.awt.*;
+import java.util.ArrayList;
+import java.util.Arrays;
+
+public class QueryOrderTableModel extends DefaultTableModel
+{
+ private static final StringManager s_stringMgr = StringManagerFactory.getStringManager(QueryOrderTableModel.class);
+
+ private ArrayList<OrderCol> _orderCols = new ArrayList<OrderCol>();
+ private DefaultTableColumnModel _colModel;
+
+ public QueryOrderTableModel(OrderStructureXmlBean orderStructure)
+ {
+ _colModel = new DefaultTableColumnModel();
+
+ TableColumn col;
+
+ col = new TableColumn(0);
+ col.setHeaderValue(s_stringMgr.getString("graph.QueryOrderTableModel.Column"));
+ col.setPreferredWidth(250);
+ _colModel.addColumn(col);
+
+ col = new TableColumn(1);
+ col.setHeaderValue(s_stringMgr.getString("graph.QueryOrderTableModel.Ascending"));
+
+ final JCheckBox rendererCheckBox = new JCheckBox();
+ DefaultTableCellRenderer cellRenderer = new DefaultTableCellRenderer()
+ {
+ @Override
+ public Component getTableCellRendererComponent(JTable table,
+ Object value,
+ boolean isSelected,
+ boolean hasFocus,
+ int row,
+ int column)
+ {
+ rendererCheckBox.setSelected((Boolean) value);
+ return rendererCheckBox;
+ }
+ };
+
+ col.setCellRenderer(cellRenderer);
+ _colModel.addColumn(col);
+
+ if(null != orderStructure)
+ {
+ _orderCols.addAll(Arrays.asList(orderStructure.getOrderCols()));
+ }
+ }
+
+
+ @Override
+ public Object getValueAt(int row, int column)
+ {
+ if(0 == column)
+ {
+ return _orderCols.get(row).getQualifiedCol();
+ }
+ else
+ {
+ return _orderCols.get(row).isAscending();
+ }
+ }
+
+ @Override
+ public int getRowCount()
+ {
+ if(null == _orderCols)
+ {
+ // This if is here because the method is called from the base class constructor.
+ return 0;
+ }
+
+ return _orderCols.size();
+ }
+
+ @Override
+ public boolean isCellEditable(int row, int column)
+ {
+ return false;
+ }
+
+
+ @Override
+ public int getColumnCount()
+ {
+ return 2;
+ }
+
+ public void updateOrderCols(ArrayList<OrderCol> newOrderCols)
+ {
+ ArrayList<OrderCol> toRemove = new ArrayList<OrderCol>();
+ ArrayList<OrderCol> toAdd = new ArrayList<OrderCol>();
+
+ for (OrderCol newOrderCol : newOrderCols)
+ {
+ boolean found = false;
+ for (OrderCol orderCol : _orderCols)
+ {
+ if(orderCol.equals(newOrderCol))
+ {
+ updateCol(orderCol, newOrderCol);
+ found = true;
+ break;
+ }
+ }
+
+ if(false == found)
+ {
+ toAdd.add(newOrderCol);
+ }
+ }
+
+ for (OrderCol orderCol : _orderCols)
+ {
+ boolean found = false;
+ for (OrderCol newOrderCol : newOrderCols)
+ {
+ if(orderCol.equals(newOrderCol))
+ {
+ updateCol(orderCol, newOrderCol);
+ found = true;
+ break;
+ }
+ }
+
+ if(false == found)
+ {
+ toRemove.add(orderCol);
+ }
+ }
+
+ _orderCols.removeAll(toRemove);
+ _orderCols.addAll(toAdd);
+
+ fireTableDataChanged();
+ }
+
+ private void updateCol(OrderCol toBeUpdated, OrderCol update)
+ {
+ toBeUpdated.setAscending(update.isAscending());
+ toBeUpdated.setAggregated(update.isAggregated());
+ }
+
+ public TableColumnModel getColumnModel()
+ {
+ return _colModel;
+ }
+
+ public int[] moveUp(int[] selRows)
+ {
+ for (int i : selRows)
+ {
+ if (0 == i)
+ {
+ return selRows;
+ }
+ }
+
+ int[] newSelRows = new int[selRows.length];
+ for (int i = 0; i < selRows.length; ++i)
+ {
+ OrderCol col = _orderCols.remove(selRows[i]);
+ newSelRows[i] = selRows[i] - 1;
+ _orderCols.add(newSelRows[i], col);
+ }
+
+ return newSelRows;
+ }
+
+ public int[] moveDown(int[] selRows)
+ {
+ for (int i : selRows)
+ {
+ if (_orderCols.size() - 1 == i)
+ {
+ return selRows;
+ }
+ }
+
+ int[] newSelIx = new int[selRows.length];
+ for (int i = selRows.length - 1; i >= 0; --i)
+ {
+ OrderCol col = (OrderCol) _orderCols.remove(selRows[i]);
+ newSelIx[i] = selRows[i] + 1;
+ _orderCols.add(newSelIx[i], col);
+ }
+
+ return newSelIx;
+ }
+
+ public OrderCol[] getOrderCols()
+ {
+ return _orderCols.toArray(new OrderCol[_orderCols.size()]);
+ }
+}
Modified: trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/querybuilder/sqlgen/FromClauseGenerator.java
===================================================================
--- trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/querybuilder/sqlgen/FromClauseGenerator.java 2011-05-25 19:12:16 UTC (rev 6272)
+++ trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/querybuilder/sqlgen/FromClauseGenerator.java 2011-05-28 08:46:10 UTC (rev 6273)
@@ -55,6 +55,12 @@
private void appendJoins(FromClauseRes fromClauseRes, TableFrameController tfcFrom, TableFrameController tfcTo, TableFramesModel tableFramesModel)
{
+ if(tfcFrom == tfcTo)
+ {
+ return;
+ }
+
+
ConstraintView[] bauf;
String tableNameFrom = tfcFrom.getTableInfo().getSimpleName();
Modified: trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/querybuilder/sqlgen/QueryBuilderSQLGenerator.java
===================================================================
--- trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/querybuilder/sqlgen/QueryBuilderSQLGenerator.java 2011-05-25 19:12:16 UTC (rev 6272)
+++ trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/querybuilder/sqlgen/QueryBuilderSQLGenerator.java 2011-05-28 08:46:10 UTC (rev 6273)
@@ -4,6 +4,8 @@
import net.sourceforge.squirrel_sql.fw.codereformat.CodeReformator;
import net.sourceforge.squirrel_sql.fw.codereformat.CommentSpec;
import net.sourceforge.squirrel_sql.plugins.graph.TableFramesModel;
+import net.sourceforge.squirrel_sql.plugins.graph.querybuilder.OrderCol;
+import net.sourceforge.squirrel_sql.plugins.graph.querybuilder.OrderStructure;
import net.sourceforge.squirrel_sql.plugins.graph.querybuilder.WhereTreeNodeStructure;
public class QueryBuilderSQLGenerator
@@ -15,7 +17,7 @@
_session = session;
}
- public String generateSQL(TableFramesModel tableFramesModel, WhereTreeNodeStructure wts)
+ public String generateSQL(TableFramesModel tableFramesModel, WhereTreeNodeStructure wts, OrderStructure orderStructure)
{
FromClauseRes fromClause = new FromClauseGenerator().createFrom(tableFramesModel);
@@ -32,9 +34,14 @@
return null;
}
- StringBuffer where = new StringBuffer(wts.generateWhereClause());
+ String rawSql =
+ selectClause.getSelectClause() + " " +
+ fromClause.getFromClause() + " " +
+ wts.generateWhereClause() + " " +
+ selectClause.getGroupByClause() + " " +
+ orderStructure.generateOrderBy(selectClause);
- return format(selectClause.getSelectClause() + " " + fromClause.getFromClause() + " " + where + " " + selectClause.getGroupByClause(), _session).trim();
+ return format(rawSql, _session).trim();
}
Modified: trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/querybuilder/sqlgen/SelectClauseGenerator.java
===================================================================
--- trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/querybuilder/sqlgen/SelectClauseGenerator.java 2011-05-25 19:12:16 UTC (rev 6272)
+++ trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/querybuilder/sqlgen/SelectClauseGenerator.java 2011-05-28 08:46:10 UTC (rev 6273)
@@ -4,6 +4,8 @@
import net.sourceforge.squirrel_sql.plugins.graph.ColumnInfo;
import net.sourceforge.squirrel_sql.plugins.graph.TableFrameController;
+import java.util.ArrayList;
+
public class SelectClauseGenerator
{
public SelectClauseRes createSelectClause(FromClauseRes fromClause)
@@ -15,6 +17,7 @@
boolean hasAggFct = false;
boolean groupByHasCols = false;
+ ArrayList<String> qualifiedColsOrderedAsTheyAppearInSelect = new ArrayList<String>();
for (TableFrameController tfc : fromClause.getTables())
{
@@ -24,18 +27,21 @@
{
AggregateFunctions af = columnInfo.getQueryData().getAggregateFunction();
+ String qualifiedCol = tfc.getTableInfo().getSimpleName() + "." + columnInfo.getColumnName();
+
if (AggregateFunctions.NONE == af)
{
- String s = tfc.getTableInfo().getSimpleName() + "." + columnInfo.getColumnName() + ",";
+ String s = qualifiedCol + ",";
select.append(s);
groupBy.append(s);
groupByHasCols = true;
}
else
{
- select.append(af.getSQL() + "(" + tfc.getTableInfo().getSimpleName() + "." + columnInfo.getColumnName() + "),");
+ select.append(af.getSQL() + "(" + qualifiedCol + "),");
hasAggFct = true;
}
+ qualifiedColsOrderedAsTheyAppearInSelect.add(qualifiedCol);
colAdded = true;
}
}
@@ -51,11 +57,11 @@
if(hasAggFct && groupByHasCols)
{
groupBy.setLength(groupBy.length() - 1); // cut off the last comma.
- return new SelectClauseRes(select, groupBy);
+ return new SelectClauseRes(select, groupBy, qualifiedColsOrderedAsTheyAppearInSelect);
}
else
{
- return new SelectClauseRes(select);
+ return new SelectClauseRes(select, qualifiedColsOrderedAsTheyAppearInSelect);
}
}
}
Modified: trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/querybuilder/sqlgen/SelectClauseRes.java
===================================================================
--- trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/querybuilder/sqlgen/SelectClauseRes.java 2011-05-25 19:12:16 UTC (rev 6272)
+++ trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/querybuilder/sqlgen/SelectClauseRes.java 2011-05-28 08:46:10 UTC (rev 6273)
@@ -1,19 +1,23 @@
package net.sourceforge.squirrel_sql.plugins.graph.querybuilder.sqlgen;
+import java.util.ArrayList;
+
public class SelectClauseRes
{
private String _select;
private String _groupBy;
+ private ArrayList<String> _qualifiedColsOrderedAsTheyAppearInSelect;
- public SelectClauseRes(StringBuffer select)
+ public SelectClauseRes(StringBuffer select, ArrayList<String> qualifiedColsOrderedAsTheyAppearInSelect)
{
- this(select, new StringBuffer(""));
+ this(select, new StringBuffer(""), qualifiedColsOrderedAsTheyAppearInSelect);
}
- public SelectClauseRes(StringBuffer select, StringBuffer groupBy)
+ public SelectClauseRes(StringBuffer select, StringBuffer groupBy, ArrayList<String> qualifiedColsOrderedAsTheyAppearInSelect)
{
_select = select.toString();
_groupBy = groupBy.toString();
+ _qualifiedColsOrderedAsTheyAppearInSelect = qualifiedColsOrderedAsTheyAppearInSelect;
}
@@ -26,4 +30,17 @@
{
return _groupBy;
}
+
+ public int getSQLSelectPositionForCol(String qualifiedCol)
+ {
+ for (int i = 0; i < _qualifiedColsOrderedAsTheyAppearInSelect.size(); i++)
+ {
+ if(_qualifiedColsOrderedAsTheyAppearInSelect.get(i).equalsIgnoreCase(qualifiedCol))
+ {
+ return i + 1;
+ }
+ }
+
+ throw new IllegalArgumentException("Unknown column " + qualifiedCol);
+ }
}
Modified: trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/xmlbeans/GraphControllerXmlBean.java
===================================================================
--- trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/xmlbeans/GraphControllerXmlBean.java 2011-05-25 19:12:16 UTC (rev 6272)
+++ trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/xmlbeans/GraphControllerXmlBean.java 2011-05-28 08:46:10 UTC (rev 6273)
@@ -15,6 +15,7 @@
private boolean _queryHideNoJoins;
private boolean _32Converted;
private WhereTreeNodeStructure _whereTreeNodeStructure;
+ private OrderStructureXmlBean _orderStructure;
public String getTitle()
@@ -116,4 +117,14 @@
{
_whereTreeNodeStructure = whereTreeNodeStructure;
}
+
+ public void setOrderStructure(OrderStructureXmlBean orderStructure)
+ {
+ _orderStructure = orderStructure;
+ }
+
+ public OrderStructureXmlBean getOrderStructure()
+ {
+ return _orderStructure;
+ }
}
Added: trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/xmlbeans/OrderStructureXmlBean.java
===================================================================
--- trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/xmlbeans/OrderStructureXmlBean.java (rev 0)
+++ trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/xmlbeans/OrderStructureXmlBean.java 2011-05-28 08:46:10 UTC (rev 6273)
@@ -0,0 +1,30 @@
+package net.sourceforge.squirrel_sql.plugins.graph.xmlbeans;
+
+import net.sourceforge.squirrel_sql.plugins.graph.querybuilder.OrderCol;
+
+public class OrderStructureXmlBean
+{
+ private OrderCol[] _orderCols = new OrderCol[0];
+
+ /**
+ * Constructor for XML deserialization
+ */
+ public OrderStructureXmlBean()
+ {
+ }
+
+ public OrderStructureXmlBean(OrderCol[] orderCols)
+ {
+ _orderCols = orderCols;
+ }
+
+ public OrderCol[] getOrderCo...
[truncated message content] |