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 @@
-
-
-