Skip to content

Commit 457c79b

Browse files
Merge pull request #36 from PhilippSalvisberg/develop
#35 - Create code templates in preference dialog
2 parents 9c74b27 + 8001ab5 commit 457c79b

File tree

4 files changed

+128
-7
lines changed

4 files changed

+128
-7
lines changed

sqldev/pom.xml

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
<!-- The Basics -->
66
<groupId>org.utplsql</groupId>
77
<artifactId>org.utplsql.sqldev</artifactId>
8-
<version>0.4.1-SNAPSHOT</version>
8+
<version>0.5.0-SNAPSHOT</version>
99
<packaging>bundle</packaging>
1010
<properties>
1111
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@@ -95,6 +95,13 @@
9595
<scope>system</scope>
9696
<systemPath>${sqldev.basedir}/sqldeveloper/extensions/oracle.sqldeveloper.jar</systemPath>
9797
</dependency>
98+
<dependency>
99+
<groupId>oracle</groupId>
100+
<artifactId>oracle.sqldeveloper.utils</artifactId>
101+
<version>12.2.0</version>
102+
<scope>system</scope>
103+
<systemPath>${sqldev.basedir}/sqldeveloper/extensions/oracle.sqldeveloper.utils.jar</systemPath>
104+
</dependency>
98105
<dependency>
99106
<groupId>oracle</groupId>
100107
<artifactId>oracle.sqldeveloper.worksheet</artifactId>
@@ -417,6 +424,7 @@
417424
oracle.ide,
418425
oracle.ide.db,
419426
oracle.sqldeveloper,
427+
oracle.sqldeveloper.utils,
420428
oracle.sqldeveloper.worksheet,
421429
oracle.uic
422430
</Require-Bundle>

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

Lines changed: 115 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,21 +15,24 @@
1515
*/
1616
package org.utplsql.sqldev
1717

18+
import java.awt.event.ActionEvent
19+
import java.awt.event.ActionListener
20+
import java.util.Map
1821
import javax.swing.BorderFactory
22+
import javax.swing.JButton
1923
import javax.swing.JCheckBox
2024
import javax.swing.JPanel
2125
import javax.swing.JSpinner
2226
import javax.swing.JTextField
2327
import javax.swing.SpinnerNumberModel
28+
import javax.swing.table.DefaultTableModel
29+
import oracle.dbtools.raptor.templates.CodeTemplateUtil
2430
import oracle.ide.panels.DefaultTraversablePanel
2531
import oracle.ide.panels.TraversableContext
2632
import oracle.ide.panels.TraversalException
2733
import oracle.javatools.ui.layout.FieldLayoutBuilder
2834
import org.utplsql.sqldev.model.preference.PreferenceModel
2935
import org.utplsql.sqldev.resources.UtplsqlResources
30-
import javax.swing.JButton
31-
import java.awt.event.ActionEvent
32-
import java.awt.event.ActionListener
3336

