Skip to content

Commit 6190239

Browse files
open PL/SQL editor for test package or test package body from tables
1 parent 61baad2 commit 6190239

File tree

1 file changed

+71
-5
lines changed

1 file changed

+71
-5
lines changed

sqldev/src/main/java/org/utplsql/sqldev/ui/runner/RunnerPanel.xtend

Lines changed: 71 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ import java.awt.GridBagLayout
2424
import java.awt.Insets
2525
import java.awt.event.ActionEvent
2626
import java.awt.event.ActionListener
27-
import java.awt.event.FocusEvent
28-
import java.awt.event.FocusListener
27+
import java.awt.event.MouseEvent
28+
import java.awt.event.MouseListener
2929
import java.text.DecimalFormat
3030
import java.util.ArrayList
3131
import javax.swing.Box
@@ -50,16 +50,20 @@ import javax.swing.event.ListSelectionEvent
5050
import javax.swing.event.ListSelectionListener
5151
import javax.swing.plaf.basic.BasicProgressBarUI
5252
import javax.swing.table.DefaultTableCellRenderer
53+
import oracle.dbtools.raptor.controls.grid.DefaultDrillLink
54+
import oracle.dbtools.raptor.utils.Connections
5355
import oracle.ide.config.Preferences
5456
import oracle.javatools.ui.table.ToolbarButton
57+
import org.utplsql.sqldev.dal.UtplsqlDao
5558
import org.utplsql.sqldev.model.LimitedLinkedHashMap
5659
import org.utplsql.sqldev.model.preference.PreferenceModel
5760
import org.utplsql.sqldev.model.runner.Run
61+
import org.utplsql.sqldev.parser.UtplsqlParser
5862
import org.utplsql.sqldev.resources.UtplsqlResources
5963
import org.utplsql.sqldev.runner.UtplsqlRunner
6064
import org.utplsql.sqldev.runner.UtplsqlWorksheetRunner
6165

62-
class RunnerPanel implements ActionListener {
66+
class RunnerPanel implements ActionListener, MouseListener {
6367
static val GREEN = new Color(0, 153, 0)
6468
static val RED = new Color(153, 0, 0)
6569
static val INDICATOR_WIDTH = 20
@@ -188,7 +192,38 @@ class RunnerPanel implements ActionListener {
188192
col.preferredWidth = 0
189193
}
190194
}
195+
196+
private def openSelectedTest() {
197+
val rowIndex = testOverviewTable.selectedRow
198+
if (rowIndex != -1) {
199+
val row = testOverviewTable.convertRowIndexToModel(rowIndex)
200+
val test = testOverviewTableModel.getTest(row)
201+
val dao = new UtplsqlDao(Connections.instance.getConnection(currentRun.connectionName))
202+
val source = dao.getSource(test.ownerName, "PACKAGE", test.objectName.toUpperCase).trim
203+
val parser = new UtplsqlParser(source)
204+
val line = parser.getLineOf(test.procedureName)
205+
openEditor(test.ownerName, "PACKAGE", test.objectName.toUpperCase, line, 1)
206+
}
207+
}
191208

209+
private def openSelectedFailure() {
210+
val rowIndex = failuresTable.selectedRow
211+
if (rowIndex != -1) {
212+
val row = failuresTable.convertRowIndexToModel(rowIndex)
213+
val expectation = failuresTableModel.getExpectation(row)
214+
val test = testOverviewTableModel.getTest(testOverviewTable.convertRowIndexToModel(testOverviewTable.selectedRow))
215+
openEditor(test.ownerName, "PACKAGE BODY", test.objectName.toUpperCase, expectation.callerLine, 1)
216+
}
217+
}
218+
219+
private def openEditor(String owner, String type, String name, int line, int col) {
220+
var drillLink = new DefaultDrillLink
221+
drillLink.connName = currentRun.connectionName
222+
// argument order is based on SQLDEV:LINK that can be used in SQL query result tables (editors, reports)
223+
drillLink.args = #[owner, type, name, String.valueOf(line), String.valueOf(col), "OpenEditor", "oracle.dbtools.raptor.controls.grid.DefaultDrillLink"]
224+
drillLink.performDrill
225+
}
226+
192227
private def syncDetailTab() {
193228
if (syncDetailTabCheckBoxMenuItem.selected) {
194229
val rowIndex = testOverviewTable.selectedRow
@@ -378,6 +413,35 @@ class RunnerPanel implements ActionListener {
378413
}
379414
}
380415

416+
override mouseClicked(MouseEvent e) {
417+
if (e.clickCount == 2) {
418+
if (e.source == testOverviewTable) {
419+
if (failuresTable.selectedRowCount == 1) {
420+
openSelectedFailure
421+
} else {
422+
openSelectedTest
423+
}
424+
425+
} else if (e.source == failuresTable) {
426+
if (failuresTable.selectedRowCount == 1) {
427+
openSelectedFailure
428+
}
429+
}
430+
}
431+
}
432+
433+
override mouseEntered(MouseEvent e) {
434+
}
435+
436+
override mouseExited(MouseEvent e) {
437+
}
438+
439+
override mousePressed(MouseEvent e) {
440+
}
441+
442+
override mouseReleased(MouseEvent e) {
443+
}
444+
381445
private static def formatDateTime(String dateTime) {
382446
if (dateTime === null) {
383447
return null
@@ -409,9 +473,9 @@ class RunnerPanel implements ActionListener {
409473
p.testIdTextArea.text = test.id
410474
p.testStartTextField.text = formatDateTime(test.startTime)
411475
p.failuresTableModel.model = test.failedExpectations
476+
p.failuresTableModel.fireTableDataChanged
412477
p.testFailureMessageTextArea.text = null
413478
if (test.failedExpectations !== null && test.failedExpectations.size > 0) {
414-
p.failuresTableModel.fireTableDataChanged
415479
p.failuresTable.setRowSelectionInterval(0, 0)
416480
}
417481
p.testErrorStackTextArea.text = test.errorStack?.trim
@@ -663,7 +727,8 @@ class RunnerPanel implements ActionListener {
663727
testOverviewTable.autoCreateRowSorter = true
664728
testOverviewTable.rowHeight = OVERVIEW_TABLE_ROW_HEIGHT
665729
testOverviewTable.tableHeader.preferredSize = new Dimension(testOverviewTable.tableHeader.getPreferredSize.width, OVERVIEW_TABLE_ROW_HEIGHT)
666-
testOverviewTable.selectionModel.addListSelectionListener(new TestOverviewRowListener(this))
730+
testOverviewTable.selectionModel.addListSelectionListener(new TestOverviewRowListener(this))
731+
testOverviewTable.addMouseListener(this)
667732
val testTableHeaderRenderer = new TestTableHeaderRenderer
668733
val overviewTableStatus = testOverviewTable.columnModel.getColumn(0)
669734
overviewTableStatus.minWidth = INDICATOR_WIDTH
@@ -883,6 +948,7 @@ class RunnerPanel implements ActionListener {
883948
failuresTable = new JTable(failuresTableModel)
884949
failuresTable.tableHeader.reorderingAllowed = false
885950
failuresTable.selectionModel.addListSelectionListener(new FailuresRowListener(this))
951+
failuresTable.addMouseListener(this)
886952
val failuresTableHeaderRenderer = new FailuresTableHeaderRenderer
887953
val failuresTableNumber = failuresTable.columnModel.getColumn(0)
888954
failuresTableNumber.headerRenderer = failuresTableHeaderRenderer

0 commit comments

Comments
 (0)