From f9ace77324cea07b6314ca7f5008d1b109311a5c Mon Sep 17 00:00:00 2001 From: Adarsh Manickam Date: Tue, 20 Oct 2020 22:08:11 +0530 Subject: [PATCH 1/4] Changed class validator to annotation validator --- .../generation/dialog/NewModuleDialog.java | 33 +++++-------------- 1 file changed, 8 insertions(+), 25 deletions(-) diff --git a/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewModuleDialog.java b/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewModuleDialog.java index e79809c7b..658791d61 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewModuleDialog.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewModuleDialog.java @@ -12,7 +12,6 @@ import com.magento.idea.magento2plugin.actions.generation.data.ModuleComposerJsonData; import com.magento.idea.magento2plugin.actions.generation.data.ModuleRegistrationPhpData; import com.magento.idea.magento2plugin.actions.generation.data.ModuleXmlData; -import com.magento.idea.magento2plugin.actions.generation.dialog.validator.NewModuleDialogValidator; import com.magento.idea.magento2plugin.actions.generation.generator.ModuleComposerJsonGenerator; import com.magento.idea.magento2plugin.actions.generation.generator.ModuleRegistrationPhpGenerator; import com.magento.idea.magento2plugin.actions.generation.generator.ModuleXmlGenerator; @@ -24,7 +23,6 @@ import com.magento.idea.magento2plugin.util.CamelCaseToHyphen; import com.magento.idea.magento2plugin.util.magento.MagentoVersionUtil; import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; @@ -50,7 +48,6 @@ public class NewModuleDialog extends AbstractDialog implements ListSelectionList private final Project project; @NotNull private final PsiDirectory initialBaseDir; - private final NewModuleDialogValidator validator; private final CamelCaseToHyphen camelCaseToHyphen; private JPanel contentPane; private JButton buttonOK; @@ -90,7 +87,6 @@ public NewModuleDialog( this.project = project; this.initialBaseDir = initialBaseDir; this.camelCaseToHyphen = CamelCaseToHyphen.getInstance(); - this.validator = NewModuleDialogValidator.getInstance(this); this.moduleIndex = ModuleIndex.getInstance(project); detectPackageName(initialBaseDir); setContentPane(contentPane); @@ -102,19 +98,8 @@ public NewModuleDialog( moduleLicenseCustom.setToolTipText("Custom License Name"); moduleLicenseCustom.setText(Settings.getDefaultLicenseName(project)); - buttonOK.addActionListener(new ActionListener() { - @Override - public void actionPerformed(final ActionEvent event) { - onOK(); - } - }); - - buttonCancel.addActionListener(new ActionListener() { - @Override - public void actionPerformed(final ActionEvent event) { - onCancel(); - } - }); + buttonOK.addActionListener((final ActionEvent event) -> onOK()); + buttonCancel.addActionListener((final ActionEvent event) -> onCancel()); setDefaultCloseOperation(DO_NOTHING_ON_CLOSE); addWindowListener(new WindowAdapter() { @@ -124,13 +109,11 @@ public void windowClosing(final WindowEvent event) { } }); - contentPane.registerKeyboardAction(new ActionListener() { - @Override - public void actionPerformed(final ActionEvent event) { - onCancel(); - } - }, KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), - JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT); + contentPane.registerKeyboardAction( + (final ActionEvent event) -> onCancel(), + KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), + JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT + ); } private void detectPackageName(final @NotNull PsiDirectory initialBaseDir) { @@ -143,7 +126,7 @@ private void detectPackageName(final @NotNull PsiDirectory initialBaseDir) { } protected void onOK() { - if (!validator.validate()) { + if (!validateFormFields) { return; } generateFiles(); From c731712adb0b692678811d2536f666d7140cb391 Mon Sep 17 00:00:00 2001 From: Adarsh Manickam Date: Tue, 20 Oct 2020 22:40:12 +0530 Subject: [PATCH 2/4] Added field validator annotations --- .../generation/dialog/NewModuleDialog.java | 65 +++++++++++++++---- 1 file changed, 51 insertions(+), 14 deletions(-) diff --git a/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewModuleDialog.java b/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewModuleDialog.java index 658791d61..a76cd1a0c 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewModuleDialog.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewModuleDialog.java @@ -12,6 +12,11 @@ import com.magento.idea.magento2plugin.actions.generation.data.ModuleComposerJsonData; import com.magento.idea.magento2plugin.actions.generation.data.ModuleRegistrationPhpData; import com.magento.idea.magento2plugin.actions.generation.data.ModuleXmlData; +import com.magento.idea.magento2plugin.actions.generation.dialog.validator.annotation.FieldValidation; +import com.magento.idea.magento2plugin.actions.generation.dialog.validator.annotation.RuleRegistry; +import com.magento.idea.magento2plugin.actions.generation.dialog.validator.rule.AlphanumericRule; +import com.magento.idea.magento2plugin.actions.generation.dialog.validator.rule.NotEmptyRule; +import com.magento.idea.magento2plugin.actions.generation.dialog.validator.rule.StartWithNumberOrCapitalLetterRule; import com.magento.idea.magento2plugin.actions.generation.generator.ModuleComposerJsonGenerator; import com.magento.idea.magento2plugin.actions.generation.generator.ModuleRegistrationPhpGenerator; import com.magento.idea.magento2plugin.actions.generation.generator.ModuleXmlGenerator; @@ -44,32 +49,64 @@ @SuppressWarnings({"PMD.TooManyFields", "PMD.DataClass", "PMD.UnusedPrivateMethod"}) public class NewModuleDialog extends AbstractDialog implements ListSelectionListener { //NOPMD - @NotNull - private final Project project; - @NotNull - private final PsiDirectory initialBaseDir; - private final CamelCaseToHyphen camelCaseToHyphen; - private JPanel contentPane; - private JButton buttonOK; - private JButton buttonCancel; + private static final String MODULE_DESCRIPTION = "module description"; + private static final String MODULE_VERSION = "module version"; + private static final String MODULE_NAME = "module name"; + private static final String PACKAGE_NAME = "package name"; + + @FieldValidation(rule = RuleRegistry.ALPHANUMERIC, + message = {AlphanumericRule.MESSAGE, MODULE_NAME}) + @FieldValidation(rule = RuleRegistry.START_WITH_NUMBER_OR_CAPITAL_LETTER, + message = {StartWithNumberOrCapitalLetterRule.MESSAGE, PACKAGE_NAME}) + @FieldValidation(rule = RuleRegistry.NOT_EMPTY, + message = {NotEmptyRule.MESSAGE, PACKAGE_NAME}) private JTextField packageName; - private JLabel packageNameLabel; + + + /* TODO: module name !== package name */ + @FieldValidation(rule = RuleRegistry.ALPHANUMERIC, + message = {AlphanumericRule.MESSAGE, MODULE_NAME}) + @FieldValidation(rule = RuleRegistry.NOT_EMPTY, + message = {NotEmptyRule.MESSAGE, MODULE_NAME}) + @FieldValidation(rule = RuleRegistry.START_WITH_NUMBER_OR_CAPITAL_LETTER, + message = {StartWithNumberOrCapitalLetterRule.MESSAGE, MODULE_NAME}) private JTextField moduleName; + + @FieldValidation(rule = RuleRegistry.NOT_EMPTY, + message = {NotEmptyRule.MESSAGE, MODULE_DESCRIPTION}) private JTextArea moduleDescription; - private final ModuleIndex moduleIndex; + + @FieldValidation(rule = RuleRegistry.NOT_EMPTY, + message = {NotEmptyRule.MESSAGE, MODULE_VERSION}) private JTextField moduleVersion; - private String detectedPackageName; + + private JTextField moduleLicenseCustom; + private JList moduleDependencies; private JList moduleLicense; - private JTextField moduleLicenseCustom; - private JLabel moduleLicenseLabel;//NOPMD + private JScrollPane moduleLicenseScrollPanel;//NOPMD + private JScrollPane moduleDependenciesScrollPanel;//NOPMD + + private JLabel moduleLicenseLabel;//NOPMD private JLabel moduleVersionLabel;//NOPMD private JLabel moduleDependenciesLabel;//NOPMD - private JScrollPane moduleDependenciesScrollPanel;//NOPMD private JLabel moduleDescriptionLabel;//NOPMD private JLabel moduleNameLabel;//NOPMD + private JLabel packageNameLabel; + private JPanel contentPane; + + private JButton buttonOK; + private JButton buttonCancel; + + @NotNull + private final Project project; + @NotNull + private final PsiDirectory initialBaseDir; + private String detectedPackageName; + private final ModuleIndex moduleIndex; + private final CamelCaseToHyphen camelCaseToHyphen; private static final String MAGENTO_BEFORE_DECLARATIVE_SCHEMA_VERSION = "2.2.11"; /** From 88d008d7e7a33cd0c011448f67980c89af99f25b Mon Sep 17 00:00:00 2001 From: Adarsh Manickam Date: Tue, 20 Oct 2020 23:05:16 +0530 Subject: [PATCH 3/4] Cleaned up files --- .../generation/dialog/NewModuleDialog.java | 15 +- .../validator/NewModuleDialogValidator.java | 204 ------------------ 2 files changed, 7 insertions(+), 212 deletions(-) delete mode 100644 src/com/magento/idea/magento2plugin/actions/generation/dialog/validator/NewModuleDialogValidator.java diff --git a/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewModuleDialog.java b/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewModuleDialog.java index a76cd1a0c..767f774a2 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewModuleDialog.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewModuleDialog.java @@ -54,22 +54,21 @@ public class NewModuleDialog extends AbstractDialog implements ListSelectionList private static final String MODULE_NAME = "module name"; private static final String PACKAGE_NAME = "package name"; - @FieldValidation(rule = RuleRegistry.ALPHANUMERIC, - message = {AlphanumericRule.MESSAGE, MODULE_NAME}) - @FieldValidation(rule = RuleRegistry.START_WITH_NUMBER_OR_CAPITAL_LETTER, - message = {StartWithNumberOrCapitalLetterRule.MESSAGE, PACKAGE_NAME}) @FieldValidation(rule = RuleRegistry.NOT_EMPTY, message = {NotEmptyRule.MESSAGE, PACKAGE_NAME}) + @FieldValidation(rule = RuleRegistry.START_WITH_NUMBER_OR_CAPITAL_LETTER, + message = {StartWithNumberOrCapitalLetterRule.MESSAGE, PACKAGE_NAME}) + @FieldValidation(rule = RuleRegistry.ALPHANUMERIC, + message = {AlphanumericRule.MESSAGE, PACKAGE_NAME}) private JTextField packageName; - /* TODO: module name !== package name */ - @FieldValidation(rule = RuleRegistry.ALPHANUMERIC, - message = {AlphanumericRule.MESSAGE, MODULE_NAME}) @FieldValidation(rule = RuleRegistry.NOT_EMPTY, message = {NotEmptyRule.MESSAGE, MODULE_NAME}) @FieldValidation(rule = RuleRegistry.START_WITH_NUMBER_OR_CAPITAL_LETTER, message = {StartWithNumberOrCapitalLetterRule.MESSAGE, MODULE_NAME}) + @FieldValidation(rule = RuleRegistry.ALPHANUMERIC, + message = {AlphanumericRule.MESSAGE, MODULE_NAME}) private JTextField moduleName; @FieldValidation(rule = RuleRegistry.NOT_EMPTY, @@ -163,7 +162,7 @@ private void detectPackageName(final @NotNull PsiDirectory initialBaseDir) { } protected void onOK() { - if (!validateFormFields) { + if (!validateFormFields()) { return; } generateFiles(); diff --git a/src/com/magento/idea/magento2plugin/actions/generation/dialog/validator/NewModuleDialogValidator.java b/src/com/magento/idea/magento2plugin/actions/generation/dialog/validator/NewModuleDialogValidator.java deleted file mode 100644 index 723fd3aae..000000000 --- a/src/com/magento/idea/magento2plugin/actions/generation/dialog/validator/NewModuleDialogValidator.java +++ /dev/null @@ -1,204 +0,0 @@ -/* - * Copyright © Magento, Inc. All rights reserved. - * See COPYING.txt for license details. - */ - -package com.magento.idea.magento2plugin.actions.generation.dialog.validator; - -import com.magento.idea.magento2plugin.actions.generation.dialog.NewModuleDialog; -import com.magento.idea.magento2plugin.bundles.CommonBundle; -import com.magento.idea.magento2plugin.bundles.ValidatorBundle; -import com.magento.idea.magento2plugin.util.RegExUtil; -import javax.swing.JOptionPane; - -@SuppressWarnings({ - "PMD.OnlyOneReturn", - "PMD.FieldNamingConventions", - "PMD.DataflowAnomalyAnalysis", - "PMD.NonThreadSafeSingleton", - "PMD.CyclomaticComplexity", - "PMD.ExcessiveMethodLength", - "PMD.NPathComplexity" -}) -public class NewModuleDialogValidator { - private static final String NOT_EMPTY = "validator.notEmpty"; - private static final String MODULE_NAME = "Module Name"; - private static NewModuleDialogValidator INSTANCE; - private final ValidatorBundle validatorBundle; - private final CommonBundle commonBundle; - private NewModuleDialog dialog; - - /** - * Get instance of a class. - * - * @param dialog New module dialog - * - * @return NewModuleDialogValidator - */ - public static NewModuleDialogValidator getInstance(final NewModuleDialog dialog) { - if (null == INSTANCE) { - INSTANCE = new NewModuleDialogValidator(); - } - INSTANCE.dialog = dialog; - return INSTANCE; - } - - /** - * New module dialog validator constructor. - */ - public NewModuleDialogValidator() { - this.validatorBundle = new ValidatorBundle(); - this.commonBundle = new CommonBundle(); - } - - /** - * Validate whenever new module dialog data is ready for generation. - * - * @return Boolean - */ - public boolean validate() { - final String errorTitle = commonBundle.message("common.error"); - final String packageName = dialog.getPackageName(); - if (packageName.length() == 0) { - final String errorMessage = validatorBundle.message( - NOT_EMPTY, - "Package Name" - ); - JOptionPane.showMessageDialog( - null, - errorMessage, - errorTitle, - JOptionPane.ERROR_MESSAGE - ); - - return false; - } - - if (!packageName.matches(RegExUtil.ALPHANUMERIC)) { - final String errorMessage = validatorBundle.message( - "validator.alphaNumericCharacters", - "Package Name" - ); - JOptionPane.showMessageDialog( - null, - errorMessage, - errorTitle, - JOptionPane.ERROR_MESSAGE - ); - - return false; - } - - if (!Character.isUpperCase(packageName.charAt(0)) - && !Character.isDigit(packageName.charAt(0)) - ) { - final String errorMessage = validatorBundle.message( - "validator.startWithNumberOrCapitalLetter", - "Package Name" - ); - JOptionPane.showMessageDialog( - null, - errorMessage, - errorTitle, - JOptionPane.ERROR_MESSAGE - ); - - return false; - } - - final String moduleName = dialog.getModuleName(); - if (moduleName.length() == 0) { - final String errorMessage = validatorBundle.message( - NOT_EMPTY, - MODULE_NAME - ); - JOptionPane.showMessageDialog( - null, - errorMessage, - errorTitle, - JOptionPane.ERROR_MESSAGE - ); - - return false; - } - - if (!moduleName.matches(RegExUtil.ALPHANUMERIC)) { - final String errorMessage = validatorBundle.message( - "validator.alphaNumericCharacters", - MODULE_NAME - ); - JOptionPane.showMessageDialog( - null, - errorMessage, - errorTitle, - JOptionPane.ERROR_MESSAGE - ); - - return false; - } - - if (moduleName.equals(packageName)) { - final String errorMessage = validatorBundle.message( - "validator.moduleNameIsTheSameAsPackage", - MODULE_NAME - ); - JOptionPane.showMessageDialog( - null, - errorMessage, - errorTitle, - JOptionPane.ERROR_MESSAGE - ); - - return false; - } - - if (!Character.isUpperCase(moduleName.charAt(0)) - && !Character.isDigit(moduleName.charAt(0)) - ) { - final String errorMessage = validatorBundle.message( - "validator.startWithNumberOrCapitalLetter", - MODULE_NAME - ); - JOptionPane.showMessageDialog( - null, - errorMessage, - errorTitle, - JOptionPane.ERROR_MESSAGE - ); - - return false; - } - - if (dialog.getModuleVersion().length() == 0) { - final String errorMessage = validatorBundle.message( - NOT_EMPTY, - "Module Version" - ); - JOptionPane.showMessageDialog( - null, - errorMessage, - errorTitle, - JOptionPane.ERROR_MESSAGE - ); - - return false; - } - - if (dialog.getModuleDescription().length() == 0) { - final String errorMessage = validatorBundle.message( - NOT_EMPTY, - "Module Description" - ); - JOptionPane.showMessageDialog( - null, - errorMessage, - errorTitle, - JOptionPane.ERROR_MESSAGE - ); - - return false; - } - - return true; - } -} From 74cfa0b3e0cf3052f0039a64830c52b89fd94399 Mon Sep 17 00:00:00 2001 From: Adarsh Manickam Date: Thu, 22 Oct 2020 23:04:30 +0530 Subject: [PATCH 4/4] Fixed hidden vendor field validation bug --- .../actions/generation/dialog/NewModuleDialog.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewModuleDialog.java b/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewModuleDialog.java index 767f774a2..9920cedfc 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewModuleDialog.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewModuleDialog.java @@ -158,6 +158,7 @@ private void detectPackageName(final @NotNull PsiDirectory initialBaseDir) { packageName.setVisible(false); packageNameLabel.setVisible(false); this.detectedPackageName = initialBaseDir.getName(); + packageName.setText(this.detectedPackageName); } }