3437
class PreferencePanel extends DefaultTraversablePanel {
3538
val JPanel runTestPanel = new JPanel();
@@ -46,6 +49,8 @@ class PreferencePanel extends DefaultTraversablePanel {
4649
val SpinnerNumberModel numberOfTestsPerUnitModel = new SpinnerNumberModel(1, 1, 10, 1);
4750
val JSpinner numberOfTestsPerUnitSpinner = new JSpinner(numberOfTestsPerUnitModel);
4851
val JCheckBox checkGenerateUtplsqlTestCheckBox = new JCheckBox
52+
val DefaultTableModel codeTemplatesModel = new DefaultTableModel(#["Id", "Template"], 0);
53+
val JButton createCodeTemplatesButton = new JButton()
4954
val JCheckBox generateCommentsCheckBox = new JCheckBox
5055
val JCheckBox disableTestsCheckBox = new JCheckBox
5156
val JTextField suitePathTextField = new JTextField
@@ -55,7 +60,7 @@ class PreferencePanel extends DefaultTraversablePanel {
5560
val JTextField rootFolderInOddgenViewTextField = new JTextField
5661
val JCheckBox generateFilesCheckBox = new JCheckBox
5762
val JTextField outputDirectoryTextField = new JTextField
58-
val JButton outputDirectoryBrowse = new JButton();
63+
val JButton outputDirectoryBrowse = new JButton()
5964
val JCheckBox deleteExistingFilesCheckBox = new JCheckBox
6065

6166
new() {
@@ -86,6 +91,7 @@ class PreferencePanel extends DefaultTraversablePanel {
8691
generateTestPanel.border = BorderFactory.createTitledBorder(UtplsqlResources.getString("MENU_GENERATE_TEST_LABEL"))
8792
val FieldLayoutBuilder b2 = new FieldLayoutBuilder(generateTestPanel)
8893
b2.alignLabelsLeft = true
94+
b2.stretchComponentsWithNoButton = true
8995
b2.add(
9096
b2.field.label.withText(UtplsqlResources.getString("PREF_TEST_PACKAGE_PREFIX_LABEL")).component(
9197
testPackagePrefixTextField))
@@ -115,7 +121,8 @@ class PreferencePanel extends DefaultTraversablePanel {
115121
indentSpacesSpinner))
116122
b2.add(
117123
b2.field.label.withText(UtplsqlResources.getString("PREF_CHECK_GENERATE_UTPLSQL_TEST_LABEL")).component(
118-
checkGenerateUtplsqlTestCheckBox))
124+
checkGenerateUtplsqlTestCheckBox).button(createCodeTemplatesButton).withText(
125+
UtplsqlResources.getString("PREF_CREATE_CODE_TEMPLATES_BUTTON_LABEL")))
119126
// oddgen group
120127
oddgenPanel.border = BorderFactory.createTitledBorder("oddgen")
121128
val FieldLayoutBuilder b3 = new FieldLayoutBuilder(oddgenPanel)
@@ -129,7 +136,8 @@ class PreferencePanel extends DefaultTraversablePanel {
129136
generateFilesCheckBox))
130137
b3.add(
131138
b3.field.label.withText(UtplsqlResources.getString("PREF_OUTPUT_DIRECTORY_LABEL")).component(
132-
outputDirectoryTextField).button(outputDirectoryBrowse).withText("Bro&wse"))
139+
outputDirectoryTextField).button(outputDirectoryBrowse).withText(
140+
UtplsqlResources.getString("PREF_OUTPUT_DIRECTORY_BUTTON_LABEL")))
133141
b3.add(
134142
b3.field.label.withText(UtplsqlResources.getString("PREF_DELETE_EXISTING_FILES_LABEL")).component(
135143
deleteExistingFilesCheckBox))
@@ -142,6 +150,14 @@ class PreferencePanel extends DefaultTraversablePanel {
142150
builder.addVerticalField("", oddgenPanel)
143151
builder.addVerticalSpring
144152

153+
// register action listener for create code template button
154+
createCodeTemplatesButton.addActionListener(new ActionListener() {
155+
override actionPerformed(ActionEvent event) {
156+
saveCodeTemplates
157+
}
158+
159+
})
160+
145161
// register action listener for directory chooser
146162
outputDirectoryBrowse.addActionListener(new ActionListener() {
147163
override actionPerformed(ActionEvent event) {
@@ -150,6 +166,98 @@ class PreferencePanel extends DefaultTraversablePanel {
150166
}
151167
})
152168
}
169+
170+
private def loadCodeTemplates() {
171+
val Map<String, String> map = CodeTemplateUtil.loadFiles()
172+
for (key : map.keySet) {
173+
codeTemplatesModel.addRow(#[key, map.get(key)])
174+
}
175+
}
176+
177+
private def saveCodeTemplates() {
178+
codeTemplatesModel.addRow(#["ut_spec", utSpecTemplate.replaceTabsWithSpaces])
179+
codeTemplatesModel.addRow(#["ut_spec_proc", utSpecProcTemplate.replaceTabsWithSpaces.trimPlusNewLine])
180+
codeTemplatesModel.addRow(#["ut_body", utBodyTemplate.replaceTabsWithSpaces])
181+
codeTemplatesModel.addRow(#["ut_body_proc", utBodyProcTemplate.replaceTabsWithSpaces.trimPlusNewLine])
182+
CodeTemplateUtil.save(codeTemplatesModel)
183+
}
184+
185+
private def replaceTabsWithSpaces(CharSequence input) {
186+
val spaces = String.format("%1$"+indentSpacesSpinner.value+"s", "")
187+
return input.toString.replace("\t", spaces)
188+
}
189+
190+
private def trimPlusNewLine(String input) {
191+
input.trim + System.lineSeparator
192+
}
193+
194+
private def utSpecTemplate() '''
195+
CREATE OR REPLACE PACKAGE «testPackagePrefixTextField.text»[package_name]«testPackageSuffixTextField.text» IS
196+
197+
--%suite
198+
«IF !suitePathTextField.text.empty»
199+
--%suitepathsuitePathTextField.text»)
200+
«ENDIF»
201+
202+
«utSpecProcTemplate»
203+
END «testPackagePrefixTextField.text»[package_name]«testPackageSuffixTextField.text»;
204+
/
205+
'''
206+
207+
private def utSpecProcTemplate() '''
208+
«val withContext = numberOfTestsPerUnitModel.value as Integer > 1»
209+
«IF withContext»
210+
--%context([procedure_name])
211+
212+
«ENDIF»
213+
«FOR i : 1 .. numberOfTestsPerUnitModel.value as Integer»
214+
--%test
215+
«IF disableTestsCheckBox.selected»
216+
--%disabled
217+
«ENDIF»
218+
PROCEDURE «testUnitPrefixTextField.text»[procedure_name]«testUnitSuffixTextField.text»«IF withContext»«i»«ENDIF»;
219+
220+
«ENDFOR»
221+
«IF withContext»
222+
--%endcontext
223+
224+
«ENDIF»
225+
'''
226+
227+
private def utBodyTemplate() '''
228+
CREATE OR REPLACE PACKAGE BODY «testPackagePrefixTextField.text»[package_name]«testPackageSuffixTextField.text» IS
229+
230+
«utBodyProcTemplate»
231+
END «testPackagePrefixTextField.text»[package_name]«testPackageSuffixTextField.text»;
232+
/
233+
'''
234+
235+
private def utBodyProcTemplate() '''
236+
«val withContext = numberOfTestsPerUnitModel.value as Integer > 1»
237+
«FOR i : 1 .. numberOfTestsPerUnitModel.value as Integer»
238+
«IF generateCommentsCheckBox.selected»
239+
--
240+
-- test«IF withContext» [procedure_name] case «i»: ...«ENDIF»
241+
--
242+
«ENDIF»
243+
PROCEDURE «testUnitPrefixTextField.text»[procedure_name]«testUnitSuffixTextField.text»«IF withContext»«i»«ENDIF» IS
244+
l_actual INTEGER := 0;
245+
l_expected INTEGER := 1;
246+
BEGIN
247+
«IF generateCommentsCheckBox.selected»
248+
-- populate actual
249+
-- ...
250+
251+
-- populate expected
252+
-- ...
253+
254+
-- assert
255+
«ENDIF»
256+
ut.expect(l_actual).to_equal(l_expected);
257+
END «testUnitPrefixTextField.text»[procedure_name]«testUnitSuffixTextField.text»«IF withContext»«i»«ENDIF»;
258+
259+
«ENDFOR»
260+
'''
153261
154262
override onEntry(TraversableContext traversableContext) {
155263
var PreferenceModel info = traversableContext.userInformation
@@ -164,6 +272,7 @@ class PreferencePanel extends DefaultTraversablePanel {
164272
testUnitSuffixTextField.text = info.testUnitSuffix
165273
numberOfTestsPerUnitSpinner.value = info.numberOfTestsPerUnit
166274
checkGenerateUtplsqlTestCheckBox.selected = info.checkGenerateUtplsqlTest
275+
loadCodeTemplates
167276
generateCommentsCheckBox.selected = info.generateComments
168277
disableTestsCheckBox.selected = info.disableTests
169278
suitePathTextField.text = info.suitePath

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,11 @@ PREF_DISABLE_TESTS_LABEL=Disable tests?
2323
PREF_SUITE_PATH_LABEL=Suite path
2424
PREF_INDENT_SPACES_LABEL=Indent spaces
2525
PREF_CHECK_GENERATE_UTPLSQL_TEST_LABEL=Check availability of "Generate utPLSQL test" menu option?
26+
PREF_CREATE_CODE_TEMPLATES_BUTTON_LABEL=Create code templates
2627
PREF_ROOT_FOLDER_IN_ODDGEN_VIEW_LABEL=Root folder in Generators view
2728
PREF_GENERATE_FILES_LABEL=Generate files?
2829
PREF_OUTPUT_DIRECTORY_LABEL=Output directory
30+
PREF_OUTPUT_DIRECTORY_BUTTON_LABEL=Browse
2931
PREF_DELETE_EXISTING_FILES_LABEL=Delete existing files in output directory?
3032
MENU_RUN_TEST_LABEL=Run utPLSQL test
3133
MENU_GENERATE_TEST_LABEL=Generate utPLSQL test

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,11 @@ PREF_DISABLE_TESTS_LABEL=Tests deaktivieren?
1717
PREF_SUITE_PATH_LABEL=Suite Path
1818
PREF_INDENT_SPACES_LABEL=Einrückungsleerzeichen
1919
PREF_CHECK_GENERATE_UTPLSQL_TEST_LABEL=Verfügbarkeit der Menüoption "utPLSQL Test generieren" prüfen?
20+
PREF_CREATE_CODE_TEMPLATES_BUTTON_LABEL=Codevorlagen erstellen
2021
PREF_ROOT_FOLDER_IN_ODDGEN_VIEW_LABEL=Hauptverzeichnis in Generatoren Ansicht
2122
PREF_GENERATE_FILES_LABEL=Dateien generieren?
2223
PREF_OUTPUT_DIRECTORY_LABEL=Ausgabeverzeichnis
24+
PREF_OUTPUT_DIRECTORY_BUTTON_LABEL=Auswählen
2325
PREF_DELETE_EXISTING_FILES_LABEL=Bestehende Dateien im Ausgabeverzeichnis löschen?
2426
MENU_RUN_TEST_LABEL=utPLSQL Test ausführen
2527
MENU_GENERATE_TEST_LABEL=utPLSQL Test generieren

0 commit comments

Comments
 (0)