Skip to content

Generate utPLSQL test #27

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 15 commits into from
Oct 9, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
52 changes: 50 additions & 2 deletions sqldev/extension.xml
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@
<param name="element-class" value="oracle.dbtools.raptor.navigator.impl.ChildObjectElement" />
</parameters>
</rule>
<composite-rule id="dbnode-is-utplsql-ready">
<composite-rule id="dbnode-is-test-ready">
<or>
<rule-reference id="dbnode-is-db-connection" />
<rule-reference id="dbnode-is-otheruser" />
Expand All @@ -56,6 +56,36 @@
<rule-reference id="dbnode-is-member" />
</or>
</composite-rule>
<rule id="dbnode-is-type" type="dbnode-has-object-type">
<parameters>
<param name="ObjectType" value="TYPE" />
</parameters>
</rule>
<rule id="dbnode-is-type-body" type="dbnode-has-object-type">
<parameters>
<param name="ObjectType" value="TYPE BODY" />
</parameters>
</rule>
<rule id="dbnode-is-function" type="dbnode-has-object-type">
<parameters>
<param name="ObjectType" value="FUNCTION" />
</parameters>
</rule>
<rule id="dbnode-is-procedure" type="dbnode-has-object-type">
<parameters>
<param name="ObjectType" value="PROCEDURE" />
</parameters>
</rule>
<composite-rule id="dbnode-is-generate-ready">
<or>
<rule-reference id="dbnode-is-package" />
<rule-reference id="dbnode-is-package-body" />
<rule-reference id="dbnode-is-type" />
<rule-reference id="dbnode-is-type-body" />
<rule-reference id="dbnode-is-function" />
<rule-reference id="dbnode-is-procedure" />
</or>
</composite-rule>
</rules>
<triggers>
<actions xmlns="http://xmlns.oracle.com/jdeveloper/1013/extension">
Expand All @@ -66,12 +96,20 @@
<property name="Category">Code-Editor</property>
</properties>
</action>
<action id="utplsql.generate">
<properties>
<property name="Name">${MENU_GENERATE_TEST_LABEL}</property>
<property name="SmallIcon">res:/org/utplsql/sqldev/resources/images/oddgen.png</property>
<property name="Category">Code-Editor</property>
</properties>
</action>
</actions>
<controllers xmlns="http://xmlns.oracle.com/ide/extension">
<controller class="org.utplsql.sqldev.menu.UtplsqlController">
<update-rules>
<update-rule rule="always-enabled">
<action id="utplsql.test" />
<action id="utplsql.generate" />
</update-rule>
</update-rules>
</controller>
Expand All @@ -82,10 +120,11 @@
<section xmlns="http://jcp.org/jsr/198/extension-manifest"
id="UTPLSQL_MENU" weight="2.0">
<item action-ref="utplsql.test" weight="1.0" />
<item action-ref="utplsql.generate" weight="1.1" />
</section>
</menu>
</context-menu-hook>
<context-menu-hook rule="dbnode-is-utplsql-ready">
<context-menu-hook rule="dbnode-is-test-ready">
<site idref="db_nav" />
<menu>
<section xmlns="http://jcp.org/jsr/198/extension-manifest"
Expand All @@ -94,6 +133,15 @@
</section>
</menu>
</context-menu-hook>
<context-menu-hook rule="dbnode-is-generate-ready">
<site idref="db_nav" />
<menu>
<section xmlns="http://jcp.org/jsr/198/extension-manifest"
id="UTPLSQL_MENU" weight="2.0">
<item action-ref="utplsql.generate" weight="12.2" />
</section>
</menu>
</context-menu-hook>
<accelerator-hook>
<file>org/utplsql/sqldev/resources/accelerators.xml</file>
</accelerator-hook>
Expand Down
6 changes: 6 additions & 0 deletions sqldev/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,12 @@
<artifactId>spring-jdbc</artifactId>
<version>5.1.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.oddgen</groupId>
<artifactId>org.oddgen.sqldev</artifactId>
<version>0.3.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
Expand Down
56 changes: 56 additions & 0 deletions sqldev/src/main/java/org/utplsql/sqldev/DirectoryChooser.xtend
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
/*
* Copyright 2018 Philipp Salvisberg <philipp.salvisberg@trivadis.com>
*
* 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

import java.io.File
import java.util.logging.Logger
import javax.swing.JComboBox
import javax.swing.JFileChooser
import javax.swing.JFrame
import javax.swing.JTextField

class DirectoryChooser {
val static Logger logger = Logger.getLogger(DirectoryChooser.name)

def static choose (JFrame parentFrame, String title, String initialDirectory) {
logger.finest('''parantFrame: «parentFrame»''')
var String ret = null
val chooser = new JFileChooser()
chooser.currentDirectory = new File(initialDirectory)
chooser.dialogTitle = title
chooser.fileSelectionMode = JFileChooser.DIRECTORIES_ONLY
chooser.acceptAllFileFilterUsed = false
if (chooser.showOpenDialog(parentFrame) == JFileChooser.APPROVE_OPTION) {
ret = chooser.selectedFile.absolutePath
}
return ret
}

def static void choose (JFrame parentFrame, String title, JTextField textField) {
val dir = choose(parentFrame, title, textField.text)
if (dir !== null) {
textField.text = dir
}
}

def static void choose (JFrame parentFrame, String title, JComboBox<String> comboBox) {
val dir = choose(parentFrame, title, comboBox.editor.item as String);
if (dir !== null) {
comboBox.editor.item = dir
}
}

}
142 changes: 130 additions & 12 deletions sqldev/src/main/java/org/utplsql/sqldev/PreferencePanel.xtend
Original file line number Diff line number Diff line change
Expand Up @@ -15,44 +15,136 @@
*/
package org.utplsql.sqldev

