Skip to content

Commit 2cfe5f4

Browse files
authored
Merge pull request #313 from magento/form-adjustments
Adjusted UI form XML to be valid and accessible via the admin
2 parents e8e0302 + 84dbaf5 commit 2cfe5f4

File tree

9 files changed

+109
-65
lines changed

9 files changed

+109
-65
lines changed

resources/fileTemplates/internal/Magento Module UI Component Form Xml.xml.ft

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
<item name="provider" xsi:type="string">${NAME}.${NAME}_data_source</item>
66
</item>
77
<item name="label" xsi:type="string" translate="true">${LABEL}</item>
8+
<item name="template" xsi:type="string">templates/form/collapsible</item>
89
</argument>
910
<settings>
1011
<namespace>${NAME}</namespace>
@@ -20,6 +21,11 @@
2021
<settings>
2122
<submitUrl path="${ROUTE}/${SUBMIT_CONTROLLER}/${SUBMIT_ACTION}"/>
2223
</settings>
23-
<dataProvider class="${DATA_PROVIDER}" name="${NAME}_data_source"/>
24+
<dataProvider class="${DATA_PROVIDER}" name="${NAME}_data_source">
25+
<settings>
26+
<requestFieldName>${PRIMARY_FIELD}</requestFieldName>
27+
<primaryFieldName>${PRIMARY_FIELD}</primaryFieldName>
28+
</settings>
29+
</dataProvider>
2430
</dataSource>
2531
</form>

src/com/magento/idea/magento2plugin/actions/generation/data/UiComponentFormFieldsetData.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,19 +7,23 @@
77

