From 9126424b882fdc8dc87517d3325efb5b3983ace4 Mon Sep 17 00:00:00 2001 From: Adarsh Manickam Date: Wed, 18 Nov 2020 15:13:00 +0530 Subject: [PATCH 01/13] Added basic generation for Data Model with Interface --- resources/META-INF/plugin.xml | 3 + .../Magento Data Model Interface.php.ft | 10 ++ .../Magento Data Model Interface.php.html | 0 .../internal/Magento Data Model.php.ft | 15 ++ .../internal/Magento Data Model.php.html | 0 .../generation/NewDataModelAction.java | 57 +++++++ .../generation/data/DataModelData.java | 48 ++++++ .../data/DataModelInterfaceData.java | 41 +++++ .../generation/dialog/NewDataModelDialog.form | 84 +++++++++ .../generation/dialog/NewDataModelDialog.java | 161 ++++++++++++++++++ .../generator/DataModelGenerator.java | 138 +++++++++++++++ .../DataModelInterfaceGenerator.java | 121 +++++++++++++ .../generator/util/PhpClassGeneratorUtil.java | 38 +++++ .../magento/files/DataModel.java | 34 ++++ .../magento/files/DataModelInterface.java | 33 ++++ 15 files changed, 783 insertions(+) create mode 100644 resources/fileTemplates/internal/Magento Data Model Interface.php.ft create mode 100644 resources/fileTemplates/internal/Magento Data Model Interface.php.html create mode 100644 resources/fileTemplates/internal/Magento Data Model.php.ft create mode 100644 resources/fileTemplates/internal/Magento Data Model.php.html create mode 100644 src/com/magento/idea/magento2plugin/actions/generation/NewDataModelAction.java create mode 100644 src/com/magento/idea/magento2plugin/actions/generation/data/DataModelData.java create mode 100644 src/com/magento/idea/magento2plugin/actions/generation/data/DataModelInterfaceData.java create mode 100644 src/com/magento/idea/magento2plugin/actions/generation/dialog/NewDataModelDialog.form create mode 100644 src/com/magento/idea/magento2plugin/actions/generation/dialog/NewDataModelDialog.java create mode 100644 src/com/magento/idea/magento2plugin/actions/generation/generator/DataModelGenerator.java create mode 100644 src/com/magento/idea/magento2plugin/actions/generation/generator/DataModelInterfaceGenerator.java create mode 100644 src/com/magento/idea/magento2plugin/actions/generation/generator/util/PhpClassGeneratorUtil.java create mode 100644 src/com/magento/idea/magento2plugin/magento/files/DataModel.java create mode 100644 src/com/magento/idea/magento2plugin/magento/files/DataModelInterface.java diff --git a/resources/META-INF/plugin.xml b/resources/META-INF/plugin.xml index 00fdb1101..98aa72933 100644 --- a/resources/META-INF/plugin.xml +++ b/resources/META-INF/plugin.xml @@ -67,6 +67,7 @@ + @@ -210,6 +211,8 @@ + + diff --git a/resources/fileTemplates/internal/Magento Data Model Interface.php.ft b/resources/fileTemplates/internal/Magento Data Model Interface.php.ft new file mode 100644 index 000000000..8c74e5021 --- /dev/null +++ b/resources/fileTemplates/internal/Magento Data Model Interface.php.ft @@ -0,0 +1,10 @@ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewDataModelDialog.java b/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewDataModelDialog.java new file mode 100644 index 000000000..9cd64a0c1 --- /dev/null +++ b/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewDataModelDialog.java @@ -0,0 +1,161 @@ +/* + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +package com.magento.idea.magento2plugin.actions.generation.dialog; + +import com.intellij.openapi.project.Project; +import com.intellij.psi.PsiDirectory; +import com.magento.idea.magento2plugin.actions.generation.NewDataModelAction; +import com.magento.idea.magento2plugin.actions.generation.data.DataModelData; +import com.magento.idea.magento2plugin.actions.generation.data.DataModelInterfaceData; +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.DataModelGenerator; +import com.magento.idea.magento2plugin.actions.generation.generator.DataModelInterfaceGenerator; +import com.magento.idea.magento2plugin.actions.generation.generator.util.NamespaceBuilder; +import com.magento.idea.magento2plugin.magento.files.DataModel; +import com.magento.idea.magento2plugin.magento.files.DataModelInterface; +import com.magento.idea.magento2plugin.util.magento.GetModuleNameByDirectoryUtil; + +import javax.swing.JButton; +import javax.swing.JComponent; +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; + +public class NewDataModelDialog extends AbstractDialog { + private final Project project; + private final PsiDirectory directory; + private final String moduleName; + private NamespaceBuilder interfaceNamespace; + private NamespaceBuilder modelNamespace; + + private static final String MODEL_NAME = "Model Name"; + + private JPanel contentPanel; + private JButton buttonOK; + private JButton buttonCancel; + + @FieldValidation(rule = RuleRegistry.NOT_EMPTY, + message = {NotEmptyRule.MESSAGE, MODEL_NAME}) + @FieldValidation(rule = RuleRegistry.PHP_CLASS, + message = {PhpClassRule.MESSAGE, MODEL_NAME}) + private JTextField modelName; + + public NewDataModelDialog(final Project project, final PsiDirectory directory) { + super(); + + this.project = project; + this.directory = directory; + this.moduleName = GetModuleNameByDirectoryUtil.execute(directory, project); + + setContentPane(contentPanel); + setModal(true); + setTitle(NewDataModelAction.ACTION_DESCRIPTION); + getRootPane().setDefaultButton(buttonOK); + + buttonOK.addActionListener((final ActionEvent event) -> onOK()); + buttonCancel.addActionListener((final ActionEvent event) -> onCancel()); + + // call onCancel() on dialog close + setDefaultCloseOperation(DO_NOTHING_ON_CLOSE); + addWindowListener(new WindowAdapter() { + @Override + public void windowClosing(final WindowEvent event) { + onCancel(); + } + }); + + // call onCancel() on ESCAPE KEY press + contentPanel.registerKeyboardAction( + (final ActionEvent event) -> onCancel(), + KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), + JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT + ); + } + + public static void open(final Project project, final PsiDirectory directory) { + final NewDataModelDialog dialog = new NewDataModelDialog(project, directory); + dialog.pack(); + dialog.centerDialog(dialog); + dialog.setVisible(true); + } + + protected void onOK() { + if (validateFormFields()) { + buildNamespaces(); + generateModelInterfaceFile(); + generateModelFile(); + this.setVisible(false); + } + } + + @Override + public void onCancel() { + dispose(); + } + + private void generateModelInterfaceFile() { + new DataModelInterfaceGenerator(project, new DataModelInterfaceData( + getInterfaceNamespace(), + getInterfaceName(), + getModuleName(), + getInterfaceFQN() + )).generate(NewDataModelAction.ACTION_NAME, true); + } + + private void generateModelFile() { + new DataModelGenerator(project, new DataModelData( + getModelNamespace(), + getModelName(), + getModuleName(), + getModelFQN(), + getInterfaceFQN() + )).generate(NewDataModelAction.ACTION_NAME, true); + } + + private void buildNamespaces() { + interfaceNamespace = new NamespaceBuilder( + getModuleName(), getInterfaceName(), DataModelInterface.DIRECTORY + ); + modelNamespace = new NamespaceBuilder( + getModuleName(), getModelName(), DataModel.DIRECTORY + ); + } + + private String getModuleName() { + return moduleName; + } + + private String getInterfaceNamespace() { + return interfaceNamespace.getNamespace(); + } + + private String getInterfaceName() { + return modelName.getText().trim().concat("Interface"); + } + + private String getInterfaceFQN() { + return interfaceNamespace.getClassFqn(); + } + + private String getModelNamespace() { + return modelNamespace.getNamespace(); + } + + private String getModelName() { + return modelName.getText().trim(); + } + + private String getModelFQN() { + return modelNamespace.getClassFqn(); + } +} diff --git a/src/com/magento/idea/magento2plugin/actions/generation/generator/DataModelGenerator.java b/src/com/magento/idea/magento2plugin/actions/generation/generator/DataModelGenerator.java new file mode 100644 index 000000000..74febddab --- /dev/null +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/DataModelGenerator.java @@ -0,0 +1,138 @@ +/* + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +package com.magento.idea.magento2plugin.actions.generation.generator; + +import com.intellij.openapi.command.WriteCommandAction; +import com.intellij.openapi.project.Project; +import com.intellij.psi.PsiDirectory; +import com.intellij.psi.PsiFile; +import com.jetbrains.php.lang.psi.PhpFile; +import com.jetbrains.php.lang.psi.elements.PhpClass; +import com.magento.idea.magento2plugin.actions.generation.data.DataModelData; +import com.magento.idea.magento2plugin.actions.generation.generator.util.DirectoryGenerator; +import com.magento.idea.magento2plugin.actions.generation.generator.util.FileFromTemplateGenerator; +import com.magento.idea.magento2plugin.actions.generation.generator.util.PhpClassGeneratorUtil; +import com.magento.idea.magento2plugin.bundles.CommonBundle; +import com.magento.idea.magento2plugin.bundles.ValidatorBundle; +import com.magento.idea.magento2plugin.indexes.ModuleIndex; +import com.magento.idea.magento2plugin.magento.files.DataModel; +import com.magento.idea.magento2plugin.util.GetFirstClassOfFile; +import com.magento.idea.magento2plugin.util.GetPhpClassByFQN; + +import javax.swing.JOptionPane; +import java.util.Arrays; +import java.util.List; +import java.util.Properties; + +public class DataModelGenerator extends FileGenerator { + private final Project project; + private final DataModelData modelData; + private final DirectoryGenerator directoryGenerator; + private final FileFromTemplateGenerator fileFromTemplateGenerator; + private final GetFirstClassOfFile getFirstClassOfFile; + private final ValidatorBundle validatorBundle; + private final CommonBundle commonBundle; + + public DataModelGenerator(Project project, DataModelData modelData) { + super(project); + + this.project = project; + this.modelData = modelData; + this.directoryGenerator = DirectoryGenerator.getInstance(); + this.fileFromTemplateGenerator = FileFromTemplateGenerator.getInstance(project); + this.getFirstClassOfFile = GetFirstClassOfFile.getInstance(); + this.validatorBundle = new ValidatorBundle(); + this.commonBundle = new CommonBundle(); + } + + @Override + public PsiFile generate(String actionName) { + final PsiFile[] files = new PsiFile[1]; + + WriteCommandAction.runWriteCommandAction(project, () -> { + PhpClass model = GetPhpClassByFQN.getInstance(project).execute( + modelData.getFQN() + ); + + if (model != null) { + final String errorMessage = this.validatorBundle.message( + "validator.file.alreadyExists", + "Data Model" + ); + JOptionPane.showMessageDialog( + null, + errorMessage, + commonBundle.message("common.error"), + JOptionPane.ERROR_MESSAGE + ); + } else { + model = createModel(actionName); + + if (model == null) { + final String errorMessage = this.validatorBundle.message( + "validator.file.cantBeCreated", + "Data Model" + ); + JOptionPane.showMessageDialog( + null, + errorMessage, + commonBundle.message("common.error"), + JOptionPane.ERROR_MESSAGE + ); + } else { + files[0] = model.getContainingFile(); + } + } + }); + + return files[0]; + } + + @Override + protected void fillAttributes(Properties attributes) { + final List uses = getUses(); + attributes.setProperty("NAMESPACE", modelData.getNamespace()); + attributes.setProperty("USES", PhpClassGeneratorUtil.formatUses(uses)); + attributes.setProperty("NAME", modelData.getName()); + attributes.setProperty( + "EXTENDS", + PhpClassGeneratorUtil.getNameFromFqn(DataModel.DATA_OBJECT) + ); + attributes.setProperty( + "IMPLEMENTS", + PhpClassGeneratorUtil.getNameFromFqn(modelData.getInterfaceFQN()) + ); + } + + private List getUses() { + return Arrays.asList( + DataModel.DATA_OBJECT, + modelData.getInterfaceFQN() + ); + } + + private PhpClass createModel(String actionName) { + PsiDirectory parentDirectory = ModuleIndex.getInstance(project) + .getModuleDirectoryByModuleName(modelData.getModuleName()); + final PsiFile interfaceFile; + final Properties attributes = getAttributes(); + + for (String directory: DataModel.DIRECTORY.split("/")) { + parentDirectory = directoryGenerator.findOrCreateSubdirectory( + parentDirectory, directory + ); + } + + interfaceFile = fileFromTemplateGenerator.generate( + new DataModel(modelData.getName()), + attributes, + parentDirectory, + actionName + ); + + return interfaceFile == null ? null : getFirstClassOfFile.execute((PhpFile) interfaceFile); + } +} diff --git a/src/com/magento/idea/magento2plugin/actions/generation/generator/DataModelInterfaceGenerator.java b/src/com/magento/idea/magento2plugin/actions/generation/generator/DataModelInterfaceGenerator.java new file mode 100644 index 000000000..9d2e45965 --- /dev/null +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/DataModelInterfaceGenerator.java @@ -0,0 +1,121 @@ +/* + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +package com.magento.idea.magento2plugin.actions.generation.generator; + +import com.intellij.openapi.command.WriteCommandAction; +import com.intellij.openapi.project.Project; +import com.intellij.psi.PsiDirectory; +import com.intellij.psi.PsiFile; +import com.jetbrains.php.lang.psi.PhpFile; +import com.jetbrains.php.lang.psi.elements.PhpClass; +import com.magento.idea.magento2plugin.actions.generation.data.DataModelInterfaceData; +import com.magento.idea.magento2plugin.actions.generation.generator.util.DirectoryGenerator; +import com.magento.idea.magento2plugin.actions.generation.generator.util.FileFromTemplateGenerator; +import com.magento.idea.magento2plugin.bundles.CommonBundle; +import com.magento.idea.magento2plugin.bundles.ValidatorBundle; +import com.magento.idea.magento2plugin.indexes.ModuleIndex; +import com.magento.idea.magento2plugin.magento.files.DataModelInterface; +import com.magento.idea.magento2plugin.util.GetFirstClassOfFile; +import com.magento.idea.magento2plugin.util.GetPhpClassByFQN; + +import javax.swing.JOptionPane; +import java.util.Properties; + +public class DataModelInterfaceGenerator extends FileGenerator { + private final Project project; + private final DataModelInterfaceData interfaceData; + private final DirectoryGenerator directoryGenerator; + private final FileFromTemplateGenerator fileFromTemplateGenerator; + private final GetFirstClassOfFile getFirstClassOfFile; + private final ValidatorBundle validatorBundle; + private final CommonBundle commonBundle; + + public DataModelInterfaceGenerator( + final Project project, + final DataModelInterfaceData interfaceData + ) { + super(project); + + this.project = project; + this.interfaceData = interfaceData; + this.directoryGenerator = DirectoryGenerator.getInstance(); + this.fileFromTemplateGenerator = FileFromTemplateGenerator.getInstance(project); + this.getFirstClassOfFile = GetFirstClassOfFile.getInstance(); + this.validatorBundle = new ValidatorBundle(); + this.commonBundle = new CommonBundle(); + } + + @Override + public PsiFile generate(String actionName) { + final PsiFile[] files = new PsiFile[1]; + + WriteCommandAction.runWriteCommandAction(project, () -> { + PhpClass modelInterface = GetPhpClassByFQN.getInstance(project).execute( + interfaceData.getFQN() + ); + + if (modelInterface != null) { + final String errorMessage = this.validatorBundle.message( + "validator.file.alreadyExists", + "Data Model Interface" + ); + JOptionPane.showMessageDialog( + null, + errorMessage, + commonBundle.message("common.error"), + JOptionPane.ERROR_MESSAGE + ); + } else { + modelInterface = createInterface(actionName); + + if (modelInterface == null) { + final String errorMessage = this.validatorBundle.message( + "validator.file.cantBeCreated", + "Data Model Interface" + ); + JOptionPane.showMessageDialog( + null, + errorMessage, + commonBundle.message("common.error"), + JOptionPane.ERROR_MESSAGE + ); + } else { + files[0] = modelInterface.getContainingFile(); + } + } + }); + + return files[0]; + } + + @Override + protected void fillAttributes(Properties attributes) { + attributes.setProperty("NAME", interfaceData.getName()); + attributes.setProperty("NAMESPACE", interfaceData.getNamespace()); + } + + private PhpClass createInterface(String actionName) { + PsiDirectory parentDirectory = ModuleIndex.getInstance(project) + .getModuleDirectoryByModuleName(interfaceData.getModuleName()); + final PsiFile interfaceFile; + final Properties attributes = getAttributes(); + + for (String directory: DataModelInterface.DIRECTORY.split("/")) { + parentDirectory = directoryGenerator.findOrCreateSubdirectory( + parentDirectory, directory + ); + } + + interfaceFile = fileFromTemplateGenerator.generate( + new DataModelInterface(interfaceData.getName()), + attributes, + parentDirectory, + actionName + ); + + return interfaceFile == null ? null : getFirstClassOfFile.execute((PhpFile) interfaceFile); + } +} diff --git a/src/com/magento/idea/magento2plugin/actions/generation/generator/util/PhpClassGeneratorUtil.java b/src/com/magento/idea/magento2plugin/actions/generation/generator/util/PhpClassGeneratorUtil.java new file mode 100644 index 000000000..8ca594980 --- /dev/null +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/util/PhpClassGeneratorUtil.java @@ -0,0 +1,38 @@ +/* + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +package com.magento.idea.magento2plugin.actions.generation.generator.util; + +import java.util.Collections; +import java.util.List; + +public final class PhpClassGeneratorUtil { + + private PhpClassGeneratorUtil() {} + + /** + * Formats PHP class uses. + * + * @param uses List + * @return String + */ + public static String formatUses(final List uses) { + Collections.sort(uses); + + return String.join(",", uses); + } + + /** + * Fetches the class name from a fully qualified name. + * + * @param fqn FQN + * @return String + */ + public static String getNameFromFqn(final String fqn) { + final String[] fqnArray = fqn.split("\\\\"); + + return fqnArray[fqnArray.length - 1]; + } +} \ No newline at end of file diff --git a/src/com/magento/idea/magento2plugin/magento/files/DataModel.java b/src/com/magento/idea/magento2plugin/magento/files/DataModel.java new file mode 100644 index 000000000..1b8782c3b --- /dev/null +++ b/src/com/magento/idea/magento2plugin/magento/files/DataModel.java @@ -0,0 +1,34 @@ +/* + * 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; + +public class DataModel implements ModuleFileInterface { + public static final String DIRECTORY = "Model/Data"; + public static final String DATA_OBJECT = "Magento\\Framework\\DataObject"; + private final String className; + + public DataModel(final String className) { + this.className = className.concat(".php"); + } + + @Override + public String getFileName() { + return className; + } + + @Override + public String getTemplate() { + return "Magento Data Model"; + } + + @Override + public Language getLanguage() { + return PhpLanguage.INSTANCE; + } +} \ No newline at end of file diff --git a/src/com/magento/idea/magento2plugin/magento/files/DataModelInterface.java b/src/com/magento/idea/magento2plugin/magento/files/DataModelInterface.java new file mode 100644 index 000000000..8b79cda6d --- /dev/null +++ b/src/com/magento/idea/magento2plugin/magento/files/DataModelInterface.java @@ -0,0 +1,33 @@ +/* + * 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; + +public class DataModelInterface implements ModuleFileInterface { + public static final String DIRECTORY = "Api/Data"; + private final String className; + + public DataModelInterface(final String className) { + this.className = className.concat(".php"); + } + + @Override + public String getFileName() { + return className; + } + + @Override + public String getTemplate() { + return "Magento Data Model Interface"; + } + + @Override + public Language getLanguage() { + return PhpLanguage.INSTANCE; + } +} From fd644e1fa6e1704d92a9b84508c3863ee172bd61 Mon Sep 17 00:00:00 2001 From: Adarsh Manickam Date: Wed, 18 Nov 2020 18:24:56 +0530 Subject: [PATCH 02/13] Updated templates to generate properties --- .../Magento Data Model Interface.php.ft | 36 +++++++++++++++++-- .../internal/Magento Data Model.php.ft | 33 +++++++++++++++-- .../generation/data/DataModelData.java | 9 ++++- .../data/DataModelInterfaceData.java | 9 ++++- .../generator/DataModelGenerator.java | 1 + .../DataModelInterfaceGenerator.java | 1 + 6 files changed, 82 insertions(+), 7 deletions(-) diff --git a/resources/fileTemplates/internal/Magento Data Model Interface.php.ft b/resources/fileTemplates/internal/Magento Data Model Interface.php.ft index 8c74e5021..78fde3427 100644 --- a/resources/fileTemplates/internal/Magento Data Model Interface.php.ft +++ b/resources/fileTemplates/internal/Magento Data Model Interface.php.ft @@ -2,9 +2,41 @@ #parse("PHP File Header.php") #if (${NAMESPACE}) -namespace ${NAMESPACE}; + namespace ${NAMESPACE}; #end -interface ${NAME} { +interface ${NAME} +{ + #if (${PROPERTIES}) + /** + * String constants for property names + */ + #set ($properties = ${PROPERTIES}) + #foreach ($property in $properties.split(",")) + #set ($propertyData = $property.split(";")) + #set ($propertyUpperSnake = $propertyData.get(0)) + #set ($propertyLowerSnake = $propertyData.get(1)) + const $propertyUpperSnake = "$propertyLowerSnake"; + #end + #end + #if (${PROPERTIES}) + #set ($properties = ${PROPERTIES}) + #foreach ($property in $properties.split(",")) + #set ($propertyData = $property.split(";")) + #set ($propertyType = $propertyData.get(2)) + #set ($propertyUpperCamel = $propertyData.get(3)) + #set ($propertyLowerCamel = $propertyData.get(4)) + /** + * @return $propertyType + */ + public function get$propertyUpperCamel(); + + /** + * @param $propertyType $$propertyLowerCamel + * @return $this + */ + public function set$propertyUpperCamel($$propertyLowerCamel); + #end + #end } diff --git a/resources/fileTemplates/internal/Magento Data Model.php.ft b/resources/fileTemplates/internal/Magento Data Model.php.ft index c02d3a4c5..63b4a4cfa 100644 --- a/resources/fileTemplates/internal/Magento Data Model.php.ft +++ b/resources/fileTemplates/internal/Magento Data Model.php.ft @@ -2,14 +2,41 @@ #parse("PHP File Header.php") #if (${NAMESPACE}) -namespace ${NAMESPACE}; + namespace ${NAMESPACE}; #end #set ($uses = ${USES}) #foreach ($use in $uses.split(",")) -use $use; + use $use; #end -class ${NAME} #if (${EXTENDS})extends ${EXTENDS} #end #if (${IMPLEMENTS})implements ${IMPLEMENTS}#end { +class ${NAME} #if (${EXTENDS})extends ${EXTENDS} #end #if (${IMPLEMENTS})implements ${IMPLEMENTS}#end +{ + #if (${PROPERTIES}) + #set ($properties = ${PROPERTIES}) + #foreach ($property in $properties.split(",")) + #set ($propertyData = $property.split(";")) + #set ($propertyUpperSnake = $propertyData.get(0)) + #set ($propertyUpperCamel = $propertyData.get(3)) + #set ($propertyLowerCamel = $propertyData.get(4)) + #if(!($foreach.first)) + #end + /** + * @inheritDoc + */ + public function get$propertyUpperCamel() + { + return $this->getData(self::$propertyUpperSnake); + } + + /** + * @inheritDoc + */ + public function set$propertyUpperCamel($$propertyLowerCamel) + { + return $this->setData(self::$propertyUpperSnake, $$propertyLowerCamel); + } + #end + #end } diff --git a/src/com/magento/idea/magento2plugin/actions/generation/data/DataModelData.java b/src/com/magento/idea/magento2plugin/actions/generation/data/DataModelData.java index b688c4221..30c1d8d6c 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/data/DataModelData.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/data/DataModelData.java @@ -11,19 +11,22 @@ public class DataModelData { private final String moduleName; private final String fqn; private final String interfaceFQN; + private final String properties; public DataModelData( final String namespace, final String name, final String moduleName, final String fqn, - final String interfaceFQN + final String interfaceFQN, + final String properties ) { this.namespace = namespace; this.name = name; this.moduleName = moduleName; this.fqn = fqn; this.interfaceFQN = interfaceFQN; + this.properties = properties; } public String getNamespace() { @@ -45,4 +48,8 @@ public String getFQN() { public String getInterfaceFQN() { return interfaceFQN; } + + public String getProperties() { + return properties; + } } diff --git a/src/com/magento/idea/magento2plugin/actions/generation/data/DataModelInterfaceData.java b/src/com/magento/idea/magento2plugin/actions/generation/data/DataModelInterfaceData.java index 60a862f39..3df2a6295 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/data/DataModelInterfaceData.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/data/DataModelInterfaceData.java @@ -10,17 +10,20 @@ public class DataModelInterfaceData { private final String name; private final String moduleName; private final String fqn; + private final String properties; public DataModelInterfaceData( final String namespace, final String name, final String moduleName, - final String fqn + final String fqn, + final String properties ) { this.namespace = namespace; this.name = name; this.moduleName = moduleName; this.fqn = fqn; + this.properties = properties; } public String getNamespace() { @@ -38,4 +41,8 @@ public String getModuleName() { public String getFQN() { return fqn; } + + public String getProperties() { + return properties; + } } diff --git a/src/com/magento/idea/magento2plugin/actions/generation/generator/DataModelGenerator.java b/src/com/magento/idea/magento2plugin/actions/generation/generator/DataModelGenerator.java index 74febddab..1f86deca2 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/generator/DataModelGenerator.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/DataModelGenerator.java @@ -105,6 +105,7 @@ protected void fillAttributes(Properties attributes) { "IMPLEMENTS", PhpClassGeneratorUtil.getNameFromFqn(modelData.getInterfaceFQN()) ); + attributes.setProperty("PROPERTIES", modelData.getProperties()); } private List getUses() { diff --git a/src/com/magento/idea/magento2plugin/actions/generation/generator/DataModelInterfaceGenerator.java b/src/com/magento/idea/magento2plugin/actions/generation/generator/DataModelInterfaceGenerator.java index 9d2e45965..3f4299936 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/generator/DataModelInterfaceGenerator.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/DataModelInterfaceGenerator.java @@ -95,6 +95,7 @@ public PsiFile generate(String actionName) { protected void fillAttributes(Properties attributes) { attributes.setProperty("NAME", interfaceData.getName()); attributes.setProperty("NAMESPACE", interfaceData.getNamespace()); + attributes.setProperty("PROPERTIES", interfaceData.getProperties()); } private PhpClass createInterface(String actionName) { From 7cf309a590c51d50abd7ad5986861fe6ffc6a278 Mon Sep 17 00:00:00 2001 From: Adarsh Manickam Date: Wed, 18 Nov 2020 18:30:38 +0530 Subject: [PATCH 03/13] Updated NewDataModelDialog with property generation --- .../generation/dialog/NewDataModelDialog.java | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewDataModelDialog.java b/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewDataModelDialog.java index 9cd64a0c1..b6f1e5c95 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewDataModelDialog.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewDataModelDialog.java @@ -33,7 +33,6 @@ public class NewDataModelDialog extends AbstractDialog { private final Project project; - private final PsiDirectory directory; private final String moduleName; private NamespaceBuilder interfaceNamespace; private NamespaceBuilder modelNamespace; @@ -54,7 +53,6 @@ public NewDataModelDialog(final Project project, final PsiDirectory directory) { super(); this.project = project; - this.directory = directory; this.moduleName = GetModuleNameByDirectoryUtil.execute(directory, project); setContentPane(contentPanel); @@ -108,7 +106,8 @@ private void generateModelInterfaceFile() { getInterfaceNamespace(), getInterfaceName(), getModuleName(), - getInterfaceFQN() + getInterfaceFQN(), + getProperties() )).generate(NewDataModelAction.ACTION_NAME, true); } @@ -118,7 +117,8 @@ private void generateModelFile() { getModelName(), getModuleName(), getModelFQN(), - getInterfaceFQN() + getInterfaceFQN(), + getProperties() )).generate(NewDataModelAction.ACTION_NAME, true); } @@ -158,4 +158,8 @@ private String getModelName() { private String getModelFQN() { return modelNamespace.getClassFqn(); } + + private String getProperties() { + return ""; + } } From 64dc689903e7d303d415c724a1f97e826b649c1d Mon Sep 17 00:00:00 2001 From: Adarsh Manickam Date: Fri, 20 Nov 2020 00:22:24 +0530 Subject: [PATCH 04/13] Added dynamic table to NewDataModelDialog --- .../generation/dialog/NewDataModelDialog.form | 97 +++++++++++++------ .../generation/dialog/NewDataModelDialog.java | 56 ++++++++++- 2 files changed, 121 insertions(+), 32 deletions(-) diff --git a/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewDataModelDialog.form b/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewDataModelDialog.form index ec3d26c54..1429094eb 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewDataModelDialog.form +++ b/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewDataModelDialog.form @@ -1,19 +1,82 @@
- + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + @@ -51,34 +114,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - -
diff --git a/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewDataModelDialog.java b/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewDataModelDialog.java index b6f1e5c95..484578055 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewDataModelDialog.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewDataModelDialog.java @@ -6,6 +6,7 @@ package com.magento.idea.magento2plugin.actions.generation.dialog; import com.intellij.openapi.project.Project; +import com.intellij.openapi.ui.ComboBoxTableRenderer; import com.intellij.psi.PsiDirectory; import com.magento.idea.magento2plugin.actions.generation.NewDataModelAction; import com.magento.idea.magento2plugin.actions.generation.data.DataModelData; @@ -19,13 +20,20 @@ import com.magento.idea.magento2plugin.actions.generation.generator.util.NamespaceBuilder; import com.magento.idea.magento2plugin.magento.files.DataModel; import com.magento.idea.magento2plugin.magento.files.DataModelInterface; +import com.magento.idea.magento2plugin.ui.table.ComboBoxEditor; +import com.magento.idea.magento2plugin.ui.table.DeleteRowButton; +import com.magento.idea.magento2plugin.ui.table.TableButton; import com.magento.idea.magento2plugin.util.magento.GetModuleNameByDirectoryUtil; import javax.swing.JButton; +import javax.swing.JCheckBox; import javax.swing.JComponent; import javax.swing.JPanel; +import javax.swing.JTable; import javax.swing.JTextField; import javax.swing.KeyStroke; +import javax.swing.table.DefaultTableModel; +import javax.swing.table.TableColumn; import java.awt.event.ActionEvent; import java.awt.event.KeyEvent; import java.awt.event.WindowAdapter; @@ -38,10 +46,18 @@ public class NewDataModelDialog extends AbstractDialog { private NamespaceBuilder modelNamespace; private static final String MODEL_NAME = "Model Name"; + private static final String PROPERTY_NAME = "Name"; + private static final String PROPERTY_TYPE = "Type"; + private static final String PROPERTY_ACTION = "Action"; + private static final String PROPERTY_DELETE = "Delete"; + + private static final String[] PROPERTY_TYPES = {"int", "float", "string", "bool"}; private JPanel contentPanel; private JButton buttonOK; private JButton buttonCancel; + private JTable properties; + private JButton addProperty; @FieldValidation(rule = RuleRegistry.NOT_EMPTY, message = {NotEmptyRule.MESSAGE, MODEL_NAME}) @@ -72,6 +88,8 @@ public void windowClosing(final WindowEvent event) { } }); + initPropertiesTable(); + // call onCancel() on ESCAPE KEY press contentPanel.registerKeyboardAction( (final ActionEvent event) -> onCancel(), @@ -87,7 +105,7 @@ public static void open(final Project project, final PsiDirectory directory) { dialog.setVisible(true); } - protected void onOK() { + private void onOK() { if (validateFormFields()) { buildNamespaces(); generateModelInterfaceFile(); @@ -162,4 +180,40 @@ private String getModelFQN() { private String getProperties() { return ""; } + + private void initPropertiesTable() { + final DefaultTableModel propertiesTable = getPropertiesTable(); + propertiesTable.setDataVector( + new Object[][]{}, + new Object[]{ + PROPERTY_NAME, + PROPERTY_TYPE, + PROPERTY_ACTION + } + ); + + final TableColumn column = properties.getColumn(PROPERTY_ACTION); + column.setCellRenderer(new TableButton(PROPERTY_DELETE)); + column.setCellEditor(new DeleteRowButton(new JCheckBox())); + + addProperty.addActionListener(e -> { + propertiesTable.addRow(new Object[]{ + "", + PROPERTY_TYPES[0], + PROPERTY_DELETE + }); + }); + + initPropertyTypeColumn(); + } + + private void initPropertyTypeColumn() { + final TableColumn formElementTypeColumn = properties.getColumn(PROPERTY_TYPE); + formElementTypeColumn.setCellEditor(new ComboBoxEditor(PROPERTY_TYPES)); + formElementTypeColumn.setCellRenderer(new ComboBoxTableRenderer<>(PROPERTY_TYPES)); + } + + private DefaultTableModel getPropertiesTable() { + return (DefaultTableModel) properties.getModel(); + } } From 186f680b4966c3e397246659003a55b466dc8761 Mon Sep 17 00:00:00 2001 From: Adarsh Manickam Date: Fri, 20 Nov 2020 18:21:52 +0530 Subject: [PATCH 05/13] Completed property generation --- .../generation/dialog/NewDataModelDialog.form | 10 ++-- .../generation/dialog/NewDataModelDialog.java | 46 ++++++++++++++++--- .../generator/util/PhpClassGeneratorUtil.java | 2 +- .../magento/files/DataModel.java | 2 +- 4 files changed, 47 insertions(+), 13 deletions(-) diff --git a/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewDataModelDialog.form b/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewDataModelDialog.form index 1429094eb..b9fd06802 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewDataModelDialog.form +++ b/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewDataModelDialog.form @@ -1,19 +1,19 @@
- + - + - + @@ -41,7 +41,7 @@ - + @@ -76,7 +76,7 @@ - + diff --git a/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewDataModelDialog.java b/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewDataModelDialog.java index 484578055..2c11551b9 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewDataModelDialog.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewDataModelDialog.java @@ -5,6 +5,7 @@ package com.magento.idea.magento2plugin.actions.generation.dialog; +import com.google.common.base.CaseFormat; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.ComboBoxTableRenderer; import com.intellij.psi.PsiDirectory; @@ -24,7 +25,11 @@ import com.magento.idea.magento2plugin.ui.table.DeleteRowButton; import com.magento.idea.magento2plugin.ui.table.TableButton; import com.magento.idea.magento2plugin.util.magento.GetModuleNameByDirectoryUtil; - +import java.awt.event.ActionEvent; +import java.awt.event.KeyEvent; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; +import java.util.ArrayList; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JComponent; @@ -34,16 +39,18 @@ import javax.swing.KeyStroke; import javax.swing.table.DefaultTableModel; import javax.swing.table.TableColumn; -import java.awt.event.ActionEvent; -import java.awt.event.KeyEvent; -import java.awt.event.WindowAdapter; -import java.awt.event.WindowEvent; +import org.apache.commons.lang.StringUtils; + +@SuppressWarnings({ + "PMD.ExcessiveImports" +}) public class NewDataModelDialog extends AbstractDialog { private final Project project; private final String moduleName; private NamespaceBuilder interfaceNamespace; private NamespaceBuilder modelNamespace; + private String formattedProperties; private static final String MODEL_NAME = "Model Name"; private static final String PROPERTY_NAME = "Name"; @@ -108,6 +115,7 @@ public static void open(final Project project, final PsiDirectory directory) { private void onOK() { if (validateFormFields()) { buildNamespaces(); + formatProperties(); generateModelInterfaceFile(); generateModelFile(); this.setVisible(false); @@ -149,6 +157,32 @@ private void buildNamespaces() { ); } + /** + * Formats properties into a string format, ready for templating. + * "UPPER_SNAKE;lower_snake;type;UpperCamel;lowerCamel". + */ + private void formatProperties() { + final DefaultTableModel propertiesTable = getPropertiesTable(); + final ArrayList properties = new ArrayList<>(); + final ArrayList propertyData = new ArrayList<>(); + final int rowCount = propertiesTable.getRowCount(); + String name; + String type; + + for (int index = 0; index < rowCount; index++, propertyData.clear()) { + name = propertiesTable.getValueAt(index, 0).toString(); + type = propertiesTable.getValueAt(index, 1).toString(); + propertyData.add(CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.UPPER_UNDERSCORE, name)); + propertyData.add(name); + propertyData.add(type); + propertyData.add(CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.UPPER_CAMEL, name)); + propertyData.add(CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, name)); + properties.add(StringUtils.join(propertyData, ";")); + } + + formattedProperties = StringUtils.join(properties, ","); + } + private String getModuleName() { return moduleName; } @@ -178,7 +212,7 @@ private String getModelFQN() { } private String getProperties() { - return ""; + return formattedProperties; } private void initPropertiesTable() { diff --git a/src/com/magento/idea/magento2plugin/actions/generation/generator/util/PhpClassGeneratorUtil.java b/src/com/magento/idea/magento2plugin/actions/generation/generator/util/PhpClassGeneratorUtil.java index 8ca594980..40677f142 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/generator/util/PhpClassGeneratorUtil.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/util/PhpClassGeneratorUtil.java @@ -35,4 +35,4 @@ public static String getNameFromFqn(final String fqn) { return fqnArray[fqnArray.length - 1]; } -} \ No newline at end of file +} diff --git a/src/com/magento/idea/magento2plugin/magento/files/DataModel.java b/src/com/magento/idea/magento2plugin/magento/files/DataModel.java index 1b8782c3b..5158f55f4 100644 --- a/src/com/magento/idea/magento2plugin/magento/files/DataModel.java +++ b/src/com/magento/idea/magento2plugin/magento/files/DataModel.java @@ -31,4 +31,4 @@ public String getTemplate() { public Language getLanguage() { return PhpLanguage.INSTANCE; } -} \ No newline at end of file +} From 227f382f08fc2eec6e68c239e62bdfb4d4af8fb9 Mon Sep 17 00:00:00 2001 From: Adarsh Manickam Date: Fri, 20 Nov 2020 18:38:51 +0530 Subject: [PATCH 06/13] Fixed CheckStyle issues --- .../actions/generation/data/DataModelData.java | 3 +++ .../actions/generation/data/DataModelInterfaceData.java | 3 +++ .../actions/generation/dialog/NewDataModelDialog.java | 9 +++++++-- .../actions/generation/generator/DataModelGenerator.java | 6 ++++-- .../generator/DataModelInterfaceGenerator.java | 6 ++++-- 5 files changed, 21 insertions(+), 6 deletions(-) diff --git a/src/com/magento/idea/magento2plugin/actions/generation/data/DataModelData.java b/src/com/magento/idea/magento2plugin/actions/generation/data/DataModelData.java index 30c1d8d6c..30a288057 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/data/DataModelData.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/data/DataModelData.java @@ -13,6 +13,9 @@ public class DataModelData { private final String interfaceFQN; private final String properties; + /** + * Constructor. + */ public DataModelData( final String namespace, final String name, diff --git a/src/com/magento/idea/magento2plugin/actions/generation/data/DataModelInterfaceData.java b/src/com/magento/idea/magento2plugin/actions/generation/data/DataModelInterfaceData.java index 3df2a6295..8b7e269b5 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/data/DataModelInterfaceData.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/data/DataModelInterfaceData.java @@ -12,6 +12,9 @@ public class DataModelInterfaceData { private final String fqn; private final String properties; + /** + * Constructor. + */ public DataModelInterfaceData( final String namespace, final String name, diff --git a/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewDataModelDialog.java b/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewDataModelDialog.java index 2c11551b9..8701fed9c 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewDataModelDialog.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewDataModelDialog.java @@ -41,9 +41,8 @@ import javax.swing.table.TableColumn; import org.apache.commons.lang.StringUtils; - @SuppressWarnings({ - "PMD.ExcessiveImports" + "PMD.ExcessiveImports", }) public class NewDataModelDialog extends AbstractDialog { private final Project project; @@ -72,6 +71,9 @@ public class NewDataModelDialog extends AbstractDialog { message = {PhpClassRule.MESSAGE, MODEL_NAME}) private JTextField modelName; + /** + * Constructor. + */ public NewDataModelDialog(final Project project, final PsiDirectory directory) { super(); @@ -105,6 +107,9 @@ public void windowClosing(final WindowEvent event) { ); } + /** + * Opens the dialog window. + */ public static void open(final Project project, final PsiDirectory directory) { final NewDataModelDialog dialog = new NewDataModelDialog(project, directory); dialog.pack(); diff --git a/src/com/magento/idea/magento2plugin/actions/generation/generator/DataModelGenerator.java b/src/com/magento/idea/magento2plugin/actions/generation/generator/DataModelGenerator.java index 1f86deca2..60b989111 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/generator/DataModelGenerator.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/DataModelGenerator.java @@ -21,11 +21,10 @@ import com.magento.idea.magento2plugin.magento.files.DataModel; import com.magento.idea.magento2plugin.util.GetFirstClassOfFile; import com.magento.idea.magento2plugin.util.GetPhpClassByFQN; - -import javax.swing.JOptionPane; import java.util.Arrays; import java.util.List; import java.util.Properties; +import javax.swing.JOptionPane; public class DataModelGenerator extends FileGenerator { private final Project project; @@ -36,6 +35,9 @@ public class DataModelGenerator extends FileGenerator { private final ValidatorBundle validatorBundle; private final CommonBundle commonBundle; + /** + * Constructor. + */ public DataModelGenerator(Project project, DataModelData modelData) { super(project); diff --git a/src/com/magento/idea/magento2plugin/actions/generation/generator/DataModelInterfaceGenerator.java b/src/com/magento/idea/magento2plugin/actions/generation/generator/DataModelInterfaceGenerator.java index 3f4299936..652c78f69 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/generator/DataModelInterfaceGenerator.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/DataModelInterfaceGenerator.java @@ -20,9 +20,8 @@ import com.magento.idea.magento2plugin.magento.files.DataModelInterface; import com.magento.idea.magento2plugin.util.GetFirstClassOfFile; import com.magento.idea.magento2plugin.util.GetPhpClassByFQN; - -import javax.swing.JOptionPane; import java.util.Properties; +import javax.swing.JOptionPane; public class DataModelInterfaceGenerator extends FileGenerator { private final Project project; @@ -33,6 +32,9 @@ public class DataModelInterfaceGenerator extends FileGenerator { private final ValidatorBundle validatorBundle; private final CommonBundle commonBundle; + /** + * Constructor. + */ public DataModelInterfaceGenerator( final Project project, final DataModelInterfaceData interfaceData From 5de53949fb02e50e658ca66cb75dff1b07c73743 Mon Sep 17 00:00:00 2001 From: Adarsh Manickam Date: Fri, 20 Nov 2020 18:51:34 +0530 Subject: [PATCH 07/13] Fixed PMD issues --- .../generation/NewDataModelAction.java | 2 +- .../generator/DataModelGenerator.java | 34 +++++++++---------- .../DataModelInterfaceGenerator.java | 32 ++++++++--------- 3 files changed, 34 insertions(+), 34 deletions(-) diff --git a/src/com/magento/idea/magento2plugin/actions/generation/NewDataModelAction.java b/src/com/magento/idea/magento2plugin/actions/generation/NewDataModelAction.java index 9d67373cb..e15ff1551 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/NewDataModelAction.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/NewDataModelAction.java @@ -29,7 +29,7 @@ public NewDataModelAction() { } @Override - public void actionPerformed(@NotNull AnActionEvent event) { + public void actionPerformed(@NotNull final AnActionEvent event) { final DataContext dataContext = event.getDataContext(); final IdeView view = LangDataKeys.IDE_VIEW.getData(dataContext); diff --git a/src/com/magento/idea/magento2plugin/actions/generation/generator/DataModelGenerator.java b/src/com/magento/idea/magento2plugin/actions/generation/generator/DataModelGenerator.java index 60b989111..a80e43d01 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/generator/DataModelGenerator.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/DataModelGenerator.java @@ -38,7 +38,7 @@ public class DataModelGenerator extends FileGenerator { /** * Constructor. */ - public DataModelGenerator(Project project, DataModelData modelData) { + public DataModelGenerator(final Project project, final DataModelData modelData) { super(project); this.project = project; @@ -51,7 +51,7 @@ public DataModelGenerator(Project project, DataModelData modelData) { } @Override - public PsiFile generate(String actionName) { + public PsiFile generate(final String actionName) { final PsiFile[] files = new PsiFile[1]; WriteCommandAction.runWriteCommandAction(project, () -> { @@ -59,18 +59,7 @@ public PsiFile generate(String actionName) { modelData.getFQN() ); - if (model != null) { - final String errorMessage = this.validatorBundle.message( - "validator.file.alreadyExists", - "Data Model" - ); - JOptionPane.showMessageDialog( - null, - errorMessage, - commonBundle.message("common.error"), - JOptionPane.ERROR_MESSAGE - ); - } else { + if (model == null) { model = createModel(actionName); if (model == null) { @@ -87,6 +76,17 @@ public PsiFile generate(String actionName) { } else { files[0] = model.getContainingFile(); } + } else { + final String errorMessage = this.validatorBundle.message( + "validator.file.alreadyExists", + "Data Model" + ); + JOptionPane.showMessageDialog( + null, + errorMessage, + commonBundle.message("common.error"), + JOptionPane.ERROR_MESSAGE + ); } }); @@ -94,7 +94,7 @@ public PsiFile generate(String actionName) { } @Override - protected void fillAttributes(Properties attributes) { + protected void fillAttributes(final Properties attributes) { final List uses = getUses(); attributes.setProperty("NAMESPACE", modelData.getNamespace()); attributes.setProperty("USES", PhpClassGeneratorUtil.formatUses(uses)); @@ -117,13 +117,13 @@ private List getUses() { ); } - private PhpClass createModel(String actionName) { + private PhpClass createModel(final String actionName) { PsiDirectory parentDirectory = ModuleIndex.getInstance(project) .getModuleDirectoryByModuleName(modelData.getModuleName()); final PsiFile interfaceFile; final Properties attributes = getAttributes(); - for (String directory: DataModel.DIRECTORY.split("/")) { + for (final String directory: DataModel.DIRECTORY.split("/")) { parentDirectory = directoryGenerator.findOrCreateSubdirectory( parentDirectory, directory ); diff --git a/src/com/magento/idea/magento2plugin/actions/generation/generator/DataModelInterfaceGenerator.java b/src/com/magento/idea/magento2plugin/actions/generation/generator/DataModelInterfaceGenerator.java index 652c78f69..65865d23f 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/generator/DataModelInterfaceGenerator.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/DataModelInterfaceGenerator.java @@ -51,7 +51,7 @@ public DataModelInterfaceGenerator( } @Override - public PsiFile generate(String actionName) { + public PsiFile generate(final String actionName) { final PsiFile[] files = new PsiFile[1]; WriteCommandAction.runWriteCommandAction(project, () -> { @@ -59,18 +59,7 @@ public PsiFile generate(String actionName) { interfaceData.getFQN() ); - if (modelInterface != null) { - final String errorMessage = this.validatorBundle.message( - "validator.file.alreadyExists", - "Data Model Interface" - ); - JOptionPane.showMessageDialog( - null, - errorMessage, - commonBundle.message("common.error"), - JOptionPane.ERROR_MESSAGE - ); - } else { + if (modelInterface == null) { modelInterface = createInterface(actionName); if (modelInterface == null) { @@ -87,6 +76,17 @@ public PsiFile generate(String actionName) { } else { files[0] = modelInterface.getContainingFile(); } + } else { + final String errorMessage = this.validatorBundle.message( + "validator.file.alreadyExists", + "Data Model Interface" + ); + JOptionPane.showMessageDialog( + null, + errorMessage, + commonBundle.message("common.error"), + JOptionPane.ERROR_MESSAGE + ); } }); @@ -94,19 +94,19 @@ public PsiFile generate(String actionName) { } @Override - protected void fillAttributes(Properties attributes) { + protected void fillAttributes(final Properties attributes) { attributes.setProperty("NAME", interfaceData.getName()); attributes.setProperty("NAMESPACE", interfaceData.getNamespace()); attributes.setProperty("PROPERTIES", interfaceData.getProperties()); } - private PhpClass createInterface(String actionName) { + private PhpClass createInterface(final String actionName) { PsiDirectory parentDirectory = ModuleIndex.getInstance(project) .getModuleDirectoryByModuleName(interfaceData.getModuleName()); final PsiFile interfaceFile; final Properties attributes = getAttributes(); - for (String directory: DataModelInterface.DIRECTORY.split("/")) { + for (final String directory: DataModelInterface.DIRECTORY.split("/")) { parentDirectory = directoryGenerator.findOrCreateSubdirectory( parentDirectory, directory ); From 3522311cd7e5244553515254a7c9bdce6476a20b Mon Sep 17 00:00:00 2001 From: Adarsh Manickam Date: Fri, 20 Nov 2020 19:26:54 +0530 Subject: [PATCH 08/13] Added di.xml preference generation --- .../generation/dialog/NewDataModelDialog.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewDataModelDialog.java b/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewDataModelDialog.java index 8701fed9c..a8d6f6d3f 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewDataModelDialog.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewDataModelDialog.java @@ -10,20 +10,24 @@ import com.intellij.openapi.ui.ComboBoxTableRenderer; import com.intellij.psi.PsiDirectory; import com.magento.idea.magento2plugin.actions.generation.NewDataModelAction; +import com.magento.idea.magento2plugin.actions.generation.OverrideClassByAPreferenceAction; import com.magento.idea.magento2plugin.actions.generation.data.DataModelData; import com.magento.idea.magento2plugin.actions.generation.data.DataModelInterfaceData; +import com.magento.idea.magento2plugin.actions.generation.data.PreferenceDiXmFileData; 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.DataModelGenerator; import com.magento.idea.magento2plugin.actions.generation.generator.DataModelInterfaceGenerator; +import com.magento.idea.magento2plugin.actions.generation.generator.PreferenceDiXmlGenerator; import com.magento.idea.magento2plugin.actions.generation.generator.util.NamespaceBuilder; import com.magento.idea.magento2plugin.magento.files.DataModel; import com.magento.idea.magento2plugin.magento.files.DataModelInterface; import com.magento.idea.magento2plugin.ui.table.ComboBoxEditor; import com.magento.idea.magento2plugin.ui.table.DeleteRowButton; import com.magento.idea.magento2plugin.ui.table.TableButton; +import com.magento.idea.magento2plugin.util.GetPhpClassByFQN; import com.magento.idea.magento2plugin.util.magento.GetModuleNameByDirectoryUtil; import java.awt.event.ActionEvent; import java.awt.event.KeyEvent; @@ -123,6 +127,7 @@ private void onOK() { formatProperties(); generateModelInterfaceFile(); generateModelFile(); + generatePreference(); this.setVisible(false); } } @@ -153,6 +158,16 @@ private void generateModelFile() { )).generate(NewDataModelAction.ACTION_NAME, true); } + private void generatePreference() { + new PreferenceDiXmlGenerator(new PreferenceDiXmFileData( + getModuleName(), + GetPhpClassByFQN.getInstance(project).execute(getInterfaceFQN()), + getModelFQN(), + getModelNamespace(), + "base" + ), project).generate(OverrideClassByAPreferenceAction.ACTION_NAME); + } + private void buildNamespaces() { interfaceNamespace = new NamespaceBuilder( getModuleName(), getInterfaceName(), DataModelInterface.DIRECTORY From b5d959ecc9dc8dd03b45a0b7bd745b4bce3eb173 Mon Sep 17 00:00:00 2001 From: Adarsh Manickam Date: Fri, 20 Nov 2020 22:34:25 +0530 Subject: [PATCH 09/13] Added test coverage --- .../generateDataModel/Sample.php | 25 ++++++++++++ .../SampleInterface.php | 22 ++++++++++ .../generator/DataModelGeneratorTest.java | 40 +++++++++++++++++++ .../DataModelInterfaceGeneratorTest.java | 39 ++++++++++++++++++ 4 files changed, 126 insertions(+) create mode 100644 testData/actions/generation/generator/DataModelGenerator/generateDataModel/Sample.php create mode 100644 testData/actions/generation/generator/DataModelInterfaceGenerator/generateDataModelInterface/SampleInterface.php create mode 100644 tests/com/magento/idea/magento2plugin/actions/generation/generator/DataModelGeneratorTest.java create mode 100644 tests/com/magento/idea/magento2plugin/actions/generation/generator/DataModelInterfaceGeneratorTest.java diff --git a/testData/actions/generation/generator/DataModelGenerator/generateDataModel/Sample.php b/testData/actions/generation/generator/DataModelGenerator/generateDataModel/Sample.php new file mode 100644 index 000000000..5d677058b --- /dev/null +++ b/testData/actions/generation/generator/DataModelGenerator/generateDataModel/Sample.php @@ -0,0 +1,25 @@ +getData(self::SAMPLE_PROPERTY); + } + + /** + * @inheritDoc + */ + public function setSampleProperty($sampleProperty) + { + return $this->setData(self::SAMPLE_PROPERTY, $sampleProperty); + } +} diff --git a/testData/actions/generation/generator/DataModelInterfaceGenerator/generateDataModelInterface/SampleInterface.php b/testData/actions/generation/generator/DataModelInterfaceGenerator/generateDataModelInterface/SampleInterface.php new file mode 100644 index 000000000..03ca695c1 --- /dev/null +++ b/testData/actions/generation/generator/DataModelInterfaceGenerator/generateDataModelInterface/SampleInterface.php @@ -0,0 +1,22 @@ + Date: Mon, 23 Nov 2020 12:53:44 +0530 Subject: [PATCH 10/13] Added validation for property names --- resources/magento2/validation.properties | 1 + .../generation/dialog/NewDataModelDialog.form | 19 +++++-- .../generation/dialog/NewDataModelDialog.java | 49 +++++++++++++++++++ .../idea/magento2plugin/util/RegExUtil.java | 3 ++ 4 files changed, 69 insertions(+), 3 deletions(-) diff --git a/resources/magento2/validation.properties b/resources/magento2/validation.properties index 77afecd47..d836d2655 100644 --- a/resources/magento2/validation.properties +++ b/resources/magento2/validation.properties @@ -29,3 +29,4 @@ validator.mustNotBeEmptyShouldContainLettersOrNumbers=Must not be empty, should validator.magentoRouteIdInvalid=The route id is invalid validator.magentoAclResourceIdInvalid=The ACL resource id is invalid validator.lowercaseCharacters={0} must contain lowercase characters only +validator.lowerSnakeCase=The {0} field must be of the lower snake case format diff --git a/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewDataModelDialog.form b/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewDataModelDialog.form index b9fd06802..cb8d7a9c9 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewDataModelDialog.form +++ b/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewDataModelDialog.form @@ -3,7 +3,7 @@ - + @@ -38,7 +38,7 @@ - + @@ -63,9 +63,22 @@ + + + + + + + + + + + + + - + diff --git a/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewDataModelDialog.java b/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewDataModelDialog.java index a8d6f6d3f..bc558cff5 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewDataModelDialog.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewDataModelDialog.java @@ -22,12 +22,15 @@ import com.magento.idea.magento2plugin.actions.generation.generator.DataModelInterfaceGenerator; import com.magento.idea.magento2plugin.actions.generation.generator.PreferenceDiXmlGenerator; import com.magento.idea.magento2plugin.actions.generation.generator.util.NamespaceBuilder; +import com.magento.idea.magento2plugin.bundles.CommonBundle; +import com.magento.idea.magento2plugin.bundles.ValidatorBundle; import com.magento.idea.magento2plugin.magento.files.DataModel; import com.magento.idea.magento2plugin.magento.files.DataModelInterface; import com.magento.idea.magento2plugin.ui.table.ComboBoxEditor; import com.magento.idea.magento2plugin.ui.table.DeleteRowButton; import com.magento.idea.magento2plugin.ui.table.TableButton; import com.magento.idea.magento2plugin.util.GetPhpClassByFQN; +import com.magento.idea.magento2plugin.util.RegExUtil; import com.magento.idea.magento2plugin.util.magento.GetModuleNameByDirectoryUtil; import java.awt.event.ActionEvent; import java.awt.event.KeyEvent; @@ -37,6 +40,7 @@ import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JComponent; +import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JTable; import javax.swing.JTextField; @@ -47,10 +51,13 @@ @SuppressWarnings({ "PMD.ExcessiveImports", + "PMD.TooManyMethods", }) public class NewDataModelDialog extends AbstractDialog { private final Project project; private final String moduleName; + private final ValidatorBundle validatorBundle; + private final CommonBundle commonBundle; private NamespaceBuilder interfaceNamespace; private NamespaceBuilder modelNamespace; private String formattedProperties; @@ -83,6 +90,8 @@ public NewDataModelDialog(final Project project, final PsiDirectory directory) { this.project = project; this.moduleName = GetModuleNameByDirectoryUtil.execute(directory, project); + this.validatorBundle = new ValidatorBundle(); + this.commonBundle = new CommonBundle(); setContentPane(contentPanel); setModal(true); @@ -132,6 +141,46 @@ private void onOK() { } } + @Override + protected boolean validateFormFields() { + boolean valid = false; + if (super.validateFormFields()) { + valid = true; + final String errorTitle = commonBundle.message("common.error"); + final int column = 0; + for (int row = 0; row < properties.getRowCount(); row++) { + final String propertyName = ((String) properties.getValueAt(row, column)).trim(); + if (propertyName.isEmpty()) { + valid = false; + final String errorMessage = validatorBundle.message( + "validator.notEmpty", "name" + ); + JOptionPane.showMessageDialog( + null, + errorMessage, + errorTitle, + JOptionPane.ERROR_MESSAGE + ); + break; + } else if (!propertyName.matches(RegExUtil.LOWER_SNAKE_CASE)) { + valid = false; + final String errorMessage = validatorBundle.message( + "validator.lowerSnakeCase", "name" + ); + JOptionPane.showMessageDialog( + null, + errorMessage, + errorTitle, + JOptionPane.ERROR_MESSAGE + ); + break; + } + } + } + + return valid; + } + @Override public void onCancel() { dispose(); diff --git a/src/com/magento/idea/magento2plugin/util/RegExUtil.java b/src/com/magento/idea/magento2plugin/util/RegExUtil.java index 66a1e7036..2ca243d6a 100644 --- a/src/com/magento/idea/magento2plugin/util/RegExUtil.java +++ b/src/com/magento/idea/magento2plugin/util/RegExUtil.java @@ -22,6 +22,9 @@ public class RegExUtil { public static final String IDENTIFIER = "[a-zA-Z0-9_\\-]*"; + public static final String LOWER_SNAKE_CASE + = "[a-z][a-z0-9_]*"; + public static final String CLI_COMMAND_NAME = "[a-zA-Z0-9_\\-\\:]*"; From 1b3d3f41b0850340e409d44fab7e1646d5338eab Mon Sep 17 00:00:00 2001 From: Adarsh Manickam Date: Tue, 24 Nov 2020 10:38:04 +0530 Subject: [PATCH 11/13] Restructured properties string to class --- .../data/code/ClassPropertyData.java | 32 +++++++++++++ .../generation/dialog/NewDataModelDialog.form | 2 +- .../generation/dialog/NewDataModelDialog.java | 45 ++++++++++--------- 3 files changed, 57 insertions(+), 22 deletions(-) create mode 100644 src/com/magento/idea/magento2plugin/actions/generation/data/code/ClassPropertyData.java diff --git a/src/com/magento/idea/magento2plugin/actions/generation/data/code/ClassPropertyData.java b/src/com/magento/idea/magento2plugin/actions/generation/data/code/ClassPropertyData.java new file mode 100644 index 000000000..cf277dbab --- /dev/null +++ b/src/com/magento/idea/magento2plugin/actions/generation/data/code/ClassPropertyData.java @@ -0,0 +1,32 @@ +/* + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +package com.magento.idea.magento2plugin.actions.generation.data.code; + +import java.util.ArrayList; +import java.util.List; +import org.apache.commons.lang.StringUtils; + +public class ClassPropertyData { + private final List data = new ArrayList<>(); + + public ClassPropertyData( + final String type, + final String lowerCamelName, + final String upperCamelName, + final String lowerSnakeName, + final String upperSnakeName + ) { + data.add(upperSnakeName); + data.add(lowerSnakeName); + data.add(type); + data.add(upperCamelName); + data.add(lowerCamelName); + } + + public String string() { + return StringUtils.join(data, ";"); + } +} diff --git a/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewDataModelDialog.form b/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewDataModelDialog.form index cb8d7a9c9..fc1d36c99 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewDataModelDialog.form +++ b/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewDataModelDialog.form @@ -53,7 +53,7 @@ - + diff --git a/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewDataModelDialog.java b/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewDataModelDialog.java index bc558cff5..0413d5f47 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewDataModelDialog.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewDataModelDialog.java @@ -14,6 +14,7 @@ import com.magento.idea.magento2plugin.actions.generation.data.DataModelData; import com.magento.idea.magento2plugin.actions.generation.data.DataModelInterfaceData; import com.magento.idea.magento2plugin.actions.generation.data.PreferenceDiXmFileData; +import com.magento.idea.magento2plugin.actions.generation.data.code.ClassPropertyData; 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; @@ -37,6 +38,7 @@ import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.util.ArrayList; +import java.util.List; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JComponent; @@ -58,9 +60,9 @@ public class NewDataModelDialog extends AbstractDialog { private final String moduleName; private final ValidatorBundle validatorBundle; private final CommonBundle commonBundle; + private final List properties; private NamespaceBuilder interfaceNamespace; private NamespaceBuilder modelNamespace; - private String formattedProperties; private static final String MODEL_NAME = "Model Name"; private static final String PROPERTY_NAME = "Name"; @@ -73,7 +75,7 @@ public class NewDataModelDialog extends AbstractDialog { private JPanel contentPanel; private JButton buttonOK; private JButton buttonCancel; - private JTable properties; + private JTable propertyTable; private JButton addProperty; @FieldValidation(rule = RuleRegistry.NOT_EMPTY, @@ -92,6 +94,7 @@ public NewDataModelDialog(final Project project, final PsiDirectory directory) { this.moduleName = GetModuleNameByDirectoryUtil.execute(directory, project); this.validatorBundle = new ValidatorBundle(); this.commonBundle = new CommonBundle(); + this.properties = new ArrayList<>(); setContentPane(contentPanel); setModal(true); @@ -148,8 +151,8 @@ protected boolean validateFormFields() { valid = true; final String errorTitle = commonBundle.message("common.error"); final int column = 0; - for (int row = 0; row < properties.getRowCount(); row++) { - final String propertyName = ((String) properties.getValueAt(row, column)).trim(); + for (int row = 0; row < propertyTable.getRowCount(); row++) { + final String propertyName = ((String) propertyTable.getValueAt(row, column)).trim(); if (propertyName.isEmpty()) { valid = false; final String errorMessage = validatorBundle.message( @@ -227,29 +230,25 @@ private void buildNamespaces() { } /** - * Formats properties into a string format, ready for templating. - * "UPPER_SNAKE;lower_snake;type;UpperCamel;lowerCamel". + * Formats properties into an array of ClassPropertyData objects. */ private void formatProperties() { final DefaultTableModel propertiesTable = getPropertiesTable(); - final ArrayList properties = new ArrayList<>(); - final ArrayList propertyData = new ArrayList<>(); final int rowCount = propertiesTable.getRowCount(); String name; String type; - for (int index = 0; index < rowCount; index++, propertyData.clear()) { + for (int index = 0; index < rowCount; index++) { name = propertiesTable.getValueAt(index, 0).toString(); type = propertiesTable.getValueAt(index, 1).toString(); - propertyData.add(CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.UPPER_UNDERSCORE, name)); - propertyData.add(name); - propertyData.add(type); - propertyData.add(CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.UPPER_CAMEL, name)); - propertyData.add(CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, name)); - properties.add(StringUtils.join(propertyData, ";")); + properties.add((new ClassPropertyData( + type, + CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, name), + CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.UPPER_CAMEL, name), + name, + CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.UPPER_UNDERSCORE, name) + )).string()); } - - formattedProperties = StringUtils.join(properties, ","); } private String getModuleName() { @@ -280,8 +279,12 @@ private String getModelFQN() { return modelNamespace.getClassFqn(); } + /** + * Gets properties as a string, ready for templating. + * "UPPER_SNAKE;lower_snake;type;UpperCamel;lowerCamel". + */ private String getProperties() { - return formattedProperties; + return StringUtils.join(properties, ","); } private void initPropertiesTable() { @@ -295,7 +298,7 @@ private void initPropertiesTable() { } ); - final TableColumn column = properties.getColumn(PROPERTY_ACTION); + final TableColumn column = propertyTable.getColumn(PROPERTY_ACTION); column.setCellRenderer(new TableButton(PROPERTY_DELETE)); column.setCellEditor(new DeleteRowButton(new JCheckBox())); @@ -311,12 +314,12 @@ private void initPropertiesTable() { } private void initPropertyTypeColumn() { - final TableColumn formElementTypeColumn = properties.getColumn(PROPERTY_TYPE); + final TableColumn formElementTypeColumn = propertyTable.getColumn(PROPERTY_TYPE); formElementTypeColumn.setCellEditor(new ComboBoxEditor(PROPERTY_TYPES)); formElementTypeColumn.setCellRenderer(new ComboBoxTableRenderer<>(PROPERTY_TYPES)); } private DefaultTableModel getPropertiesTable() { - return (DefaultTableModel) properties.getModel(); + return (DefaultTableModel) propertyTable.getModel(); } } From 43327c0a9c027057f8971ade7b6a37c0f9e3c7e0 Mon Sep 17 00:00:00 2001 From: Adarsh Manickam Date: Tue, 24 Nov 2020 12:15:05 +0530 Subject: [PATCH 12/13] Fixed static tests --- .../actions/generation/data/code/ClassPropertyData.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/com/magento/idea/magento2plugin/actions/generation/data/code/ClassPropertyData.java b/src/com/magento/idea/magento2plugin/actions/generation/data/code/ClassPropertyData.java index cf277dbab..9c703dada 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/data/code/ClassPropertyData.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/data/code/ClassPropertyData.java @@ -12,6 +12,9 @@ public class ClassPropertyData { private final List data = new ArrayList<>(); + /** + * Constructor. + */ public ClassPropertyData( final String type, final String lowerCamelName, From 8449220139c1f2a676f534e3852b571801229066 Mon Sep 17 00:00:00 2001 From: Adarsh Manickam Date: Tue, 24 Nov 2020 12:27:53 +0530 Subject: [PATCH 13/13] Fixed PMD issues --- .../actions/generation/dialog/NewDataModelDialog.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewDataModelDialog.java b/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewDataModelDialog.java index 0413d5f47..07296ae35 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewDataModelDialog.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewDataModelDialog.java @@ -241,13 +241,13 @@ private void formatProperties() { for (int index = 0; index < rowCount; index++) { name = propertiesTable.getValueAt(index, 0).toString(); type = propertiesTable.getValueAt(index, 1).toString(); - properties.add((new ClassPropertyData( + properties.add(new ClassPropertyData(// NOPMD type, CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, name), CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.UPPER_CAMEL, name), name, CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.UPPER_UNDERSCORE, name) - )).string()); + ).string()); } }