Revision: 6550
http://squirrel-sql.svn.sourceforge.net/squirrel-sql/?rev=6550&view=rev
Author: gerdwagner
Date: 2011-12-25 23:35:39 +0000 (Sun, 25 Dec 2011)
Log Message:
-----------
Graph link
Modified Paths:
--------------
trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/gui/db/DataCache.java
trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/gui/session/MainPanel.java
trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/gui/session/SessionPanel.java
trunk/sql12/doc/src/main/resources/changes.txt
trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/datasetviewer/CellDataPopup.java
trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/datasetviewer/ColumnDisplayDefinition.java
trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/datasetviewer/DataSetViewerTablePanel.java
trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/datasetviewer/JavabeanArrayDataSet.java
trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/gui/GUIUtils.java
trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/sql/SQLUtilities.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/GraphDesktopListener.java
trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/GraphMainPanelTab.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/GraphPlugin.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/GraphUtil.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/nondbconst/ConfigureNonDbConstraintController.java
trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/window/GraphWindowController.java
trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/window/TabToWindowHandler.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/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/graph.properties
trunk/sql12/plugins/graph/src/main/resources/net/sourceforge/squirrel_sql/plugins/graph/xmlbeans/I18NStrings.properties
Added Paths:
-----------
trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/datasetviewer/BeanPorpertyColumnDisplayDefinition.java
trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/NonExistentingTableInfoPlaceHolder.java
trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/link/
trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/link/GraphFileDisplayBean.java
trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/link/LinkGraphAction.java
trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/link/LinkGraphController.java
trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/link/LinkGraphDialog.java
trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/link/LinkManager.java
trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/link/LinkXmlBean.java
trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/link/NameLoadFinishListener.java
trunk/sql12/plugins/graph/src/main/resources/net/sourceforge/squirrel_sql/plugins/graph/images/graph_lnk.png
trunk/sql12/plugins/graph/src/main/resources/net/sourceforge/squirrel_sql/plugins/graph/images/link.png
trunk/sql12/plugins/graph/src/main/resources/net/sourceforge/squirrel_sql/plugins/graph/link/
trunk/sql12/plugins/graph/src/main/resources/net/sourceforge/squirrel_sql/plugins/graph/link/I18NStrings.properties
Modified: trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/gui/db/DataCache.java
===================================================================
--- trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/gui/db/DataCache.java 2011-11-27 16:31:01 UTC (rev 6549)
+++ trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/gui/db/DataCache.java 2011-12-25 23:35:39 UTC (rev 6550)
@@ -24,6 +24,7 @@
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
+import java.util.HashMap;
import java.util.Iterator;
import net.sourceforge.squirrel_sql.client.IApplication;
@@ -281,6 +282,30 @@
return _cache.getAllForClass(SQL_ALIAS_IMPL);
}
+ public HashMap<String, ArrayList<ISQLAlias>> aliasesByUrl()
+ {
+ Iterator<ISQLAlias> aliases = aliases();
+
+ HashMap<String, ArrayList<ISQLAlias>> ret = new HashMap<String, ArrayList<ISQLAlias>>();
+
+ while(aliases.hasNext())
+ {
+ ISQLAlias alias = aliases.next();
+
+ ArrayList<ISQLAlias> buf = ret.get(alias.getUrl());
+ if(null == buf)
+ {
+ buf = new ArrayList<ISQLAlias>();
+ buf.add(alias);
+ ret.put(alias.getUrl(), buf);
+ }
+ }
+
+ return ret;
+
+ }
+
+
public void addAlias(ISQLAlias alias) throws DuplicateObjectException
{
_cache.add(alias);
Modified: trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/gui/session/MainPanel.java
===================================================================
--- trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/gui/session/MainPanel.java 2011-11-27 16:31:01 UTC (rev 6549)
+++ trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/gui/session/MainPanel.java 2011-12-25 23:35:39 UTC (rev 6550)
@@ -268,7 +268,7 @@
}
}
- private int getTabIndex(IMainPanelTab tab)
+ public int getTabIndex(IMainPanelTab tab)
{
int checkIdx;
if(null == tab.getTabComponent())
Modified: trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/gui/session/SessionPanel.java
===================================================================
--- trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/gui/session/SessionPanel.java 2011-11-27 16:31:01 UTC (rev 6549)
+++ trunk/sql12/app/src/main/java/net/sourceforge/squirrel_sql/client/gui/session/SessionPanel.java 2011-12-25 23:35:39 UTC (rev 6550)
@@ -19,24 +19,7 @@
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
-import java.awt.BorderLayout;
-import java.awt.Color;
-import java.awt.Font;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-import java.beans.PropertyChangeEvent;
-import java.beans.PropertyChangeListener;
-import java.sql.SQLException;
-import java.util.Vector;
-import javax.swing.Action;
-import javax.swing.JComponent;
-import javax.swing.JPanel;
-import javax.swing.JTabbedPane;
-import javax.swing.event.TreeSelectionEvent;
-import javax.swing.event.TreeSelectionListener;
-import javax.swing.tree.TreePath;
-
import net.sourceforge.squirrel_sql.client.IApplication;
import net.sourceforge.squirrel_sql.client.action.ActionCollection;
import net.sourceforge.squirrel_sql.client.gui.db.SQLAliasColorProperties;
@@ -44,20 +27,7 @@
import net.sourceforge.squirrel_sql.client.session.ISQLEntryPanel;
import net.sourceforge.squirrel_sql.client.session.ISQLPanelAPI;
import net.sourceforge.squirrel_sql.client.session.ISession;
-import net.sourceforge.squirrel_sql.client.session.action.ExecuteSqlAction;
-import net.sourceforge.squirrel_sql.client.session.action.FileAppendAction;
-import net.sourceforge.squirrel_sql.client.session.action.FileCloseAction;
-import net.sourceforge.squirrel_sql.client.session.action.FileNewAction;
-import net.sourceforge.squirrel_sql.client.session.action.FileOpenAction;
-import net.sourceforge.squirrel_sql.client.session.action.FilePrintAction;
-import net.sourceforge.squirrel_sql.client.session.action.FileSaveAction;
-import net.sourceforge.squirrel_sql.client.session.action.FileSaveAsAction;
-import net.sourceforge.squirrel_sql.client.session.action.NextSqlAction;
-import net.sourceforge.squirrel_sql.client.session.action.PreviousSqlAction;
-import net.sourceforge.squirrel_sql.client.session.action.RefreshSchemaInfoAction;
-import net.sourceforge.squirrel_sql.client.session.action.SQLFilterAction;
-import net.sourceforge.squirrel_sql.client.session.action.SelectSqlAction;
-import net.sourceforge.squirrel_sql.client.session.action.SessionPropertiesAction;
+import net.sourceforge.squirrel_sql.client.session.action.*;
import net.sourceforge.squirrel_sql.client.session.mainpanel.IMainPanelTab;
import net.sourceforge.squirrel_sql.client.session.mainpanel.SQLPanel;
import net.sourceforge.squirrel_sql.client.session.mainpanel.objecttree.IObjectTreeListener;
@@ -74,6 +44,18 @@
import net.sourceforge.squirrel_sql.fw.util.log.ILogger;
import net.sourceforge.squirrel_sql.fw.util.log.LoggerController;
+import javax.swing.*;
+import javax.swing.event.TreeSelectionEvent;
+import javax.swing.event.TreeSelectionListener;
+import javax.swing.tree.TreePath;
+import java.awt.*;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+import java.sql.SQLException;
+import java.util.Vector;
+
public class SessionPanel extends JPanel
{
private static final long serialVersionUID = 1L;
@@ -514,7 +496,12 @@
return _mainTabPane.getTabbedPane().getTabCount();
}
+ public int getMainTabIndex(IMainPanelTab mainPanelTab)
+ {
+ return _mainTabPane.getTabIndex(mainPanelTab);
+ }
+
private class MyToolBar extends ToolBar
{
private static final long serialVersionUID = 1L;
Modified: trunk/sql12/doc/src/main/resources/changes.txt
===================================================================
--- trunk/sql12/doc/src/main/resources/changes.txt 2011-11-27 16:31:01 UTC (rev 6549)
+++ trunk/sql12/doc/src/main/resources/changes.txt 2011-12-25 23:35:39 UTC (rev 6550)
@@ -4,7 +4,14 @@
${squirrelsql.changelog.header}
+Enhancements:
+Graph Plugin:
+ New Session toolbar button to create links to Graphs of other JDBC-URLs or to Graphs that are placed arbitrary directories.
+ With this feature it is possible to work with shared repositories of Graphs.
+
+
+
3.3.0 (11/20/2011)
==================
Added: trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/datasetviewer/BeanPorpertyColumnDisplayDefinition.java
===================================================================
--- trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/datasetviewer/BeanPorpertyColumnDisplayDefinition.java (rev 0)
+++ trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/datasetviewer/BeanPorpertyColumnDisplayDefinition.java 2011-12-25 23:35:39 UTC (rev 6550)
@@ -0,0 +1,43 @@
+package net.sourceforge.squirrel_sql.fw.datasetviewer;
+
+import java.beans.PropertyDescriptor;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: gerd
+ * Date: 01.12.11
+ * Time: 21:04
+ */
+public class BeanPorpertyColumnDisplayDefinition
+{
+ private ColumnDisplayDefinition _colDef;
+ private PropertyDescriptor _propDesc;
+
+ public BeanPorpertyColumnDisplayDefinition(ColumnDisplayDefinition colDef, PropertyDescriptor propDesc)
+ {
+ _colDef = colDef;
+ _propDesc = propDesc;
+ }
+
+ public ColumnDisplayDefinition getColDef()
+ {
+ return _colDef;
+ }
+
+ public PropertyDescriptor getPropDesc()
+ {
+ return _propDesc;
+ }
+
+ public static ColumnDisplayDefinition[] getColDefs(BeanPorpertyColumnDisplayDefinition[] beanPorpertyColumnDisplayDefinitions)
+ {
+ ColumnDisplayDefinition[] ret = new ColumnDisplayDefinition[beanPorpertyColumnDisplayDefinitions.length];
+
+ for (int i = 0; i < beanPorpertyColumnDisplayDefinitions.length; i++)
+ {
+ ret[i] = beanPorpertyColumnDisplayDefinitions[i].getColDef();
+ }
+
+ return ret;
+ }
+}
Modified: trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/datasetviewer/CellDataPopup.java
===================================================================
--- trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/datasetviewer/CellDataPopup.java 2011-11-27 16:31:01 UTC (rev 6549)
+++ trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/datasetviewer/CellDataPopup.java 2011-12-25 23:35:39 UTC (rev 6550)
@@ -20,13 +20,13 @@
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
-import java.awt.event.KeyEvent;
import java.awt.event.MouseEvent;
import javax.swing.*;
//import net.sourceforge.squirrel_sql.client.gui.AboutBoxDialog;
import net.sourceforge.squirrel_sql.fw.datasetviewer.cellcomponent.CellComponentFactory;
+import net.sourceforge.squirrel_sql.fw.gui.GUIUtils;
import net.sourceforge.squirrel_sql.fw.util.StringManager;
import net.sourceforge.squirrel_sql.fw.util.StringManagerFactory;
@@ -256,21 +256,9 @@
popup.setUserActionInfo(this, row, col, table);
setContentPane(popup);
- AbstractAction closeAction = new AbstractAction()
- {
-
- public void actionPerformed(ActionEvent actionEvent)
- {
- setVisible(false);
- dispose();
- }
- };
- KeyStroke escapeStroke = KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0);
- getRootPane().getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(escapeStroke, "CloseAction");
- getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(escapeStroke, "CloseAction");
- getRootPane().getInputMap(JComponent.WHEN_FOCUSED).put(escapeStroke, "CloseAction");
- getRootPane().getActionMap().put("CloseAction", closeAction);
+ GUIUtils.enableCloseByEscape(this);
}
- }
+ }
+
}
Modified: trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/datasetviewer/ColumnDisplayDefinition.java
===================================================================
--- trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/datasetviewer/ColumnDisplayDefinition.java 2011-11-27 16:31:01 UTC (rev 6549)
+++ trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/datasetviewer/ColumnDisplayDefinition.java 2011-12-25 23:35:39 UTC (rev 6550)
@@ -111,8 +111,10 @@
* registered.
*/
private DialectType _dialectType;
-
- /**
+ private String _userProperty;
+ private Integer _absoluteWidth;
+
+ /**
* Ctor. The dialect type is set to GENERIC, so no plugin-overriding is
* possible when using this constructor.
*
@@ -507,6 +509,25 @@
return getColumnName();
}
}
-
-
+
+
+ public void setUserProperty(String userProperty)
+ {
+ _userProperty = userProperty;
+ }
+
+ public String getUserProperty()
+ {
+ return _userProperty;
+ }
+
+ public void setAsoluteWidth(Integer absoluteWidth)
+ {
+ _absoluteWidth = absoluteWidth;
+ }
+
+ public Integer getAbsoluteWidth()
+ {
+ return _absoluteWidth;
+ }
}
Modified: trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/datasetviewer/DataSetViewerTablePanel.java
===================================================================
--- trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/datasetviewer/DataSetViewerTablePanel.java 2011-11-27 16:31:01 UTC (rev 6549)
+++ trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/datasetviewer/DataSetViewerTablePanel.java 2011-12-25 23:35:39 UTC (rev 6550)
@@ -43,7 +43,6 @@
import javax.swing.table.TableColumnModel;
import net.sourceforge.squirrel_sql.fw.datasetviewer.cellcomponent.CellComponentFactory;
-import net.sourceforge.squirrel_sql.fw.datasetviewer.cellcomponent.DataTypeGeneral;
import net.sourceforge.squirrel_sql.fw.datasetviewer.cellcomponent.RestorableJTextField;
import net.sourceforge.squirrel_sql.fw.gui.ButtonTableHeader;
import net.sourceforge.squirrel_sql.fw.gui.SortableTableModel;
@@ -72,9 +71,15 @@
super();
}
- public void init(IDataSetUpdateableModel updateableModel)
+ public void init(IDataSetUpdateableModel updateableModel)
+ {
+ init(updateableModel, ListSelectionModel.SINGLE_INTERVAL_SELECTION);
+ }
+
+
+ public void init(IDataSetUpdateableModel updateableModel, int listSelectionMode)
{
- _table = new MyJTable(this, updateableModel);
+ _table = new MyJTable(this, updateableModel, listSelectionMode);
_selectionHandler = new DataSetViewerTableListSelectionHandler(_table);
_updateableModel = updateableModel;
}
@@ -171,7 +176,37 @@
return _table.getSelectedRows();
}
+ public int[] getSeletedModelRows()
+ {
+ int[] selectedViewRows = _table.getSelectedRows();
+ int[] ret = new int[selectedViewRows.length];
+
+ for (int i = 0; i < selectedViewRows.length; i++)
+ {
+ ret[i] = (((SortableTableModel)_table.getModel()).transfromToModelRow(selectedViewRows[i]));
+ }
+
+ return ret;
+ }
+
+
+ public int getColumnWidthForHeader(String header)
+ {
+ TableColumnModel columnModel = _table.getColumnModel();
+
+ for (int i = 0; i < columnModel.getColumnCount(); i++)
+ {
+ if(columnModel.getColumn(i).getHeaderValue().equals(header))
+ {
+ return columnModel.getColumn(i).getWidth();
+ }
+ }
+
+ throw new IllegalStateException("No col with header: " + header);
+ }
+
+
/*
* The JTable used for displaying all DB ResultSet info.
*/
@@ -189,7 +224,7 @@
private ButtonTableHeader _tableHeader = new ButtonTableHeader();
MyJTable(IDataSetTableControls creator,
- IDataSetUpdateableModel updateableObject)
+ IDataSetUpdateableModel updateableObject, int listSelectionMode)
{
super(new SortableTableModel(new MyTableModel(creator)));
_creator = creator;
@@ -204,7 +239,7 @@
// the background model is updateable AND we are not already editing
if (updateableObject != null && ! creator.isTableEditable())
allowUpdate = true;
- createGUI(allowUpdate, updateableObject);
+ createGUI(allowUpdate, updateableObject, listSelectionMode);
// just in case table is editable, call creator to set up cell editors
_creator.setCellEditors(this);
@@ -437,17 +472,27 @@
for (int i = 0; i < colDefs.length; ++i)
{
ColumnDisplayDefinition colDef = colDefs[i];
- int colWidth = colDef.getDisplayWidth() * _multiplier;
- if (colWidth > MAX_COLUMN_WIDTH * _multiplier)
- {
- colWidth = MAX_COLUMN_WIDTH * _multiplier;
- }
- else if (colWidth < MIN_COLUMN_WIDTH * _multiplier)
- {
- colWidth = MIN_COLUMN_WIDTH * _multiplier;
- }
- ExtTableColumn col = new ExtTableColumn(i, colWidth,
+ int colWidth;
+
+ if (null == colDef.getAbsoluteWidth())
+ {
+ colWidth = colDef.getDisplayWidth() * _multiplier;
+ if (colWidth > MAX_COLUMN_WIDTH * _multiplier)
+ {
+ colWidth = MAX_COLUMN_WIDTH * _multiplier;
+ }
+ else if (colWidth < MIN_COLUMN_WIDTH * _multiplier)
+ {
+ colWidth = MIN_COLUMN_WIDTH * _multiplier;
+ }
+ }
+ else
+ {
+ colWidth = colDef.getAbsoluteWidth();
+ }
+
+ ExtTableColumn col = new ExtTableColumn(i, colWidth,
CellComponentFactory.getTableCellRenderer(colDefs[i]), null);
String headerValue = colDef.getColumnHeading();
@@ -481,9 +526,9 @@
}
private void createGUI(boolean allowUpdate,
- IDataSetUpdateableModel updateableObject)
+ IDataSetUpdateableModel updateableObject, int selectionMode)
{
- setSelectionMode(ListSelectionModel.SINGLE_INTERVAL_SELECTION);
+ setSelectionMode(selectionMode);
setRowSelectionAllowed(false);
setColumnSelectionAllowed(false);
setCellSelectionEnabled(true);
Modified: trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/datasetviewer/JavabeanArrayDataSet.java
===================================================================
--- trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/datasetviewer/JavabeanArrayDataSet.java 2011-11-27 16:31:01 UTC (rev 6549)
+++ trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/datasetviewer/JavabeanArrayDataSet.java 2011-12-25 23:35:39 UTC (rev 6550)
@@ -23,46 +23,59 @@
import java.beans.PropertyDescriptor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
+import java.util.*;
+import net.sourceforge.squirrel_sql.fw.util.EmptyIterator;
import net.sourceforge.squirrel_sql.fw.util.IMessageHandler;
-import net.sourceforge.squirrel_sql.fw.util.log.ILogger;
-import net.sourceforge.squirrel_sql.fw.util.log.LoggerController;
public class JavabeanArrayDataSet implements IDataSet
{
- @SuppressWarnings("unused")
- private final ILogger s_log =
- LoggerController.createLogger(JavabeanArrayDataSet.class);
-
private Object[] _currentRow;
private List<Object[]> _data;
- private Iterator<Object[]> _dataIter;
+ private Iterator<Object[]> _dataIter = new EmptyIterator<Object[]>();
- private int _columnCount;
- private DataSetDefinition _dataSetDefinition;
+ private DataSetDefinition _dataSetDefinition;
+ private BeanInfo _info;
+ private Class _beanClass;
+ private BeanPorpertyColumnDisplayDefinition[] _beanPorpertyColumnDisplayDefinitions;
- /**
+ private HashMap<String, String> _headers = new HashMap<String, String>();
+ private HashMap<String, Integer> _positions = new HashMap<String, Integer>();
+ private HashMap<String, Integer> _absoluteWidths = new HashMap<String, Integer>();
+ private HashSet<String> _ignoreProperties = new HashSet<String>();
+
+
+ /**
* @throws IllegalArgumentException
* Thrrown if all objects in <TT>beans</TT> are not the same class.
*/
public JavabeanArrayDataSet(Object[] beans) throws DataSetException
{
- super();
- setJavabeanArray(beans);
+ if (null == beans || 0 == beans.length)
+ {
+ _beanClass = Object.class;
+ }
+ else
+ {
+ _beanClass = beans[0].getClass();
+ }
+ setJavaBeanArray(beans);
}
- /**
+ public JavabeanArrayDataSet(Class beanClass) throws DataSetException
+ {
+ _beanClass = beanClass;
+ }
+
+ /**
* Retrieve the number of columns in this <TT>DataSet</TT>.
*
* @return Number of columns.
*/
public final int getColumnCount()
{
- return _columnCount;
+ return _beanPorpertyColumnDisplayDefinitions.length;
}
public DataSetDefinition getDataSetDefinition()
@@ -92,36 +105,22 @@
return getter.invoke(bean, (Object[])null);
}
- /**
- * @throws IllegalArgumentException
- * Thrrown if all objects in <TT>beans</TT> are not the same class.
- */
- private void setJavabeanArray(Object[] beans) throws DataSetException
+ public void setJavaBeanList(List list) throws DataSetException
+ {
+ setJavaBeanArray(list.toArray(new Object[list.size()]));
+ }
+
+ public void setJavaBeanArray(Object[] beans) throws DataSetException
{
- if (beans == null)
- {
- beans = new Object[0];
- }
+ initColsAndBeanInfo(_beanClass);
if (beans.length > 0)
{
- BeanInfo info = null;
try
{
- info = Introspector.getBeanInfo(beans[0].getClass(), Introspector.USE_ALL_BEANINFO);
- validateBeans(beans);
- initialize(info);
- }
- catch (IntrospectionException ex)
- {
- throw new DataSetException(ex);
- }
-
- try
- {
for (int i = 0; i < beans.length; ++i)
{
- processBeanInfo(beans[i], info);
+ processBeanInfo(beans[i], _info);
}
}
catch (Exception ex)
@@ -132,70 +131,135 @@
}
}
- private void processBeanInfo(Object bean, BeanInfo info)
+ void initColsAndBeanInfo(Class beanClass) throws DataSetException
+ {
+ try
+ {
+ _info = Introspector.getBeanInfo(beanClass, Introspector.USE_ALL_BEANINFO);
+ initializeCols(_info);
+ }
+ catch (IntrospectionException ex)
+ {
+ throw new DataSetException(ex);
+ }
+ }
+
+ private void processBeanInfo(Object bean, BeanInfo info)
throws InvocationTargetException, IllegalAccessException
{
-// BeanInfo[] extra = info.getAdditionalBeanInfo();
-// if (extra != null)
-// {
-// for (int i = 0; i < extra.length; ++i)
-// {
-// processBeanInfo(bean, extra[i]);
-// }
-// }
-
- PropertyDescriptor[] propDesc = info.getPropertyDescriptors();
- Object[] line = new Object[propDesc.length];
- for (int i = 0; i < propDesc.length; ++i)
+ ArrayList line = new ArrayList();
+ for (int i = 0; i < _beanPorpertyColumnDisplayDefinitions.length; ++i)
{
- final Method getter = propDesc[i].getReadMethod();
+ final Method getter = _beanPorpertyColumnDisplayDefinitions[i].getPropDesc().getReadMethod();
if (getter != null)
{
- line[i] = executeGetter(bean, getter);
+ line.add(executeGetter(bean, getter));
}
}
- if (line != null)
- {
- _data.add(line);
- }
+ _data.add(line.toArray(new Object[line.size()]));
}
- private void validateBeans(Object[] beans)
- throws IllegalArgumentException
+ private void initializeCols(BeanInfo info)
{
- if (beans.length > 0)
- {
- final String className = beans[0].getClass().getName();
- for (int i = 1; i < beans.length; ++i)
- {
- if (!beans[i].getClass().getName().equals(className))
- {
- throw new IllegalArgumentException("All beans must be the same Class");
- }
- }
- }
-
- }
-
- private void initialize(BeanInfo info)
- {
_data = new ArrayList<Object[]>();
- ColumnDisplayDefinition[] colDefs = createColumnDefinitions(info, null);
- _dataSetDefinition = new DataSetDefinition(colDefs);
- _columnCount = _dataSetDefinition.getColumnDefinitions().length;
+ _beanPorpertyColumnDisplayDefinitions = createColumnDefinitions(info);
+ _dataSetDefinition = new DataSetDefinition(BeanPorpertyColumnDisplayDefinition.getColDefs(_beanPorpertyColumnDisplayDefinitions));
}
- private ColumnDisplayDefinition[] createColumnDefinitions(BeanInfo info,
- int[] columnWidths)
+ private BeanPorpertyColumnDisplayDefinition[] createColumnDefinitions(BeanInfo info)
{
- PropertyDescriptor[] propDesc = info.getPropertyDescriptors();
- ColumnDisplayDefinition[] columnDefs = new ColumnDisplayDefinition[propDesc.length];
+ PropertyDescriptor[] propDesc = info.getPropertyDescriptors();
+ ArrayList<BeanPorpertyColumnDisplayDefinition> columnDefs = new ArrayList<BeanPorpertyColumnDisplayDefinition>();
for (int i = 0; i < propDesc.length; ++i)
{
- int colWidth = columnWidths != null && columnWidths.length >= i ? columnWidths[i] : 200;
- columnDefs[i] = new ColumnDisplayDefinition(colWidth, propDesc[i].getDisplayName());
+ if(false == isValidProperty(propDesc[i]))
+ {
+ continue;
+ }
+
+ ColumnDisplayDefinition colDef;
+
+
+
+ if (null == _headers.get(propDesc[i].getName()))
+ {
+ colDef = new ColumnDisplayDefinition(200, propDesc[i].getDisplayName());
+ }
+ else
+ {
+ colDef = new ColumnDisplayDefinition(200, _headers.get(propDesc[i].getName()));
+ }
+ colDef.setUserProperty(propDesc[i].getName());
+
+ if(null != _absoluteWidths.get(propDesc[i].getName()))
+ {
+ colDef.setAsoluteWidth(_absoluteWidths.get(propDesc[i].getName()));
+ }
+
+
+ columnDefs.add(new BeanPorpertyColumnDisplayDefinition(colDef, propDesc[i]));
}
- return columnDefs;
+
+ if (0 < _positions.size())
+ {
+ Collections.sort(columnDefs, new Comparator<BeanPorpertyColumnDisplayDefinition>()
+ {
+ @Override
+ public int compare(BeanPorpertyColumnDisplayDefinition o1, BeanPorpertyColumnDisplayDefinition o2)
+ {
+ return comparePosition(o1, o2);
+ }
+ });
+ }
+
+
+ return columnDefs.toArray(new BeanPorpertyColumnDisplayDefinition[columnDefs.size()]);
}
+
+ private int comparePosition(BeanPorpertyColumnDisplayDefinition o1, BeanPorpertyColumnDisplayDefinition o2)
+ {
+ if(null == _positions.get(o1.getColDef().getUserProperty()) && null == _positions.get(o2.getColDef().getUserProperty()))
+ {
+ return 0;
+ }
+ else if(null == _positions.get(o1.getColDef().getUserProperty()) && null != _positions.get(o2.getColDef().getUserProperty()))
+ {
+ return 1;
+ }
+ else if(null != _positions.get(o1.getColDef().getUserProperty()) && null == _positions.get(o2.getColDef().getUserProperty()))
+ {
+ return -1;
+ }
+ else
+ {
+ return _positions.get(o1.getColDef().getUserProperty()).compareTo(_positions.get(o2.getColDef().getUserProperty()));
+ }
+ }
+
+ private boolean isValidProperty(PropertyDescriptor propertyDescriptor)
+ {
+ return false == propertyDescriptor.getReadMethod().getDeclaringClass().equals(Object.class)
+ && false == _ignoreProperties.contains(propertyDescriptor.getName());
+ }
+
+ public void setColHeader(String prop, String header)
+ {
+ _headers.put(prop, header);
+ }
+
+ public void setColPos(String prop, int pos)
+ {
+ _positions.put(prop, pos);
+ }
+
+ public void setAbsoluteWidht(String prop, int width)
+ {
+ _absoluteWidths.put(prop, width);
+ }
+
+ public void setIgnoreProperty(String ignoreProperty)
+ {
+ _ignoreProperties.add(ignoreProperty);
+ }
}
Modified: trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/gui/GUIUtils.java
===================================================================
--- trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/gui/GUIUtils.java 2011-11-27 16:31:01 UTC (rev 6549)
+++ trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/gui/GUIUtils.java 2011-12-25 23:35:39 UTC (rev 6550)
@@ -24,6 +24,8 @@
import javax.swing.*;
import java.awt.*;
+import java.awt.event.ActionEvent;
+import java.awt.event.KeyEvent;
import java.awt.geom.Rectangle2D;
import java.beans.PropertyVetoException;
import java.lang.reflect.InvocationTargetException;
@@ -481,4 +483,22 @@
}
}
+
+ public static void enableCloseByEscape(final JDialog dialog)
+ {
+ AbstractAction closeAction = new AbstractAction()
+ {
+
+ public void actionPerformed(ActionEvent actionEvent)
+ {
+ dialog.setVisible(false);
+ dialog.dispose();
+ }
+ };
+ KeyStroke escapeStroke = KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0);
+ dialog.getRootPane().getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(escapeStroke, "CloseAction");
+ dialog.getRootPane().getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(escapeStroke, "CloseAction");
+ dialog.getRootPane().getInputMap(JComponent.WHEN_FOCUSED).put(escapeStroke, "CloseAction");
+ dialog.getRootPane().getActionMap().put("CloseAction", closeAction);
+ }
}
Modified: trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/sql/SQLUtilities.java
===================================================================
--- trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/sql/SQLUtilities.java 2011-11-27 16:31:01 UTC (rev 6549)
+++ trunk/sql12/fw/src/main/java/net/sourceforge/squirrel_sql/fw/sql/SQLUtilities.java 2011-12-25 23:35:39 UTC (rev 6550)
@@ -386,7 +386,26 @@
}
}
- /**
+ public static String getQualifiedTableName(String catalog, String schema, String tableName)
+ {
+ String ret = "";
+
+ if(null != catalog)
+ {
+ ret += catalog + ".";
+ }
+
+ if(null != schema)
+ {
+ ret += schema + ".";
+ }
+
+ ret += tableName;
+
+ return ret;
+ }
+
+ /**
* @author manningr
*/
private static class TableComparator implements Comparator<ITableInfo>, Serializable
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-11-27 16:31:01 UTC (rev 6549)
+++ trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/GraphController.java 2011-12-25 23:35:39 UTC (rev 6550)
@@ -2,7 +2,11 @@
import net.sourceforge.squirrel_sql.client.session.ISession;
import net.sourceforge.squirrel_sql.client.session.mainpanel.objecttree.ObjectTreeNode;
+import net.sourceforge.squirrel_sql.fw.gui.GUIUtils;
import net.sourceforge.squirrel_sql.fw.sql.ITableInfo;
+import net.sourceforge.squirrel_sql.fw.util.StringManager;
+import net.sourceforge.squirrel_sql.fw.util.StringManagerFactory;
+import net.sourceforge.squirrel_sql.plugins.graph.link.LinkManager;
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.*;
@@ -16,6 +20,9 @@
public class GraphController
{
+ private static final StringManager s_stringMgr = StringManagerFactory.getStringManager(GraphController.class);
+
+
private ISession _session;
private GraphPanelController _panelController;
@@ -29,7 +36,7 @@
private GraphXmlSerializer _xmlSerializer;
private boolean _lazyLoadDone;
- public GraphController(ISession session, GraphPlugin plugin, GraphXmlSerializer xmlSerializer, boolean showDndDesktopImageAtStartup)
+ public GraphController(ISession session, GraphPlugin plugin, final GraphXmlSerializer xmlSerializer, boolean showDndDesktopImageAtStartup)
{
_session = session;
_plugin = plugin;
@@ -98,12 +105,39 @@
{
_tabToWindowHandler.toggleWindowTab();
}
+
+ @Override
+ public boolean isLink()
+ {
+ return null != xmlSerializer && xmlSerializer.isLink();
+ }
+
+ @Override
+ public void saveLinkAsLocalCopy()
+ {
+ onSaveLinkAsLocalCopy();
+ }
+
+ @Override
+ public void saveLinkedGraph()
+ {
+ saveGraph();
+ }
+
+ @Override
+ public void removeLink()
+ {
+ onRemoveLink();
+ }
+
+ @Override
+ public void showLinkDetails()
+ {
+ onShowLinkDetails();
+ }
};
- _panelController = new GraphPanelController(_tableFramesModel, _graphDesktopListener, _session, _plugin, showDndDesktopImageAtStartup);
- _tabToWindowHandler = new TabToWindowHandler(_panelController, _session, _plugin);
-
if(null == xmlSerializer)
{
_xmlSerializer = new GraphXmlSerializer(_plugin, _session, _tabToWindowHandler.getTitle(), null);
@@ -113,6 +147,11 @@
_xmlSerializer = xmlSerializer;
}
+ _panelController = new GraphPanelController(_tableFramesModel, _graphDesktopListener, _session, _plugin, showDndDesktopImageAtStartup);
+
+ _tabToWindowHandler = new TabToWindowHandler(_panelController, _session, _plugin, _xmlSerializer.isLink());
+
+
_addTableRequestListener = new AddTableRequestListener()
{
public void addTablesRequest(String[] tablenames, String schema, String catalog)
@@ -160,6 +199,27 @@
_tabToWindowHandler.showGraph(lazyLoadListener);
}
+ private void onShowLinkDetails()
+ {
+ JPanel pnl = new JPanel(new GridBagLayout());
+ GridBagConstraints gbc;
+
+
+ // Link {0} points to Graph {1} in file:
+ String linkName = _xmlSerializer.getLinkXmlBean().getLinkName();
+ String nameOfLinkedGraph = _xmlSerializer.getLinkXmlBean().getNameOfLinkedGraph();
+ String msg = s_stringMgr.getString("graph.link.linkDetailsMsg", linkName, nameOfLinkedGraph);
+
+ gbc = new GridBagConstraints(0,0,1,1,0,0,GridBagConstraints.NORTHWEST, GridBagConstraints.NONE, new Insets(0,0,0,0),0,0);
+ pnl.add(new JLabel(msg), gbc);
+
+ gbc = new GridBagConstraints(0,1,1,1,0,0,GridBagConstraints.NORTHWEST, GridBagConstraints.NONE, new Insets(0,0,0,0),0,0);
+ JTextField textField = new JTextField(_xmlSerializer.getLinkXmlBean().getFilePathOfLinkedGraph());
+ textField.setEditable(false);
+ pnl.add(textField, gbc);
+ JOptionPane.showMessageDialog(GUIUtils.getOwningFrame(_tabToWindowHandler.getComponent()), pnl);
+ }
+
private void onLazyLoadTables(GraphControllerXmlBean graphControllerXmlBean)
{
if(null != graphControllerXmlBean && false == _lazyLoadDone)
@@ -222,6 +282,13 @@
_plugin.removeGraphController(this, _session);
}
+ private void onRemoveLink()
+ {
+ _xmlSerializer.removeLink();
+ _tabToWindowHandler.removeGraph();
+ _plugin.removeGraphController(this, _session);
+ }
+
private void renameGraph(String newName)
{
if(newName.equals(_tabToWindowHandler.getTitle()))
@@ -237,8 +304,22 @@
saveGraph();
}
+ private void onSaveLinkAsLocalCopy()
+ {
+ _xmlSerializer.saveLinkAsLocalCopy(createXmlBean());
+ _panelController.changedFromLinkToLocalCopy();
+ _tabToWindowHandler.changedFromLinkToLocalCopy();
+ }
+
+
public void saveGraph()
{
+ GraphControllerXmlBean xmlBean = createXmlBean();
+ _xmlSerializer.write(xmlBean);
+ }
+
+ private GraphControllerXmlBean createXmlBean()
+ {
GraphControllerXmlBean xmlBean = new GraphControllerXmlBean();
xmlBean.setTitle(_tabToWindowHandler.getTitle());
xmlBean.setShowConstraintNames(_panelController.getDesktopController().isShowConstraintNames());
@@ -258,16 +339,13 @@
for (int i = 0; i < tblCtrls.size(); i++)
{
TableFrameController tableFrameController = tblCtrls.get(i);
- frameXmls[i] = tableFrameController.getXmlBean();
+ frameXmls[i] = tableFrameController.getXmlBean();
}
xmlBean.setTableFrameControllerXmls(frameXmls);
-
- _xmlSerializer.write(xmlBean);
+ return xmlBean;
}
-
-
private void onAddTablesRequest(String[] tablenames, String schema, String catalog)
{
Positioner positioner = new Positioner();
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-11-27 16:31:01 UTC (rev 6549)
+++ trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/GraphDesktopController.java 2011-12-25 23:35:39 UTC (rev 6550)
@@ -27,9 +27,25 @@
private ConstraintView _lastPressedConstraintView;
private JPopupMenu _popUp;
+
+ ////////////////////////////////////
+ // Saving Graph
private JMenuItem _mnuSaveGraph;
private JMenuItem _mnuRenameGraph;
private JMenuItem _mnuRemoveGraph;
+ //
+ ////////////////////////////////////
+
+ ////////////////////////////////////
+ // Saving link
+ private JMenuItem _mnuSaveLinkAsLocalCopy;
+ private JMenuItem _mnuSaveLinkedGraph;
+ private JMenuItem _mnuRemoveLink;
+ private JMenuItem _mnuShowLinkDetails;
+ //
+ ////////////////////////////////////
+
+
private JMenuItem _mnuRefreshAllTables;
private JMenuItem _mnuScriptAllTables;
private JMenuItem _mnuSelectAllTables;
@@ -177,39 +193,17 @@
{
_popUp = new JPopupMenu();
- // i18n[graph.saveGraph=Save graph]
- _mnuSaveGraph = new JMenuItem(s_stringMgr.getString("graph.saveGraph"));
- _mnuSaveGraph.addActionListener(new ActionListener()
+ if (_listener.isLink())
{
- public void actionPerformed(ActionEvent e)
- {
- onSaveGraph();
- }
- });
-
-
- // i18n[graph.renameGraph=Rename graph]
- _mnuRenameGraph= new JMenuItem(s_stringMgr.getString("graph.renameGraph"));
- _mnuRenameGraph.addActionListener(new ActionListener()
+ createLinkSavingMenus();
+ }
+ else
{
- public void actionPerformed(ActionEvent e)
- {
- onRenameGraph();
- }
- });
+ createGraphSavingMenus();
+ }
- // i18n[graph.removeGraph=Remove graph]
- _mnuRemoveGraph= new JMenuItem(s_stringMgr.getString("graph.removeGraph"));
- _mnuRemoveGraph.addActionListener(new ActionListener()
- {
- public void actionPerformed(ActionEvent e)
- {
- onRemoveGraph();
- }
- });
-
- // i18n[graph.refreshAllTables=Refresh all tables]
+ // i18n[graph.refreshAllTables=Refresh all tables]
_mnuRefreshAllTables = new JMenuItem(s_stringMgr.getString("graph.refreshAllTables"));
_mnuRefreshAllTables.addActionListener(new ActionListener()
{
@@ -320,9 +314,19 @@
}
});
- _popUp.add(_mnuSaveGraph);
- _popUp.add(_mnuRenameGraph);
- _popUp.add(_mnuRemoveGraph);
+ if (_listener.isLink())
+ {
+ _popUp.add(_mnuSaveLinkAsLocalCopy);
+ _popUp.add(_mnuSaveLinkedGraph);
+ _popUp.add(_mnuRemoveLink);
+ _popUp.add(_mnuShowLinkDetails);
+ }
+ else
+ {
+ _popUp.add(_mnuSaveGraph);
+ _popUp.add(_mnuRenameGraph);
+ _popUp.add(_mnuRemoveGraph);
+ }
_popUp.add(new JSeparator());
_popUp.add(_mnuRefreshAllTables);
_popUp.add(_mnuScriptAllTables);
@@ -368,6 +372,81 @@
}
+ private void createLinkSavingMenus()
+ {
+ _mnuSaveLinkAsLocalCopy = new JMenuItem(s_stringMgr.getString("graph.saveLinkAsLocalCopy"));
+ _mnuSaveLinkAsLocalCopy.addActionListener(new ActionListener()
+ {
+ public void actionPerformed(ActionEvent e)
+ {
+ onSaveLinkAsLocalCopy();
+ }
+ });
+
+ _mnuSaveLinkedGraph = new JMenuItem(s_stringMgr.getString("graph.saveLinkedGraph"));
+ _mnuSaveLinkedGraph.addActionListener(new ActionListener()
+ {
+ public void actionPerformed(ActionEvent e)
+ {
+ onSaveLinkedGraph();
+ }
+ });
+
+ _mnuRemoveLink = new JMenuItem(s_stringMgr.getString("graph.removeLink"));
+ _mnuRemoveLink.addActionListener(new ActionListener()
+ {
+ public void actionPerformed(ActionEvent e)
+ {
+ onRemoveLink();
+ }
+ });
+
+ _mnuShowLinkDetails = new JMenuItem(s_stringMgr.getString("graph.showLinkDetails"));
+ _mnuShowLinkDetails.setIcon(_graphPluginResources.getIcon(GraphPluginResources.IKeys.LINK));
+
+ _mnuShowLinkDetails.addActionListener(new ActionListener()
+ {
+ public void actionPerformed(ActionEvent e)
+ {
+ onShowLinkDetails();
+ }
+ });
+ }
+
+ private void createGraphSavingMenus()
+ {
+ // i18n[graph.saveGraph=Save graph]
+ _mnuSaveGraph = new JMenuItem(s_stringMgr.getString("graph.saveGraph"));
+ _mnuSaveGraph.addActionListener(new ActionListener()
+ {
+ public void actionPerformed(ActionEvent e)
+ {
+ onSaveGraph();
+ }
+ });
+
+
+ // i18n[graph.renameGraph=Rename graph]
+ _mnuRenameGraph= new JMenuItem(s_stringMgr.getString("graph.renameGraph"));
+ _mnuRenameGraph.addActionListener(new ActionListener()
+ {
+ public void actionPerformed(ActionEvent e)
+ {
+ onRenameGraph();
+ }
+ });
+
+ // i18n[graph.removeGraph=Remove graph]
+ _mnuRemoveGraph= new JMenuItem(s_stringMgr.getString("graph.removeGraph"));
+ _mnuRemoveGraph.addActionListener(new ActionListener()
+ {
+ public void actionPerformed(ActionEvent e)
+ {
+ onRemoveGraph();
+ }
+ });
+ }
+
private void onPopupMenuWillBecomeInvisible()
{
if(null != _currentGraphControllerPopupListener)
@@ -456,15 +535,18 @@
private void onRemoveGraph()
{
- // i18n[graph.delGraph=Do you really wish to delete this graph?]
- Window parent = SwingUtilities.windowForComponent(_desktopPane);
- int res = JOptionPane.showConfirmDialog(parent, s_stringMgr.getString("graph.delGraph"));
- if(res == JOptionPane.YES_OPTION)
+ if(showRemoveOptionPane("graph.delGraph") == JOptionPane.YES_OPTION)
{
_listener.removeRequest();
}
}
+ private int showRemoveOptionPane(String msgKey)
+ {
+ Window parent = SwingUtilities.windowForComponent(_desktopPane);
+ return JOptionPane.showConfirmDialog(parent, s_stringMgr.getString(msgKey));
+ }
+
private void onRenameGraph()
{
@@ -482,6 +564,31 @@
_listener.saveGraphRequested();
}
+ private void onSaveLinkAsLocalCopy()
+ {
+ _listener.saveLinkAsLocalCopy();
+ }
+
+ private void onSaveLinkedGraph()
+ {
+ _listener.saveLinkedGraph();
+ }
+
+ private void onRemoveLink()
+ {
+ if(showRemoveOptionPane("graph.delLink") == JOptionPane.YES_OPTION)
+ {
+ _listener.removeLink();
+ }
+ }
+
+ private void onShowLinkDetails()
+ {
+ _listener.showLinkDetails();
+ }
+
+
+
private void maybeShowPopup(MouseEvent e)
{
if (e.isPopupTrigger())
@@ -726,4 +833,9 @@
{
return _modeManager.getTableFramesModel();
}
+
+ public void changedFromLinkToLocalCopy()
+ {
+ createPopUp();
+ }
}
Modified: trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/GraphDesktopListener.java
===================================================================
--- trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/GraphDesktopListener.java 2011-11-27 16:31:01 UTC (rev 6549)
+++ trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/GraphDesktopListener.java 2011-12-25 23:35:39 UTC (rev 6550)
@@ -26,4 +26,16 @@
void tablesDropped(List<ITableInfo> tis, Point dropPoint);
void toggleWindowTab();
+
+
+
+ boolean isLink();
+
+ void saveLinkAsLocalCopy();
+
+ void saveLinkedGraph();
+
+ void removeLink();
+
+ void showLinkDetails();
}
Modified: trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/GraphMainPanelTab.java
===================================================================
--- trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/GraphMainPanelTab.java 2011-11-27 16:31:01 UTC (rev 6549)
+++ trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/GraphMainPanelTab.java 2011-12-25 23:35:39 UTC (rev 6550)
@@ -22,7 +22,7 @@
private JButton _btnToWindow;
private LazyLoadListener _lazyLoadListener;
- public GraphMainPanelTab(GraphPanelController panelController, GraphPlugin plugin)
+ public GraphMainPanelTab(GraphPanelController panelController, GraphPlugin plugin, boolean isLink)
{
_panelController = panelController;
_tabComponent = new JPanel(new BorderLayout(3,0));
@@ -30,7 +30,13 @@
_lblTitle = new JLabel(s_stringMgr.getString("graph.newGraph"));
_lblTitle.setOpaque(false);
+ if(isLink)
+ {
+ ImageIcon linkIcon = new GraphPluginResources(plugin).getIcon(GraphPluginResources.IKeys.LINK);
+ _lblTitle.setIcon(linkIcon);
+ }
+
_tabComponent.add(_lblTitle, BorderLayout.CENTER);
ImageIcon icon = new GraphPluginResources(plugin).getIcon(GraphPluginResources.IKeys.TO_WINDOW);
@@ -89,4 +95,9 @@
{
_lazyLoadListener = lazyLoadListener;
}
+
+ public void changedFromLinkToLocalCopy()
+ {
+ _lblTitle.setIcon(null);
+ }
}
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-11-27 16:31:01 UTC (rev 6549)
+++ trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/GraphPanelController.java 2011-12-25 23:35:39 UTC (rev 6550)
@@ -148,4 +148,10 @@
{
_graphDesktopController.removeGraph();
}
+
+
+ public void changedFromLinkToLocalCopy()
+ {
+ _graphDesktopController.changedFromLinkToLocalCopy();
+ }
}
Modified: trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/GraphPlugin.java
===================================================================
--- trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/GraphPlugin.java 2011-11-27 16:31:01 UTC (rev 6549)
+++ trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/GraphPlugin.java 2011-12-25 23:35:39 UTC (rev 6550)
@@ -27,11 +27,11 @@
import net.sourceforge.squirrel_sql.fw.sql.DatabaseObjectType;
import net.sourceforge.squirrel_sql.fw.util.log.ILogger;
import net.sourceforge.squirrel_sql.fw.util.log.LoggerController;
+import net.sourceforge.squirrel_sql.plugins.graph.link.LinkGraphAction;
import net.sourceforge.squirrel_sql.plugins.graph.xmlbeans.GraphXmlSerializer;
-import java.util.Arrays;
+import java.util.ArrayList;
import java.util.Hashtable;
-import java.util.Vector;
/**
* The SQL Script plugin class.
@@ -39,7 +39,7 @@
public class GraphPlugin extends DefaultSessionPlugin
{
- private Hashtable<IIdentifier, GraphController[]> _grapControllersBySessionID = new Hashtable<IIdentifier, GraphController[]>();
+ private Hashtable<IIdentifier, ArrayList<GraphController>> _grapControllersBySessionID = new Hashtable<IIdentifier, ArrayList<GraphController>>();
/**
* Logger for this class.
@@ -147,6 +147,7 @@
ActionCollection coll = app.getActionCollection();
coll.add(new AddToGraphAction(app, _resources, this));
coll.add(new NewQueryBuilderWindowAction(app, _resources, this));
+ coll.add(new LinkGraphAction(app, _resources, this));
}
/**
@@ -168,14 +169,21 @@
public PluginSessionCallback sessionStarted(final ISession session)
{
GraphXmlSerializer[] serializers = GraphXmlSerializer.getGraphXmSerializers(this, session);
- GraphController[] controllers = new GraphController[serializers.length];
+ ArrayList<GraphController> controllers = new ArrayList<GraphController>();
- for (int i = 0; i < controllers.length; i++)
+ for (int i = 0; i < serializers.length; i++)
{
- controllers[i] = new GraphController(session, this, serializers[i], false);
+ controllers.add(new GraphController(session, this, serializers[i], false));
}
+ GraphXmlSerializer[] linkedSerializers = GraphXmlSerializer.getLinkedGraphXmSerializers(this, session);
+ for (int i = 0; i < linkedSerializers.length; i++)
+ {
+ controllers.add(new GraphController(session, this, linkedSerializers[i], false));
+ }
+
+
_grapControllersBySessionID.put(session.getIdentifier(), controllers);
@@ -186,6 +194,7 @@
session.addSeparatorToToolbar();
session.addToToolbar(coll.get(NewQueryBuilderWindowAction.class));
+ session.addToToolbar(coll.get(LinkGraphAction.class));
return new PluginSessionCallbackAdaptor(this);
@@ -194,18 +203,17 @@
public void sessionEnding(ISession session)
{
- GraphController[] controllers = _grapControllersBySessionID.remove(session.getIdentifier());
+ ArrayList<GraphController> controllers = _grapControllersBySessionID.remove(session.getIdentifier());
- for (int i = 0; i < controllers.length; i++)
+ for (GraphController controller : controllers)
{
- controllers[i].sessionEnding();
+ controller.sessionEnding();
}
-
}
public GraphController[] getGraphControllers(ISession session)
{
- return _grapControllersBySessionID.get(session.getIdentifier());
+ return _grapControllersBySessionID.get(session.getIdentifier()).toArray(new GraphController[0]);
}
public String patchName(String name, ISession session)
@@ -222,16 +230,16 @@
++postfix;
}
- GraphController[] controllers = _grapControllersBySessionID.get(session.getIdentifier());
+ ArrayList<GraphController> controllers = _grapControllersBySessionID.get(session.getIdentifier());
while(true)
{
boolean incremented = false;
- for (int i = 0; i < controllers.length; i++)
+ for (int i = 0; i < controllers.size(); i++)
{
if(0 == postfix)
{
- if(controllers[i].getTitle().equals(name))
+ if(controllers.get(i).getTitle().equals(name))
{
++postfix;
incremented = true;
@@ -239,7 +247,7 @@
}
else
{
- if(controllers[i].getTitle().equals(name + "_" + postfix))
+ if(controllers.get(i).getTitle().equals(name + "_" + postfix))
{
++postfix;
incremented = true;
@@ -265,36 +273,50 @@
public GraphController createNewGraphControllerForSession(ISession session, boolean showDndDesktopImageAtStartup)
{
- GraphController[] controllers = _grapControllersBySessionID.get(session.getIdentifier());
+ return _createNewGraphControllerForSession(session, null, showDndDesktopImageAtStartup);
+ }
- Vector<GraphController> v = new Vector<GraphController>();
- if(null != controllers)
+ public void createNewGraphControllerForSession(ISession session, GraphXmlSerializer graphXmlSerializer)
+ {
+ _createNewGraphControllerForSession(session, graphXmlSerializer, false);
+ }
+
+ private GraphController _createNewGraphControllerForSession(ISession session, GraphXmlSerializer graphXmlSerializer, boolean showDndDesktopImageAtStartup)
+ {
+ ArrayList<GraphController> controllers = _grapControllersBySessionID.get(session.getIdentifier());
+
+ if(null == controllers)
{
- v.addAll(Arrays.asList(controllers));
+ controllers = new ArrayList<GraphController>();
+ _grapControllersBySessionID.put(session.getIdentifier(), controllers);
}
- GraphController ret = new GraphController(session, this, null, showDndDesktopImageAtStartup);
- v.add(ret);
-
- controllers = v.toArray(new GraphController[v.size()]);
+ GraphController ret = new GraphController(session, this, graphXmlSerializer, showDndDesktopImageAtStartup);
+ controllers.add(ret);
_grapControllersBySessionID.put(session.getIdentifier(), controllers);
return ret;
}
+
+
public void removeGraphController(GraphController toRemove, ISession session)
{
- GraphController[] controllers = _grapControllersBySessionID.get(session.getIdentifier());
- Vector<GraphController> v = new Vector<GraphController>();
- for (int i = 0; i < controllers.length; i++)
+ ArrayList<GraphController> controllers = _grapControllersBySessionID.get(session.getIdentifier());
+
+ if(null == controllers)
{
- if(false == controllers[i].equals(toRemove))
+ return;
+ }
+
+
+ for (int i = 0; i < controllers.size(); i++)
+ {
+ if(controllers.get(i).equals(toRemove))
{
- v.add(controllers[i]);
+ controllers.remove(i);
+ break;
}
}
+ }
- controllers = v.toArray(new GraphController[v.size()]);
- _grapControllersBySessionID.put(session.getIdentifier(), controllers);
-
- }
}
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-11-27 16:31:01 UTC (rev 6549)
+++ trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/GraphPluginResources.java 2011-12-25 23:35:39 UTC (rev 6550)
@@ -47,5 +47,6 @@
String DELETE_FOLDER = "deletefolder";
String DND = "dnd";
String ESCAPE_DATE = "escapedate";
+ String LINK = "link";
}
}
Modified: 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 2011-11-27 16:31:01 UTC (rev 6549)
+++ trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/GraphUtil.java 2011-12-25 23:35:39 UTC (rev 6550)
@@ -114,4 +114,45 @@
return true;
}
+
+ public static String javaNormalize(String text)
+ {
+ StringBuffer buf = new StringBuffer(text.length());
+
+ if(Character.isJavaIdentifierStart(text.charAt(0)) )
+ {
+ buf.append(text.charAt(0));
+ }
+ else
+ {
+ buf.append('_');
+ }
+
+
+ for(int i=1; i < text.length(); ++i)
+ {
+ if ( Character.isLetterOrDigit(text.charAt(i)) )
+ {
+ buf.append(text.charAt(i));
+ }
+ else
+ {
+ buf.append('_');
+ }
+ }
+
+ String ret = buf.toString();
+
+ return ret;
+ }
+
+ public static String createGraphFileName(String url, String title)
+ {
+ return createGraphFileNamePrefixForUrl(url) + javaNormalize(title);
+ }
+
+ public static String createGraphFileNamePrefixForUrl(String url)
+ {
+ return javaNormalize(url) + ".";
+ }
}
Added: trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/NonExistentingTableInfoPlaceHolder.java
===================================================================
--- trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/NonExistentingTableInfoPlaceHolder.java (rev 0)
+++ trunk/sql12/plugins/graph/src/main/java/net/sourceforge/squirrel_sql/plugins/graph/NonExistentingTableInfoPlaceHolder.java 2011-12-25 23:35:39 UTC (rev 6550)
@@ -0,0 +1,107 @@
+package net.sourceforge.squirrel_sql.plugins.graph;
+
+import net.sourceforge.squirrel_sql.fw.sql.*;
+import net.sourceforge.squirrel_sql.fw.util.StringManager;
+import net.sourceforge.squirrel_sql.fw.util.StringManagerFactory;
+
+public class NonExistentingTableInfoPlaceHolder implements ITableInfo
+{
+ private static final StringManager s_stringMgr =
+ StringManagerFactory.getStringManager(NonExistentingTableInfoPlaceHolder.class);
+
+
+ private String _catalog;
+ private String _schema;
+ private String _tableName;
+
+ public NonExistentingTableInfoPlaceHolder(String catalog, String schema, String tableName)
+ {
+ _catalog = catalog;
+ _schema = schema;
+ _tableName = tableName;
+ }
+
+ @Override
+ public String getType()
+ {
+ return "TABLE";
+ }
+
+ @Override
+ public String getRemarks()
+ {
+ return null;
+ }
+
+ @Override
+ public ITableInfo[] getChildTables()
+ {
+ return new ITableInfo[0];
+ ...
[truncated message content] |