88
public class UiComponentFormFieldsetData {
99

10+
private final String name;
1011
private final String label;
1112
private final String sortOrder;
1213

1314
/**
1415
* Fieldset data.
1516
*
17+
* @param name String
1618
* @param label String
1719
* @param sortOrder String
1820
*/
1921
public UiComponentFormFieldsetData(
22+
final String name,
2023
final String label,
2124
final String sortOrder
2225
) {
26+
this.name = name;
2327
this.label = label;
2428
this.sortOrder = sortOrder;
2529
}
@@ -31,4 +35,8 @@ public String getLabel() {
3135
public String getSortOrder() {
3236
return sortOrder;
3337
}
38+
39+
public String getName() {
40+
return name;
41+
}
3442
}

src/com/magento/idea/magento2plugin/actions/generation/dialog/NewUiComponentFormDialog.form

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@
7474
<grid row="2" column="0" row-span="1" col-span="2" vsize-policy="0" hsize-policy="0" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
7575
</constraints>
7676
<properties>
77+
<font style="1"/>
7778
<text value="Buttons"/>
7879
</properties>
7980
</component>
@@ -106,6 +107,7 @@
106107
<grid row="5" column="0" row-span="1" col-span="2" vsize-policy="0" hsize-policy="0" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
107108
</constraints>
108109
<properties>
110+
<font style="1"/>
109111
<text value="Fieldsets"/>
110112
</properties>
111113
</component>
@@ -114,6 +116,7 @@
114116
<grid row="8" column="0" row-span="1" col-span="2" vsize-policy="0" hsize-policy="0" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
115117
</constraints>
116118
<properties>
119+
<font style="1"/>
117120
<text value="Fields"/>
118121
</properties>
119122
</component>
@@ -208,6 +211,7 @@
208211
</grid>
209212
</constraints>
210213
<properties>
214+
<font style="1"/>
211215
<text value="Submit Controller"/>
212216
</properties>
213217
</component>
@@ -242,6 +246,7 @@
242246
<grid row="0" column="0" row-span="1" col-span="2" vsize-policy="0" hsize-policy="0" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
243247
</constraints>
244248
<properties>
249+
<font style="1"/>
245250
<text value="View Controller"/>
246251
</properties>
247252
</component>
@@ -278,6 +283,7 @@
278283
<grid row="0" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="8" fill="0" indent="0" use-parent-layout="false"/>
279284
</constraints>
280285
<properties>
286+
<font style="1"/>
281287
<text value="Data Provider"/>
282288
</properties>
283289
</component>

src/com/magento/idea/magento2plugin/actions/generation/dialog/NewUiComponentFormDialog.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -288,8 +288,8 @@ protected void initButtonsTable() {
288288
protected void initFieldSetsTable() {
289289
final DefaultTableModel model = getFieldsetsModel();
290290
model.setDataVector(
291-
new Object[][] {{"General","10",DELETE_COLUMN}},
292-
new Object[] { LABEL_COLUMN, SORT_ORDER_COLUMN, ACTION_COLUMN}
291+
new Object[][] {{"general", "General","10",DELETE_COLUMN}},
292+
new Object[] { NAME_COLUMN, LABEL_COLUMN, SORT_ORDER_COLUMN, ACTION_COLUMN}
293293
);
294294

295295
final TableColumn column = fieldsets.getColumn(ACTION_COLUMN);
@@ -616,10 +616,12 @@ public List<UiComponentFormFieldsetData> getFieldsets() {
616616
final ArrayList<UiComponentFormFieldsetData> fieldsets =
617617
new ArrayList<>();
618618
for (int count = 0; count < model.getRowCount(); count++) {
619-
final String label = model.getValueAt(count, 0).toString();
620-
final String sortOrder = model.getValueAt(count, 1).toString();
619+
final String name = model.getValueAt(count, 0).toString();
620+
final String label = model.getValueAt(count, 1).toString();
621+
final String sortOrder = model.getValueAt(count, 2).toString();
621622

622623
final UiComponentFormFieldsetData fieldsetData = new UiComponentFormFieldsetData(//NOPMD
624+
name,
623625
label,
624626
sortOrder
625627
);

src/com/magento/idea/magento2plugin/actions/generation/dialog/validator/ui/component/FormFieldsetsValidator.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,15 @@ public boolean validate() {
4444
while (fieldsetIterator.hasNext()) {
4545
final UiComponentFormFieldsetData fieldset = fieldsetIterator.next();
4646

47+
final String name = fieldset.getName();
48+
if (!NotEmptyRule.getInstance().check(name)) {
49+
showErrorMessage(
50+
validatorBundle.message(NotEmptyRule.MESSAGE, "Fieldset Name")
51+
);
52+
valid = false;
53+
break;
54+
}
55+
4756
final String label = fieldset.getLabel();
4857
if (!NotEmptyRule.getInstance().check(label)) {
4958
showErrorMessage(

src/com/magento/idea/magento2plugin/actions/generation/generator/UiComponentFormGenerator.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
import com.intellij.psi.xml.XmlFile;
1212
import com.magento.idea.magento2plugin.actions.generation.data.UiComponentFormButtonData;
1313
import com.magento.idea.magento2plugin.actions.generation.data.UiComponentFormFileData;
14-
import com.magento.idea.magento2plugin.actions.generation.generator.code.ButtonsXmlDeclarationGenerator;
14+
import com.magento.idea.magento2plugin.actions.generation.generator.code.XmlDeclarationsGenerator;
1515
import com.magento.idea.magento2plugin.actions.generation.generator.util.DirectoryGenerator;
1616
import com.magento.idea.magento2plugin.actions.generation.generator.util.FileFromTemplateGenerator;
1717
import com.magento.idea.magento2plugin.indexes.ModuleIndex;
@@ -111,7 +111,7 @@ protected PsiFile createForm(
111111
);
112112
}
113113

114-
new ButtonsXmlDeclarationGenerator(uiFormFileData, project).generate(formFile);
114+
new XmlDeclarationsGenerator(uiFormFileData, project).generate(formFile);
115115

116116
return formFile;
117117
}
@@ -131,6 +131,7 @@ protected void fillAttributes(final Properties attributes) {
131131
uiFormFileData.getSubmitActionName().toLowerCase(new Locale("en","EN"))
132132
);
133133
attributes.setProperty("DATA_PROVIDER", uiFormFileData.getDataProviderFqn());
134+
attributes.setProperty("PRIMARY_FIELD", uiFormFileData.getFields().get(0).getName());
134135
}
135136

136137
private Areas getArea(final String area) {
Lines changed: 54 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
import java.util.Properties;
1818
import org.jetbrains.annotations.NotNull;
1919

20-
public class ButtonsXmlDeclarationGenerator {
20+
public class XmlDeclarationsGenerator {
2121
private final UiComponentFormFileData uiFormFileData;
2222
private final Project project;
2323
private final GetCodeTemplate getCodeTemplate;
@@ -28,7 +28,7 @@ public class ButtonsXmlDeclarationGenerator {
2828
* @param uiFormFileData UiFormFileData
2929
* @param project Project
3030
*/
31-
public ButtonsXmlDeclarationGenerator(
31+
public XmlDeclarationsGenerator(
3232
final @NotNull UiComponentFormFileData uiFormFileData,
3333
final Project project
3434
) {
@@ -38,7 +38,7 @@ public ButtonsXmlDeclarationGenerator(
3838
}
3939

4040
/**
41-
* Injects button declarations to file.
41+
* Injects buttons and fields declarations to file.
4242
*
4343
* @param formFile XmlFile
4444
*/
@@ -67,35 +67,7 @@ public void generate(final XmlFile formFile) {
6767
buttonsTag.addSubTag(buttonTag, false);
6868
}
6969

70-
for (final UiComponentFormFieldsetData formFieldsetData
71-
: uiFormFileData.getFieldsets()) {
72-
final StringBuffer fieldsStringBuffer = new StringBuffer();//NOPMD
73-
74-
for (final UiComponentFormFieldData formFieldData : uiFormFileData.getFields()) {
75-
if (!formFieldData.getFieldset().equals(formFieldsetData.getLabel())) {
76-
continue;
77-
}
78-
try {
79-
fieldsStringBuffer.append(getCodeTemplate.execute(
80-
UiComponentFormXml.FIELD_TEMPLATE,
81-
fillAttributes(formFieldData)
82-
)
83-
);
84-
} catch (IOException e) {
85-
return;
86-
}
87-
}
88-
89-
final XmlTag fieldsetTag = rootTag.createChildTag(
90-
"fieldset",
91-
null,
92-
fieldsStringBuffer.toString(),
93-
false
94-
);
95-
fieldsetTag.setAttribute("label", formFieldsetData.getLabel());
96-
fieldsetTag.setAttribute("sortOrder",formFieldsetData.getSortOrder());
97-
rootTag.addSubTag(fieldsetTag, false);
98-
}
70+
renderFieldsets(rootTag);
9971

10072
psiDocumentManager.commitDocument(document);
10173
});
@@ -111,4 +83,54 @@ private Properties fillAttributes(final UiComponentFormFieldData formFieldData)
11183
attributes.setProperty("SORT_ORDER", formFieldData.getSortOrder());
11284
return attributes;
11385
}
86+
87+
protected void renderFieldsets(final XmlTag rootTag) {
88+
for (final UiComponentFormFieldsetData formFieldsetData
89+
: uiFormFileData.getFieldsets()) {
90+
final StringBuffer fieldsStringBuffer = new StringBuffer();//NOPMD
91+
92+
for (final UiComponentFormFieldData formFieldData : uiFormFileData.getFields()) {
93+
if (!formFieldData.getFieldset().equals(formFieldsetData.getName())) {
94+
continue;
95+
}
96+
try {
97+
fieldsStringBuffer.append(getCodeTemplate.execute(
98+
UiComponentFormXml.FIELD_TEMPLATE,
99+
fillAttributes(formFieldData)
100+
)
101+
);
102+
} catch (IOException e) {
103+
return;
104+
}
105+
}
106+
107+
final XmlTag fieldsetTag = rootTag.createChildTag(
108+
"fieldset",
109+
null,
110+
fieldsStringBuffer.toString(),
111+
false
112+
);
113+
fieldsetTag.setAttribute("name", formFieldsetData.getName());
114+
fieldsetTag.setAttribute("sortOrder", formFieldsetData.getSortOrder());
115+
116+
final XmlTag settings = fieldsetTag.createChildTag(
117+
"settings",
118+
null,
119+
"",
120+
false
121+
);
122+
123+
final XmlTag label = settings.createChildTag(
124+
"label",
125+
null,
126+
formFieldsetData.getLabel(),
127+
false
128+
);
129+
label.setAttribute("translate", "true");
130+
131+
settings.addSubTag(label, false);
132+
fieldsetTag.addSubTag(settings, true);
133+
rootTag.addSubTag(fieldsetTag, false);
134+
}
135+
}
114136
}

testData/actions/generation/generator/UiComponentFormGenerator/generateFormXmlFile/my_form.xml

Lines changed: 14 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
<item name="provider" xsi:type="string">my_form.my_form_data_source</item>
77
</item>
88
<item name="label" xsi:type="string" translate="true">My Form</item>
9+
<item name="template" xsi:type="string">templates/form/collapsible</item>
910
</argument>
1011
<settings>
1112
<namespace>my_form</namespace>
@@ -23,34 +24,21 @@
2324
<settings>
2425
<submitUrl path="customroute/myentity/save"/>
2526
</settings>
26-
<dataProvider class="Foo/Bar/Ui/MyEntity/DataProvider" name="my_form_data_source"/>
27-
</dataSource>
28-
<fieldset label="General" sortOrder="10">
29-
<field name="my_field" sortOrder="10" formElement="input">
30-
<argument name="data" xsi:type="array">
31-
<item name="config" xsi:type="array">
32-
<item name="source" xsi:type="string">entity</item>
33-
</item>
34-
</argument>
27+
<dataProvider class="Foo/Bar/Ui/MyEntity/DataProvider" name="my_form_data_source">
3528
<settings>
36-
<dataType>text</dataType>
37-
<label translate="true">My Field</label>
38-
<dataScope>my_field</dataScope>
29+
<requestFieldName>my_field</requestFieldName>
30+
<primaryFieldName>my_field</primaryFieldName>
3931
</settings>
40-
</field>
32+
</dataProvider>
33+
</dataSource>
34+
<fieldset name="general" sortOrder="10">
35+
<settings>
36+
<label translate="true">General</label>
37+
</settings>
4138
</fieldset>
42-
<fieldset label="Test Fieldset" sortOrder="20">
43-
<field name="my_field_2" sortOrder="10" formElement="input">
44-
<argument name="data" xsi:type="array">
45-
<item name="config" xsi:type="array">
46-
<item name="source" xsi:type="string">entity</item>
47-
</item>
48-
</argument>
49-
<settings>
50-
<dataType>text</dataType>
51-
<label translate="true">My Field 2</label>
52-
<dataScope>my_field_2</dataScope>
53-
</settings>
54-
</field>
39+
<fieldset name="test_fieldset" sortOrder="20">
40+
<settings>
41+
<label translate="true">Test Fieldset</label>
42+
</settings>
5543
</fieldset>
5644
</form>

tests/com/magento/idea/magento2plugin/actions/generation/generator/UiComponentFormGeneratorTest.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,10 +87,12 @@ protected List getFields() {
8787
protected List getFieldsets() {
8888
final List fieldsets = new ArrayList();
8989
fieldsets.add(new UiComponentFormFieldsetData(
90+
"general",
9091
"General",
9192
"10"
9293
));
9394
fieldsets.add(new UiComponentFormFieldsetData(
95+
"test_fieldset",
9496
"Test Fieldset",
9597
"20"
9698
));

0 commit comments

Comments
 (0)