Skip to content

Commit 01d4d0d

Browse files
initialize db_nav context menu in trigger-hooks
to ensure exension is fully loaded when context menu is created
1 parent 3e518c6 commit 01d4d0d

File tree

2 files changed

+35
-37
lines changed

2 files changed

+35
-37
lines changed

sqldev/extension.xml

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,13 @@
1414
</feature>
1515

1616
<trigger-hooks xmlns="http://xmlns.oracle.com/ide/extension">
17+
<rules>
18+
<rule-type class="org.utplsql.sqldev.menu.UtplsqlNavigatorRule"
19+
id="utplsql-navigator-rule">
20+
<supported-parameters />
21+
</rule-type>
22+
<rule id="dbnode-is-utplsql-ready" type="utplsql-navigator-rule" />
23+
</rules>
1724
<triggers>
1825
<actions xmlns="http://xmlns.oracle.com/jdeveloper/1013/extension">
1926
<action id="utplsql.test">
@@ -28,7 +35,7 @@
2835
<controller class="org.utplsql.sqldev.menu.UtplsqlController">
2936
<update-rules>
3037
<update-rule rule="always-enabled">
31-
<action id="utplsql.test"/>
38+
<action id="utplsql.test" />
3239
</update-rule>
3340
</update-rules>
3441
</controller>
@@ -38,7 +45,16 @@
3845
<menu>
3946
<section xmlns="http://jcp.org/jsr/198/extension-manifest"
4047
id="UTPLSQL_MENU" weight="2.0">
41-
<item action-ref="utplsql.test" weight="1.0"/>
48+
<item action-ref="utplsql.test" weight="1.0" />
49+
</section>
50+
</menu>
51+
</context-menu-hook>
52+
<context-menu-hook rule="dbnode-is-utplsql-ready">
53+
<site idref="db_nav" />
54+
<menu>
55+
<section xmlns="http://jcp.org/jsr/198/extension-manifest"
56+
id="UTPLSQL_MENU" weight="2.0">
57+
<item action-ref="utplsql.test" weight="12.1" />
4258
</section>
4359
</menu>
4460
</context-menu-hook>
@@ -54,13 +70,4 @@
5470
</settings-ui-hook>
5571
</triggers>
5672
</trigger-hooks>
57-
<hooks xmlns:c="http://xmlns.oracle.com/ide/customization">
58-
<jdeveloper-hook xmlns="http://xmlns.oracle.com/jdeveloper/1013/extension">
59-
<context-menu-listeners>
60-
<site idref="db_nav">
61-
<listener-class>org.utplsql.sqldev.menu.UtplsqlContextMenuListener</listener-class>
62-
</site>
63-
</context-menu-listeners>
64-
</jdeveloper-hook>
65-
</hooks>
6673
</extension>

sqldev/src/main/java/org/utplsql/sqldev/menu/UtplsqlContextMenuListener.xtend renamed to sqldev/src/main/java/org/utplsql/sqldev/menu/UtplsqlNavigatorRule.xtend

Lines changed: 17 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -14,51 +14,42 @@
1414
*/
1515
package org.utplsql.sqldev.menu
1616

17+
import java.util.Map
1718
import java.util.logging.Logger
1819
import oracle.dbtools.raptor.navigator.db.DatabaseConnection
1920
import oracle.dbtools.raptor.navigator.impl.ChildObjectElement
2021
import oracle.dbtools.raptor.navigator.impl.ObjectFolder
2122
import oracle.dbtools.raptor.navigator.plsql.PlSqlNode
22-
import oracle.ide.Context
23-
import oracle.ide.controller.ContextMenu
24-
import oracle.ide.controller.ContextMenuListener
23+
import oracle.ide.^extension.rules.RuleEvaluationContext
24+
import oracle.ide.^extension.rules.RuleEvaluationException
25+
import oracle.ide.^extension.rules.RuleFunction
26+
import oracle.ide.^extension.rules.RuleFunctionParameter
2527
import org.utplsql.sqldev.model.URLTools
2628

27-
class UtplsqlContextMenuListener implements ContextMenuListener {
28-
private static final Logger logger = Logger.getLogger(UtplsqlContextMenuListener.name);
29+
class UtplsqlNavigatorRule extends RuleFunction {
30+
private static final Logger logger = Logger.getLogger(UtplsqlNavigatorRule.name);
2931
private val extension URLTools urlTools = new URLTools
3032

31-
32-
override handleDefaultAction(Context context) {
33-
return false
34-
}
35-
36-
override menuWillHide(ContextMenu contextMenu) {
37-
}
38-
39-
override menuWillShow(ContextMenu contextMenu) {
40-
val element = contextMenu.context.selection.get(0)
41-
var boolean showMenu = false
33+
override evaluate(RuleEvaluationContext ruleContext,
34+
Map<String, RuleFunctionParameter> parameters) throws RuleEvaluationException {
35+
val element = ruleContext.ideContext.selection.get(0)
36+
var boolean enable = false
4237
logger.fine('''selected object is of type «element.class.name»''')
4338
if (element instanceof DatabaseConnection) {
44-
showMenu = true
39+
enable = true
4540
} else if (element instanceof ObjectFolder) {
4641
if (element.objectType == "PACKAGE") {
47-
showMenu = true
42+
enable = true
4843
}
4944
} else if (element instanceof PlSqlNode) {
5045
if (element.objectType == "PACKAGE" || element.objectType == "PACKAGE BODY") {
51-
showMenu = true
46+
enable = true
5247
}
5348
} else if (element instanceof ChildObjectElement) {
5449
if (element.URL.objectType == "PACKAGE") {
55-
showMenu = true
50+
enable = true
5651
}
5752
}
58-
if (showMenu) {
59-
val menuItem = contextMenu.createMenuItem(UtplsqlController.UTLPLSQL_TEST_ACTION, 1.0f)
60-
contextMenu.add(menuItem, 12.1f)
61-
logger.finer("context menu created.")
62-
}
53+
return enable
6354
}
64-
}
55+
}

0 commit comments

Comments
 (0)