Skip to content

Commit c6e8965

Browse files
Fixes #17 - Add preference to check for availability of "Run utPLSQL test"
More precisely this will reduce the number of costly SQL queries on the UI thread. This affects also the parser which will get no connection and therefore may return procedures which are not utPLSQL tests.
1 parent 953e265 commit c6e8965

File tree

6 files changed

+41
-13
lines changed

6 files changed

+41
-13
lines changed

sqldev/src/main/java/org/utplsql/sqldev/PreferencePanel.xtend

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ class PreferencePanel extends DefaultTraversablePanel {
2828
val JCheckBox resetPackageCheckBox = new JCheckBox
2929
val JCheckBox clearScreenCheckBox = new JCheckBox
3030
val JCheckBox autoExecuteCheckBox = new JCheckBox
31+
val JCheckBox checkRunUtplsqlTestCheckBox = new JCheckBox
3132

3233
new() {
3334
layoutControls()
@@ -48,6 +49,9 @@ class PreferencePanel extends DefaultTraversablePanel {
4849
builder.add(
4950
builder.field.label.withText(UtplsqlResources.getString("PREF_AUTO_EXECUTE_LABEL")).component(
5051
autoExecuteCheckBox))
52+
builder.add(
53+
builder.field.label.withText(UtplsqlResources.getString("PREF_CHECK_RUN_UTPLSQL_TEST_LABEL")).component(
54+
checkRunUtplsqlTestCheckBox))
5155
builder.addVerticalSpring
5256
}
5357

@@ -57,6 +61,7 @@ class PreferencePanel extends DefaultTraversablePanel {
5761
resetPackageCheckBox.selected = info.resetPackage
5862
clearScreenCheckBox.selected = info.clearScreen
5963
autoExecuteCheckBox.selected = info.autoExecute
64+
checkRunUtplsqlTestCheckBox.selected = info.checkRunUtplsqlTest
6065
super.onEntry(traversableContext)
6166
}
6267

@@ -66,6 +71,7 @@ class PreferencePanel extends DefaultTraversablePanel {
6671
info.resetPackage = resetPackageCheckBox.selected
6772
info.clearScreen = clearScreenCheckBox.selected
6873
info.autoExecute = autoExecuteCheckBox.selected
74+
info.checkRunUtplsqlTest = checkRunUtplsqlTestCheckBox.selected
6975
super.onExit(traversableContext)
7076
}
7177

sqldev/src/main/java/org/utplsql/sqldev/menu/UtplsqlController.xtend

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,14 @@ import oracle.dbtools.raptor.utils.Connections
2727
import oracle.dbtools.worksheet.editor.Worksheet
2828
import oracle.ide.Context
2929
import oracle.ide.Ide
30+
import oracle.ide.config.Preferences
3031
import oracle.ide.controller.Controller
3132
import oracle.ide.controller.IdeAction
3233
import oracle.ide.editor.Editor
3334
import org.utplsql.sqldev.UtplsqlWorksheet
3435
import org.utplsql.sqldev.dal.UtplsqlDao
3536
import org.utplsql.sqldev.model.URLTools
37+
import org.utplsql.sqldev.model.preference.PreferenceModel
3638
import org.utplsql.sqldev.parser.UtplsqlParser
3739

3840
class UtplsqlController implements Controller {
@@ -52,21 +54,26 @@ class UtplsqlController implements Controller {
5254

5355
override update(IdeAction action, Context context) {
5456
if (action.commandId === UTLPLSQL_TEST_CMD_ID) {
57+
val preferences = PreferenceModel.getInstance(Preferences.preferences)
5558
action.enabled = false
5659
val view = context.view
5760
if (view instanceof Editor) {
5861
val component = view.defaultFocusComponent
5962
if (component instanceof JEditorPane) {
60-
val node = context.node
61-
var String connectionName = null;
62-
if (node instanceof DatabaseSourceNode) {
63-
connectionName = node.connectionName
64-
} else if (view instanceof Worksheet) {
65-
connectionName = view.connectionName
66-
}
67-
logger.fine('''connectionName: «connectionName»''')
68-
val parser = new UtplsqlParser(component.text, Connections.instance.getConnection(connectionName))
69-
if (!parser.getPathAt(component.caretPosition).empty) {
63+
if (preferences.checkRunUtplsqlTest) {
64+
val node = context.node
65+
var String connectionName = null;
66+
if (node instanceof DatabaseSourceNode) {
67+
connectionName = node.connectionName
68+
} else if (view instanceof Worksheet) {
69+
connectionName = view.connectionName
70+
}
71+
logger.fine('''connectionName: «connectionName»''')
72+
val parser = new UtplsqlParser(component.text, Connections.instance.getConnection(connectionName))
73+
if (!parser.getPathAt(component.caretPosition).empty) {
74+
action.enabled = true
75+
}
76+
} else {
7077
action.enabled = true
7178
}
7279
}
@@ -75,7 +82,7 @@ class UtplsqlController implements Controller {
7582
val element = context.selection.get(0)
7683
if (Connections.instance.isConnectionOpen(context.URL.connectionName)) {
7784
val dao = new UtplsqlDao(Connections.instance.getConnection(context.URL.connectionName))
78-
if (dao.utAnnotationManagerInstalled) {
85+
if (preferences.checkRunUtplsqlTest && dao.utAnnotationManagerInstalled) {
7986
if (element instanceof DatabaseConnection) {
8087
action.enabled = dao.containsUtplsqlTest(element.connection.schema)
8188
} else if (element instanceof ObjectFolder) {
@@ -133,7 +140,7 @@ class UtplsqlController implements Controller {
133140
def runTest(Context context) {
134141
val view = context.view
135142
val node = context.node
136-
logger.finer('''Run utPLSQL from view «view?.class?.name» and node «node?.class?.name».''')
143+
logger.finer('''Run utPLSQL from view «view?.class?.name» and node «node?.class?.name».''')
137144
if (view instanceof Editor) {
138145
val component = view.defaultFocusComponent
139146
if (component instanceof JEditorPane) {
@@ -144,7 +151,8 @@ class UtplsqlController implements Controller {
144151
connectionName = view.connectionName
145152
}
146153
logger.fine('''connectionName: «connectionName»''')
147-
val parser = new UtplsqlParser(component.text, Connections.instance.getConnection(connectionName))
154+
val preferences = PreferenceModel.getInstance(Preferences.preferences)
155+
val parser = new UtplsqlParser(component.text, if (preferences.checkRunUtplsqlTest) {Connections.instance.getConnection(connectionName)} else {null})
148156
val position = component.caretPosition
149157
val path = parser.getPathAt(position)
150158
val utPlsqlWorksheet = new UtplsqlWorksheet(path, connectionName)

sqldev/src/main/java/org/utplsql/sqldev/model/preference/PreferenceModel.xtend

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ class PreferenceModel extends HashStructureAdapter {
3535
static final String KEY_RESET_PACKAGE = "resetPackage"
3636
static final String KEY_CLEAR_SCREEN = "clearScreen"
3737
static final String KEY_AUTO_EXECUTE = "autoExecute"
38+
static final String KEY_CHECK_RUN_UTPLSQL_TEST = "checkRunUtplsqlTest"
3839

3940
def isUnsharedWorksheet() {
4041
return getHashStructure.getBoolean(PreferenceModel.KEY_UNSHARED_WORKSHEET, true)
@@ -68,6 +69,16 @@ class PreferenceModel extends HashStructureAdapter {
6869
getHashStructure.putBoolean(PreferenceModel.KEY_AUTO_EXECUTE, autoExecute)
6970
}
7071

72+
def isCheckRunUtplsqlTest() {
73+
return getHashStructure.getBoolean(PreferenceModel.KEY_CHECK_RUN_UTPLSQL_TEST, false)
74+
}
75+
76+
def setCheckRunUtplsqlTest(boolean autoExecute) {
77+
getHashStructure.putBoolean(PreferenceModel.KEY_CHECK_RUN_UTPLSQL_TEST, autoExecute)
78+
}
79+
80+
81+
7182
override toString() {
7283
new ToStringBuilder(this).addAllFields.toString
7384
}

sqldev/src/main/resources/org/utplsql/sqldev/resources/UtplsqlResources.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,6 @@ PREF_UNSHARED_WORKSHEET_LABEL=Open an unshared worksheet?
1212
PREF_RESET_PACKAGE_LABEL=Reset package before running utPLSQL?
1313
PREF_CLEAR_SCREEN_LABEL=Clear script output panel before running utPLSQL?
1414
PREF_AUTO_EXECUTE_LABEL=Execute unit test automatically?
15+
PREF_CHECK_RUN_UTPLSQL_TEST_LABEL=Check availability of "Run utPLSQL test" menu option?
1516
MENU_RUN_TEST_LABEL=Run utPLSQL test
1617
WORKSHEET_TITLE=utPLSQL

sqldev/src/main/resources/org/utplsql/sqldev/resources/UtplsqlResources_de.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,6 @@ PREF_UNSHARED_WORKSHEET_LABEL=Arbeitsblatt mit eigener Verbindung
66
PREF_RESET_PACKAGE_LABEL=Package vor der Ausführung von utPLSQL zurücksetzen?
77
PREF_CLEAR_SCREEN_LABEL=Skriptausgabe-Fenster vor der Ausführung von utPLSQL leeren?
88
PREF_AUTO_EXECUTE_LABEL=Unit Test automatisch ausführen?
9+
PREF_CHECK_RUN_UTPLSQL_TEST_LABEL=Verfügbarkeit der Menüoption "utPLSQL Test ausführen" prüfen?
910
MENU_RUN_TEST_LABEL=utPLSQL Test ausführen
1011
WORKSHEET_TITLE=utPLSQL

sqldev/src/test/java/org/utplsql/sqldev/tests/PreferenceModelTest.xtend

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,5 +28,6 @@ class PreferenceModelTest {
2828
Assert.assertFalse(model.resetPackage)
2929
Assert.assertFalse(model.clearScreen)
3030
Assert.assertTrue(model.autoExecute)
31+
Assert.assertFalse(model.checkRunUtplsqlTest)
3132
}
3233
}

0 commit comments

Comments
 (0)