From c399bd54bc9d9b05e0314086f226251b08ac1895 Mon Sep 17 00:00:00 2001 From: "andrii.zinkevych" Date: Wed, 14 Sep 2022 14:17:25 +0300 Subject: [PATCH 1/8] 1139: Creating a new data patch template --- resources/META-INF/plugin.xml | 1 + .../Magento Module Setup Patch File.php.ft | 68 ++++++ .../Magento Module Setup Patch File.php.html | 38 +++ .../context/php/NewSetupDataPatchAction.java | 68 ++++++ .../generation/ModuleSetupDataPatchData.java | 52 +++++ .../NewSetupDataPatchDialog.form | 94 ++++++++ .../NewSetupDataPatchDialog.java | 221 ++++++++++++++++++ .../ModuleSetupDataPatchGenerator.java | 66 ++++++ .../files/ModuleSetupDataPatchFile.java | 38 +++ .../TestClassPatch.php | 68 ++++++ .../ModuleSetupDataPatchGeneratorTest.java | 39 ++++ 11 files changed, 753 insertions(+) create mode 100644 resources/fileTemplates/internal/Magento Module Setup Patch File.php.ft create mode 100644 resources/fileTemplates/internal/Magento Module Setup Patch File.php.html create mode 100644 src/com/magento/idea/magento2plugin/actions/context/php/NewSetupDataPatchAction.java create mode 100644 src/com/magento/idea/magento2plugin/actions/generation/ModuleSetupDataPatchData.java create mode 100644 src/com/magento/idea/magento2plugin/actions/generation/dialog/NewSetupDataPatch/NewSetupDataPatchDialog.form create mode 100644 src/com/magento/idea/magento2plugin/actions/generation/dialog/NewSetupDataPatch/NewSetupDataPatchDialog.java create mode 100644 src/com/magento/idea/magento2plugin/actions/generation/generator/ModuleSetupDataPatchGenerator.java create mode 100644 src/com/magento/idea/magento2plugin/magento/files/ModuleSetupDataPatchFile.java create mode 100644 testData/actions/generation/generator/ModuleSetupDataPatchGenerator/generateModuleSetupDataPatchFile/TestClassPatch.php create mode 100644 tests/com/magento/idea/magento2plugin/actions/generation/generator/ModuleSetupDataPatchGeneratorTest.java diff --git a/resources/META-INF/plugin.xml b/resources/META-INF/plugin.xml index 36b295aec..66699fcab 100644 --- a/resources/META-INF/plugin.xml +++ b/resources/META-INF/plugin.xml @@ -78,6 +78,7 @@ + diff --git a/resources/fileTemplates/internal/Magento Module Setup Patch File.php.ft b/resources/fileTemplates/internal/Magento Module Setup Patch File.php.ft new file mode 100644 index 000000000..8e89dc470 --- /dev/null +++ b/resources/fileTemplates/internal/Magento Module Setup Patch File.php.ft @@ -0,0 +1,68 @@ +moduleDataSetup = $moduleDataSetup; + } + + /** + * Do Upgrade + * + * @return void + */ + public function apply() + { + $this->moduleDataSetup->getConnection()->startSetup(); + + // TODO: The code that you want apply in the patch + + $this->moduleDataSetup->getConnection()->endSetup(); + } + + /** + * Get aliases (previous names) for the patch. + * + * @return string[] + */ + public function getAliases() + { + return []; + } + + /** + * Get array of patches that have to be executed prior to this. + * + * Example of implementation: + * + * [ + * \Vendor_Name\Module_Name\Setup\Patch\Patch1::class, + * \Vendor_Name\Module_Name\Setup\Patch\Patch2::class + * ] + * + * @return string[] + */ + public static function getDependencies() + { + return []; + } +} diff --git a/resources/fileTemplates/internal/Magento Module Setup Patch File.php.html b/resources/fileTemplates/internal/Magento Module Setup Patch File.php.html new file mode 100644 index 000000000..f1be39dee --- /dev/null +++ b/resources/fileTemplates/internal/Magento Module Setup Patch File.php.html @@ -0,0 +1,38 @@ + + + + + + + + + + +
+ A data patch is a class that contains data modification instructions. +
+
+ Read more About the data and schema patches in the + + DevDocs. +
+
+ + + + + + + + + +
Predefined variables explanation:
${CLASS_NAME} Specifies the name of your class + +
+ + diff --git a/src/com/magento/idea/magento2plugin/actions/context/php/NewSetupDataPatchAction.java b/src/com/magento/idea/magento2plugin/actions/context/php/NewSetupDataPatchAction.java new file mode 100644 index 000000000..dfceb2c45 --- /dev/null +++ b/src/com/magento/idea/magento2plugin/actions/context/php/NewSetupDataPatchAction.java @@ -0,0 +1,68 @@ +/* + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +package com.magento.idea.magento2plugin.actions.context.php; + +import com.intellij.openapi.actionSystem.AnActionEvent; +import com.intellij.psi.PsiDirectory; +import com.intellij.psi.PsiFile; +import com.magento.idea.magento2plugin.actions.context.CustomGeneratorContextAction; +import com.magento.idea.magento2plugin.actions.generation.dialog.NewSetupDataPatch.NewSetupDataPatchDialog; +import com.magento.idea.magento2plugin.magento.packages.ComponentType; +import com.magento.idea.magento2plugin.magento.packages.Package; +import com.magento.idea.magento2plugin.util.magento.GetMagentoModuleUtil; +import org.jetbrains.annotations.NotNull; + +public class NewSetupDataPatchAction extends CustomGeneratorContextAction { + + public static final String ACTION_NAME = "Magento 2 Setup Data Patch"; + public static final String ACTION_DESCRIPTION = "Create a new Magento 2 Setup Data Patch"; + public static final String ROOT_DIRECTORY = "Setup"; + public static final String PATCH_DIRECTORY = "Patch"; + public static final String DATA_DIRECTORY = "Data"; + + public NewSetupDataPatchAction() { + super(ACTION_NAME, ACTION_DESCRIPTION); + } + + @Override + public void actionPerformed(final @NotNull AnActionEvent event) { + final GetMagentoModuleUtil.MagentoModuleData moduleData = getModuleData(); + + if (event.getProject() == null || moduleData == null || getDirectory() == null) { + return; + } + final String[] templateData = moduleData.getName().split(Package.vendorModuleNameSeparator); + + if (templateData.length != 2) { //NOPMD + return; + } + + NewSetupDataPatchDialog.open( + event.getProject(), + getDirectory(), + templateData[0], + templateData[1] + ); + } + + @Override + protected boolean isVisible( + final @NotNull GetMagentoModuleUtil.MagentoModuleData moduleData, + final PsiDirectory targetDirectory, + final PsiFile targetFile + ) { + if (!moduleData.getType().equals(ComponentType.module)) { + return false; + } + final PsiDirectory parentDirFirst = targetDirectory.getParentDirectory(); + final PsiDirectory parentDirSecond = parentDirFirst != null ? + parentDirFirst.getParentDirectory() : null; + + return targetDirectory.getName().equals(ROOT_DIRECTORY) || + (parentDirFirst != null && parentDirFirst.getName().equals(ROOT_DIRECTORY)) || + (parentDirSecond != null && parentDirSecond.getName().equals(ROOT_DIRECTORY)); + } +} diff --git a/src/com/magento/idea/magento2plugin/actions/generation/ModuleSetupDataPatchData.java b/src/com/magento/idea/magento2plugin/actions/generation/ModuleSetupDataPatchData.java new file mode 100644 index 000000000..e24874cca --- /dev/null +++ b/src/com/magento/idea/magento2plugin/actions/generation/ModuleSetupDataPatchData.java @@ -0,0 +1,52 @@ +/* + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +package com.magento.idea.magento2plugin.actions.generation; + +import com.intellij.psi.PsiDirectory; +import org.jetbrains.annotations.NotNull; + +public class ModuleSetupDataPatchData { + + private final String packageName; + private final String moduleName; + private final PsiDirectory baseDir; + private final String className; + + /** + * Constructor. + * + * @param packageName String + * @param moduleName String + * @param baseDir PsiDirectory + */ + public ModuleSetupDataPatchData( + final @NotNull String packageName, + final @NotNull String moduleName, + final @NotNull PsiDirectory baseDir, + final @NotNull String className + ) { + this.packageName = packageName; + this.moduleName = moduleName; + this.baseDir = baseDir; + this.className = className; + } + + public @NotNull String getPackageName() { + return packageName; + } + + public @NotNull String getModuleName() { + return moduleName; + } + + public @NotNull PsiDirectory getBaseDir() { + return baseDir; + } + + public @NotNull String getClassName() { + return className; + } +} diff --git a/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewSetupDataPatch/NewSetupDataPatchDialog.form b/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewSetupDataPatch/NewSetupDataPatchDialog.form new file mode 100644 index 000000000..92a2254c3 --- /dev/null +++ b/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewSetupDataPatch/NewSetupDataPatchDialog.form @@ -0,0 +1,94 @@ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewSetupDataPatch/NewSetupDataPatchDialog.java b/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewSetupDataPatch/NewSetupDataPatchDialog.java new file mode 100644 index 000000000..a50044b72 --- /dev/null +++ b/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewSetupDataPatch/NewSetupDataPatchDialog.java @@ -0,0 +1,221 @@ +/* + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +package com.magento.idea.magento2plugin.actions.generation.dialog.NewSetupDataPatch; + +import com.intellij.openapi.project.Project; +import com.intellij.psi.PsiDirectory; +import com.intellij.psi.PsiFile; +import com.magento.idea.magento2plugin.actions.context.php.NewSetupDataPatchAction; +import com.magento.idea.magento2plugin.actions.generation.ModuleSetupDataPatchData; +import com.magento.idea.magento2plugin.actions.generation.dialog.AbstractDialog; +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.NotEmptyRule; +import com.magento.idea.magento2plugin.actions.generation.dialog.validator.rule.PhpClassRule; +import com.magento.idea.magento2plugin.actions.generation.generator.ModuleSetupDataPatchGenerator; +import com.magento.idea.magento2plugin.magento.files.ModuleSetupDataPatchFile; + + +import javax.swing.JButton; +import javax.swing.JComponent; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JTextField; +import javax.swing.KeyStroke; +import java.awt.event.ActionEvent; +import java.awt.event.KeyEvent; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; +import java.util.Objects; + +public class NewSetupDataPatchDialog extends AbstractDialog { + + private static final String CLASS_NAME = "Class Name"; + private final Project project; + private final PsiDirectory baseDir; + private final String moduleName; + private final String modulePackage; + + private JPanel contentPanel; + private JButton buttonOK; + private JButton buttonCancel; + + @FieldValidation(rule = RuleRegistry.NOT_EMPTY, + message = {NotEmptyRule.MESSAGE, CLASS_NAME}) + @FieldValidation(rule = RuleRegistry.PHP_CLASS, + message = {PhpClassRule.MESSAGE, CLASS_NAME}) + private JTextField className; + private JLabel classNameLabel; + private JLabel classNameErrorMessage; + + + /** + * Constructor. + * + * @param project Project + * @param directory PsiDirectory + */ + public NewSetupDataPatchDialog( + final Project project, + final PsiDirectory directory, + String modulePackage, + String moduleName + ) { + super(); + + this.project = project; + this.baseDir = directory; + this.modulePackage = modulePackage; + this.moduleName = moduleName; + + setContentPane(contentPanel); + setModal(true); + setTitle(NewSetupDataPatchAction.ACTION_DESCRIPTION); + getRootPane().setDefaultButton(buttonOK); + + buttonOK.addActionListener((final ActionEvent event) -> onOK()); + buttonCancel.addActionListener((final ActionEvent event) -> onCancel()); + + // call onCancel() when cross is clicked + setDefaultCloseOperation(DO_NOTHING_ON_CLOSE); + addWindowListener(new WindowAdapter() { + @Override + public void windowClosing(final WindowEvent event) { + onCancel(); + } + }); + + // call onCancel() on ESCAPE + contentPanel.registerKeyboardAction( + (final ActionEvent event) -> onCancel(), + KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), + JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT + ); + + addComponentListener( + new FocusOnAFieldListener(() -> className.requestFocusInWindow()) + ); + } + + /** + * Open dialog. + * + * @param project Project + * @param directory PsiDirectory + */ + public static void open( + final Project project, + final PsiDirectory directory, + String modulePackage, + String moduleName + ) { + final NewSetupDataPatchDialog dialog = new NewSetupDataPatchDialog( + project, + directory, + modulePackage, + moduleName + ); + dialog.pack(); + dialog.centerDialog(dialog); + dialog.setVisible(true); + } + + protected void onOK() { + if (validateFields()) { + generateFile(); + exit(); + } + } + + private void generateFile() { + final ModuleSetupDataPatchGenerator generator = new ModuleSetupDataPatchGenerator( + new ModuleSetupDataPatchData( + modulePackage, + moduleName, + createDirectory(baseDir), + getClassName() + ), + project + ); + + generator.generate(NewSetupDataPatchAction.ACTION_NAME, true); + } + + public String getClassName() { + return className.getText(); + } + + private boolean validateFields() { + PsiDirectory targetDirectory = getDirectory(baseDir); + + if (targetDirectory.getName().equals(NewSetupDataPatchAction.DATA_DIRECTORY)) { + final PsiFile[] files = targetDirectory.getFiles(); + for (PsiFile file : files) { + if (file.getName().equals(getClassName() + ModuleSetupDataPatchFile.FILE_NAME)) { + showErrorMessage( + fieldsValidationsList.get(0).getField(), + "Class name " + getClassName() + " already exist." + ); + + return false; + } + } + } + return validateFormFields(); + } + + private PsiDirectory getDirectory(PsiDirectory targetDirectory){ + if(baseDir.getName().equals(NewSetupDataPatchAction.ROOT_DIRECTORY)) { + PsiDirectory subDirectoryPatch = + baseDir.findSubdirectory(NewSetupDataPatchAction.PATCH_DIRECTORY); + + if (subDirectoryPatch != null) { + return subDirectoryPatch.findSubdirectory(NewSetupDataPatchAction.DATA_DIRECTORY); + } + } + if(baseDir.getName().equals(NewSetupDataPatchAction.PATCH_DIRECTORY)) { + return baseDir.findSubdirectory(NewSetupDataPatchAction.DATA_DIRECTORY); + } + + return targetDirectory; + } + + private PsiDirectory createDirectory(PsiDirectory targetDirectory) { + if(targetDirectory.getName().equals(NewSetupDataPatchAction.ROOT_DIRECTORY)){ + PsiDirectory subDirectoryPatch = targetDirectory.findSubdirectory( + NewSetupDataPatchAction.PATCH_DIRECTORY + ); + + if(subDirectoryPatch == null) { + return targetDirectory.createSubdirectory( + NewSetupDataPatchAction.PATCH_DIRECTORY + ).createSubdirectory(NewSetupDataPatchAction.DATA_DIRECTORY); + } + PsiDirectory subDirectoryData = subDirectoryPatch.findSubdirectory( + NewSetupDataPatchAction.DATA_DIRECTORY + ); + + return Objects.requireNonNullElseGet( + subDirectoryData, () -> subDirectoryPatch.createSubdirectory( + NewSetupDataPatchAction.DATA_DIRECTORY + ) + ); + } + if(targetDirectory.getName().equals(NewSetupDataPatchAction.PATCH_DIRECTORY)){ + PsiDirectory subDirectoryData = targetDirectory.findSubdirectory( + NewSetupDataPatchAction.DATA_DIRECTORY + ); + + return Objects.requireNonNullElseGet( + subDirectoryData, () -> targetDirectory.createSubdirectory( + NewSetupDataPatchAction.DATA_DIRECTORY + ) + ); + } + + return targetDirectory; + } +} diff --git a/src/com/magento/idea/magento2plugin/actions/generation/generator/ModuleSetupDataPatchGenerator.java b/src/com/magento/idea/magento2plugin/actions/generation/generator/ModuleSetupDataPatchGenerator.java new file mode 100644 index 000000000..e216326ac --- /dev/null +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/ModuleSetupDataPatchGenerator.java @@ -0,0 +1,66 @@ +/* + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +package com.magento.idea.magento2plugin.actions.generation.generator; + +import com.intellij.openapi.project.Project; +import com.intellij.psi.PsiFile; +import com.magento.idea.magento2plugin.actions.generation.ModuleSetupDataPatchData; +import com.magento.idea.magento2plugin.actions.generation.generator.util.FileFromTemplateGenerator; +import com.magento.idea.magento2plugin.magento.files.ModuleSetupDataPatchFile; +import org.jetbrains.annotations.NotNull; +import java.util.Properties; + +public class ModuleSetupDataPatchGenerator extends FileGenerator { + + private final ModuleSetupDataPatchData moduleSetupPatchData; + private final FileFromTemplateGenerator fileFromTemplateGenerator; + + /** + * Construct generator. + * + * @param moduleSetupPatchData ModuleSetupPatchData + * @param project Project + */ + public ModuleSetupDataPatchGenerator( + final @NotNull ModuleSetupDataPatchData moduleSetupPatchData, + final Project project + ) { + super(project); + this.moduleSetupPatchData = moduleSetupPatchData; + this.fileFromTemplateGenerator = new FileFromTemplateGenerator(project); + } + + /** + * Generate file. + * + * @param actionName String + * + * @return PsiFile + */ + @Override + public PsiFile generate(final String actionName) { + return fileFromTemplateGenerator.generate( + new ModuleSetupDataPatchFile(moduleSetupPatchData.getClassName()), + getAttributes(), + moduleSetupPatchData.getBaseDir(), + actionName + ); + } + + /** + * Fill template properties. + * + * @param attributes Properties + */ + @Override + protected void fillAttributes(final Properties attributes) { + attributes.setProperty("CLASS_NAME", moduleSetupPatchData.getClassName() + "Patch"); + attributes.setProperty( + "MODULE_NAME", + moduleSetupPatchData.getPackageName() + "\\" + moduleSetupPatchData.getModuleName() + ); + } +} diff --git a/src/com/magento/idea/magento2plugin/magento/files/ModuleSetupDataPatchFile.java b/src/com/magento/idea/magento2plugin/magento/files/ModuleSetupDataPatchFile.java new file mode 100644 index 000000000..10bf1fa73 --- /dev/null +++ b/src/com/magento/idea/magento2plugin/magento/files/ModuleSetupDataPatchFile.java @@ -0,0 +1,38 @@ +/* + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +package com.magento.idea.magento2plugin.magento.files; + +import com.intellij.lang.Language; +import com.jetbrains.php.lang.PhpLanguage; +import org.jetbrains.annotations.NotNull; + +public class ModuleSetupDataPatchFile implements ModuleFileInterface { + + public static final String FILE_NAME = "Patch.php"; + public static final String TEMPLATE = "Magento Module Setup Patch File"; + private final String className; + + public ModuleSetupDataPatchFile( + final @NotNull String className + ) { + this.className = className; + } + + @Override + public String getFileName() { + return className + FILE_NAME; + } + + @Override + public String getTemplate() { + return TEMPLATE; + } + + @Override + public Language getLanguage() { + return PhpLanguage.INSTANCE; + } +} diff --git a/testData/actions/generation/generator/ModuleSetupDataPatchGenerator/generateModuleSetupDataPatchFile/TestClassPatch.php b/testData/actions/generation/generator/ModuleSetupDataPatchGenerator/generateModuleSetupDataPatchFile/TestClassPatch.php new file mode 100644 index 000000000..3804390c1 --- /dev/null +++ b/testData/actions/generation/generator/ModuleSetupDataPatchGenerator/generateModuleSetupDataPatchFile/TestClassPatch.php @@ -0,0 +1,68 @@ +moduleDataSetup = $moduleDataSetup; + } + + /** + * Do Upgrade + * + * @return void + */ + public function apply() + { + $this->moduleDataSetup->getConnection()->startSetup(); + + // TODO: The code that you want apply in the patch + + $this->moduleDataSetup->getConnection()->endSetup(); + } + + /** + * Get aliases (previous names) for the patch. + * + * @return string[] + */ + public function getAliases() + { + return []; + } + + /** + * Get array of patches that have to be executed prior to this. + * + * Example of implementation: + * + * [ + * \Vendor_Name\Module_Name\Setup\Patch\Patch1::class, + * \Vendor_Name\Module_Name\Setup\Patch\Patch2::class + * ] + * + * @return string[] + */ + public static function getDependencies() + { + return []; + } +} diff --git a/tests/com/magento/idea/magento2plugin/actions/generation/generator/ModuleSetupDataPatchGeneratorTest.java b/tests/com/magento/idea/magento2plugin/actions/generation/generator/ModuleSetupDataPatchGeneratorTest.java new file mode 100644 index 000000000..34fcd8372 --- /dev/null +++ b/tests/com/magento/idea/magento2plugin/actions/generation/generator/ModuleSetupDataPatchGeneratorTest.java @@ -0,0 +1,39 @@ +/* + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +package com.magento.idea.magento2plugin.actions.generation.generator; + +import com.intellij.psi.PsiFile; +import com.magento.idea.magento2plugin.actions.generation.ModuleSetupDataPatchData; +import com.magento.idea.magento2plugin.magento.files.ModuleSetupDataPatchFile; + +public final class ModuleSetupDataPatchGeneratorTest extends BaseGeneratorTestCase { + private static final String CLASS_NAME = "TestClass"; + + /** + * Test module README.md file generation. + */ + public void testGenerateModuleSetupDataPatchFile() { + final PsiFile expectedFile = myFixture.configureByFile( + getFixturePath(CLASS_NAME + ModuleSetupDataPatchFile.FILE_NAME) + ); + final ModuleSetupDataPatchGenerator generator = new ModuleSetupDataPatchGenerator( + new ModuleSetupDataPatchData( + "Foo", + "Bar", + getProjectDirectory(), + CLASS_NAME + + ), + myFixture.getProject() + ); + final PsiFile generatedFile = generator.generate("test"); + + assertGeneratedFileIsCorrect( + expectedFile, + generatedFile + ); + } +} From bfd0b99354e7a1ca7bbaf15c0c6f669e9c2dfea9 Mon Sep 17 00:00:00 2001 From: "andrii.zinkevych" Date: Wed, 14 Sep 2022 16:07:28 +0300 Subject: [PATCH 2/8] 1139: Fixed Static Tests --- .../context/php/NewSetupDataPatchAction.java | 24 ++++++-- .../NewSetupDataPatchDialog.form | 2 +- .../NewSetupDataPatchDialog.java | 58 +++++++++---------- .../ModuleSetupDataPatchGenerator.java | 2 +- 4 files changed, 48 insertions(+), 38 deletions(-) rename src/com/magento/idea/magento2plugin/actions/generation/dialog/{NewSetupDataPatch => }/NewSetupDataPatchDialog.form (98%) rename src/com/magento/idea/magento2plugin/actions/generation/dialog/{NewSetupDataPatch => }/NewSetupDataPatchDialog.java (82%) diff --git a/src/com/magento/idea/magento2plugin/actions/context/php/NewSetupDataPatchAction.java b/src/com/magento/idea/magento2plugin/actions/context/php/NewSetupDataPatchAction.java index dfceb2c45..401bfbe24 100644 --- a/src/com/magento/idea/magento2plugin/actions/context/php/NewSetupDataPatchAction.java +++ b/src/com/magento/idea/magento2plugin/actions/context/php/NewSetupDataPatchAction.java @@ -9,7 +9,7 @@ import com.intellij.psi.PsiDirectory; import com.intellij.psi.PsiFile; import com.magento.idea.magento2plugin.actions.context.CustomGeneratorContextAction; -import com.magento.idea.magento2plugin.actions.generation.dialog.NewSetupDataPatch.NewSetupDataPatchDialog; +import com.magento.idea.magento2plugin.actions.generation.dialog.NewSetupDataPatchDialog; import com.magento.idea.magento2plugin.magento.packages.ComponentType; import com.magento.idea.magento2plugin.magento.packages.Package; import com.magento.idea.magento2plugin.util.magento.GetMagentoModuleUtil; @@ -57,12 +57,24 @@ protected boolean isVisible( if (!moduleData.getType().equals(ComponentType.module)) { return false; } + final String targetDirName = targetDirectory.getName(); + + if (!(ROOT_DIRECTORY.equals(targetDirName) || PATCH_DIRECTORY.equals(targetDirName) + || DATA_DIRECTORY.equals(targetDirName)) + ) { + return false; + } + final PsiDirectory parentDirFirst = targetDirectory.getParentDirectory(); - final PsiDirectory parentDirSecond = parentDirFirst != null ? - parentDirFirst.getParentDirectory() : null; + PsiDirectory parentDirSecond = null; + + if (parentDirFirst != null) { + parentDirSecond = parentDirFirst.getParentDirectory(); + } + - return targetDirectory.getName().equals(ROOT_DIRECTORY) || - (parentDirFirst != null && parentDirFirst.getName().equals(ROOT_DIRECTORY)) || - (parentDirSecond != null && parentDirSecond.getName().equals(ROOT_DIRECTORY)); + return ROOT_DIRECTORY.equals(targetDirName) + || parentDirFirst != null && ROOT_DIRECTORY.equals(parentDirFirst.getName()) + || parentDirSecond != null && ROOT_DIRECTORY.equals(parentDirSecond.getName()); } } diff --git a/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewSetupDataPatch/NewSetupDataPatchDialog.form b/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewSetupDataPatchDialog.form similarity index 98% rename from src/com/magento/idea/magento2plugin/actions/generation/dialog/NewSetupDataPatch/NewSetupDataPatchDialog.form rename to src/com/magento/idea/magento2plugin/actions/generation/dialog/NewSetupDataPatchDialog.form index 92a2254c3..47d42f88f 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewSetupDataPatch/NewSetupDataPatchDialog.form +++ b/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewSetupDataPatchDialog.form @@ -1,5 +1,5 @@ -
+ diff --git a/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewSetupDataPatch/NewSetupDataPatchDialog.java b/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewSetupDataPatchDialog.java similarity index 82% rename from src/com/magento/idea/magento2plugin/actions/generation/dialog/NewSetupDataPatch/NewSetupDataPatchDialog.java rename to src/com/magento/idea/magento2plugin/actions/generation/dialog/NewSetupDataPatchDialog.java index a50044b72..39a9543b3 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewSetupDataPatch/NewSetupDataPatchDialog.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewSetupDataPatchDialog.java @@ -3,33 +3,30 @@ * See COPYING.txt for license details. */ -package com.magento.idea.magento2plugin.actions.generation.dialog.NewSetupDataPatch; +package com.magento.idea.magento2plugin.actions.generation.dialog; import com.intellij.openapi.project.Project; import com.intellij.psi.PsiDirectory; import com.intellij.psi.PsiFile; import com.magento.idea.magento2plugin.actions.context.php.NewSetupDataPatchAction; import com.magento.idea.magento2plugin.actions.generation.ModuleSetupDataPatchData; -import com.magento.idea.magento2plugin.actions.generation.dialog.AbstractDialog; 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.NotEmptyRule; import com.magento.idea.magento2plugin.actions.generation.dialog.validator.rule.PhpClassRule; import com.magento.idea.magento2plugin.actions.generation.generator.ModuleSetupDataPatchGenerator; import com.magento.idea.magento2plugin.magento.files.ModuleSetupDataPatchFile; - - +import java.awt.event.ActionEvent; +import java.awt.event.KeyEvent; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; +import java.util.Objects; import javax.swing.JButton; import javax.swing.JComponent; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JTextField; import javax.swing.KeyStroke; -import java.awt.event.ActionEvent; -import java.awt.event.KeyEvent; -import java.awt.event.WindowAdapter; -import java.awt.event.WindowEvent; -import java.util.Objects; public class NewSetupDataPatchDialog extends AbstractDialog { @@ -48,8 +45,8 @@ public class NewSetupDataPatchDialog extends AbstractDialog { @FieldValidation(rule = RuleRegistry.PHP_CLASS, message = {PhpClassRule.MESSAGE, CLASS_NAME}) private JTextField className; - private JLabel classNameLabel; - private JLabel classNameErrorMessage; + private JLabel classNameLabel;//NOPMD + private JLabel classNameErrorMessage;//NOPMD /** @@ -61,8 +58,8 @@ public class NewSetupDataPatchDialog extends AbstractDialog { public NewSetupDataPatchDialog( final Project project, final PsiDirectory directory, - String modulePackage, - String moduleName + final String modulePackage, + final String moduleName ) { super(); @@ -109,8 +106,8 @@ public void windowClosing(final WindowEvent event) { public static void open( final Project project, final PsiDirectory directory, - String modulePackage, - String moduleName + final String modulePackage, + final String moduleName ) { final NewSetupDataPatchDialog dialog = new NewSetupDataPatchDialog( project, @@ -149,11 +146,11 @@ public String getClassName() { } private boolean validateFields() { - PsiDirectory targetDirectory = getDirectory(baseDir); + final PsiDirectory targetDirectory = getDirectory(baseDir); - if (targetDirectory.getName().equals(NewSetupDataPatchAction.DATA_DIRECTORY)) { + if (NewSetupDataPatchAction.DATA_DIRECTORY.equals(targetDirectory.getName())) { final PsiFile[] files = targetDirectory.getFiles(); - for (PsiFile file : files) { + for (final PsiFile file : files) { if (file.getName().equals(getClassName() + ModuleSetupDataPatchFile.FILE_NAME)) { showErrorMessage( fieldsValidationsList.get(0).getField(), @@ -167,34 +164,35 @@ private boolean validateFields() { return validateFormFields(); } - private PsiDirectory getDirectory(PsiDirectory targetDirectory){ - if(baseDir.getName().equals(NewSetupDataPatchAction.ROOT_DIRECTORY)) { - PsiDirectory subDirectoryPatch = - baseDir.findSubdirectory(NewSetupDataPatchAction.PATCH_DIRECTORY); + private PsiDirectory getDirectory(final PsiDirectory targetDirectory) { + if (NewSetupDataPatchAction.ROOT_DIRECTORY.equals(baseDir.getName())) { + final PsiDirectory subDirectoryPatch = baseDir.findSubdirectory( + NewSetupDataPatchAction.PATCH_DIRECTORY + ); if (subDirectoryPatch != null) { return subDirectoryPatch.findSubdirectory(NewSetupDataPatchAction.DATA_DIRECTORY); } } - if(baseDir.getName().equals(NewSetupDataPatchAction.PATCH_DIRECTORY)) { + if (NewSetupDataPatchAction.PATCH_DIRECTORY.equals(baseDir.getName())) { return baseDir.findSubdirectory(NewSetupDataPatchAction.DATA_DIRECTORY); } return targetDirectory; } - private PsiDirectory createDirectory(PsiDirectory targetDirectory) { - if(targetDirectory.getName().equals(NewSetupDataPatchAction.ROOT_DIRECTORY)){ - PsiDirectory subDirectoryPatch = targetDirectory.findSubdirectory( + private PsiDirectory createDirectory(final PsiDirectory targetDirectory) { + if (NewSetupDataPatchAction.ROOT_DIRECTORY.equals(targetDirectory.getName())) { + final PsiDirectory subDirectoryPatch = targetDirectory.findSubdirectory( NewSetupDataPatchAction.PATCH_DIRECTORY ); - if(subDirectoryPatch == null) { + if (subDirectoryPatch == null) { return targetDirectory.createSubdirectory( NewSetupDataPatchAction.PATCH_DIRECTORY ).createSubdirectory(NewSetupDataPatchAction.DATA_DIRECTORY); } - PsiDirectory subDirectoryData = subDirectoryPatch.findSubdirectory( + final PsiDirectory subDirectoryData = subDirectoryPatch.findSubdirectory( NewSetupDataPatchAction.DATA_DIRECTORY ); @@ -204,8 +202,8 @@ private PsiDirectory createDirectory(PsiDirectory targetDirectory) { ) ); } - if(targetDirectory.getName().equals(NewSetupDataPatchAction.PATCH_DIRECTORY)){ - PsiDirectory subDirectoryData = targetDirectory.findSubdirectory( + if (NewSetupDataPatchAction.PATCH_DIRECTORY.equals(targetDirectory.getName())) { + final PsiDirectory subDirectoryData = targetDirectory.findSubdirectory( NewSetupDataPatchAction.DATA_DIRECTORY ); diff --git a/src/com/magento/idea/magento2plugin/actions/generation/generator/ModuleSetupDataPatchGenerator.java b/src/com/magento/idea/magento2plugin/actions/generation/generator/ModuleSetupDataPatchGenerator.java index e216326ac..d7d74795b 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/generator/ModuleSetupDataPatchGenerator.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/ModuleSetupDataPatchGenerator.java @@ -10,8 +10,8 @@ import com.magento.idea.magento2plugin.actions.generation.ModuleSetupDataPatchData; import com.magento.idea.magento2plugin.actions.generation.generator.util.FileFromTemplateGenerator; import com.magento.idea.magento2plugin.magento.files.ModuleSetupDataPatchFile; -import org.jetbrains.annotations.NotNull; import java.util.Properties; +import org.jetbrains.annotations.NotNull; public class ModuleSetupDataPatchGenerator extends FileGenerator { From 5b30ba06c3f60c4fad77fbb203cb1df1842398e6 Mon Sep 17 00:00:00 2001 From: bohdan-harniuk Date: Mon, 19 Sep 2022 15:55:31 +0300 Subject: [PATCH 3/8] 1139: Code refactoring --- .../Magento Module Setup Patch File.php.ft | 4 +-- .../dialog/NewSetupDataPatchDialog.form | 10 ++---- .../dialog/NewSetupDataPatchDialog.java | 10 ++++-- .../ModuleSetupDataPatchGenerator.java | 4 ++- .../files/ModuleSetupDataPatchFile.java | 32 +++++++++++++++++-- .../TestClassPatch.php | 4 +-- .../ModuleSetupDataPatchGeneratorTest.java | 5 +-- 7 files changed, 49 insertions(+), 20 deletions(-) diff --git a/resources/fileTemplates/internal/Magento Module Setup Patch File.php.ft b/resources/fileTemplates/internal/Magento Module Setup Patch File.php.ft index 8e89dc470..37885e515 100644 --- a/resources/fileTemplates/internal/Magento Module Setup Patch File.php.ft +++ b/resources/fileTemplates/internal/Magento Module Setup Patch File.php.ft @@ -7,7 +7,7 @@ use Magento\Framework\Setup\ModuleDataSetupInterface; use Magento\Framework\Setup\Patch\DataPatchInterface; /** -* Patch is mechanism, that allows to do atomic upgrade data changes +* Patch is mechanism, that allows to do atomic upgrade data changes. */ class ${CLASS_NAME} implements DataPatchInterface { @@ -26,7 +26,7 @@ class ${CLASS_NAME} implements DataPatchInterface } /** - * Do Upgrade + * Do Upgrade. * * @return void */ diff --git a/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewSetupDataPatchDialog.form b/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewSetupDataPatchDialog.form index 47d42f88f..f9879145a 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewSetupDataPatchDialog.form +++ b/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewSetupDataPatchDialog.form @@ -56,7 +56,7 @@ - + @@ -71,9 +71,7 @@ - - - + @@ -81,9 +79,7 @@ - - - + diff --git a/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewSetupDataPatchDialog.java b/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewSetupDataPatchDialog.java index 39a9543b3..9cea068dd 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewSetupDataPatchDialog.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewSetupDataPatchDialog.java @@ -142,7 +142,7 @@ private void generateFile() { } public String getClassName() { - return className.getText(); + return className.getText().trim(); } private boolean validateFields() { @@ -151,10 +151,14 @@ private boolean validateFields() { if (NewSetupDataPatchAction.DATA_DIRECTORY.equals(targetDirectory.getName())) { final PsiFile[] files = targetDirectory.getFiles(); for (final PsiFile file : files) { - if (file.getName().equals(getClassName() + ModuleSetupDataPatchFile.FILE_NAME)) { + final String className = ModuleSetupDataPatchFile.resolveClassNameFromInput( + getClassName() + ); + + if (file.getName().equals(className + ".php")) { showErrorMessage( fieldsValidationsList.get(0).getField(), - "Class name " + getClassName() + " already exist." + "Class name `" + className + "` already exist." ); return false; diff --git a/src/com/magento/idea/magento2plugin/actions/generation/generator/ModuleSetupDataPatchGenerator.java b/src/com/magento/idea/magento2plugin/actions/generation/generator/ModuleSetupDataPatchGenerator.java index d7d74795b..531e43a32 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/generator/ModuleSetupDataPatchGenerator.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/ModuleSetupDataPatchGenerator.java @@ -57,7 +57,9 @@ public PsiFile generate(final String actionName) { */ @Override protected void fillAttributes(final Properties attributes) { - attributes.setProperty("CLASS_NAME", moduleSetupPatchData.getClassName() + "Patch"); + attributes.setProperty("CLASS_NAME", ModuleSetupDataPatchFile.resolveClassNameFromInput( + moduleSetupPatchData.getClassName() + )); attributes.setProperty( "MODULE_NAME", moduleSetupPatchData.getPackageName() + "\\" + moduleSetupPatchData.getModuleName() diff --git a/src/com/magento/idea/magento2plugin/magento/files/ModuleSetupDataPatchFile.java b/src/com/magento/idea/magento2plugin/magento/files/ModuleSetupDataPatchFile.java index 10bf1fa73..7d768c71c 100644 --- a/src/com/magento/idea/magento2plugin/magento/files/ModuleSetupDataPatchFile.java +++ b/src/com/magento/idea/magento2plugin/magento/files/ModuleSetupDataPatchFile.java @@ -11,19 +11,45 @@ public class ModuleSetupDataPatchFile implements ModuleFileInterface { - public static final String FILE_NAME = "Patch.php"; + public static final String FILE_SUFFIX = "Patch"; + public static final String EXTENSION = ".php"; public static final String TEMPLATE = "Magento Module Setup Patch File"; private final String className; + /** + * Constructor. + * + * @param className String + */ public ModuleSetupDataPatchFile( final @NotNull String className ) { - this.className = className; + this.className = resolveClassNameFromInput(className); + } + + /** + * Resolve class name from user input. + * + * @param input String + * + * @return String + */ + public static String resolveClassNameFromInput(final String input) { + if (input.length() <= FILE_SUFFIX.length()) { + return input + FILE_SUFFIX; + } + String suffix = input.substring(input.length() - FILE_SUFFIX.length()); + + if (FILE_SUFFIX.equals(suffix)) { + return input; + } else { + return input + FILE_SUFFIX; + } } @Override public String getFileName() { - return className + FILE_NAME; + return className + EXTENSION; } @Override diff --git a/testData/actions/generation/generator/ModuleSetupDataPatchGenerator/generateModuleSetupDataPatchFile/TestClassPatch.php b/testData/actions/generation/generator/ModuleSetupDataPatchGenerator/generateModuleSetupDataPatchFile/TestClassPatch.php index 3804390c1..f220c92c0 100644 --- a/testData/actions/generation/generator/ModuleSetupDataPatchGenerator/generateModuleSetupDataPatchFile/TestClassPatch.php +++ b/testData/actions/generation/generator/ModuleSetupDataPatchGenerator/generateModuleSetupDataPatchFile/TestClassPatch.php @@ -6,7 +6,7 @@ use Magento\Framework\Setup\Patch\DataPatchInterface; /** - * Patch is mechanism, that allows to do atomic upgrade data changes + * Patch is mechanism, that allows to do atomic upgrade data changes. */ class TestClassPatch implements DataPatchInterface { @@ -26,7 +26,7 @@ public function __construct( } /** - * Do Upgrade + * Do Upgrade. * * @return void */ diff --git a/tests/com/magento/idea/magento2plugin/actions/generation/generator/ModuleSetupDataPatchGeneratorTest.java b/tests/com/magento/idea/magento2plugin/actions/generation/generator/ModuleSetupDataPatchGeneratorTest.java index 34fcd8372..956f1ebf2 100644 --- a/tests/com/magento/idea/magento2plugin/actions/generation/generator/ModuleSetupDataPatchGeneratorTest.java +++ b/tests/com/magento/idea/magento2plugin/actions/generation/generator/ModuleSetupDataPatchGeneratorTest.java @@ -10,14 +10,15 @@ import com.magento.idea.magento2plugin.magento.files.ModuleSetupDataPatchFile; public final class ModuleSetupDataPatchGeneratorTest extends BaseGeneratorTestCase { - private static final String CLASS_NAME = "TestClass"; + + private static final String CLASS_NAME = "TestClassPatch"; /** * Test module README.md file generation. */ public void testGenerateModuleSetupDataPatchFile() { final PsiFile expectedFile = myFixture.configureByFile( - getFixturePath(CLASS_NAME + ModuleSetupDataPatchFile.FILE_NAME) + getFixturePath(CLASS_NAME + ModuleSetupDataPatchFile.EXTENSION) ); final ModuleSetupDataPatchGenerator generator = new ModuleSetupDataPatchGenerator( new ModuleSetupDataPatchData( From 9da21d070ba4392584e71a1c7e05e879aff05a1d Mon Sep 17 00:00:00 2001 From: bohdan-harniuk Date: Mon, 19 Sep 2022 15:59:41 +0300 Subject: [PATCH 4/8] 1139: Code refactoring --- .../magento2plugin/magento/files/ModuleSetupDataPatchFile.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/magento/idea/magento2plugin/magento/files/ModuleSetupDataPatchFile.java b/src/com/magento/idea/magento2plugin/magento/files/ModuleSetupDataPatchFile.java index 7d768c71c..6a553adc9 100644 --- a/src/com/magento/idea/magento2plugin/magento/files/ModuleSetupDataPatchFile.java +++ b/src/com/magento/idea/magento2plugin/magento/files/ModuleSetupDataPatchFile.java @@ -38,7 +38,7 @@ public static String resolveClassNameFromInput(final String input) { if (input.length() <= FILE_SUFFIX.length()) { return input + FILE_SUFFIX; } - String suffix = input.substring(input.length() - FILE_SUFFIX.length()); + final String suffix = input.substring(input.length() - FILE_SUFFIX.length()); if (FILE_SUFFIX.equals(suffix)) { return input; From 1a0309b3247396920838cd9b1e3bc4adc688af9c Mon Sep 17 00:00:00 2001 From: "andrii.zinkevych" Date: Mon, 19 Sep 2022 21:04:07 +0300 Subject: [PATCH 5/8] 1139: Fixed code after review --- .../context/php/NewSetupDataPatchAction.java | 48 ++++++----- .../dialog/NewSetupDataPatchDialog.java | 79 +++++-------------- 2 files changed, 46 insertions(+), 81 deletions(-) diff --git a/src/com/magento/idea/magento2plugin/actions/context/php/NewSetupDataPatchAction.java b/src/com/magento/idea/magento2plugin/actions/context/php/NewSetupDataPatchAction.java index 401bfbe24..e84a2ae7d 100644 --- a/src/com/magento/idea/magento2plugin/actions/context/php/NewSetupDataPatchAction.java +++ b/src/com/magento/idea/magento2plugin/actions/context/php/NewSetupDataPatchAction.java @@ -13,6 +13,7 @@ import com.magento.idea.magento2plugin.magento.packages.ComponentType; import com.magento.idea.magento2plugin.magento.packages.Package; import com.magento.idea.magento2plugin.util.magento.GetMagentoModuleUtil; +import java.util.Objects; import org.jetbrains.annotations.NotNull; public class NewSetupDataPatchAction extends CustomGeneratorContextAction { @@ -34,18 +35,16 @@ public void actionPerformed(final @NotNull AnActionEvent event) { if (event.getProject() == null || moduleData == null || getDirectory() == null) { return; } - final String[] templateData = moduleData.getName().split(Package.vendorModuleNameSeparator); + final String[] module = moduleData.getName().split(Package.vendorModuleNameSeparator); - if (templateData.length != 2) { //NOPMD + if (module.length != 2) { //NOPMD return; } - - NewSetupDataPatchDialog.open( - event.getProject(), - getDirectory(), - templateData[0], - templateData[1] + final PsiDirectory rooDirectory = moduleData.getModuleDir().findSubdirectory( + ROOT_DIRECTORY ); + + NewSetupDataPatchDialog.open(event.getProject(), rooDirectory, module[0], module[1]); } @Override @@ -57,24 +56,31 @@ protected boolean isVisible( if (!moduleData.getType().equals(ComponentType.module)) { return false; } - final String targetDirName = targetDirectory.getName(); - if (!(ROOT_DIRECTORY.equals(targetDirName) || PATCH_DIRECTORY.equals(targetDirName) - || DATA_DIRECTORY.equals(targetDirName)) - ) { - return false; + if (ROOT_DIRECTORY.equals(targetDirectory.getName())) { + return Objects.requireNonNull(targetDirectory.getParentDirectory()).getName().equals( + moduleData.getModuleDir().getName() + ); } - final PsiDirectory parentDirFirst = targetDirectory.getParentDirectory(); - PsiDirectory parentDirSecond = null; - - if (parentDirFirst != null) { - parentDirSecond = parentDirFirst.getParentDirectory(); + if (PATCH_DIRECTORY.equals(targetDirectory.getName())) { + return ROOT_DIRECTORY.equals(Objects.requireNonNull( + targetDirectory.getParentDirectory()).getName() + ); } + if (DATA_DIRECTORY.equals(targetDirectory.getName())) { + final PsiDirectory parentDirectory = Objects.requireNonNull( + targetDirectory.getParentDirectory() + ); + + if (PATCH_DIRECTORY.equals(parentDirectory.getName())) { + return ROOT_DIRECTORY.equals(Objects.requireNonNull( + parentDirectory.getParentDirectory()).getName() + ); + } + } - return ROOT_DIRECTORY.equals(targetDirName) - || parentDirFirst != null && ROOT_DIRECTORY.equals(parentDirFirst.getName()) - || parentDirSecond != null && ROOT_DIRECTORY.equals(parentDirSecond.getName()); + return false; } } diff --git a/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewSetupDataPatchDialog.java b/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewSetupDataPatchDialog.java index 9cea068dd..ee555e176 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewSetupDataPatchDialog.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewSetupDataPatchDialog.java @@ -15,12 +15,13 @@ 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.ModuleSetupDataPatchGenerator; +import com.magento.idea.magento2plugin.actions.generation.generator.util.DirectoryGenerator; import com.magento.idea.magento2plugin.magento.files.ModuleSetupDataPatchFile; +import com.magento.idea.magento2plugin.magento.packages.File; import java.awt.event.ActionEvent; import java.awt.event.KeyEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; -import java.util.Objects; import javax.swing.JButton; import javax.swing.JComponent; import javax.swing.JLabel; @@ -128,11 +129,15 @@ protected void onOK() { } private void generateFile() { + final PsiDirectory directory = DirectoryGenerator.getInstance().findOrCreateSubdirectories( + baseDir, NewSetupDataPatchAction.PATCH_DIRECTORY + File.separator + + NewSetupDataPatchAction.DATA_DIRECTORY + ); final ModuleSetupDataPatchGenerator generator = new ModuleSetupDataPatchGenerator( new ModuleSetupDataPatchData( modulePackage, moduleName, - createDirectory(baseDir), + directory, getClassName() ), project @@ -146,16 +151,22 @@ public String getClassName() { } private boolean validateFields() { - final PsiDirectory targetDirectory = getDirectory(baseDir); + final PsiDirectory patchDirectory = baseDir.findSubdirectory( + NewSetupDataPatchAction.PATCH_DIRECTORY + ); + PsiDirectory directory = null; - if (NewSetupDataPatchAction.DATA_DIRECTORY.equals(targetDirectory.getName())) { - final PsiFile[] files = targetDirectory.getFiles(); - for (final PsiFile file : files) { + if (patchDirectory != null) { + directory = patchDirectory.findSubdirectory(NewSetupDataPatchAction.DATA_DIRECTORY); + } + + if (directory != null) { + for (final PsiFile file : directory.getFiles()) { final String className = ModuleSetupDataPatchFile.resolveClassNameFromInput( getClassName() ); - if (file.getName().equals(className + ".php")) { + if (file.getName().equals(className + ModuleSetupDataPatchFile.EXTENSION)) { showErrorMessage( fieldsValidationsList.get(0).getField(), "Class name `" + className + "` already exist." @@ -165,59 +176,7 @@ private boolean validateFields() { } } } - return validateFormFields(); - } - - private PsiDirectory getDirectory(final PsiDirectory targetDirectory) { - if (NewSetupDataPatchAction.ROOT_DIRECTORY.equals(baseDir.getName())) { - final PsiDirectory subDirectoryPatch = baseDir.findSubdirectory( - NewSetupDataPatchAction.PATCH_DIRECTORY - ); - if (subDirectoryPatch != null) { - return subDirectoryPatch.findSubdirectory(NewSetupDataPatchAction.DATA_DIRECTORY); - } - } - if (NewSetupDataPatchAction.PATCH_DIRECTORY.equals(baseDir.getName())) { - return baseDir.findSubdirectory(NewSetupDataPatchAction.DATA_DIRECTORY); - } - - return targetDirectory; - } - - private PsiDirectory createDirectory(final PsiDirectory targetDirectory) { - if (NewSetupDataPatchAction.ROOT_DIRECTORY.equals(targetDirectory.getName())) { - final PsiDirectory subDirectoryPatch = targetDirectory.findSubdirectory( - NewSetupDataPatchAction.PATCH_DIRECTORY - ); - - if (subDirectoryPatch == null) { - return targetDirectory.createSubdirectory( - NewSetupDataPatchAction.PATCH_DIRECTORY - ).createSubdirectory(NewSetupDataPatchAction.DATA_DIRECTORY); - } - final PsiDirectory subDirectoryData = subDirectoryPatch.findSubdirectory( - NewSetupDataPatchAction.DATA_DIRECTORY - ); - - return Objects.requireNonNullElseGet( - subDirectoryData, () -> subDirectoryPatch.createSubdirectory( - NewSetupDataPatchAction.DATA_DIRECTORY - ) - ); - } - if (NewSetupDataPatchAction.PATCH_DIRECTORY.equals(targetDirectory.getName())) { - final PsiDirectory subDirectoryData = targetDirectory.findSubdirectory( - NewSetupDataPatchAction.DATA_DIRECTORY - ); - - return Objects.requireNonNullElseGet( - subDirectoryData, () -> targetDirectory.createSubdirectory( - NewSetupDataPatchAction.DATA_DIRECTORY - ) - ); - } - - return targetDirectory; + return validateFormFields(); } } From d93bca8dbe20b806a8d836cd58fe31a6fabd6eb5 Mon Sep 17 00:00:00 2001 From: "andrii.zinkevych" Date: Tue, 20 Sep 2022 12:21:26 +0300 Subject: [PATCH 6/8] 1139: Fixed code --- .../generation/dialog/NewObserverDialog.java | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewObserverDialog.java b/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewObserverDialog.java index 178b97d98..096945643 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewObserverDialog.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewObserverDialog.java @@ -17,6 +17,7 @@ import com.magento.idea.magento2plugin.actions.generation.ModuleObserverData; import com.magento.idea.magento2plugin.actions.generation.data.ObserverEventsXmlData; import com.magento.idea.magento2plugin.actions.generation.data.ui.ComboBoxItemData; +import com.magento.idea.magento2plugin.actions.generation.dialog.reflection.GetReflectionFieldUtil; 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.DirectoryRule; @@ -37,6 +38,7 @@ import java.awt.event.KeyEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; +import java.lang.reflect.Field; import java.util.ArrayList; import java.util.Collection; import java.util.List; @@ -239,15 +241,17 @@ protected void onOK() { private boolean validateFields() { final PsiFile[] directoryFiles = getDirectoryFiles(baseDir); + final Field classNameField = GetReflectionFieldUtil.getByName("className", this.getClass()); - if (directoryFiles != null) { + if (directoryFiles != null && classNameField != null) { for (final PsiFile file : directoryFiles) { final String className = ModuleObserverFile.resolveClassNameFromInput( getClassName() ); + if (file.getName().equals(className + ModuleObserverFile.EXTENSION)) { showErrorMessage( - fieldsValidationsList.get(1).getField(), + classNameField, "Class name " + className + " already exist." ); @@ -255,11 +259,16 @@ private boolean validateFields() { } } } - if (!getDirectoryStructure().isEmpty() + final Field directoryStructureField = GetReflectionFieldUtil.getByName( + "directoryStructure", + this.getClass() + ); + + if (!getDirectoryStructure().isEmpty() && directoryStructureField != null && !DirectoryRule.getInstance().check(getDirectoryStructure()) ) { showErrorMessage( - this.getClass().getDeclaredFields()[11], + directoryStructureField, "The Directory Path field does not contain a valid directory." ); From 94014afb248f534248baadfbeb4a37a9eb06609b Mon Sep 17 00:00:00 2001 From: bohdan-harniuk Date: Tue, 20 Sep 2022 15:42:31 +0300 Subject: [PATCH 7/8] 1139: Code refactoring --- .../context/php/NewSetupDataPatchAction.java | 44 ++++++++++--------- .../dialog/NewSetupDataPatchDialog.java | 13 +++--- 2 files changed, 32 insertions(+), 25 deletions(-) diff --git a/src/com/magento/idea/magento2plugin/actions/context/php/NewSetupDataPatchAction.java b/src/com/magento/idea/magento2plugin/actions/context/php/NewSetupDataPatchAction.java index e84a2ae7d..f2ebfe81b 100644 --- a/src/com/magento/idea/magento2plugin/actions/context/php/NewSetupDataPatchAction.java +++ b/src/com/magento/idea/magento2plugin/actions/context/php/NewSetupDataPatchAction.java @@ -13,14 +13,13 @@ import com.magento.idea.magento2plugin.magento.packages.ComponentType; import com.magento.idea.magento2plugin.magento.packages.Package; import com.magento.idea.magento2plugin.util.magento.GetMagentoModuleUtil; -import java.util.Objects; import org.jetbrains.annotations.NotNull; public class NewSetupDataPatchAction extends CustomGeneratorContextAction { public static final String ACTION_NAME = "Magento 2 Setup Data Patch"; public static final String ACTION_DESCRIPTION = "Create a new Magento 2 Setup Data Patch"; - public static final String ROOT_DIRECTORY = "Setup"; + public static final String SETUP_DIRECTORY = "Setup"; public static final String PATCH_DIRECTORY = "Patch"; public static final String DATA_DIRECTORY = "Data"; @@ -40,11 +39,14 @@ public void actionPerformed(final @NotNull AnActionEvent event) { if (module.length != 2) { //NOPMD return; } - final PsiDirectory rooDirectory = moduleData.getModuleDir().findSubdirectory( - ROOT_DIRECTORY + final PsiDirectory rootDirectory = moduleData.getModuleDir().findSubdirectory( + SETUP_DIRECTORY ); - NewSetupDataPatchDialog.open(event.getProject(), rooDirectory, module[0], module[1]); + if (rootDirectory == null) { + return; + } + NewSetupDataPatchDialog.open(event.getProject(), rootDirectory, module[0], module[1]); } @Override @@ -57,28 +59,30 @@ protected boolean isVisible( return false; } - if (ROOT_DIRECTORY.equals(targetDirectory.getName())) { - return Objects.requireNonNull(targetDirectory.getParentDirectory()).getName().equals( - moduleData.getModuleDir().getName() - ); + if (SETUP_DIRECTORY.equals(targetDirectory.getName())) { + return moduleData.getModuleDir().equals(targetDirectory.getParentDirectory()); } if (PATCH_DIRECTORY.equals(targetDirectory.getName())) { - return ROOT_DIRECTORY.equals(Objects.requireNonNull( - targetDirectory.getParentDirectory()).getName() - ); + final PsiDirectory setupDirCandidate = targetDirectory.getParentDirectory(); + + return setupDirCandidate != null + && SETUP_DIRECTORY.equals(setupDirCandidate.getName()) + && moduleData.getModuleDir().equals(setupDirCandidate.getParentDirectory()); } if (DATA_DIRECTORY.equals(targetDirectory.getName())) { - final PsiDirectory parentDirectory = Objects.requireNonNull( - targetDirectory.getParentDirectory() - ); - - if (PATCH_DIRECTORY.equals(parentDirectory.getName())) { - return ROOT_DIRECTORY.equals(Objects.requireNonNull( - parentDirectory.getParentDirectory()).getName() - ); + final PsiDirectory patchDirCandidate = targetDirectory.getParentDirectory(); + + if (patchDirCandidate == null) { + return false; } + final PsiDirectory setupDirCandidate = patchDirCandidate.getParentDirectory(); + + return setupDirCandidate != null + && PATCH_DIRECTORY.equals(patchDirCandidate.getName()) + && SETUP_DIRECTORY.equals(setupDirCandidate.getName()) + && moduleData.getModuleDir().equals(setupDirCandidate.getParentDirectory()); } return false; diff --git a/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewSetupDataPatchDialog.java b/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewSetupDataPatchDialog.java index ee555e176..3001df3d3 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewSetupDataPatchDialog.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewSetupDataPatchDialog.java @@ -18,6 +18,8 @@ import com.magento.idea.magento2plugin.actions.generation.generator.util.DirectoryGenerator; import com.magento.idea.magento2plugin.magento.files.ModuleSetupDataPatchFile; import com.magento.idea.magento2plugin.magento.packages.File; +import org.jetbrains.annotations.NotNull; + import java.awt.event.ActionEvent; import java.awt.event.KeyEvent; import java.awt.event.WindowAdapter; @@ -57,8 +59,8 @@ public class NewSetupDataPatchDialog extends AbstractDialog { * @param directory PsiDirectory */ public NewSetupDataPatchDialog( - final Project project, - final PsiDirectory directory, + final @NotNull Project project, + final @NotNull PsiDirectory directory, final String modulePackage, final String moduleName ) { @@ -105,8 +107,8 @@ public void windowClosing(final WindowEvent event) { * @param directory PsiDirectory */ public static void open( - final Project project, - final PsiDirectory directory, + final @NotNull Project project, + final @NotNull PsiDirectory directory, final String modulePackage, final String moduleName ) { @@ -130,7 +132,8 @@ protected void onOK() { private void generateFile() { final PsiDirectory directory = DirectoryGenerator.getInstance().findOrCreateSubdirectories( - baseDir, NewSetupDataPatchAction.PATCH_DIRECTORY + File.separator + baseDir, + NewSetupDataPatchAction.PATCH_DIRECTORY + File.separator + NewSetupDataPatchAction.DATA_DIRECTORY ); final ModuleSetupDataPatchGenerator generator = new ModuleSetupDataPatchGenerator( From 998559819a43592944896e0a1b61d55d878a4e52 Mon Sep 17 00:00:00 2001 From: bohdan-harniuk Date: Tue, 20 Sep 2022 15:57:26 +0300 Subject: [PATCH 8/8] 1139: Code refactoring --- .../actions/generation/dialog/NewSetupDataPatchDialog.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewSetupDataPatchDialog.java b/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewSetupDataPatchDialog.java index 3001df3d3..eb23df3a1 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewSetupDataPatchDialog.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewSetupDataPatchDialog.java @@ -18,8 +18,6 @@ import com.magento.idea.magento2plugin.actions.generation.generator.util.DirectoryGenerator; import com.magento.idea.magento2plugin.magento.files.ModuleSetupDataPatchFile; import com.magento.idea.magento2plugin.magento.packages.File; -import org.jetbrains.annotations.NotNull; - import java.awt.event.ActionEvent; import java.awt.event.KeyEvent; import java.awt.event.WindowAdapter; @@ -30,6 +28,7 @@ import javax.swing.JPanel; import javax.swing.JTextField; import javax.swing.KeyStroke; +import org.jetbrains.annotations.NotNull; public class NewSetupDataPatchDialog extends AbstractDialog {