Revision: 6238
http://squirrel-sql.svn.sourceforge.net/squirrel-sql/?rev=6238&view=rev
Author: gerdwagner
Date: 2011-04-20 04:17:59 +0000 (Wed, 20 Apr 2011)
Log Message:
-----------
More Query Builder
Modified Paths:
--------------
trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/ConstraintData.java
trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/ConstraintView.java
trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/ConstraintViewsModel.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/ModeManager.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/TableFramesModel.java
trunk/sql12/plugins/graph/src/main/resources/net/sourceforge/squirrel_sql/plugins/graph/I18NStrings.properties
Modified: trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/ConstraintData.java
===================================================================
--- trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/ConstraintData.java 2011-04-14 20:18:45 UTC (rev 6237)
+++ trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/ConstraintData.java 2011-04-20 04:17:59 UTC (rev 6238)
@@ -1,12 +1,12 @@
package net.sourceforge.squirrel_sql.plugins.graph;
+import net.sourceforge.squirrel_sql.plugins.graph.xmlbeans.ColumnInfoXmlBean;
+import net.sourceforge.squirrel_sql.plugins.graph.xmlbeans.ConstraintDataXmlBean;
+
import java.util.ArrayList;
import java.util.Vector;
-import net.sourceforge.squirrel_sql.plugins.graph.xmlbeans.ColumnInfoXmlBean;
-import net.sourceforge.squirrel_sql.plugins.graph.xmlbeans.ConstraintDataXmlBean;
-
public class ConstraintData
{
private String _pkTableName;
@@ -245,4 +245,49 @@
return GraphUtil.columnsMatch(other._pkCols, _pkCols) && GraphUtil.columnsMatch(other._fkCols, _fkCols);
}
+ public boolean hasOverlap(ConstraintData other)
+ {
+ if( false == other._pkTableName.equalsIgnoreCase(_pkTableName)
+ || false == other._fkTableName.equalsIgnoreCase(_fkTableName))
+ {
+ return false;
+ }
+
+ for (ColumnInfo pkCol : _pkCols)
+ {
+ for (ColumnInfo otherPkCol : other._pkCols)
+ {
+ if(pkCol.equals(otherPkCol))
+ {
+ return true;
+ }
+ }
+ }
+
+ for (ColumnInfo fkCol : _fkCols)
+ {
+ for (ColumnInfo otherFkCol : other._fkCols)
+ {
+ if(fkCol.equals(otherFkCol))
+ {
+ return true;
+ }
+ }
+ }
+
+ return false;
+ }
+
+ public void replaceColumnClonesInConstraintsByRefrences(TableFramesModel tableFramesModel)
+ {
+ for (int i = 0; i < _pkCols.size(); i++)
+ {
+ _pkCols.set(i, tableFramesModel.findColumn(_pkTableName, _pkCols.get(i).getColumnName()));
+ }
+
+ for (int i = 0; i < _fkCols.size(); i++)
+ {
+ _fkCols.set(i, tableFramesModel.findColumn(_fkTableName, _fkCols.get(i).getColumnName()));
+ }
+ }
}
Modified: trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/ConstraintView.java
===================================================================
--- trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/ConstraintView.java 2011-04-14 20:18:45 UTC (rev 6237)
+++ trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/ConstraintView.java 2011-04-20 04:17:59 UTC (rev 6238)
@@ -1,19 +1,19 @@
package net.sourceforge.squirrel_sql.plugins.graph;
import net.sourceforge.squirrel_sql.client.session.ISession;
+import net.sourceforge.squirrel_sql.fw.util.StringManager;
+import net.sourceforge.squirrel_sql.fw.util.StringManagerFactory;
import net.sourceforge.squirrel_sql.plugins.graph.nondbconst.ConfigureNonDbConstraintController;
import net.sourceforge.squirrel_sql.plugins.graph.xmlbeans.ConstraintViewXmlBean;
-import net.sourceforge.squirrel_sql.fw.util.StringManagerFactory;
-import net.sourceforge.squirrel_sql.fw.util.StringManager;
import javax.swing.*;
import javax.swing.plaf.basic.BasicInternalFrameUI;
import java.awt.*;
-import java.awt.geom.AffineTransform;
-import java.awt.geom.NoninvertibleTransformException;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.NoninvertibleTransformException;
import java.util.ArrayList;
import java.util.Vector;
@@ -186,7 +186,7 @@
_fkFrameOriginatingFrom.recalculateConnections();
}
- public void generateFoldingPointIfLinesWouldCoverEachOther()
+ public boolean generateFoldingPointIfLinesWouldCoverEachOther()
{
ArrayList<ConstraintView> matches = _fkFrameOriginatingFrom.getConstraintViewsModel().checkForMatches(this);
if(0 < matches.size() && null == getFirstFoldingPoint())
@@ -210,8 +210,11 @@
_constraintGraph.setHitConnectLine(_constraintGraph.getMainLine());
addFoldingPointAt(p);
+ return true;
}
}
+
+ return false;
}
private void onRemoveNonDbConstraint()
@@ -853,4 +856,9 @@
{
return _constraintData.matches(view.getData());
}
+
+ public boolean hasOverlap(ConstraintView mergeTarget)
+ {
+ return _constraintData.hasOverlap(mergeTarget.getData());
+ }
}
Modified: trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/ConstraintViewsModel.java
===================================================================
--- trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/ConstraintViewsModel.java 2011-04-14 20:18:45 UTC (rev 6237)
+++ trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/ConstraintViewsModel.java 2011-04-20 04:17:59 UTC (rev 6238)
@@ -8,6 +8,8 @@
import net.sourceforge.squirrel_sql.plugins.graph.nondbconst.DndEvent;
import net.sourceforge.squirrel_sql.plugins.graph.xmlbeans.ConstraintViewXmlBean;
+import javax.swing.*;
+import java.awt.*;
import java.sql.DatabaseMetaData;
import java.sql.ResultSet;
import java.sql.SQLException;
@@ -330,4 +332,87 @@
}
return ret;
}
+
+ public ArrayList<ConstraintView> checkMerges(GraphDesktopController desktopController,
+ TableFrameController fkTable,
+ TableFrameController pkTable,
+ ConstraintView newConstraint)
+ {
+ ArrayList<ConstraintView> ret = new ArrayList<ConstraintView>();
+
+ if(false == newConstraint.generateFoldingPointIfLinesWouldCoverEachOther())
+ {
+ Mode mode = desktopController.getModeManager().getMode();
+ String pkTableName = pkTable.getTableInfo().getSimpleName();
+
+ if( mode.isQueryBuilder()
+ && 2 == nonDbJoinCountTo(pkTableName))
+ {
+ Window parent = SwingUtilities.windowForComponent(pkTable.getFrame());
+
+ String fkTableName = fkTable.getTableInfo().getSimpleName();
+ String msg = s_stringMgr.getString("graph.ConstraintViewsModel.joinMergeMsg", fkTableName, pkTableName);
+
+ int opt = JOptionPane.showConfirmDialog(parent, msg);
+ if (JOptionPane.NO_OPTION == opt)
+ {
+ return mergeNonDBJoinsTo(newConstraint, pkTableName);
+ }
+ else if (JOptionPane.CANCEL_OPTION == opt)
+ {
+ ret.add(newConstraint);
+ }
+ }
+ }
+
+ return ret;
+ }
+
+
+ private int nonDbJoinCountTo(String pkTableName)
+ {
+ int ret = 0;
+ for (ConstraintView constraintView : _constraintViews)
+ {
+ if(pkTableName.equalsIgnoreCase(constraintView.getData().getPkTableName())
+ && constraintView.getData().isNonDbConstraint()
+ && false == constraintView.getData().getConstraintQueryData().isNoJoin())
+ {
+ ++ret;
+ }
+ }
+
+ return ret;
+ }
+
+ private ArrayList<ConstraintView> mergeNonDBJoinsTo(ConstraintView mergeTarget, String pkTableName)
+ {
+ ArrayList<ConstraintView> toRemove = new ArrayList<ConstraintView>();
+
+ for (ConstraintView constraintView : _constraintViews)
+ {
+ if( pkTableName.equalsIgnoreCase(constraintView.getData().getPkTableName())
+ && mergeTarget != constraintView
+ && false == constraintView.hasOverlap(mergeTarget))
+ {
+ for (int i = 0; i < constraintView.getData().getFkColumnInfos().length; i++)
+ {
+ ColumnInfo fkCol = constraintView.getData().getFkColumnInfos()[i];
+ ColumnInfo pkCol = constraintView.getData().getPkColumnInfos()[i];
+ mergeTarget.getData().addColumnInfos(pkCol, fkCol);
+ }
+ toRemove.add(constraintView);
+ }
+ }
+
+ return toRemove;
+ }
+
+ public void replaceColumnClonesInConstraintsByRefrences(TableFramesModel tableFramesModel)
+ {
+ for (ConstraintView constraintView : _constraintViews)
+ {
+ constraintView.getData().replaceColumnClonesInConstraintsByRefrences(tableFramesModel);
+ }
+ }
}
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-04-14 20:18:45 UTC (rev 6237)
+++ trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/GraphController.java 2011-04-20 04:17:59 UTC (rev 6238)
@@ -4,15 +4,13 @@
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.window.TabToWindowHandler;
-import net.sourceforge.squirrel_sql.plugins.graph.xmlbeans.GraphControllerXmlBean;
-import net.sourceforge.squirrel_sql.plugins.graph.xmlbeans.GraphXmlSerializer;
-import net.sourceforge.squirrel_sql.plugins.graph.xmlbeans.TableFrameControllerXmlBean;
+import net.sourceforge.squirrel_sql.plugins.graph.xmlbeans.*;
import javax.swing.*;
import java.awt.*;
import java.awt.geom.Rectangle2D;
-import java.util.*;
import java.util.List;
+import java.util.Vector;
public class GraphController
@@ -127,7 +125,12 @@
graphControllerXmlBean = _xmlSerializer.read();
_tabToWindowHandler.setTitle(graphControllerXmlBean.getTitle());
Mode modeIndex = Mode.getForIndex(graphControllerXmlBean.getModeIndex());
- _panelController.initMode(modeIndex, graphControllerXmlBean.getZoomerXmlBean(), graphControllerXmlBean.getPrintXmlBean(), graphControllerXmlBean.isQueryHideNoJoins());
+
+ ZoomerXmlBean zoomerXmlBean = graphControllerXmlBean.getZoomerXmlBean();
+ PrintXmlBean printXmlBean = graphControllerXmlBean.getPrintXmlBean();
+ boolean queryHideNoJoins = graphControllerXmlBean.isQueryHideNoJoins();
+ _panelController.initMode(modeIndex, zoomerXmlBean, printXmlBean, queryHideNoJoins);
+
_panelController.getDesktopController().setShowConstraintNames(graphControllerXmlBean.isShowConstraintNames());
_panelController.getDesktopController().setShowQualifiedTableNames(graphControllerXmlBean.isShowQualifiedTableNames());
}
@@ -153,6 +156,7 @@
public void run()
{
_tableFramesModel.hideNoJoins(finalGraphControllerXmlBean.isQueryHideNoJoins());
+ _tableFramesModel.replaceColumnClonesInConstraintsByRefrences();
}
});
}
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-04-14 20:18:45 UTC (rev 6237)
+++ trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/ModeManager.java 2011-04-20 04:17:59 UTC (rev 6238)
@@ -5,7 +5,6 @@
import net.sourceforge.squirrel_sql.plugins.graph.xmlbeans.ZoomerXmlBean;
import javax.swing.*;
-import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
@@ -100,6 +99,15 @@
{
listener.modeChanged(_mnuMode.getMode());
}
+
+ SwingUtilities.invokeLater(
+ new Runnable()
+ {
+ public void run()
+ {
+ _tableFramesModel.recalculateAllConnections();
+ }
+ });
}
public ModeMenuItem getModeMenuItem()
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-04-14 20:18:45 UTC (rev 6237)
+++ trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/TableFrameController.java 2011-04-20 04:17:59 UTC (rev 6238)
@@ -1,24 +1,5 @@
package net.sourceforge.squirrel_sql.plugins.graph;
-import java.awt.*;
-import java.awt.datatransfer.StringSelection;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.awt.event.AdjustmentEvent;
-import java.awt.event.AdjustmentListener;
-import java.awt.event.ComponentAdapter;
-import java.awt.event.ComponentEvent;
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
-import java.sql.DatabaseMetaData;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.util.*;
-
-import javax.swing.*;
-import javax.swing.event.InternalFrameAdapter;
-import javax.swing.event.InternalFrameEvent;
-
import net.sourceforge.squirrel_sql.client.session.ISession;
import net.sourceforge.squirrel_sql.client.session.ObjectTreeSearch;
import net.sourceforge.squirrel_sql.client.session.schemainfo.ObjFilterMatcher;
@@ -32,7 +13,21 @@
import net.sourceforge.squirrel_sql.plugins.graph.xmlbeans.ColumnInfoXmlBean;
import net.sourceforge.squirrel_sql.plugins.graph.xmlbeans.TableFrameControllerXmlBean;
+import javax.swing.*;
+import javax.swing.event.InternalFrameAdapter;
+import javax.swing.event.InternalFrameEvent;
+import java.awt.*;
+import java.awt.datatransfer.StringSelection;
+import java.awt.event.*;
+import java.sql.DatabaseMetaData;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.Hashtable;
+import java.util.Vector;
+
public class TableFrameController
{
private static final StringManager s_stringMgr =
@@ -321,14 +316,15 @@
if (null != constraintView)
{
-// SwingUtilities.invokeLater(new Runnable()
-// {
-// public void run()
-// {
- fkTable.recalculateAllConnections(true);
- constraintView.generateFoldingPointIfLinesWouldCoverEachOther();
-// }
-// });
+ fkTable.recalculateAllConnections(true);
+
+ ArrayList<ConstraintView> toRemove =
+ fkTable._constraintViewsModel.checkMerges(_desktopController, fkTable, this, constraintView);
+
+ for (ConstraintView view : toRemove)
+ {
+ fkTable.onRemoveNonDbConstraint(view);
+ }
}
}
Modified: trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/TableFramesModel.java
===================================================================
--- trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/TableFramesModel.java 2011-04-14 20:18:45 UTC (rev 6237)
+++ trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/TableFramesModel.java 2011-04-20 04:17:59 UTC (rev 6238)
@@ -2,7 +2,10 @@
import javax.swing.*;
import java.awt.*;
-import java.awt.event.*;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.ComponentAdapter;
+import java.awt.event.ComponentEvent;
import java.util.ArrayList;
import java.util.Vector;
@@ -277,7 +280,7 @@
return false;
}
- private void recalculateAllConnections()
+ public void recalculateAllConnections()
{
for (TableFrameController tfc : _openTableFrameCtrls)
{
@@ -285,4 +288,33 @@
}
}
+ /**
+ * Needed to draw constraint lines right, when Graph was loaded from XML and colums are reordered.
+ */
+ public void replaceColumnClonesInConstraintsByRefrences()
+ {
+ for (TableFrameController openTableFrameCtrl : _openTableFrameCtrls)
+ {
+ openTableFrameCtrl.getConstraintViewsModel().replaceColumnClonesInConstraintsByRefrences(this);
+ }
+ }
+
+ public ColumnInfo findColumn(String tableName, String columnName)
+ {
+ for (TableFrameController openTableFrameCtrl : _openTableFrameCtrls)
+ {
+ if(openTableFrameCtrl.getTableInfo().getSimpleName().equalsIgnoreCase(tableName))
+ {
+ for (ColumnInfo columnInfo : openTableFrameCtrl.getColumnInfos())
+ {
+ if(columnInfo.getColumnName().equalsIgnoreCase(columnName))
+ {
+ return columnInfo;
+ }
+ }
+ }
+ }
+
+ throw new IllegalArgumentException("Column " + tableName + "." + columnName + " does not exist.");
+ }
}
Modified: 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/I18NStrings.properties 2011-04-14 20:18:45 UTC (rev 6237)
+++ trunk/sql12/plugins/graph/src/main/resources/net/sourceforge/squirrel_sql/plugins/graph/I18NStrings.properties 2011-04-20 04:17:59 UTC (rev 6238)
@@ -203,4 +203,6 @@
QueryBuilderController.HideNoJoins=Hide no joins
ConstraintView.overwrite=Another non DB constraint for the same columns already exists. Would you like to replace the exisiting constraint?
-ConstraintView.existsInDB=A DB constraint for the same columns already exists.
\ No newline at end of file
+ConstraintView.existsInDB=A DB constraint for the same columns already exists.
+
+graph.ConstraintViewsModel.joinMergeMsg=A user defined join from table "{0}" to table "{1}" already exists.\n\nWould you really like to add another (aliased) join?\n\nIf you choose "No" a new join column pair will be added to the existing join.
\ No newline at end of file
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|