From 66db2f0aea0845c6b4d125c8fd2221bd3f7e44cc Mon Sep 17 00:00:00 2001 From: Adarsh Manickam Date: Thu, 22 Oct 2020 23:28:21 +0530 Subject: [PATCH 1/2] Changed validator for InjectAViewModelDialog --- resources/magento2/common.properties | 3 +- .../dialog/InjectAViewModelDialog.form | 2 +- .../dialog/InjectAViewModelDialog.java | 64 ++++--- .../InjectAViewModelDialogValidator.java | 170 ------------------ 4 files changed, 38 insertions(+), 201 deletions(-) delete mode 100644 src/com/magento/idea/magento2plugin/actions/generation/dialog/validator/InjectAViewModelDialogValidator.java diff --git a/resources/magento2/common.properties b/resources/magento2/common.properties index 785b0a831..1fa9b8e10 100644 --- a/resources/magento2/common.properties +++ b/resources/magento2/common.properties @@ -22,7 +22,8 @@ common.module.target=Target Module common.theme.target=Target Theme common.area.target=Target Area common.name=Name -common.className=Class Name +common.className=Class name +common.argument=Argument name common.directoryPath=Directory Path common.methodType=Method Type common.sortOrder=Sort Order diff --git a/src/com/magento/idea/magento2plugin/actions/generation/dialog/InjectAViewModelDialog.form b/src/com/magento/idea/magento2plugin/actions/generation/dialog/InjectAViewModelDialog.form index a8ef281db..3bdde5930 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/dialog/InjectAViewModelDialog.form +++ b/src/com/magento/idea/magento2plugin/actions/generation/dialog/InjectAViewModelDialog.form @@ -107,7 +107,7 @@ - + diff --git a/src/com/magento/idea/magento2plugin/actions/generation/dialog/InjectAViewModelDialog.java b/src/com/magento/idea/magento2plugin/actions/generation/dialog/InjectAViewModelDialog.java index a358f8ede..0202f73a6 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/dialog/InjectAViewModelDialog.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/dialog/InjectAViewModelDialog.java @@ -11,7 +11,12 @@ import com.intellij.ui.DocumentAdapter; import com.magento.idea.magento2plugin.actions.generation.InjectAViewModelAction; import com.magento.idea.magento2plugin.actions.generation.data.ViewModelFileData; -import com.magento.idea.magento2plugin.actions.generation.dialog.validator.InjectAViewModelDialogValidator; +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.DirectoryRule; +import com.magento.idea.magento2plugin.actions.generation.dialog.validator.rule.NotEmptyRule; +import com.magento.idea.magento2plugin.actions.generation.dialog.validator.rule.PhpClassRule; import com.magento.idea.magento2plugin.actions.generation.generator.ModuleViewModelClassGenerator; import com.magento.idea.magento2plugin.actions.generation.generator.code.ClassArgumentInXmlConfigGenerator; import com.magento.idea.magento2plugin.actions.generation.generator.util.NamespaceBuilder; @@ -21,7 +26,6 @@ import com.magento.idea.magento2plugin.util.FirstLetterToLowercaseUtil; import com.magento.idea.magento2plugin.util.magento.GetModuleNameByDirectoryUtil; 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; @@ -38,21 +42,37 @@ public class InjectAViewModelDialog extends AbstractDialog { @NotNull private final Project project; - @NotNull - private final InjectAViewModelDialogValidator validator; private final XmlTag targetBlockTag; private JPanel contentPane; private JButton buttonOK; private JButton buttonCancel; - private JTextField viewModelClassName; - private JTextField viewModelDirectory; private final CommonBundle commonBundle; private final ValidatorBundle validatorBundle; - private JTextField viewModelArgumentName; private JLabel inheritClassLabel;//NOPMD private JLabel viewModelDirectoryLabel;//NOPMD private JLabel viewModelClassNameLabel;//NOPMD private JLabel viewModelArgumentNameLabel;//NOPMD + private static final String CLASS_NAME = "class name"; + private static final String DIRECTORY = "directory"; + private static final String ARGUMENT_NAME = "argument name"; + + @FieldValidation(rule = RuleRegistry.NOT_EMPTY, + message = {NotEmptyRule.MESSAGE, CLASS_NAME}) + @FieldValidation(rule = RuleRegistry.PHP_CLASS, + message = {PhpClassRule.MESSAGE, CLASS_NAME}) + private JTextField viewModelClassName; + + @FieldValidation(rule = RuleRegistry.NOT_EMPTY, + message = {NotEmptyRule.MESSAGE, DIRECTORY}) + @FieldValidation(rule = RuleRegistry.DIRECTORY, + message = {DirectoryRule.MESSAGE, DIRECTORY}) + private JTextField viewModelDirectory; + + @FieldValidation(rule = RuleRegistry.NOT_EMPTY, + message = {NotEmptyRule.MESSAGE, ARGUMENT_NAME}) + @FieldValidation(rule = RuleRegistry.ALPHANUMERIC, + message = {AlphanumericRule.MESSAGE, ARGUMENT_NAME}) + private JTextField viewModelArgumentName; /** * Constructor. @@ -68,7 +88,6 @@ public InjectAViewModelDialog( this.project = project; this.targetBlockTag = targetBlockTag; - this.validator = new InjectAViewModelDialogValidator(this); this.validatorBundle = new ValidatorBundle(); this.commonBundle = new CommonBundle(); @@ -84,19 +103,8 @@ protected void textChanged(final @NotNull DocumentEvent event) { setModal(true); getRootPane().setDefaultButton(buttonOK); - 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() { @@ -106,13 +114,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 + ); } protected void updateArgumentText() { @@ -123,7 +129,7 @@ protected void updateArgumentText() { } protected void onOK() { - if (!validator.validate(project)) { + if (!validateFormFields()) { return; } final String moduleName = GetModuleNameByDirectoryUtil.execute( diff --git a/src/com/magento/idea/magento2plugin/actions/generation/dialog/validator/InjectAViewModelDialogValidator.java b/src/com/magento/idea/magento2plugin/actions/generation/dialog/validator/InjectAViewModelDialogValidator.java deleted file mode 100644 index eedc0bd70..000000000 --- a/src/com/magento/idea/magento2plugin/actions/generation/dialog/validator/InjectAViewModelDialogValidator.java +++ /dev/null @@ -1,170 +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.intellij.openapi.project.Project; -import com.jetbrains.php.refactoring.PhpNameUtil; -import com.magento.idea.magento2plugin.actions.generation.dialog.InjectAViewModelDialog; -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.NPathComplexity"}) -public class InjectAViewModelDialogValidator { - private final ValidatorBundle validatorBundle; - private final CommonBundle commonBundle; - private final InjectAViewModelDialog dialog; - - /** - * Get instance of a class. - * - * @param dialog Inject a View Model dialog - */ - public InjectAViewModelDialogValidator(final InjectAViewModelDialog dialog) { - validatorBundle = new ValidatorBundle(); - this.commonBundle = new CommonBundle(); - this.dialog = dialog; - } - - /** - * Validate whenever override class by viewModel dialog data is ready for generation. - * - * @param project Project - * - * @return boolean - */ - @SuppressWarnings({"PMD.CyclomaticComplexity", "PMD.ExcessiveMethodLength"}) - public boolean validate(final Project project) { - final String errorTitle = commonBundle.message("common.error"); - final String viewModelClassName = dialog.getViewModelClassName(); - - if (!PhpNameUtil.isValidClassName(viewModelClassName)) { - final String errorMessage = this.validatorBundle.message( - "validator.class.isNotValid", - "ViewModel Class Name" - ); - JOptionPane.showMessageDialog( - null, - errorMessage, - errorTitle, - JOptionPane.ERROR_MESSAGE - ); - - return false; - } - - if (viewModelClassName.length() == 0) { - final String errorMessage = validatorBundle.message( - "validator.notEmpty", - "ViewModel Class Name" - ); - JOptionPane.showMessageDialog( - null, - errorMessage, - errorTitle, - JOptionPane.ERROR_MESSAGE - ); - - return false; - } - - if (!viewModelClassName.matches(RegExUtil.ALPHANUMERIC)) { - final String errorMessage = validatorBundle.message( - "validator.alphaNumericCharacters", - "ViewModel Class" - ); - JOptionPane.showMessageDialog( - null, - errorMessage, - errorTitle, - JOptionPane.ERROR_MESSAGE - ); - - return false; - } - - if (!Character.isUpperCase(viewModelClassName.charAt(0)) - && !Character.isDigit(viewModelClassName.charAt(0)) - ) { - final String errorMessage = validatorBundle.message( - "validator.startWithNumberOrCapitalLetter", - "ViewModel Class" - ); - JOptionPane.showMessageDialog( - null, - errorMessage, - errorTitle, - JOptionPane.ERROR_MESSAGE - ); - - return false; - } - - final String viewModelDirectory = dialog.getViewModelDirectory(); - if (viewModelDirectory.length() == 0) { - final String errorMessage = validatorBundle.message( - "validator.notEmpty", - "ViewModel Directory" - ); - JOptionPane.showMessageDialog( - null, - errorMessage, - errorTitle, - JOptionPane.ERROR_MESSAGE - ); - - return false; - } - - if (!viewModelDirectory.matches(RegExUtil.DIRECTORY)) { - final String errorMessage = validatorBundle.message( - "validator.directory.isNotValid", - "ViewModel Directory" - ); - JOptionPane.showMessageDialog( - null, - errorMessage, - errorTitle, - JOptionPane.ERROR_MESSAGE - ); - return false; - } - - final String viewModelArgumentName = dialog.getViewModelArgumentName(); - if (viewModelArgumentName.length() == 0) { - final String errorMessage = validatorBundle.message( - "validator.notEmpty", - "ViewModel Argument Name" - ); - JOptionPane.showMessageDialog( - null, - errorMessage, - errorTitle, - JOptionPane.ERROR_MESSAGE - ); - - return false; - } - - if (!viewModelArgumentName.matches(RegExUtil.ALPHANUMERIC)) { - final String errorMessage = validatorBundle.message( - "validator.alphaNumericCharacters", - "ViewModel Argument Name" - ); - JOptionPane.showMessageDialog( - null, - errorMessage, - errorTitle, - JOptionPane.ERROR_MESSAGE - ); - - return false; - } - - return true; - } -} From 060bba851678ce86ea6dc333c8e4af78b523890c Mon Sep 17 00:00:00 2001 From: Adarsh Manickam Date: Fri, 23 Oct 2020 01:10:55 +0530 Subject: [PATCH 2/2] Fixed static test failures --- .../actions/generation/dialog/InjectAViewModelDialog.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/com/magento/idea/magento2plugin/actions/generation/dialog/InjectAViewModelDialog.java b/src/com/magento/idea/magento2plugin/actions/generation/dialog/InjectAViewModelDialog.java index 0202f73a6..69f7762aa 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/dialog/InjectAViewModelDialog.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/dialog/InjectAViewModelDialog.java @@ -39,6 +39,9 @@ import javax.swing.event.DocumentEvent; import org.jetbrains.annotations.NotNull; +@SuppressWarnings({ + "PMD.ExcessiveImports" +}) public class InjectAViewModelDialog extends AbstractDialog { @NotNull private final Project project;