# HG changeset patch # User Jaroslav Havlin # Parent 58f327c26e21be55f7dec82853dd3a56b614db1a #195880: SQL Command tab is more descriptive of connection diff --git a/db.metadata.model/manifest.mf b/db.metadata.model/manifest.mf --- a/db.metadata.model/manifest.mf +++ b/db.metadata.model/manifest.mf @@ -1,5 +1,5 @@ Manifest-Version: 1.0 OpenIDE-Module: org.netbeans.modules.db.metadata.model/1 OpenIDE-Module-Localizing-Bundle: org/netbeans/modules/db/metadata/model/resources/Bundle.properties -OpenIDE-Module-Specification-Version: 1.0 +OpenIDE-Module-Specification-Version: 1.1 AutoUpdate-Show-In-Client: false diff --git a/db.metadata.model/src/org/netbeans/modules/db/metadata/model/api/MetadataElementHandle.java b/db.metadata.model/src/org/netbeans/modules/db/metadata/model/api/MetadataElementHandle.java --- a/db.metadata.model/src/org/netbeans/modules/db/metadata/model/api/MetadataElementHandle.java +++ b/db.metadata.model/src/org/netbeans/modules/db/metadata/model/api/MetadataElementHandle.java @@ -162,6 +162,22 @@ } /** + * Get non null names of database objects that fully identify this element. + * + * @since db.metadata.model/1.1 + * @return List of names of DB objects, can be empty, contains no nulls. + */ + public List getNonNullNames() { + List nonNullNames = new ArrayList(names.length); + for (String name : names) { + if (name != null) { + nonNullNames.add(name); + } + } + return nonNullNames; + } + + /** * Resolves this handle to the corresponding metadata element, if any. * * @param metadata the {@link Metadata} instance to resolve this element against. diff --git a/db.sql.editor/nbproject/project.xml b/db.sql.editor/nbproject/project.xml --- a/db.sql.editor/nbproject/project.xml +++ b/db.sql.editor/nbproject/project.xml @@ -80,8 +80,8 @@ - 0-1 - 0.8 + 1 + 1.1 diff --git a/db.sql.editor/src/org/netbeans/modules/db/sql/editor/Bundle.properties b/db.sql.editor/src/org/netbeans/modules/db/sql/editor/Bundle.properties --- a/db.sql.editor/src/org/netbeans/modules/db/sql/editor/Bundle.properties +++ b/db.sql.editor/src/org/netbeans/modules/db/sql/editor/Bundle.properties @@ -46,6 +46,12 @@ #{0} = command number #PARTI18N - only localize "SQL Command" and do not add anything after ".sql" LBL_SQLCommandFileName=SQL Command {0}.sql +# {0} - schema or catalog, {1} - schema or table, {2} - number +#NOI18N - this probably shouldn't be localized +LBL_SQLCommandFileNameTwoElements=SQL {0}.{1}{2,choice,1#|1< ({2})}.sql +# {0} - schema or catalog or connection name, {1} - number +#NOI18N - this probably shouldn't be localized +LBL_SQLCommandFileNameOneElement=SQL {0}{1,choice,1#|1< ({1})}.sql #options NAME_coloring_sql-whitespace=White Space diff --git a/db.sql.editor/src/org/netbeans/modules/db/sql/editor/SQLEditorProviderImpl.java b/db.sql.editor/src/org/netbeans/modules/db/sql/editor/SQLEditorProviderImpl.java --- a/db.sql.editor/src/org/netbeans/modules/db/sql/editor/SQLEditorProviderImpl.java +++ b/db.sql.editor/src/org/netbeans/modules/db/sql/editor/SQLEditorProviderImpl.java @@ -48,11 +48,12 @@ import java.io.IOException; import java.io.OutputStream; import java.io.OutputStreamWriter; -import java.text.MessageFormat; +import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; import org.netbeans.api.db.explorer.DatabaseConnection; import org.netbeans.modules.db.api.sql.execute.SQLExecuteCookie; +import org.netbeans.modules.db.metadata.model.api.MetadataElementHandle; import org.netbeans.modules.db.spi.sql.editor.SQLEditorProvider; import org.openide.cookies.OpenCookie; import org.openide.filesystems.FileLock; @@ -76,7 +77,8 @@ private static final String CMD_FOLDER = "Databases/SQLCommands"; // NOI18N @Override - public void openSQLEditor(DatabaseConnection dbconn, String sql, boolean execute) { + public void openSQLEditor(DatabaseConnection dbconn, String sql, boolean execute, + MetadataElementHandle elementHandle) { FileObject tmpFo = FileUtil.getConfigFile(CMD_FOLDER); if (tmpFo == null) { try { @@ -90,8 +92,7 @@ int i = 1; for (;;) { - String nameFmt = NbBundle.getMessage(SQLEditorProviderImpl.class, "LBL_SQLCommandFileName"); - String name = MessageFormat.format(nameFmt, new Object[] { new Integer(i) }); + String name = getFileName(dbconn, elementHandle, i); try { sqlFo = tmpFo.createData(name); } catch (IOException e) { @@ -143,4 +144,36 @@ Logger.getLogger(SQLEditorProviderImpl.class.getName()).log(Level.INFO, "No SQLExecuteCookie found for " + sqlDo); } } + + private String getFileName(DatabaseConnection dbconn, + MetadataElementHandle elementHandle, int number) { + + List names = (elementHandle == null) ? null + : elementHandle.getNonNullNames(); + if (names != null && names.size() > 1) { + String first = names.get(names.size() - 2); + String second = names.get(names.size() - 1); + if (isSafeTableName(first) && isSafeTableName(second)) { + return NbBundle.getMessage(SQLEditorProviderImpl.class, + "LBL_SQLCommandFileNameTwoElements", //NOI18N + new Object[]{first, second, number}); + } + } else if (names != null && names.size() == 1 + && isSafeTableName(names.get(0))) { + return NbBundle.getMessage(SQLEditorProviderImpl.class, + "LBL_SQLCommandFileNameOneElement", //NOI18N + new Object[]{names.get(0), number}); + } + if (isSafeTableName(dbconn.getDisplayName())) { + return NbBundle.getMessage(SQLEditorProviderImpl.class, + "LBL_SQLCommandFileNameOneElement", //NOI18N + new Object[]{dbconn.getDisplayName(), number}); + } + return NbBundle.getMessage(SQLEditorProviderImpl.class, + "LBL_SQLCommandFileName", new Object[]{number}); //NOI18N + } + + private boolean isSafeTableName(String tableName) { + return tableName != null && tableName.matches("\\w+"); //NOI18N + } } diff --git a/db/nbproject/project.properties b/db/nbproject/project.properties --- a/db/nbproject/project.properties +++ b/db/nbproject/project.properties @@ -45,7 +45,7 @@ javadoc.arch=${basedir}/arch.xml javadoc.apichanges=${basedir}/apichanges.xml -spec.version.base=1.53 +spec.version.base=1.54 extra.module.files=modules/ext/ddl.jar diff --git a/db/src/org/netbeans/modules/db/explorer/action/EditSourceCodeAction.java b/db/src/org/netbeans/modules/db/explorer/action/EditSourceCodeAction.java --- a/db/src/org/netbeans/modules/db/explorer/action/EditSourceCodeAction.java +++ b/db/src/org/netbeans/modules/db/explorer/action/EditSourceCodeAction.java @@ -47,6 +47,7 @@ import org.netbeans.modules.db.explorer.DatabaseConnection; import org.netbeans.modules.db.explorer.node.ProcedureNode; import org.netbeans.modules.db.explorer.sql.editor.SQLEditorSupport; +import org.netbeans.modules.db.metadata.model.api.MetadataElementHandle; import org.openide.nodes.Node; import org.openide.util.HelpCtx; import org.openide.util.NbBundle; @@ -78,7 +79,10 @@ public void run() { ProcedureNode pn = activatedNodes[0].getLookup().lookup(ProcedureNode.class); try { - SQLEditorSupport.openSQLEditor(connection.getDatabaseConnection(), pn.getDDL(), false); + MetadataElementHandle elementHandle = + activatedNodes[0].getLookup().lookup(MetadataElementHandle.class); + SQLEditorSupport.openSQLEditor(connection.getDatabaseConnection(), + pn.getDDL(), false, elementHandle); } catch (Exception exc) { Logger.getLogger(EditSourceCodeAction.class.getName()).log(Level.INFO, exc.getLocalizedMessage() + " while executing expression " + pn.getDDL(), exc); // NOI18N } diff --git a/db/src/org/netbeans/modules/db/explorer/action/ExecuteCommandAction.java b/db/src/org/netbeans/modules/db/explorer/action/ExecuteCommandAction.java --- a/db/src/org/netbeans/modules/db/explorer/action/ExecuteCommandAction.java +++ b/db/src/org/netbeans/modules/db/explorer/action/ExecuteCommandAction.java @@ -44,6 +44,7 @@ import org.netbeans.modules.db.explorer.DatabaseConnection; import org.netbeans.modules.db.explorer.sql.editor.SQLEditorSupport; +import org.netbeans.modules.db.metadata.model.api.MetadataElementHandle; import org.openide.nodes.Node; import org.openide.util.HelpCtx; import org.openide.util.NbBundle; @@ -72,7 +73,10 @@ public void performAction (Node[] activatedNodes) { if (activatedNodes != null && activatedNodes.length == 1) { DatabaseConnection dbconn = activatedNodes[0].getLookup().lookup(DatabaseConnection.class); - SQLEditorSupport.openSQLEditor(dbconn.getDatabaseConnection(), "", false); // NOI18N + MetadataElementHandle elementHandle = + activatedNodes[0].getLookup().lookup(MetadataElementHandle.class); + SQLEditorSupport.openSQLEditor(dbconn.getDatabaseConnection(), + "", false, elementHandle); //NOI18N } } diff --git a/db/src/org/netbeans/modules/db/explorer/action/ViewDataAction.java b/db/src/org/netbeans/modules/db/explorer/action/ViewDataAction.java --- a/db/src/org/netbeans/modules/db/explorer/action/ViewDataAction.java +++ b/db/src/org/netbeans/modules/db/explorer/action/ViewDataAction.java @@ -46,6 +46,7 @@ import java.util.logging.Logger; import org.netbeans.modules.db.explorer.DatabaseConnection; import org.netbeans.modules.db.explorer.sql.editor.SQLEditorSupport; +import org.netbeans.modules.db.metadata.model.api.MetadataElementHandle; import org.openide.DialogDisplayer; import org.openide.NotifyDescriptor; import org.openide.nodes.Node; @@ -81,7 +82,10 @@ String expression = null; try { expression = getDefaultQuery(activatedNodes); - SQLEditorSupport.openSQLEditor(connection.getDatabaseConnection(), expression + ";\n", true); //NOI18N + MetadataElementHandle elementHandle = + activatedNodes[0].getLookup().lookup(MetadataElementHandle.class); + SQLEditorSupport.openSQLEditor(connection.getDatabaseConnection(), + expression + ";\n", true, elementHandle); //NOI18N } catch(Exception exc) { Logger.getLogger(ViewDataAction.class.getName()).log(Level.INFO, exc.getLocalizedMessage() + " while executing expression " + expression, exc); // NOI18N String message = NbBundle.getMessage (ViewDataAction.class, "ShowDataError", exc.getMessage()); // NOI18N diff --git a/db/src/org/netbeans/modules/db/explorer/action/ViewSourceCodeAction.java b/db/src/org/netbeans/modules/db/explorer/action/ViewSourceCodeAction.java --- a/db/src/org/netbeans/modules/db/explorer/action/ViewSourceCodeAction.java +++ b/db/src/org/netbeans/modules/db/explorer/action/ViewSourceCodeAction.java @@ -47,6 +47,7 @@ import org.netbeans.modules.db.explorer.dlg.ViewProcedureDialog; import org.netbeans.modules.db.explorer.node.ProcedureNode; import org.netbeans.modules.db.explorer.sql.editor.SQLEditorSupport; +import org.netbeans.modules.db.metadata.model.api.MetadataElementHandle; import org.openide.nodes.Node; import org.openide.util.HelpCtx; import org.openide.util.NbBundle; @@ -82,7 +83,10 @@ ProcedureNode pn = activatedNodes[0].getLookup().lookup(ProcedureNode.class); try { expression = pn.getSource(); - SQLEditorSupport.openSQLEditor(connection.getDatabaseConnection(), expression, false); + MetadataElementHandle elementHandle = + activatedNodes[0].getLookup().lookup(MetadataElementHandle.class); + SQLEditorSupport.openSQLEditor(connection.getDatabaseConnection(), + expression, false, elementHandle); } catch (Exception exc) { Logger.getLogger(ViewSourceCodeAction.class.getName()).log(Level.INFO, exc.getLocalizedMessage() + " while executing expression " + expression, exc); // NOI18N } diff --git a/db/src/org/netbeans/modules/db/explorer/sql/editor/SQLEditorSupport.java b/db/src/org/netbeans/modules/db/explorer/sql/editor/SQLEditorSupport.java --- a/db/src/org/netbeans/modules/db/explorer/sql/editor/SQLEditorSupport.java +++ b/db/src/org/netbeans/modules/db/explorer/sql/editor/SQLEditorSupport.java @@ -45,6 +45,7 @@ package org.netbeans.modules.db.explorer.sql.editor; import org.netbeans.api.db.explorer.DatabaseConnection; +import org.netbeans.modules.db.metadata.model.api.MetadataElementHandle; import org.netbeans.modules.db.spi.sql.editor.SQLEditorProvider; import org.openide.util.Lookup; @@ -54,10 +55,17 @@ */ public class SQLEditorSupport { - public static void openSQLEditor(DatabaseConnection dbconn, String sql, boolean execute) { + public static void openSQLEditor(DatabaseConnection dbconn, String sql, + boolean execute) { + openSQLEditor(dbconn, sql, execute, null); + } + + public static void openSQLEditor(DatabaseConnection dbconn, String sql, boolean execute, + MetadataElementHandle elementHandle) { + SQLEditorProvider provider = (SQLEditorProvider)Lookup.getDefault().lookup(SQLEditorProvider.class); if (provider != null) { - provider.openSQLEditor(dbconn, sql, execute); + provider.openSQLEditor(dbconn, sql, execute, elementHandle); } } } diff --git a/db/src/org/netbeans/modules/db/spi/sql/editor/SQLEditorProvider.java b/db/src/org/netbeans/modules/db/spi/sql/editor/SQLEditorProvider.java --- a/db/src/org/netbeans/modules/db/spi/sql/editor/SQLEditorProvider.java +++ b/db/src/org/netbeans/modules/db/spi/sql/editor/SQLEditorProvider.java @@ -45,6 +45,8 @@ package org.netbeans.modules.db.spi.sql.editor; import org.netbeans.api.db.explorer.DatabaseConnection; +import org.netbeans.modules.db.metadata.model.api.MetadataElementHandle; +import org.openide.util.Lookup; /** * This interface provides an SQL editor. It is used every time the Database @@ -63,6 +65,9 @@ * statements are also executed against this connection. * @param sql the SQL statements to be put in the editor * @param execute whether to execute the SQL statements. + * @param elementHandle Handle for element for which the editor should be + * opened, can be null. */ - public void openSQLEditor(DatabaseConnection dbconn, String sql, boolean execute); + public void openSQLEditor(DatabaseConnection dbconn, String sql, boolean execute, + MetadataElementHandle elementHandle); }