Revision: 6236
http://squirrel-sql.svn.sourceforge.net/squirrel-sql/?rev=6236&view=rev
Author: gerdwagner
Date: 2011-04-13 22:47:24 +0000 (Wed, 13 Apr 2011)
Log Message:
-----------
More Query Builder
Modified Paths:
--------------
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/ColumnInfoModel.java
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/GraphDesktopController.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/OrderType.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/java/net/sourceforge/squirrel_sql/plugins/graph/TableFramesModelListener.java
trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/nondbconst/ConfigureNonDbConstraintController.java
trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/nondbconst/ConfigureNonDbConstraintDlg.java
trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/nondbconst/ConstraintDataSet.java
trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/sqlgen/FromClauseGenerator.java
trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/xmlbeans/ColumnInfoXmlBean.java
trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/xmlbeans/ConstraintDataXmlBean.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/GraphXmlSerializer.java
trunk/sql12/plugins/graph/src/main/resources/net/sourceforge/squirrel_sql/plugins/graph/I18NStrings.properties
Added Paths:
-----------
trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/AddTableRequestListener.java
trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/GraphUtil.java
trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/nondbconst/ContraintDisplayData.java
trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/xmlbeans/Version32Converter.java
Removed Paths:
-------------
trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/AddTableListener.java
trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/GraphControllerAccessor.java
Deleted: trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/AddTableListener.java
===================================================================
--- trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/AddTableListener.java 2011-04-12 20:10:54 UTC (rev 6235)
+++ trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/AddTableListener.java 2011-04-13 22:47:24 UTC (rev 6236)
@@ -1,6 +0,0 @@
-package net.sourceforge.squirrel_sql.plugins.graph;
-
-public interface AddTableListener
-{
- void addTablesRequest(String[] tablenames, String schema, String catalog);
-}
Copied: trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/AddTableRequestListener.java (from rev 6227, trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/AddTableListener.java)
===================================================================
--- trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/AddTableRequestListener.java (rev 0)
+++ trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/AddTableRequestListener.java 2011-04-13 22:47:24 UTC (rev 6236)
@@ -0,0 +1,6 @@
+package net.sourceforge.squirrel_sql.plugins.graph;
+
+public interface AddTableRequestListener
+{
+ void addTablesRequest(String[] tablenames, String schema, String catalog);
+}
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-04-12 20:10:54 UTC (rev 6235)
+++ trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/ColumnInfo.java 2011-04-13 22:47:24 UTC (rev 6236)
@@ -17,7 +17,6 @@
private String _importedFromTable;
private String _importedColumn;
private String _constraintName;
- private boolean _nonDbConstraint;
private String _toString;
@@ -49,7 +48,7 @@
if(null != xmlBean.getImportedFromTable())
{
- setImportData(xmlBean.getImportedFromTable(), xmlBean.getImportedColumn(), xmlBean.getConstraintName(), xmlBean.isNonDbConstraint());
+ setDBImportData(xmlBean.getImportedFromTable(), xmlBean.getImportedColumn(), xmlBean.getConstraintName());
}
}
@@ -67,7 +66,6 @@
ret.setImportedFromTable(_importedFromTable);
ret.setImportedColumn(_importedColumn);
ret.setConstraintName(_constraintName);
- ret.setNonDbConstraint(_nonDbConstraint);
QueryDataXmlBean queryDataXmlBean = new QueryDataXmlBean();
queryDataXmlBean.setOperatorIndex(_queryData.getOperator().getIndex());
@@ -92,34 +90,22 @@
return _columnName;
}
- public void setImportData(String importedFromTable, String importedColumn, String constraintName, boolean nonDbConstraint)
+ public void setDBImportData(String importedFromTable, String importedColumn, String constraintName)
{
_importedFromTable = importedFromTable;
_importedColumn = importedColumn;
_constraintName = constraintName;
- _nonDbConstraint = nonDbConstraint;
String fkString = " (FK)";
- if(null != importedColumn && false == nonDbConstraint && false == _toString.endsWith(fkString))
+ if(null != importedColumn && false == _toString.endsWith(fkString))
{
_toString += fkString;
}
}
- public void clearImportData()
+ public String getDBConstraintName()
{
- setImportData(null, null, null, false);
- }
-
-
- public boolean isImportedFrom(String tableName)
- {
- return tableName.equals(_importedFromTable);
- }
-
- public String getConstraintName()
- {
return _constraintName;
}
@@ -128,11 +114,6 @@
return _index;
}
- public String getImportedColumnName()
- {
- return _importedColumn;
- }
-
public void markPrimaryKey()
{
_isPrimaryKey = true;
@@ -159,17 +140,12 @@
return _importedFromTable + "." + _importedColumn + " (" + _constraintName + ")";
}
- public String getImportedTableName()
+ public String getDBImportedTableName()
{
return _importedFromTable;
}
- public boolean isNonDbConstraint()
- {
- return _nonDbConstraint;
- }
-
public QueryData getQueryData()
{
return _queryData;
@@ -194,4 +170,21 @@
{
return _columnInfoModelEventDispatcher;
}
+
+ @Override
+ public boolean equals(Object obj)
+ {
+ if(false == obj instanceof ColumnInfo)
+ {
+ return false;
+ }
+
+ return _columnName.equalsIgnoreCase(((ColumnInfo)obj)._columnName);
+ }
+
+ @Override
+ public int hashCode()
+ {
+ return _columnName.hashCode();
+ }
}
Modified: trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/ColumnInfoModel.java
===================================================================
--- trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/ColumnInfoModel.java 2011-04-12 20:10:54 UTC (rev 6235)
+++ trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/ColumnInfoModel.java 2011-04-13 22:47:24 UTC (rev 6236)
@@ -61,15 +61,7 @@
public ColumnInfo findColumnInfo(String colName)
{
- for (int i = 0; i < _colInfos.length; i++)
- {
- if(_colInfos[i].getName().equals(colName))
- {
- return _colInfos[i];
- }
- }
-
- throw new IllegalArgumentException("Column " + colName + " not found");
+ return GraphUtil.findColumnInfo(colName, _colInfos);
}
public ColumnInfo getOrderedColAt(int ix)
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-12 20:10:54 UTC (rev 6235)
+++ trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/ConstraintData.java 2011-04-13 22:47:24 UTC (rev 6236)
@@ -1,6 +1,6 @@
package net.sourceforge.squirrel_sql.plugins.graph;
-import java.util.Arrays;
+import java.util.ArrayList;
import java.util.Vector;
import net.sourceforge.squirrel_sql.plugins.graph.xmlbeans.ColumnInfoXmlBean;
@@ -14,11 +14,17 @@
private String _constraintName;
private boolean _nonDbConstraint;
- private ColumnInfo[] _columnInfos = new ColumnInfo[0];
private boolean _showThisConstraintName;
private ConstraintQueryData _constraintQueryData = new ConstraintQueryData();
+ ///////////////////////////////////////////////////////
+ // These two arrays match index wise
+ private ArrayList<ColumnInfo> _pkCols = new ArrayList<ColumnInfo>();
+ private ArrayList<ColumnInfo> _fkCols = new ArrayList<ColumnInfo>();
+ //
+ ////////////////////////////////////////////////////////
+
public ConstraintData(String pkTableName, String fkTableName, String constraintName)
{
this(pkTableName, fkTableName, constraintName, false);
@@ -38,11 +44,20 @@
}
- _columnInfos = new ColumnInfo[constraintDataXmlBean.getColumnInfoXmlBeans().length];
- for (int i = 0; i < _columnInfos.length; i++)
+
+ _pkCols = new ArrayList<ColumnInfo>();
+ for (ColumnInfoXmlBean columnInfoXmlBean : constraintDataXmlBean.getPkColumns())
{
- _columnInfos[i] = new ColumnInfo(constraintDataXmlBean.getColumnInfoXmlBeans()[i]);
+ _pkCols.add(new ColumnInfo(columnInfoXmlBean));
}
+
+ _fkCols = new ArrayList<ColumnInfo>();
+ for (ColumnInfoXmlBean columnInfoXmlBean : constraintDataXmlBean.getFkColumns())
+ {
+ _fkCols.add(new ColumnInfo(columnInfoXmlBean));
+ }
+
+
}
public ConstraintData(String pkTableName, String fkTableName, String constraintName, boolean nonDbConstraint)
@@ -66,37 +81,42 @@
ret.setConstraintQueryDataXmlBean(_constraintQueryData.getXmlBean());
- ColumnInfoXmlBean[] colInfoXmlBeans = new ColumnInfoXmlBean[_columnInfos.length];
- for (int i = 0; i < _columnInfos.length; i++)
+ ColumnInfoXmlBean[] pkColInfoXmlBeans = new ColumnInfoXmlBean[_pkCols.size()];
+ for (int i = 0; i < _pkCols.size(); i++)
{
- colInfoXmlBeans[i] = _columnInfos[i].getXmlBean();
+ pkColInfoXmlBeans[i] = _pkCols.get(i).getXmlBean();
}
- ret.setColumnInfoXmlBeans(colInfoXmlBeans);
+ ret.setPkColumns(pkColInfoXmlBeans);
- return ret;
- }
+ ColumnInfoXmlBean[] fkColInfoXmlBeans = new ColumnInfoXmlBean[_fkCols.size()];
+ for (int i = 0; i < _fkCols.size(); i++)
+ {
+ fkColInfoXmlBeans[i] = _fkCols.get(i).getXmlBean();
+ }
+ ret.setFkColumns(fkColInfoXmlBeans);
- public void addColumnInfo(ColumnInfo colInfo)
- {
- Vector<ColumnInfo> buf = new Vector<ColumnInfo>();
- buf.addAll(Arrays.asList(_columnInfos));
- buf.add(colInfo);
-
- _columnInfos = buf.toArray(new ColumnInfo[buf.size()]);
+ return ret;
}
+
public String getPkTableName()
{
return _pkTableName;
}
- public ColumnInfo[] getColumnInfos()
+ public ColumnInfo[] getFkColumnInfos()
{
- return _columnInfos;
+ return _fkCols.toArray(new ColumnInfo[_pkCols.size()]);
}
+ public ColumnInfo[] getPkColumnInfos()
+ {
+ return _pkCols.toArray(new ColumnInfo[_pkCols.size()]);
+ }
+
+
public String getTitle()
{
return _fkTableName + "." + _constraintName;
@@ -114,14 +134,14 @@
ret.add("ALTER TABLE " + _fkTableName);
ret.add("ADD CONSTRAINT " + _constraintName);
- if(_columnInfos.length == 1)
+ if(_fkCols.size() == 1)
{
StringBuffer sb = new StringBuffer();
- sb.append("FOREIGN KEY (").append(_columnInfos[0].getName());
+ sb.append("FOREIGN KEY (").append(_fkCols.get(0).getName());
- for (int i = 1; i < _columnInfos.length; i++)
+ for (int i = 1; i < _fkCols.size(); i++)
{
- sb.append(",").append(_columnInfos[i].getName());
+ sb.append(",").append(_fkCols.get(i).getName());
}
sb.append(")");
ret.add(sb.toString());
@@ -129,10 +149,10 @@
sb.setLength(0);
sb.append("REFERENCES ").append(_pkTableName).append("(");
- sb.append(_columnInfos[0].getImportedColumnName());
- for (int i = 1; i < _columnInfos.length; i++)
+ sb.append(_pkCols.get(0).getColumnName());
+ for (int i = 1; i < _pkCols.size(); i++)
{
- sb.append(",").append(_columnInfos[i].getImportedColumnName());
+ sb.append(",").append(_pkCols.get(i).getColumnName());
}
sb.append(")");
ret.add(sb.toString());
@@ -143,30 +163,30 @@
{
ret.add("FOREIGN KEY");
ret.add("(");
- for (int i = 0; i < _columnInfos.length; i++)
+ for (int i = 0; i < _fkCols.size(); i++)
{
- if(i < _columnInfos.length -1)
+ if(i < _fkCols.size() -1)
{
- ret.add(" " + _columnInfos[i].getName() + ",");
+ ret.add(" " + _fkCols.get(i).getName() + ",");
}
else
{
- ret.add(" " + _columnInfos[i].getName());
+ ret.add(" " + _fkCols.get(i).getName());
}
}
ret.add(")");
ret.add("REFERENCES " + _pkTableName);
ret.add("(");
- for (int i = 0; i < _columnInfos.length; i++)
+ for (int i = 0; i < _pkCols.size(); i++)
{
- if(i < _columnInfos.length -1)
+ if(i < _pkCols.size() -1)
{
- ret.add(" " + _columnInfos[i].getImportedColumnName() + ",");
+ ret.add(" " + _pkCols.get(i).getColumnName() + ",");
}
else
{
- ret.add(" " + _columnInfos[i].getImportedColumnName());
+ ret.add(" " + _pkCols.get(i).getColumnName());
}
}
ret.add(")");
@@ -177,69 +197,15 @@
return ret.toArray(new String[ret.size()]);
}
- public void replaceCopiedColsByReferences(ColumnInfo[] colInfoRefs, boolean retainImportData)
- {
- for (int i = 0; i < colInfoRefs.length; i++)
- {
- for (int j = 0; j < _columnInfos.length; j++)
- {
- if(colInfoRefs[i].getName().equals(_columnInfos[j].getName()))
- {
- if(retainImportData)
- {
- colInfoRefs[i].setImportData(
- _columnInfos[j].getImportedTableName(),
- _columnInfos[j].getImportedColumnName(),
- _columnInfos[j].getConstraintName(),
- _columnInfos[j].isNonDbConstraint());
- }
-
- _columnInfos[j] = colInfoRefs[i];
- break;
- }
- }
- }
- }
-
public String getConstraintName()
{
return _constraintName;
}
- public void clearColumnImportData()
- {
- for (ColumnInfo columnInfo : _columnInfos)
- {
- columnInfo.clearImportData();
- }
- }
-
- public boolean hasOverlap(ConstraintData other)
- {
- if(false == other._pkTableName.equalsIgnoreCase(_pkTableName) || false == other._fkTableName.equalsIgnoreCase(_fkTableName))
- {
- return false;
- }
-
- for (ColumnInfo ci : _columnInfos)
- {
- for (ColumnInfo otherCi : other._columnInfos)
- {
- if(ci.getName().equalsIgnoreCase(otherCi.getName()))
- {
- return true;
- }
-
- }
- }
-
- return false;
- }
-
public void removeAllColumns()
{
- clearColumnImportData();
- _columnInfos = new ColumnInfo[0];
+ _pkCols.clear();
+ _fkCols.clear();
}
public void setConstraintName(String name)
@@ -262,8 +228,21 @@
return _constraintQueryData;
}
- public void setConstraintQueryData(ConstraintQueryData constraintQueryData)
+ public void setColumnInfos(ArrayList<ColumnInfo> pkCols, ArrayList<ColumnInfo> fkCols)
{
- _constraintQueryData = constraintQueryData;
+ _pkCols = pkCols;
+ _fkCols = fkCols;
}
+
+ public void addColumnInfos(ColumnInfo pkCol, ColumnInfo fkCol)
+ {
+ _pkCols.add(pkCol);
+ _fkCols.add(fkCol);
+ }
+
+ public boolean matches(ConstraintData other)
+ {
+ return GraphUtil.columnsMatch(other._pkCols, _pkCols) && GraphUtil.columnsMatch(other._fkCols, _fkCols);
+ }
+
}
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-12 20:10:54 UTC (rev 6235)
+++ trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/ConstraintView.java 2011-04-13 22:47:24 UTC (rev 6236)
@@ -14,6 +14,7 @@
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
+import java.util.ArrayList;
import java.util.Vector;
@@ -178,13 +179,44 @@
private void onConfigureNonDbConstraint()
{
- new ConfigureNonDbConstraintController(_session, this, _fkFrameOriginatingFrom, _pkFramePointingTo);
- _fkFrameOriginatingFrom.refresh();
+ new ConfigureNonDbConstraintController(this, _fkFrameOriginatingFrom, _pkFramePointingTo);
+
+ generateFoldingPointIfLinesWouldCoverEachOther();
+
+ _fkFrameOriginatingFrom.recalculateConnections();
}
+ public void generateFoldingPointIfLinesWouldCoverEachOther()
+ {
+ ArrayList<ConstraintView> matches = _fkFrameOriginatingFrom.getConstraintViewsModel().checkForMatches(this);
+ if(0 < matches.size() && null == getFirstFoldingPoint())
+ {
+ boolean allMachesHaveFoldingPoints = true;
+
+ for (ConstraintView match : matches)
+ {
+ if(null == match.getFirstFoldingPoint())
+ {
+ allMachesHaveFoldingPoints = false;
+ break;
+ }
+ }
+
+ if (false == allMachesHaveFoldingPoints)
+ {
+ Point p = new Point(_constraintGraph.getMainLine().getBegin());
+ p.x += (_constraintGraph.getMainLine().getEnd().x - _constraintGraph.getMainLine().getBegin().x)/2 + 30 * matches.size();
+ p.y += (_constraintGraph.getMainLine().getEnd().y - _constraintGraph.getMainLine().getBegin().y)/2 + 30 * matches.size();
+
+ _constraintGraph.setHitConnectLine(_constraintGraph.getMainLine());
+ addFoldingPointAt(p);
+ }
+ }
+ }
+
private void onRemoveNonDbConstraint()
{
- ConstraintViewListener[] clone = (ConstraintViewListener[]) _constraintViewListeners.toArray(new ConstraintViewListener[0]);
+ ConstraintViewListener[] clone = _constraintViewListeners.toArray(new ConstraintViewListener[0]);
for (ConstraintViewListener listener : clone)
{
@@ -263,8 +295,13 @@
private void onAddFoldingPoint()
{
+ addFoldingPointAt(_lastPopupClickPoint);
+ }
+
+ private void addFoldingPointAt(Point lastPopupClickPoint)
+ {
double zoom = _desktopController.getZoomer().getZoom();
- Point backTransformedPoint = new Point((int)(_lastPopupClickPoint.x/zoom+0.5), (int)(_lastPopupClickPoint.y/zoom+0.5));
+ Point backTransformedPoint = new Point((int)(lastPopupClickPoint.x/zoom+0.5), (int)(lastPopupClickPoint.y/zoom+0.5));
_constraintGraph.addFoldingPointToHitConnectLine(new FoldingPoint(backTransformedPoint, _desktopController.getZoomer()));
_desktopController.repaint();
@@ -781,11 +818,6 @@
return _pkFramePointingTo;
}
- public void replaceCopiedColsByReferences(ColumnInfo[] colInfos, boolean retainImportData)
- {
- _constraintData.replaceCopiedColsByReferences(colInfos, retainImportData);
- }
-
public void addConstraintViewListener(ConstraintViewListener constraintViewListener)
{
_constraintViewListeners.remove(constraintViewListener);
@@ -797,16 +829,6 @@
_constraintData = constraintData;
}
- public void clearColumnImportData()
- {
- _constraintData.clearColumnImportData();
- }
-
- public boolean hasOverlap(ConstraintView other)
- {
- return _constraintData.hasOverlap(other._constraintData);
- }
-
public Vector<FoldingPoint> getFoldingPoints()
{
return _constraintGraph.getFoldingPoints();
@@ -826,4 +848,9 @@
{
return isVisible() && getData().getConstraintQueryData().isNoJoin();
}
+
+ public boolean matches(ConstraintView view)
+ {
+ return _constraintData.matches(view.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-12 20:10:54 UTC (rev 6235)
+++ trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/ConstraintViewsModel.java 2011-04-13 22:47:24 UTC (rev 6236)
@@ -48,13 +48,12 @@
return _constraintViews;
}
- public void initByXmlBeans(ConstraintViewXmlBean[] constraintViewXmlBeans, GraphDesktopController desktopController, ColumnInfo[] colInfos)
+ public void initByXmlBeans(ConstraintViewXmlBean[] constraintViewXmlBeans, GraphDesktopController desktopController)
{
_constraintViews = new ConstraintView[constraintViewXmlBeans.length];
for (int i = 0; i < _constraintViews.length; i++)
{
_constraintViews[i] = new ConstraintView(constraintViewXmlBeans[i], desktopController, _session, _constraintIconHandlerListener);
- _constraintViews[i].replaceCopiedColsByReferences(colInfos, false);
}
}
@@ -69,7 +68,6 @@
public void removeConst(ConstraintView constraintView)
{
- constraintView.clearColumnImportData();
ArrayList<ConstraintView> buf = new ArrayList<ConstraintView>();
buf.addAll(Arrays.asList(_constraintViews));
buf.remove(constraintView);
@@ -96,24 +94,33 @@
try
{
res = metaData.getImportedKeys(catalog, schema, tableName);
+
while (res.next())
{
+ String pkCat = res.getString(1); // PKTABLE_CAT
+ String pkSchem = res.getString(2); // PKTABLE_SCHEM
String pkTable = res.getString(3); // PKTABLE_NAME
String pkColName = res.getString(4); // PKCOLUMN_NAME
+
String fkColName = res.getString(8); // FKCOLUMN_NAME
String fkName = res.getString(12); // FK_NAME
- ColumnInfo colInfo = colInfoModel.findColumnInfo(fkColName);
- colInfo.setImportData(pkTable, pkColName, fkName, false);
+ ColumnInfo fkCol = colInfoModel.findColumnInfo(fkColName);
+ fkCol.setDBImportData(pkTable, pkColName, fkName);
- ConstraintData dbConstraintData = dbConstraintInfosByConstraintName.get(fkName);
+ if (desktopController.getModeManager().getTableFramesModel().containsTable(pkTable))
+ {
+ ConstraintData dbConstraintData = dbConstraintInfosByConstraintName.get(fkName);
- if (null == dbConstraintData)
- {
- dbConstraintData = new ConstraintData(pkTable, tableName, fkName);
- dbConstraintInfosByConstraintName.put(fkName, dbConstraintData);
+ if (null == dbConstraintData)
+ {
+ dbConstraintData = new ConstraintData(pkTable, tableName, fkName);
+ dbConstraintInfosByConstraintName.put(fkName, dbConstraintData);
+ }
+
+ ColumnInfo pkCol = GraphUtil.createColumnInfo(_session, pkCat, pkSchem, pkTable, pkColName);
+ dbConstraintData.addColumnInfos(pkCol, fkCol);
}
- dbConstraintData.addColumnInfo(colInfo);
}
}
catch (SQLException e)
@@ -146,7 +153,6 @@
{
if (_constraintViews[i].getData().isNonDbConstraint())
{
- _constraintViews[i].replaceCopiedColsByReferences(colInfoModel.getAll(), true);
oldNonDBConstraintViews.add(_constraintViews[i]);
}
else
@@ -175,7 +181,7 @@
}
}
- removeOverlappingConstraints(newConstraintViewsBuf, oldNonDBConstraintViews);
+ removeMatchingConstraints(newConstraintViewsBuf, oldNonDBConstraintViews);
newConstraintViewsBuf.addAll(oldNonDBConstraintViews);
@@ -193,12 +199,12 @@
return null;
}
- if(null != targetColumnInfo.getImportedColumnName())
- {
- // i18n[graph.nonDbConstraintCreationError_already_points=A column cannot reference more than one other column. Non DB constraint could not be created.]
- session.getApplication().getMessageHandler().showErrorMessage(s_stringMgr.getString("graph.nonDbConstraintCreationError_already_points"));
- return null;
- }
+// if(null != targetColumnInfo.getImportedColumnName())
+// {
+// // i18n[graph.nonDbConstraintCreationError_already_points=A column cannot reference more than one other column. Non DB constraint could not be created.]
+// session.getApplication().getMessageHandler().showErrorMessage(s_stringMgr.getString("graph.nonDbConstraintCreationError_already_points"));
+// return null;
+// }
String constName = "SquirrelGeneratedConstraintName";
@@ -209,11 +215,7 @@
true);
-
- targetColumnInfo.setImportData(sourceTable.getTableInfo().getSimpleName(), sourceColumnInfo.getName(), constName, true);
-
-
- data.addColumnInfo(targetColumnInfo);
+ data.addColumnInfos(sourceColumnInfo, targetColumnInfo);
ConstraintView ret = new ConstraintView(data, desktopController, session, _constraintIconHandlerListener);
addConst(ret);
@@ -222,7 +224,7 @@
- private void removeOverlappingConstraints(ArrayList<ConstraintView> master, ArrayList<ConstraintView> toRemoveFrom)
+ private void removeMatchingConstraints(ArrayList<ConstraintView> master, ArrayList<ConstraintView> toRemoveFrom)
{
ArrayList<ConstraintView> removeBuf = new ArrayList<ConstraintView>();
@@ -230,7 +232,7 @@
{
for (ConstraintView cvMaster : master)
{
- if(cvMaster.hasOverlap(cvRemoveCand))
+ if(cvMaster.matches(cvRemoveCand))
{
removeBuf.add(cvRemoveCand);
break;
@@ -261,7 +263,7 @@
for (int i = 0; i < _constraintViews.length; i++)
{
- if(_constraintViews[i].getData().getPkTableName().equals(tableName))
+ if(_constraintViews[i].getData().getPkTableName().equalsIgnoreCase(tableName))
{
constraintDataToRemove.add(_constraintViews[i]);
}
@@ -271,6 +273,8 @@
}
}
+ _constraintViews = newConstraintData.toArray(new ConstraintView[newConstraintData.size()]);
+
return constraintDataToRemove.toArray(new ConstraintView[constraintDataToRemove.size()]);
}
@@ -279,7 +283,7 @@
List<ConstraintView> ret = new ArrayList<ConstraintView>();
for (int i = 0; i < _constraintViews.length; i++)
{
- if(_constraintViews[i].getData().getPkTableName().equals(tableName))
+ if(_constraintViews[i].getData().getPkTableName().equalsIgnoreCase(tableName))
{
ret.add(_constraintViews[i]);
}
@@ -313,4 +317,17 @@
}
return false;
}
+
+ public ArrayList<ConstraintView> checkForMatches(ConstraintView v)
+ {
+ ArrayList<ConstraintView> ret = new ArrayList<ConstraintView>();
+ for (ConstraintView view : _constraintViews)
+ {
+ if(v != view && v.matches(view))
+ {
+ ret.add(view);
+ }
+ }
+ return ret;
+ }
}
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-12 20:10:54 UTC (rev 6235)
+++ trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/GraphController.java 2011-04-13 22:47:24 UTC (rev 6236)
@@ -15,7 +15,7 @@
import java.util.List;
-public class GraphController implements GraphControllerAccessor
+public class GraphController
{
private ISession _session;
private GraphPanelController _panelController;
@@ -23,7 +23,7 @@
private TableFramesModel _tableFramesModel = new TableFramesModel();
private static final int BORDER_X = ConstraintView.STUB_LENGTH + 10;
private static final int BORDER_Y = 10;
- private AddTableListener _addTableListener;
+ private AddTableRequestListener _addTableRequestListener;
private GraphDesktopListener _graphDesktopListener;
private GraphPlugin _plugin;
private TabToWindowHandler _tabToWindowHandler;
@@ -113,7 +113,7 @@
_xmlSerializer = xmlSerializer;
}
- _addTableListener = new AddTableListener()
+ _addTableRequestListener = new AddTableRequestListener()
{
public void addTablesRequest(String[] tablenames, String schema, String catalog)
{
@@ -259,11 +259,11 @@
if(null == xmlBean)
{
- tfc = new TableFrameController(_plugin, _session, _panelController.getDesktopController(), this, _addTableListener, tableName, schemaName, catalogName, null);
+ tfc = new TableFrameController(_plugin, _session, _panelController.getDesktopController(), _addTableRequestListener, tableName, schemaName, catalogName, null);
}
else
{
- tfc = new TableFrameController(_plugin, _session, _panelController.getDesktopController(), this ,_addTableListener, null, null, null, xmlBean);
+ tfc = new TableFrameController(_plugin, _session, _panelController.getDesktopController(), _addTableRequestListener, null, null, null, xmlBean);
}
if (_tableFramesModel.containsTable(tfc))
@@ -278,20 +278,20 @@
{
public void run()
{
- _panelController.getDesktopController().addFrame(tfc.getFrame());
- _tableFramesModel.addTable(tfc);
- initsAfterFrameAdded(tfc, positioner, null == xmlBean);
+ boolean readingXml = (null != xmlBean);
+ _panelController.getDesktopController().addFrame(tfc.getFrame());
+ _tableFramesModel.addTable(tfc, readingXml);
+ if (false == readingXml)
+ {
+ calcPosition(tfc, positioner);
+ }
+
}
});
}
- public TableFramesModel getTableFrameModel()
- {
- return _tableFramesModel;
- }
-
private void calcPosition(final TableFrameController tfc, Positioner positioner)
{
Dimension frmSize = tfc.getFrame().getSize();
@@ -405,32 +405,7 @@
return false;
}
- private void initsAfterFrameAdded(TableFrameController tfc, Positioner positioner, boolean resetBounds)
- {
- Vector<TableFrameController> tblCtrls = _tableFramesModel.getTblCtrls();
-
- for (int i = 0; i < tblCtrls.size(); i++)
- {
- TableFrameController buf = tblCtrls.get(i);
- if (false == buf.equals(tfc))
- {
- buf.tableFrameOpen(tfc);
- }
- }
-
- Vector<TableFrameController> others = new Vector<TableFrameController>(_tableFramesModel.getTblCtrls());
- others.remove(tfc);
- TableFrameController[] othersArr = others.toArray(new TableFrameController[others.size()]);
- tfc.initAfterAddedToDesktop(othersArr, resetBounds);
-
- if(resetBounds)
- {
- calcPosition(tfc, positioner);
- }
-
- }
-
public String getTitle()
{
return _tabToWindowHandler.getTitle();
Deleted: trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/GraphControllerAccessor.java
===================================================================
--- trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/GraphControllerAccessor.java 2011-04-12 20:10:54 UTC (rev 6235)
+++ trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/GraphControllerAccessor.java 2011-04-13 22:47:24 UTC (rev 6236)
@@ -1,6 +0,0 @@
-package net.sourceforge.squirrel_sql.plugins.graph;
-
-public interface GraphControllerAccessor
-{
- TableFramesModel getTableFrameModel();
-}
Modified: trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/GraphDesktopController.java
===================================================================
--- trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/GraphDesktopController.java 2011-04-12 20:10:54 UTC (rev 6235)
+++ trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/GraphDesktopController.java 2011-04-13 22:47:24 UTC (rev 6236)
@@ -702,4 +702,9 @@
{
_popUp.setVisible(false);
}
+
+ public TableFramesModel getTableFramesModel()
+ {
+ return _modeManager.getTableFramesModel();
+ }
}
Added: trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/GraphUtil.java
===================================================================
--- trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/GraphUtil.java (rev 0)
+++ trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/GraphUtil.java 2011-04-13 22:47:24 UTC (rev 6236)
@@ -0,0 +1,117 @@
+package net.sourceforge.squirrel_sql.plugins.graph;
+
+import net.sourceforge.squirrel_sql.client.session.ISession;
+import net.sourceforge.squirrel_sql.fw.sql.PrimaryKeyInfo;
+import net.sourceforge.squirrel_sql.fw.sql.SQLDatabaseMetaData;
+import net.sourceforge.squirrel_sql.fw.sql.TableColumnInfo;
+
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+public class GraphUtil
+{
+ public static ArrayList<ColumnInfo> createColumnInfos(ISession session, String catalog, String schema, String tableName)
+ {
+ try
+ {
+ SQLDatabaseMetaData md = session.getSQLConnection().getSQLMetaData();
+
+ ArrayList<ColumnInfo> ret = new ArrayList<ColumnInfo>();
+ TableColumnInfo[] infos = md.getColumnInfo(catalog, schema, tableName);
+
+ for (int i = 0; i < infos.length; i++)
+ {
+ TableColumnInfo info = infos[i];
+ String columnName = info.getColumnName();
+ String columnType = info.getTypeName();
+ int columnSize = info.getColumnSize();
+ int decimalDigits = info.getDecimalDigits();
+ boolean nullable = "YES".equalsIgnoreCase(info.isNullable());
+
+ ColumnInfo colInfo = new ColumnInfo(columnName,
+ columnType,
+ columnSize,
+ decimalDigits,
+ nullable);
+
+ ret.add(colInfo);
+
+ }
+
+
+ PrimaryKeyInfo[] pkinfos = md.getPrimaryKey(catalog, schema, tableName);
+
+ for (int i = 0; i < pkinfos.length; i++)
+ {
+ PrimaryKeyInfo info = pkinfos[i];
+ for (int j = 0; j < ret.size(); j++)
+ {
+ if (ret.get(j).getName().equalsIgnoreCase(info.getColumnName()))
+ {
+ ret.get(j).markPrimaryKey();
+ }
+ }
+ }
+
+ return ret;
+ }
+ catch (SQLException e)
+ {
+ throw new RuntimeException(e);
+ }
+ }
+
+ public static ColumnInfo findColumnInfo(String colName, ColumnInfo[] colInfos)
+ {
+ return findColumnInfo(colName, Arrays.asList(colInfos));
+ }
+
+ public static ColumnInfo findColumnInfo(String colName, List<ColumnInfo> colInfos)
+ {
+ for (int i = 0; i < colInfos.size(); i++)
+ {
+ if(colInfos.get(i).getName().equalsIgnoreCase(colName))
+ {
+ return colInfos.get(i);
+ }
+ }
+
+ throw new IllegalArgumentException("Column " + colName + " not found");
+ }
+
+
+ public static ColumnInfo createColumnInfo(ISession session, String pkCat, String pkSchem, String pkTable, String pkColName)
+ {
+ return findColumnInfo(pkColName, createColumnInfos(session, pkCat, pkSchem, pkTable));
+ }
+
+ public static boolean columnsMatch(ArrayList<ColumnInfo> cols1, ArrayList<ColumnInfo> cols2)
+ {
+ if(cols2.size() != cols1.size())
+ {
+ return false;
+ }
+
+ for (ColumnInfo pkCol : cols2)
+ {
+ boolean found = false;
+ for (ColumnInfo otherPkCol : cols1)
+ {
+ if(pkCol.equals(otherPkCol))
+ {
+ found = true;
+ break;
+ }
+ }
+
+ if(false == found)
+ {
+ return false;
+ }
+ }
+
+ return true;
+ }
+}
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-12 20:10:54 UTC (rev 6235)
+++ trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/ModeManager.java 2011-04-13 22:47:24 UTC (rev 6236)
@@ -150,4 +150,9 @@
{
return _queryBuilderController.isHideNoJoins();
}
+
+ public TableFramesModel getTableFramesModel()
+ {
+ return _tableFramesModel;
+ }
}
Modified: trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/OrderType.java
===================================================================
--- trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/OrderType.java 2011-04-12 20:10:54 UTC (rev 6235)
+++ trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/OrderType.java 2011-04-13 22:47:24 UTC (rev 6236)
@@ -114,20 +114,20 @@
}
else
{
- if(null != c1.getConstraintName() && null == c2.getConstraintName())
+ if(null != c1.getDBConstraintName() && null == c2.getDBConstraintName())
{
return -1;
}
- else if(null == c1.getConstraintName() && null != c2.getConstraintName())
+ else if(null == c1.getDBConstraintName() && null != c2.getDBConstraintName())
{
return 1;
}
else
{
- if(null != c1.getConstraintName() && null != c2.getConstraintName())
+ if(null != c1.getDBConstraintName() && null != c2.getDBConstraintName())
{
- String s1 = c1.getConstraintName() + "_" + c1.getName();
- String s2 = c2.getConstraintName() + "_" + c2.getName();
+ String s1 = c1.getDBConstraintName() + "_" + c1.getName();
+ String s2 = c2.getDBConstraintName() + "_" + c2.getName();
return s1.compareTo(s2);
}
else
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-12 20:10:54 UTC (rev 6235)
+++ trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/TableFrameController.java 2011-04-13 22:47:24 UTC (rev 6236)
@@ -23,9 +23,6 @@
import net.sourceforge.squirrel_sql.client.session.ObjectTreeSearch;
import net.sourceforge.squirrel_sql.client.session.schemainfo.ObjFilterMatcher;
import net.sourceforge.squirrel_sql.fw.sql.ITableInfo;
-import net.sourceforge.squirrel_sql.fw.sql.PrimaryKeyInfo;
-import net.sourceforge.squirrel_sql.fw.sql.SQLDatabaseMetaData;
-import net.sourceforge.squirrel_sql.fw.sql.TableColumnInfo;
import net.sourceforge.squirrel_sql.fw.util.StringManager;
import net.sourceforge.squirrel_sql.fw.util.StringManagerFactory;
import net.sourceforge.squirrel_sql.fw.util.log.ILogger;
@@ -93,7 +90,7 @@
private JMenuItem _mnuQueryUnselectAll;
private JMenuItem _mnuQueryClearAllFilters;
private JMenuItem _mnuClose;
- private AddTableListener _addTablelListener;
+ private AddTableRequestListener _addTablelRequestListener;
private ConstraintViewListener _constraintViewListener;
private OrderType _columnOrderType = OrderType.ORDER_DB;
@@ -104,18 +101,25 @@
private ZoomerListener _zoomerListener;
private Rectangle _adjustBeginBounds;
private double _adjustBeginZoom;
- private GraphControllerAccessor _graphControllerAccessor;
+ private TableFramesModelListener _tableFramesModelListener;
+ private ComponentAdapter _componentListener;
+ private InternalFrameAdapter _internalFrameListener;
- public TableFrameController(GraphPlugin plugin, ISession session, GraphDesktopController desktopController, GraphControllerAccessor graphControllerAccessor, AddTableListener listener, String tableName, String schemaName, String catalogName, TableFrameControllerXmlBean xmlBean)
+ public TableFrameController(GraphPlugin plugin,
+ ISession session,
+ GraphDesktopController desktopController,
+ AddTableRequestListener listener,
+ String tableName, String schemaName,
+ String catalogName,
+ TableFrameControllerXmlBean xmlBean)
{
try
{
_session = session;
_constraintViewsModel = new ConstraintViewsModel(_session);
_desktopController = desktopController;
- _addTablelListener = listener;
- _graphControllerAccessor = graphControllerAccessor;
+ _addTablelRequestListener = listener;
TableToolTipProvider toolTipProvider = new TableToolTipProvider()
{
@@ -150,7 +154,7 @@
}
_colInfoModel.initCols(colInfos, _columnOrderType);
- _constraintViewsModel.initByXmlBeans(xmlBean.getConstraintViewXmlBeans(), _desktopController, _colInfoModel.getAll());
+ _constraintViewsModel.initByXmlBeans(xmlBean.getConstraintViewXmlBeans(), _desktopController);
}
_frame.txtColumsFactory.setColumnInfoModel(_colInfoModel);
@@ -172,18 +176,8 @@
}
};
-
-
- _frame.addInternalFrameListener(new InternalFrameAdapter()
+ _componentListener = new ComponentAdapter()
{
- public void internalFrameClosing(InternalFrameEvent e)
- {
- onClose();
- }
- });
-
- _frame.addComponentListener(new ComponentAdapter()
- {
public void componentMoved(ComponentEvent e)
{
recalculateAllConnections(false);
@@ -198,8 +192,21 @@
{
recalculateAllConnections(false);
}
- });
+ };
+
+ _internalFrameListener = new InternalFrameAdapter()
+ {
+ public void internalFrameClosing(InternalFrameEvent e)
+ {
+ onClose();
+ }
+ };
+
+ _frame.addInternalFrameListener(_internalFrameListener);
+
+ _frame.addComponentListener(_componentListener);
+
_frame.scrollPane.getVerticalScrollBar().addAdjustmentListener(new AdjustmentListener()
{
public void adjustmentValueChanged(AdjustmentEvent e)
@@ -234,8 +241,19 @@
}
};
+ _tableFramesModelListener = new TableFramesModelListener()
+ {
+ @Override
+ public void modelChanged(TableFramesModelChangeType changeType)
+ {
+ onTableFramesModelChanged(changeType);
+ }
+ };
+
+
_desktopController.getModeManager().addModeManagerListener(_modeManagerListener);
_desktopController.getZoomer().addZoomListener(_zoomerListener);
+ _desktopController.getTableFramesModel().addTableFramesModelListener(_tableFramesModelListener);
if (Mode.ZOOM_PRINT == _desktopController.getModeManager().getMode())
{
@@ -249,7 +267,23 @@
}
}
+ private void onTableFramesModelChanged(TableFramesModelChangeType changeType)
+ {
+ try
+ {
+ if(TableFramesModelChangeType.TABLE == changeType)
+ {
+ DatabaseMetaData metaData = _session.getSQLConnection().getConnection().getMetaData();
+ completeConstraints(metaData);
+ }
+ }
+ catch (SQLException e)
+ {
+ throw new RuntimeException(e);
+ }
+ }
+
private DndCallback createDndCallback()
{
return new DndCallback()
@@ -275,9 +309,9 @@
private void onDndImportDone(DndEvent e, Point dropPoint)
{
- TableFrameController fkTable = e.getTableFrameController();
+ final TableFrameController fkTable = e.getTableFrameController();
- ConstraintView constraintView = fkTable._constraintViewsModel.createConstraintView(
+ final ConstraintView constraintView = fkTable._constraintViewsModel.createConstraintView(
e,
this,
getColumnInfoForPoint(dropPoint),
@@ -287,7 +321,14 @@
if (null != constraintView)
{
- fkTable.recalculateAllConnections(true);
+// SwingUtilities.invokeLater(new Runnable()
+// {
+// public void run()
+// {
+ fkTable.recalculateAllConnections(true);
+ constraintView.generateFoldingPointIfLinesWouldCoverEachOther();
+// }
+// });
}
}
@@ -342,32 +383,9 @@
throws SQLException
{
DatabaseMetaData metaData = _session.getSQLConnection().getConnection().getMetaData();
- SQLDatabaseMetaData md = _session.getSQLConnection().getSQLMetaData();
- Vector<ColumnInfo> colInfosBuf = new Vector<ColumnInfo>();
- if (s_log.isDebugEnabled()) {
- s_log.debug("initFromDB: _catalog="+_catalog+" _schema="+_schema+
- " _tableName="+_tableName);
- }
-
- TableColumnInfo[] infos = md.getColumnInfo(_catalog, _schema, _tableName);
- for (int i = 0; i < infos.length; i++) {
- TableColumnInfo info = infos[i];
- String columnName = info.getColumnName();
- String columnType = info.getTypeName();
- int columnSize = info.getColumnSize();
- int decimalDigits = info.getDecimalDigits();
- boolean nullable = "YES".equalsIgnoreCase(info.isNullable());
+ ArrayList<ColumnInfo> colInfosBuf = GraphUtil.createColumnInfos(_session, _catalog, _schema, _tableName);
- ColumnInfo colInfo = new ColumnInfo(columnName,
- columnType,
- columnSize,
- decimalDigits,
- nullable);
- colInfosBuf.add(colInfo);
-
- }
-
_colInfoModel.initCols(colInfosBuf.toArray(new ColumnInfo[colInfosBuf.size()]), _columnOrderType);
@@ -378,30 +396,17 @@
return false;
}
- try {
- PrimaryKeyInfo[] pkinfos =
- md.getPrimaryKey(_catalog, _schema, _tableName);
- for (int i = 0; i < pkinfos.length; i++) {
- PrimaryKeyInfo info = pkinfos[i];
- for (int c = 0; c < _colInfoModel.getColCount(); c++)
- {
- if(_colInfoModel.getColAt(c).getName().equals(info.getColumnName()))
- {
- _colInfoModel.getColAt(c).markPrimaryKey();
- }
- }
- }
- } catch (SQLException e) {
- s_log.error("Unable to get Primary Key info", e);
- }
-
- _constraintViewsModel.initFromDB(metaData, _catalog, _schema, _tableName, _colInfoModel, _desktopController);
+ completeConstraints(metaData);
-
return true;
}
+ private void completeConstraints(DatabaseMetaData metaData)
+ {
+ _constraintViewsModel.initFromDB(metaData, _catalog, _schema, _tableName, _colInfoModel, _desktopController);
+ }
+
private void onModeChanged(Mode mode)
{
if(Mode.ZOOM_PRINT == mode)
@@ -798,6 +803,7 @@
public ITableInfo getTableInfo()
{
+ _session.getSchemaInfo().waitTillTablesLoaded();
return _session.getSchemaInfo().getITableInfos(_catalog, _schema, new ObjFilterMatcher(_tableName), new String[]{"TABLE"})[0];
}
@@ -832,7 +838,7 @@
private void onAddTableForForeignKey(ColumnInfo columnInfo)
{
- _addTablelListener.addTablesRequest(new String[]{columnInfo.getImportedTableName()}, _schema, _catalog);
+ _addTablelRequestListener.addTablesRequest(new String[]{columnInfo.getDBImportedTableName()}, _schema, _catalog);
}
void filteredSelectedOrder()
@@ -948,7 +954,7 @@
}
_tablesExportedTo = exportBuf.keySet().toArray(new String[0]);
}
- _addTablelListener.addTablesRequest(_tablesExportedTo, _schema, _catalog);
+ _addTablelRequestListener.addTablesRequest(_tablesExportedTo, _schema, _catalog);
}
catch (SQLException e)
@@ -963,13 +969,21 @@
{
HashSet<String> tablesToAdd = new HashSet<String>();
- ConstraintView[] constViews = _constraintViewsModel.getConstViews();
- for (int i = 0; i < constViews.length; i++)
+// ConstraintView[] constViews = _constraintViewsModel.getConstViews();
+// for (int i = 0; i < constViews.length; i++)
+// {
+// tablesToAdd.add(constViews[i].getData().getPkTableName());
+// }
+
+ for (ColumnInfo columnInfo : _colInfoModel.getAll())
{
- tablesToAdd.add(constViews[i].getData().getPkTableName());
+ if (null != columnInfo.getDBImportedTableName())
+ {
+ tablesToAdd.add(columnInfo.getDBImportedTableName());
+ }
}
- _addTablelListener.addTablesRequest(tablesToAdd.toArray(new String[tablesToAdd.size()]), _schema, _catalog);
+ _addTablelRequestListener.addTablesRequest(tablesToAdd.toArray(new String[tablesToAdd.size()]), _schema, _catalog);
}
@@ -980,7 +994,7 @@
{
ColumnInfo ci = getColumnInfoForPoint(e.getPoint());
- if(null == ci || null == ci.getImportedTableName())
+ if(null == ci || null == ci.getDBImportedTableName())
{
_mnuAddTableForForeignKey.setEnabled(false);
// i18n[graph.addTableRefByNoHit=add table referenced by (no hit on FK)]
@@ -1004,9 +1018,9 @@
else if(2 == e.getClickCount() && e.getID() == MouseEvent.MOUSE_PRESSED)
{
ColumnInfo ci = getColumnInfoForPoint(e.getPoint());
- if(null != ci && null != ci.getImportedTableName())
+ if(null != ci && null != ci.getDBImportedTableName())
{
- _addTablelListener.addTablesRequest(new String[]{ci.getImportedTableName()}, _schema, _catalog);
+ _addTablelRequestListener.addTablesRequest(new String[]{ci.getDBImportedTableName()}, _schema, _catalog);
}
}
@@ -1036,14 +1050,16 @@
_desktopController.removeConstraintViews(_constraintViewsModel.getConstViews(), false);
_desktopController.getModeManager().removeModeManagerListener(_modeManagerListener);
_desktopController.getZoomer().removeZoomListener(_zoomerListener);
+ _desktopController.getTableFramesModel().removeTableFramesModelListener(_tableFramesModelListener);
+ ///////////////////////////////////////////////////////////////////
+ // Is needed in case the frame was selected before closing
+ // the grouping featur might send one more of these events.
+ _frame.removeComponentListener(_componentListener);
+ _frame.removeInternalFrameListener(_internalFrameListener);
+ //
+ ////////////////////////////////////////////////////////////////////
- for (int i = 0; i < _listeners.size(); i++)
- {
- TableFrameControllerListener tableFrameControllerListener = _listeners.elementAt(i);
- tableFrameControllerListener.closed(this);
- }
-
for(TableFrameController tfc : _compListenersToOtherFramesByFrameCtrlr.keySet())
{
ComponentAdapter listenerToRemove = _compListenersToOtherFramesByFrameCtrlr.get(tfc);
@@ -1056,7 +1072,11 @@
tfc._frame.scrollPane.getVerticalScrollBar().removeAdjustmentListener(listenerToRemove);
}
-
+ for (int i = 0; i < _listeners.size(); i++)
+ {
+ TableFrameControllerListener tableFrameControllerListener = _listeners.elementAt(i);
+ tableFrameControllerListener.closed(this);
+ }
}
void tableFrameOpen(final TableFrameController tfc)
@@ -1127,29 +1147,47 @@
_mySortListeners.remove(sortListener);
}
+ public void recalculateConnections()
+ {
+ recalculateAllConnections(true);
+ }
- private void recalculateAllConnections(boolean checkForNewConnections)
+ private void recalculateAllConnections(boolean checkConnections)
{
- if(checkForNewConnections)
+ if(checkConnections)
{
- Vector<TableFrameController> openTableFrameControllers = _graphControllerAccessor.getTableFrameModel().getTblCtrls();
+ Vector<TableFrameController> openTableFrameControllers = _desktopController.getModeManager().getTableFramesModel().getTblCtrls();
for (int i = 0; i < openTableFrameControllers.size(); i++)
{
boolean found = false;
+ TableFrameController tfc = openTableFrameControllers.get(i);
+
+ if(this == tfc)
+ {
+ continue;
+ }
+
for (int j = 0; j < _openFramesConnectedToMe.size(); j++)
{
- if(openTableFrameControllers.get(i) == _openFramesConnectedToMe.get(j))
+ if(tfc == _openFramesConnectedToMe.get(j))
{
found = true;
break;
}
}
- if(false == found)
+ if(found)
{
- tableFrameOpen(openTableFrameControllers.get(i));
+ if(0 == findConstraintViews(tfc.getTableInfo().getSimpleName()).length)
+ {
+ disconnectTableFrame(tfc);
+ }
}
+ else
+ {
+ tableFrameOpen(tfc);
+ }
}
}
@@ -1163,7 +1201,7 @@
}
- public void tableFrameRemoved(TableFrameController tfc)
+ public void disconnectTableFrame(TableFrameController tfc)
{
_openFramesConnectedToMe.remove(tfc);
@@ -1207,7 +1245,7 @@
for (int i = 0; i < constraintView.length; i++)
{
- ColumnInfo[] colInfos = constraintView[i].getData().getColumnInfos();
+ ColumnInfo[] colInfos = constraintView[i].getData().getFkColumnInfos();
FoldingPoint firstFoldingPoint = constraintView[i].getFirstFoldingPoint();
FoldingPoint lastFoldingPoint = constraintView[i].getLastFoldingPoint();
@@ -1215,9 +1253,11 @@
ConnectionPoints fkPoints = getConnectionPoints(colInfos, this, other, firstFoldingPoint);
ColumnInfo[] othersColInfos = new ColumnInfo[colInfos.length];
- for (int j = 0; j < othersColInfos.length; j++)
+
+ ColumnInfo[] pkColumnInfos = constraintView[i].getData().getPkColumnInfos();
+ for (int j = 0; j < pkColumnInfos.length; j++)
{
- othersColInfos[j] = other.findColumnInfo(colInfos[j].getImportedColumnName());
+ othersColInfos[j] = other.findColumnInfo(pkColumnInfos[j].getColumnName());
}
ConnectionPoints pkPoints = getConnectionPoints(othersColInfos, other, this, lastFoldingPoint);
@@ -1388,4 +1428,5 @@
{
return _colInfoModel;
}
+
}
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-12 20:10:54 UTC (rev 6235)
+++ trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/TableFramesModel.java 2011-04-13 22:47:24 UTC (rev 6236)
@@ -113,10 +113,11 @@
for (int i = 0; i < _openTableFrameCtrls.size(); i++)
{
TableFrameController tableFrameController = _openTableFrameCtrls.get(i);
- tableFrameController.tableFrameRemoved(tfc);
+ tableFrameController.disconnectTableFrame(tfc);
}
fireListeners(TableFramesModelChangeType.TABLE);
+ recalculateAllConnections();
}
private void fireListeners(TableFramesModelChangeType changeType)
@@ -132,7 +133,6 @@
void refreshAllTables()
{
-
for (int i = 0; i < _openTableFrameCtrls.size(); i++)
{
TableFrameController tableFrameController = _openTableFrameCtrls.get(i);
@@ -140,6 +140,7 @@
}
fireListeners(TableFramesModelChangeType.TABLE);
+ recalculateAllConnections();
}
@@ -148,8 +149,20 @@
return _openTableFrameCtrls.contains(tfc);
}
- public void addTable(TableFrameController tfc)
+ public boolean containsTable(String tableName)
{
+ for (TableFrameController openTableFrameCtrl : _openTableFrameCtrls)
+ {
+ if(openTableFrameCtrl.getTableInfo().getSimpleName().equalsIgnoreCase(tableName))
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ public void addTable(TableFrameController tfc, boolean readingXMLBean)
+ {
tfc.addTableFrameControllerListener(_tableFrameControllerListener);
tfc.getConstraintViewsModel().addListener(_constraintViewsModelListener);
tfc.getColumnInfoModel().addColumnInfoModelListener(_columnInfoModelListener);
@@ -171,9 +184,34 @@
_openTabl...
[truncated message content] |