import javax.swing.BorderFactory
import javax.swing.JCheckBox
import javax.swing.JPanel
import javax.swing.JSpinner
import javax.swing.JTextField
import javax.swing.SpinnerNumberModel
import oracle.ide.panels.DefaultTraversablePanel
import oracle.ide.panels.TraversableContext
import oracle.ide.panels.TraversalException
import oracle.javatools.ui.layout.FieldLayoutBuilder
import org.utplsql.sqldev.model.preference.PreferenceModel
import org.utplsql.sqldev.resources.UtplsqlResources
import javax.swing.JButton
import java.awt.event.ActionEvent
import java.awt.event.ActionListener

class PreferencePanel extends DefaultTraversablePanel {
val JPanel runTestPanel = new JPanel();
val JCheckBox unsharedWorksheetCheckBox = new JCheckBox
val JCheckBox resetPackageCheckBox = new JCheckBox
val JCheckBox clearScreenCheckBox = new JCheckBox
val JCheckBox autoExecuteCheckBox = new JCheckBox
val JCheckBox checkRunUtplsqlTestCheckBox = new JCheckBox
val JPanel generateTestPanel = new JPanel();
val JTextField testPackagePrefixTextField = new JTextField
val JTextField testPackageSuffixTextField = new JTextField
val JTextField testUnitPrefixTextField = new JTextField
val JTextField testUnitSuffixTextField = new JTextField
val SpinnerNumberModel numberOfTestsPerUnitModel = new SpinnerNumberModel(1, 1, 10, 1);
val JSpinner numberOfTestsPerUnitSpinner = new JSpinner(numberOfTestsPerUnitModel);
val JCheckBox checkGenerateUtplsqlTestCheckBox = new JCheckBox
val JCheckBox generateCommentsCheckBox = new JCheckBox
val JCheckBox disableTestsCheckBox = new JCheckBox
val JTextField suitePathTextField = new JTextField
val SpinnerNumberModel indentSpacesModel = new SpinnerNumberModel(1, 1, 8, 1);
val JSpinner indentSpacesSpinner = new JSpinner(indentSpacesModel);
val JPanel oddgenPanel = new JPanel();
val JTextField rootFolderInOddgenViewTextField = new JTextField
val JCheckBox generateFilesCheckBox = new JCheckBox
val JTextField outputDirectoryTextField = new JTextField
val JButton outputDirectoryBrowse = new JButton();

new() {
layoutControls()
}

def private layoutControls() {
val FieldLayoutBuilder builder = new FieldLayoutBuilder(this)
builder.alignLabelsLeft = true
builder.add(
builder.field.label.withText(UtplsqlResources.getString("PREF_UNSHARED_WORKSHEET_LABEL")).component(
// run test group
runTestPanel.border = BorderFactory.createTitledBorder(UtplsqlResources.getString("MENU_RUN_TEST_LABEL"))
val FieldLayoutBuilder b1 = new FieldLayoutBuilder(runTestPanel)
b1.alignLabelsLeft = true
b1.add(
b1.field.label.withText(UtplsqlResources.getString("PREF_UNSHARED_WORKSHEET_LABEL")).component(
unsharedWorksheetCheckBox))
builder.add(
builder.field.label.withText(UtplsqlResources.getString("PREF_RESET_PACKAGE_LABEL")).component(
b1.add(
b1.field.label.withText(UtplsqlResources.getString("PREF_RESET_PACKAGE_LABEL")).component(
resetPackageCheckBox))
builder.add(
builder.field.label.withText(UtplsqlResources.getString("PREF_CLEAR_SCREEN_LABEL")).component(
b1.add(
b1.field.label.withText(UtplsqlResources.getString("PREF_CLEAR_SCREEN_LABEL")).component(
clearScreenCheckBox))
builder.add(
builder.field.label.withText(UtplsqlResources.getString("PREF_AUTO_EXECUTE_LABEL")).component(
b1.add(
b1.field.label.withText(UtplsqlResources.getString("PREF_AUTO_EXECUTE_LABEL")).component(
autoExecuteCheckBox))
builder.add(
builder.field.label.withText(UtplsqlResources.getString("PREF_CHECK_RUN_UTPLSQL_TEST_LABEL")).component(
b1.add(
b1.field.label.withText(UtplsqlResources.getString("PREF_CHECK_RUN_UTPLSQL_TEST_LABEL")).component(
checkRunUtplsqlTestCheckBox))
// generate test group
generateTestPanel.border = BorderFactory.createTitledBorder(UtplsqlResources.getString("MENU_GENERATE_TEST_LABEL"))
val FieldLayoutBuilder b2 = new FieldLayoutBuilder(generateTestPanel)
b2.alignLabelsLeft = true
b2.add(
b2.field.label.withText(UtplsqlResources.getString("PREF_TEST_PACKAGE_PREFIX_LABEL")).component(
testPackagePrefixTextField))
b2.add(
b2.field.label.withText(UtplsqlResources.getString("PREF_TEST_PACKAGE_SUFFIX_LABEL")).component(
testPackageSuffixTextField))
b2.add(
b2.field.label.withText(UtplsqlResources.getString("PREF_TEST_UNIT_PREFIX_LABEL")).component(
testUnitPrefixTextField))
b2.add(
b2.field.label.withText(UtplsqlResources.getString("PREF_TEST_UNIT_SUFFIX_LABEL")).component(
testUnitSuffixTextField))
b2.add(
b2.field.label.withText(UtplsqlResources.getString("PREF_NUMBER_OF_TESTS_PER_UNIT_LABEL")).component(
numberOfTestsPerUnitSpinner))
b2.add(
b2.field.label.withText(UtplsqlResources.getString("PREF_GENERATE_COMMENTS_LABEL")).component(
generateCommentsCheckBox))
b2.add(
b2.field.label.withText(UtplsqlResources.getString("PREF_DISABLE_TESTS_LABEL")).component(
disableTestsCheckBox))
b2.add(
b2.field.label.withText(UtplsqlResources.getString("PREF_SUITE_PATH_LABEL")).component(
suitePathTextField))
b2.add(
b2.field.label.withText(UtplsqlResources.getString("PREF_INDENT_SPACES_LABEL")).component(
indentSpacesSpinner))
b2.add(
b2.field.label.withText(UtplsqlResources.getString("PREF_CHECK_GENERATE_UTPLSQL_TEST_LABEL")).component(
checkGenerateUtplsqlTestCheckBox))
// oddgen group
oddgenPanel.border = BorderFactory.createTitledBorder("oddgen")
val FieldLayoutBuilder b3 = new FieldLayoutBuilder(oddgenPanel)
b3.alignLabelsLeft = true
b3.stretchComponentsWithNoButton = true
b3.add(
b3.field.label.withText(UtplsqlResources.getString("PREF_ROOT_FOLDER_IN_ODDGEN_VIEW_LABEL")).component(
rootFolderInOddgenViewTextField))
b3.add(
b3.field.label.withText(UtplsqlResources.getString("PREF_GENERATE_FILES_LABEL")).component(
generateFilesCheckBox))
b3.add(
b3.field.label.withText(UtplsqlResources.getString("PREF_OUTPUT_DIRECTORY_LABEL")).component(
outputDirectoryTextField).button(outputDirectoryBrowse).withText("Bro&wse"))

// putting everything together
val FieldLayoutBuilder builder = new FieldLayoutBuilder(this)
builder.alignLabelsLeft = true
builder.addVerticalField("", runTestPanel)
builder.addVerticalField("", generateTestPanel)
builder.addVerticalField("", oddgenPanel)
builder.addVerticalSpring

// register action listener for directory chooser
outputDirectoryBrowse.addActionListener(new ActionListener() {
override actionPerformed(ActionEvent event) {
DirectoryChooser.choose(null, UtplsqlResources.getString("PREF_OUTPUT_DIRECTORY_LABEL"),
outputDirectoryTextField)
}
})
}

override onEntry(TraversableContext traversableContext) {
Expand All @@ -62,6 +154,19 @@ class PreferencePanel extends DefaultTraversablePanel {
clearScreenCheckBox.selected = info.clearScreen
autoExecuteCheckBox.selected = info.autoExecute
checkRunUtplsqlTestCheckBox.selected = info.checkRunUtplsqlTest
testPackagePrefixTextField.text = info.testPackagePrefix
testPackageSuffixTextField.text = info.testPackageSuffix
testUnitPrefixTextField.text = info.testUnitPrefix
testUnitSuffixTextField.text = info.testUnitSuffix
numberOfTestsPerUnitSpinner.value = info.numberOfTestsPerUnit
checkGenerateUtplsqlTestCheckBox.selected = info.checkGenerateUtplsqlTest
generateCommentsCheckBox.selected = info.generateComments
disableTestsCheckBox.selected = info.disableTests
suitePathTextField.text = info.suitePath
indentSpacesSpinner.value = info.indentSpaces
rootFolderInOddgenViewTextField.text = info.rootFolderInOddgenView
generateFilesCheckBox.selected = info.generateFiles
outputDirectoryTextField.text = info.outputDirectory
super.onEntry(traversableContext)
}

Expand All @@ -72,6 +177,19 @@ class PreferencePanel extends DefaultTraversablePanel {
info.clearScreen = clearScreenCheckBox.selected
info.autoExecute = autoExecuteCheckBox.selected
info.checkRunUtplsqlTest = checkRunUtplsqlTestCheckBox.selected
info.testPackagePrefix = testPackagePrefixTextField.text
info.testPackageSuffix = testPackageSuffixTextField.text
info.testUnitPrefix = testUnitPrefixTextField.text
info.testUnitSuffix = testUnitSuffixTextField.text
info.numberOfTestsPerUnit = numberOfTestsPerUnitSpinner.value as Integer
info.checkGenerateUtplsqlTest = checkGenerateUtplsqlTestCheckBox.selected
info.generateComments = generateCommentsCheckBox.selected
info.disableTests = disableTestsCheckBox.selected
info.suitePath = suitePathTextField.text
info.indentSpaces = indentSpacesSpinner.value as Integer
info.rootFolderInOddgenView = rootFolderInOddgenViewTextField.text
info.generateFiles = generateFilesCheckBox.selected
info.outputDirectory = outputDirectoryTextField.text
super.onExit(traversableContext)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -117,4 +117,12 @@ class UtplsqlWorksheet {
thread.start
}

def static void openWithCode(String code, String connectionName) {
val worksheet = OpenWorksheetWizard.openNewTempWorksheet(connectionName, code) as Worksheet
if (connectionName === null) {
worksheet.comboConnection = null
}
WorksheetUtil.setWorksheetTabName(worksheet.context.node.URL, UtplsqlResources.getString("WORKSHEET_TITLE"))
}

}
Loading