From f98feec35d43f72c0ec7ea023c1045d34618dee3 Mon Sep 17 00:00:00 2001 From: Philipp Salvisberg Date: Tue, 30 Jan 2018 02:56:49 +0100 Subject: [PATCH] fixes #4 - add accelerator in connections navigator removed XML based actions and implemented a a ContextMenuListener and a Controller --- sqldev/extension.xml | 22 ++++-- sqldev/pom.xml | 10 ++- .../menu/UtplsqlContextMenuListener.xtend | 65 ++++++++++++++++ .../sqldev/menu/UtplsqlController.xtend | 74 ++++++++++++++++--- .../org/utplsql/sqldev/model/URLTools.xtend | 61 +++++++++++++++ .../menu/UtplsqlNavigatorAction.xtend | 66 ----------------- .../sqldev/actions/navigator_actions.xml | 39 ---------- .../sqldev/actions/navigator_actions_de.xliff | 39 ---------- .../utplsql/sqldev/resources/accelerators.xml | 4 +- 9 files changed, 215 insertions(+), 165 deletions(-) create mode 100644 sqldev/src/main/java/org/utplsql/sqldev/menu/UtplsqlContextMenuListener.xtend create mode 100644 sqldev/src/main/java/org/utplsql/sqldev/model/URLTools.xtend delete mode 100644 sqldev/src/main/java/org/utplsql/sqldev/navigator/menu/UtplsqlNavigatorAction.xtend delete mode 100644 sqldev/src/main/resources/org/utplsql/sqldev/actions/navigator_actions.xml delete mode 100644 sqldev/src/main/resources/org/utplsql/sqldev/actions/navigator_actions_de.xliff diff --git a/sqldev/extension.xml b/sqldev/extension.xml index e79e29fa..e75c1ffb 100644 --- a/sqldev/extension.xml +++ b/sqldev/extension.xml @@ -15,11 +15,8 @@ - - - - + ${MENU_RUN_TEST_LABEL} res:/org/utplsql/sqldev/resources/images/utPLSQL.png @@ -28,10 +25,10 @@ - + - + @@ -40,8 +37,8 @@
- + id="UTPLSQL_MENU" weight="2.0"> +
@@ -57,4 +54,13 @@
+ + + + + org.utplsql.sqldev.menu.UtplsqlContextMenuListener + + + + diff --git a/sqldev/pom.xml b/sqldev/pom.xml index 645b8039..ca41bde9 100644 --- a/sqldev/pom.xml +++ b/sqldev/pom.xml @@ -130,6 +130,13 @@ system ${sqldev.basedir}/jdev/extensions/oracle.jdeveloper.db.connection.jar + + oracle + oracle.jdeveloper.java.core.jar + 12.2.1 + system + ${sqldev.basedir}/jdev/extensions/oracle.jdeveloper.java.core.jar + @@ -389,9 +396,8 @@ org.utplsql.sqldev, - org.utplsql.sqldev.editor.menu, + org.utplsql.sqldev.menu, org.utplsql.sqldev.model.preference, - org.utplsql.sqldev.navigator.menu, org.utplsql.sqldev.actions, org.utplsql.sqldev.resources diff --git a/sqldev/src/main/java/org/utplsql/sqldev/menu/UtplsqlContextMenuListener.xtend b/sqldev/src/main/java/org/utplsql/sqldev/menu/UtplsqlContextMenuListener.xtend new file mode 100644 index 00000000..00260bb1 --- /dev/null +++ b/sqldev/src/main/java/org/utplsql/sqldev/menu/UtplsqlContextMenuListener.xtend @@ -0,0 +1,65 @@ +/* Copyright 2018 Philipp Salvisberg + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.utplsql.sqldev.menu + +import java.util.logging.Logger +import oracle.dbtools.raptor.navigator.db.DatabaseConnection +import oracle.dbtools.raptor.navigator.impl.ChildObjectElement +import oracle.dbtools.raptor.navigator.impl.ObjectFolder +import oracle.dbtools.raptor.navigator.plsql.PlSqlNode +import oracle.ide.Context +import oracle.ide.controller.ContextMenu +import oracle.ide.controller.ContextMenuListener +import org.utplsql.sqldev.model.URLTools + +class UtplsqlContextMenuListener implements ContextMenuListener { + private static final Logger logger = Logger.getLogger(UtplsqlContextMenuListener.name); + private val extension URLTools urlTools = new URLTools + + + override handleDefaultAction(Context context) { + return false + } + + override menuWillHide(ContextMenu contextMenu) { + } + + override menuWillShow(ContextMenu contextMenu) { + val element = contextMenu.context.selection.get(0) + var boolean showMenu = false + logger.fine('''selected object is of type «element.class.name»''') + if (element instanceof DatabaseConnection) { + showMenu = true + } else if (element instanceof ObjectFolder) { + if (element.objectType == "PACKAGE" || element.objectType == "TYPE") { + showMenu = true + } + } else if (element instanceof PlSqlNode) { + if (element.objectType == "PACKAGE" || element.objectType == "PACKAGE BODY" || + element.objectType == "TYPE" || element.objectType == "TYPE BODY") { + showMenu = true + } + } else if (element instanceof ChildObjectElement) { + if (element.URL.objectType == "PACKAGE" || element.URL.objectType == "TYPE") { + showMenu = true + } + } + if (showMenu) { + val menuItem = contextMenu.createMenuItem(UtplsqlController.UTLPLSQL_TEST_ACTION, 1.0f) + contextMenu.add(menuItem, 12.1f) + logger.finer("context menu created.") + } + } +} \ No newline at end of file diff --git a/sqldev/src/main/java/org/utplsql/sqldev/menu/UtplsqlController.xtend b/sqldev/src/main/java/org/utplsql/sqldev/menu/UtplsqlController.xtend index 3220fa02..a97eeda3 100644 --- a/sqldev/src/main/java/org/utplsql/sqldev/menu/UtplsqlController.xtend +++ b/sqldev/src/main/java/org/utplsql/sqldev/menu/UtplsqlController.xtend @@ -12,28 +12,36 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.utplsql.sqldev.editor.menu +package org.utplsql.sqldev.menu +import java.net.URL import java.util.logging.Logger import javax.swing.JEditorPane +import oracle.dbtools.raptor.navigator.db.DBNavigatorWindow +import oracle.dbtools.raptor.navigator.db.DatabaseConnection +import oracle.dbtools.raptor.navigator.impl.ChildObjectElement import oracle.dbtools.raptor.navigator.impl.DatabaseSourceNode +import oracle.dbtools.raptor.navigator.impl.ObjectFolder +import oracle.dbtools.raptor.navigator.plsql.PlSqlNode import oracle.dbtools.worksheet.editor.Worksheet import oracle.ide.Context import oracle.ide.Ide import oracle.ide.controller.Controller import oracle.ide.controller.IdeAction import oracle.ide.editor.Editor -import oracle.ide.^extension.RegisteredByExtension import org.utplsql.sqldev.UtplsqlWorksheet +import org.utplsql.sqldev.model.URLTools import org.utplsql.sqldev.parser.UtplsqlParser -@RegisteredByExtension("org.utplsql.sqldev") -class UtplsqlEditorController implements Controller { - public static int UTLPLSQL_EDITOR_TEST_CMD_ID = Ide.findCmdID("utplsql.editor.test") - private static final Logger logger = Logger.getLogger(UtplsqlEditorController.name); +class UtplsqlController implements Controller { + private static final Logger logger = Logger.getLogger(UtplsqlController.name); + private val extension URLTools urlTools = new URLTools + + public static int UTLPLSQL_TEST_CMD_ID = Ide.findCmdID("utplsql.test") + public static final IdeAction UTLPLSQL_TEST_ACTION = IdeAction.get(UtplsqlController.UTLPLSQL_TEST_CMD_ID) override handleEvent(IdeAction action, Context context) { - if (action.commandId === UTLPLSQL_EDITOR_TEST_CMD_ID) { + if (action.commandId === UtplsqlController.UTLPLSQL_TEST_CMD_ID) { runTest(context) return true } @@ -41,7 +49,7 @@ class UtplsqlEditorController implements Controller { } override update(IdeAction action, Context context) { - if (action.commandId === UTLPLSQL_EDITOR_TEST_CMD_ID) { + if (action.commandId === UTLPLSQL_TEST_CMD_ID) { action.enabled = false val view = context.view if (view instanceof Editor) { @@ -52,16 +60,54 @@ class UtplsqlEditorController implements Controller { action.enabled = true } } + } else if (view instanceof DBNavigatorWindow) { + if (context.selection.length == 1) { + action.enabled = true + } } return true } return false } + + private def getPath(Context context) { + var String path + val element = context.selection.get(0) + if (element instanceof DatabaseConnection) { + path = element.connection.schema + } else if (element instanceof ObjectFolder) { + path = element.URL.schema + } else if (element instanceof PlSqlNode) { + path = '''«element.owner».«element.objectName»''' + } else if (element instanceof ChildObjectElement) { + path = '''«element.URL.schema».«element.URL.memberObject».«element.shortLabel»''' + } else { + path = "" + } + logger.fine('''path: «path»''') + return path + } + + private def getURL(Context context) { + var URL url + val element = context.selection.get(0) + if (element instanceof DatabaseConnection) { + url = element.URL + } else if (element instanceof ObjectFolder) { + url = element.URL + } else if (element instanceof PlSqlNode) { + url = element.URL + } else if (element instanceof ChildObjectElement) { + url = element.URL + } + logger.fine('''url: «url»''') + return url + } def runTest(Context context) { val view = context.view val node = context.node - logger.finer('''Run utPLSQL from editor with view «view.class.name» and node «node.class.name».''') + logger.finer('''Run utPLSQL from view «view?.class?.name» and node «node?.class?.name».''') if (view instanceof Editor) { val component = view.defaultFocusComponent if (component instanceof JEditorPane) { @@ -74,6 +120,16 @@ class UtplsqlEditorController implements Controller { } else if (view instanceof Worksheet) { connectionName = view.connectionName } + logger.fine('''connectionName: «connectionName»''') + val utPlsqlWorksheet = new UtplsqlWorksheet(path, connectionName) + utPlsqlWorksheet.runTestAsync + } + } else if (view instanceof DBNavigatorWindow) { + val url=context.URL + if (url !== null) { + val connectionName = url.connectionName + logger.fine('''connectionName: «connectionName»''') + val path=context.path val utPlsqlWorksheet = new UtplsqlWorksheet(path, connectionName) utPlsqlWorksheet.runTestAsync } diff --git a/sqldev/src/main/java/org/utplsql/sqldev/model/URLTools.xtend b/sqldev/src/main/java/org/utplsql/sqldev/model/URLTools.xtend new file mode 100644 index 00000000..c3850874 --- /dev/null +++ b/sqldev/src/main/java/org/utplsql/sqldev/model/URLTools.xtend @@ -0,0 +1,61 @@ +/* Copyright 2018 Philipp Salvisberg + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.utplsql.sqldev.model + +import java.net.URL +import java.util.regex.Pattern + +class URLTools { + def getConnectionName(URL url) { + val p = Pattern.compile("(sqldev.nav:)([^/]+)(//)?") + val m = p.matcher(url.toString) + if (m.find) { + return m.group(2).replace("IdeConnections%2523", "IdeConnections%23") + } else { + return "" + } + } + + def getSchema(URL url) { + val p = Pattern.compile("(//)([^/]+)") + val m = p.matcher(url.toString) + if (m.find) { + return m.group(2) + } else { + return "" + } + } + + def getObjectType(URL url) { + val p = Pattern.compile("(//)([^/]+)(/)([^/]+)") + val m = p.matcher(url.toString) + if (m.find) { + return m.group(4) + } else { + return "" + } + } + + def getMemberObject(URL url) { + val p = Pattern.compile("(/)([^/]+)(#MEMBER)") + val m = p.matcher(url.toString) + + if (m.find) { + return m.group(2) + } else { + return "" + } + } +} \ No newline at end of file diff --git a/sqldev/src/main/java/org/utplsql/sqldev/navigator/menu/UtplsqlNavigatorAction.xtend b/sqldev/src/main/java/org/utplsql/sqldev/navigator/menu/UtplsqlNavigatorAction.xtend deleted file mode 100644 index ec64e174..00000000 --- a/sqldev/src/main/java/org/utplsql/sqldev/navigator/menu/UtplsqlNavigatorAction.xtend +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright 2018 Philipp Salvisberg - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.utplsql.sqldev.navigator.menu - -import java.net.URL -import java.util.logging.Logger -import java.util.regex.Pattern -import oracle.dbtools.raptor.dialogs.actions.AbstractMenuAction -import oracle.dbtools.raptor.navigator.impl.ChildObjectElement -import org.utplsql.sqldev.UtplsqlWorksheet - -class UtplsqlNavigatorAction extends AbstractMenuAction { - private static final Logger logger = Logger.getLogger(UtplsqlNavigatorAction.name); - - private def getSchema(URL url) { - val p = Pattern.compile("(//)([^/]+)") - val m = p.matcher(url.toString) - if (m.find) { - return m.group(2) - } else { - return "" - } - } - - private def getMemberObject(URL url) { - val p = Pattern.compile("(/)([^/]+)(#MEMBER)") - val m = p.matcher(url.toString) - if (m.find) { - return m.group(2) - } else { - return "" - } - } - - private def getPath() { - var String path - if (DBObject.objectType == "MEMBER") { - val element = DBObject.element as ChildObjectElement - path = '''«element.URL.schema».«element.URL.memberObject».«DBObject.childName»''' - } else if (DBObject.objectType == "CONNECTION" || DBObject.objectName === null) { - path = DBObject.schemaName - } else { - path = '''«DBObject.schemaName».«DBObject.objectName»''' - } - return path - } - - override launch() { - logger.finer('''Run utPLSQL from a navigator node.''') - val utPlsqlWorksheet = new UtplsqlWorksheet(path, DBObject.connectionName) - utPlsqlWorksheet.runTestAsync - } -} \ No newline at end of file diff --git a/sqldev/src/main/resources/org/utplsql/sqldev/actions/navigator_actions.xml b/sqldev/src/main/resources/org/utplsql/sqldev/actions/navigator_actions.xml deleted file mode 100644 index 4af018f6..00000000 --- a/sqldev/src/main/resources/org/utplsql/sqldev/actions/navigator_actions.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - - - Run utPLSQL test - /org/utplsql/sqldev/resources/images/utPLSQL.png - - - Run utPLSQL test - /org/utplsql/sqldev/resources/images/utPLSQL.png - - - Run utPLSQL test - /org/utplsql/sqldev/resources/images/utPLSQL.png - - - Run utPLSQL test - /org/utplsql/sqldev/resources/images/utPLSQL.png - - - Run utPLSQL test - /org/utplsql/sqldev/resources/images/utPLSQL.png - - - Run utPLSQL test - /org/utplsql/sqldev/resources/images/utPLSQL.png - - - Run utPLSQL test - /org/utplsql/sqldev/resources/images/utPLSQL.png - - - Run utPLSQL test - /org/utplsql/sqldev/resources/images/utPLSQL.png - - diff --git a/sqldev/src/main/resources/org/utplsql/sqldev/actions/navigator_actions_de.xliff b/sqldev/src/main/resources/org/utplsql/sqldev/actions/navigator_actions_de.xliff deleted file mode 100644 index 398ebfdc..00000000 --- a/sqldev/src/main/resources/org/utplsql/sqldev/actions/navigator_actions_de.xliff +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - Run utPLSQL test - utPLSQL Test ausführen - - - Run utPLSQL test - utPLSQL Test ausführen - - - Run utPLSQL test - utPLSQL Test ausführen - - - Run utPLSQL test - utPLSQL Test ausführen - - - Run utPLSQL test - utPLSQL Test ausführen - - - Run utPLSQL test - utPLSQL Test ausführen - - - Run utPLSQL test - utPLSQL Test ausführen - - - Run utPLSQL test - utPLSQL Test ausführen - - - - diff --git a/sqldev/src/main/resources/org/utplsql/sqldev/resources/accelerators.xml b/sqldev/src/main/resources/org/utplsql/sqldev/resources/accelerators.xml index 92a870b6..97522ff5 100644 --- a/sqldev/src/main/resources/org/utplsql/sqldev/resources/accelerators.xml +++ b/sqldev/src/main/resources/org/utplsql/sqldev/resources/accelerators.xml @@ -1,11 +1,11 @@ - + alt shift T - + alt shift T