@@ -16,27 +16,38 @@ package org.utplsql.sqldev.editor.menu
1616
1717import java.util.logging.Logger
1818import javax.swing.JEditorPane
19+ import oracle.dbtools.raptor.navigator.impl.DatabaseSourceNode
20+ import oracle.dbtools.raptor.utils.Connections
21+ import oracle.dbtools.worksheet.editor.OpenWorksheetWizard
22+ import oracle.dbtools.worksheet.editor.Worksheet
1923import oracle.ide.Context
2024import oracle.ide.Ide
25+ import oracle.ide.config.Preferences
2126import oracle.ide.controller.Controller
2227import oracle.ide.controller.IdeAction
2328import oracle.ide.editor.Editor
2429import oracle.ide.^extension.RegisteredByExtension
30+ import oracle.ide.model.Node
31+ import org.utplsql.sqldev.model.preference.PreferenceModel
2532import org.utplsql.sqldev.parser.UtplsqlParser
33+ import org.utplsql.sqldev.resources.UtplsqlResources
2634
2735@RegisteredByExtension (" org.utplsql.sqldev" )
2836class UtplsqlEditorController implements Controller {
2937 public static int UTLPLSQL_EDITOR_TEST_CMD_ID = Ide . findCmdID(" utplsql.editor.test" )
3038 private static final Logger logger = Logger . getLogger(UtplsqlEditorController . name);
31-
39+
3240 override handleEvent (IdeAction action , Context context ) {
3341 if (action. commandId == = UTLPLSQL_EDITOR_TEST_CMD_ID ) {
34- runTest(context)
42+ val Runnable runnable = [|runTest(context)]
43+ val thread = new Thread (runnable)
44+ thread. name = " utPLSQL run test"
45+ thread. start
3546 return true
3647 }
3748 return false
3849 }
39-
50+
4051 override update (IdeAction action , Context context ) {
4152 if (action. commandId == = UTLPLSQL_EDITOR_TEST_CMD_ID ) {
4253 action. enabled = false
@@ -54,20 +65,50 @@ class UtplsqlEditorController implements Controller {
5465 }
5566 return false
5667 }
57-
68+
5869 def runTest (Context context ) {
5970 logger. fine(" Start utPLSQL test from editor." )
71+ logger. fine(' ' ' context.view is of type «context.view.class.name».' ' ' )
72+ logger. fine(' ' ' context.node is of type «context.node.class.name».' ' ' )
6073 val view = context. view
6174 if (view instanceof Editor ) {
6275 val component = view. defaultFocusComponent
6376 if (component instanceof JEditorPane ) {
6477 val parser = new UtplsqlParser (component. text)
6578 val position = component. caretPosition
66- // TODO: open new worksheet and call utPLSQL
79+ var String connectionName = null ;
80+ val Node node = context. node
81+ if (node instanceof DatabaseSourceNode ) {
82+ connectionName = node. connectionName
83+ } else if (view instanceof Worksheet ) {
84+ connectionName = view. connectionName
85+ }
86+ val preferences = PreferenceModel . getInstance(Preferences . getPreferences());
87+ if (connectionName !== null && preferences. unsharedWorksheet) {
88+ connectionName = Connections . instance. createPrivateConnection(connectionName)
89+ }
90+ val code = ' ' '
91+ SET SERVEROUTPUT ON SIZE 1000000
92+ «IF preferences.resetPackage»
93+ BEGIN
94+ dbms_session.reset_package;
95+ END;
96+ /
97+ «ENDIF»
98+ BEGIN
99+ ut.run(' «parser. getPathAt(position)»' );
100+ END;
101+ /
102+ ' ' '
103+ val worksheet = OpenWorksheetWizard . openNewTempWorksheet(connectionName, code) as Worksheet
104+ if (connectionName == = null ) {
105+ worksheet. comboConnection = null
106+ }
107+ // TODO make update Title work
108+ worksheet. updateTitle(UtplsqlResources . getString(" WORKSHEET_TITLE" ))
109+ // TODO exeucte code in worksheet when preferences.autoExecute
67110 logger. fine(' ' ' Cursor is at «position». Calling «parser.getPathAt(position)»' ' ' )
68111 }
69112 }
70- logger. fine (" utPLSQL test started successfully." )
71113 }
72-
73114}
0 commit comments