diff --git a/resources/fileTemplates/internal/Magento Module UI Component Form Xml.xml.ft b/resources/fileTemplates/internal/Magento Module UI Component Form Xml.xml.ft index 06492f392..d4fef52cc 100644 --- a/resources/fileTemplates/internal/Magento Module UI Component Form Xml.xml.ft +++ b/resources/fileTemplates/internal/Magento Module UI Component Form Xml.xml.ft @@ -5,6 +5,7 @@ ${NAME}.${NAME}_data_source ${LABEL} + templates/form/collapsible ${NAME} @@ -20,6 +21,11 @@ - + + + ${PRIMARY_FIELD} + ${PRIMARY_FIELD} + + diff --git a/src/com/magento/idea/magento2plugin/actions/generation/data/UiComponentFormFieldsetData.java b/src/com/magento/idea/magento2plugin/actions/generation/data/UiComponentFormFieldsetData.java index c4e2d9308..890088949 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/data/UiComponentFormFieldsetData.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/data/UiComponentFormFieldsetData.java @@ -7,19 +7,23 @@ public class UiComponentFormFieldsetData { + private final String name; private final String label; private final String sortOrder; /** * Fieldset data. * + * @param name String * @param label String * @param sortOrder String */ public UiComponentFormFieldsetData( + final String name, final String label, final String sortOrder ) { + this.name = name; this.label = label; this.sortOrder = sortOrder; } @@ -31,4 +35,8 @@ public String getLabel() { public String getSortOrder() { return sortOrder; } + + public String getName() { + return name; + } } diff --git a/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewUiComponentFormDialog.form b/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewUiComponentFormDialog.form index e67dac8c5..de0810bb8 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewUiComponentFormDialog.form +++ b/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewUiComponentFormDialog.form @@ -74,6 +74,7 @@ + @@ -106,6 +107,7 @@ + @@ -114,6 +116,7 @@ + @@ -208,6 +211,7 @@ + @@ -242,6 +246,7 @@ + @@ -278,6 +283,7 @@ + diff --git a/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewUiComponentFormDialog.java b/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewUiComponentFormDialog.java index dc6626224..e88f7ce5c 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewUiComponentFormDialog.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewUiComponentFormDialog.java @@ -288,8 +288,8 @@ protected void initButtonsTable() { protected void initFieldSetsTable() { final DefaultTableModel model = getFieldsetsModel(); model.setDataVector( - new Object[][] {{"General","10",DELETE_COLUMN}}, - new Object[] { LABEL_COLUMN, SORT_ORDER_COLUMN, ACTION_COLUMN} + new Object[][] {{"general", "General","10",DELETE_COLUMN}}, + new Object[] { NAME_COLUMN, LABEL_COLUMN, SORT_ORDER_COLUMN, ACTION_COLUMN} ); final TableColumn column = fieldsets.getColumn(ACTION_COLUMN); @@ -616,10 +616,12 @@ public List getFieldsets() { final ArrayList fieldsets = new ArrayList<>(); for (int count = 0; count < model.getRowCount(); count++) { - final String label = model.getValueAt(count, 0).toString(); - final String sortOrder = model.getValueAt(count, 1).toString(); + final String name = model.getValueAt(count, 0).toString(); + final String label = model.getValueAt(count, 1).toString(); + final String sortOrder = model.getValueAt(count, 2).toString(); final UiComponentFormFieldsetData fieldsetData = new UiComponentFormFieldsetData(//NOPMD + name, label, sortOrder ); diff --git a/src/com/magento/idea/magento2plugin/actions/generation/dialog/validator/ui/component/FormFieldsetsValidator.java b/src/com/magento/idea/magento2plugin/actions/generation/dialog/validator/ui/component/FormFieldsetsValidator.java index 4b5bb5299..c428b4883 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/dialog/validator/ui/component/FormFieldsetsValidator.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/dialog/validator/ui/component/FormFieldsetsValidator.java @@ -44,6 +44,15 @@ public boolean validate() { while (fieldsetIterator.hasNext()) { final UiComponentFormFieldsetData fieldset = fieldsetIterator.next(); + final String name = fieldset.getName(); + if (!NotEmptyRule.getInstance().check(name)) { + showErrorMessage( + validatorBundle.message(NotEmptyRule.MESSAGE, "Fieldset Name") + ); + valid = false; + break; + } + final String label = fieldset.getLabel(); if (!NotEmptyRule.getInstance().check(label)) { showErrorMessage( diff --git a/src/com/magento/idea/magento2plugin/actions/generation/generator/UiComponentFormGenerator.java b/src/com/magento/idea/magento2plugin/actions/generation/generator/UiComponentFormGenerator.java index 2c381b13f..473e7e833 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/generator/UiComponentFormGenerator.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/UiComponentFormGenerator.java @@ -11,7 +11,7 @@ import com.intellij.psi.xml.XmlFile; import com.magento.idea.magento2plugin.actions.generation.data.UiComponentFormButtonData; import com.magento.idea.magento2plugin.actions.generation.data.UiComponentFormFileData; -import com.magento.idea.magento2plugin.actions.generation.generator.code.ButtonsXmlDeclarationGenerator; +import com.magento.idea.magento2plugin.actions.generation.generator.code.XmlDeclarationsGenerator; 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.indexes.ModuleIndex; @@ -111,7 +111,7 @@ protected PsiFile createForm( ); } - new ButtonsXmlDeclarationGenerator(uiFormFileData, project).generate(formFile); + new XmlDeclarationsGenerator(uiFormFileData, project).generate(formFile); return formFile; } @@ -131,6 +131,7 @@ protected void fillAttributes(final Properties attributes) { uiFormFileData.getSubmitActionName().toLowerCase(new Locale("en","EN")) ); attributes.setProperty("DATA_PROVIDER", uiFormFileData.getDataProviderFqn()); + attributes.setProperty("PRIMARY_FIELD", uiFormFileData.getFields().get(0).getName()); } private Areas getArea(final String area) { diff --git a/src/com/magento/idea/magento2plugin/actions/generation/generator/code/ButtonsXmlDeclarationGenerator.java b/src/com/magento/idea/magento2plugin/actions/generation/generator/code/XmlDeclarationsGenerator.java similarity index 64% rename from src/com/magento/idea/magento2plugin/actions/generation/generator/code/ButtonsXmlDeclarationGenerator.java rename to src/com/magento/idea/magento2plugin/actions/generation/generator/code/XmlDeclarationsGenerator.java index d39e26646..379304549 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/generator/code/ButtonsXmlDeclarationGenerator.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/code/XmlDeclarationsGenerator.java @@ -17,7 +17,7 @@ import java.util.Properties; import org.jetbrains.annotations.NotNull; -public class ButtonsXmlDeclarationGenerator { +public class XmlDeclarationsGenerator { private final UiComponentFormFileData uiFormFileData; private final Project project; private final GetCodeTemplate getCodeTemplate; @@ -28,7 +28,7 @@ public class ButtonsXmlDeclarationGenerator { * @param uiFormFileData UiFormFileData * @param project Project */ - public ButtonsXmlDeclarationGenerator( + public XmlDeclarationsGenerator( final @NotNull UiComponentFormFileData uiFormFileData, final Project project ) { @@ -38,7 +38,7 @@ public ButtonsXmlDeclarationGenerator( } /** - * Injects button declarations to file. + * Injects buttons and fields declarations to file. * * @param formFile XmlFile */ @@ -67,35 +67,7 @@ public void generate(final XmlFile formFile) { buttonsTag.addSubTag(buttonTag, false); } - for (final UiComponentFormFieldsetData formFieldsetData - : uiFormFileData.getFieldsets()) { - final StringBuffer fieldsStringBuffer = new StringBuffer();//NOPMD - - for (final UiComponentFormFieldData formFieldData : uiFormFileData.getFields()) { - if (!formFieldData.getFieldset().equals(formFieldsetData.getLabel())) { - continue; - } - try { - fieldsStringBuffer.append(getCodeTemplate.execute( - UiComponentFormXml.FIELD_TEMPLATE, - fillAttributes(formFieldData) - ) - ); - } catch (IOException e) { - return; - } - } - - final XmlTag fieldsetTag = rootTag.createChildTag( - "fieldset", - null, - fieldsStringBuffer.toString(), - false - ); - fieldsetTag.setAttribute("label", formFieldsetData.getLabel()); - fieldsetTag.setAttribute("sortOrder",formFieldsetData.getSortOrder()); - rootTag.addSubTag(fieldsetTag, false); - } + renderFieldsets(rootTag); psiDocumentManager.commitDocument(document); }); @@ -111,4 +83,54 @@ private Properties fillAttributes(final UiComponentFormFieldData formFieldData) attributes.setProperty("SORT_ORDER", formFieldData.getSortOrder()); return attributes; } + + protected void renderFieldsets(final XmlTag rootTag) { + for (final UiComponentFormFieldsetData formFieldsetData + : uiFormFileData.getFieldsets()) { + final StringBuffer fieldsStringBuffer = new StringBuffer();//NOPMD + + for (final UiComponentFormFieldData formFieldData : uiFormFileData.getFields()) { + if (!formFieldData.getFieldset().equals(formFieldsetData.getName())) { + continue; + } + try { + fieldsStringBuffer.append(getCodeTemplate.execute( + UiComponentFormXml.FIELD_TEMPLATE, + fillAttributes(formFieldData) + ) + ); + } catch (IOException e) { + return; + } + } + + final XmlTag fieldsetTag = rootTag.createChildTag( + "fieldset", + null, + fieldsStringBuffer.toString(), + false + ); + fieldsetTag.setAttribute("name", formFieldsetData.getName()); + fieldsetTag.setAttribute("sortOrder", formFieldsetData.getSortOrder()); + + final XmlTag settings = fieldsetTag.createChildTag( + "settings", + null, + "", + false + ); + + final XmlTag label = settings.createChildTag( + "label", + null, + formFieldsetData.getLabel(), + false + ); + label.setAttribute("translate", "true"); + + settings.addSubTag(label, false); + fieldsetTag.addSubTag(settings, true); + rootTag.addSubTag(fieldsetTag, false); + } + } } diff --git a/testData/actions/generation/generator/UiComponentFormGenerator/generateFormXmlFile/my_form.xml b/testData/actions/generation/generator/UiComponentFormGenerator/generateFormXmlFile/my_form.xml index 3b43ed4c9..6685de535 100644 --- a/testData/actions/generation/generator/UiComponentFormGenerator/generateFormXmlFile/my_form.xml +++ b/testData/actions/generation/generator/UiComponentFormGenerator/generateFormXmlFile/my_form.xml @@ -6,6 +6,7 @@ my_form.my_form_data_source My Form + templates/form/collapsible my_form @@ -23,34 +24,21 @@ - - -
- - - - entity - - + - text - - my_field + my_field + my_field - + + +
+ + +
-
- - - - entity - - - - text - - my_field_2 - - +
+ + +
diff --git a/tests/com/magento/idea/magento2plugin/actions/generation/generator/UiComponentFormGeneratorTest.java b/tests/com/magento/idea/magento2plugin/actions/generation/generator/UiComponentFormGeneratorTest.java index 8bd14cc80..1d8c44acb 100644 --- a/tests/com/magento/idea/magento2plugin/actions/generation/generator/UiComponentFormGeneratorTest.java +++ b/tests/com/magento/idea/magento2plugin/actions/generation/generator/UiComponentFormGeneratorTest.java @@ -87,10 +87,12 @@ protected List getFields() { protected List getFieldsets() { final List fieldsets = new ArrayList(); fieldsets.add(new UiComponentFormFieldsetData( + "general", "General", "10" )); fieldsets.add(new UiComponentFormFieldsetData( + "test_fieldset", "Test Fieldset", "20" ));