Skip to content

Commit 83d8a39

Browse files
author
Vitaliy Boyko
committed
Added di.xml declaration
1 parent 6217d26 commit 83d8a39

21 files changed

+679
-199
lines changed

resources/fileTemplates/internal/Magento Module Controller Backend Class.php.ft

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,6 @@ class ${NAME}#if (${EXTENDS}) extends ${EXTENDS}#end#if (${IMPLEMENTS}) implemen
2626
*/
2727
public function execute()
2828
{
29-
// TODO: Implement execute method.
29+
return $this->resultFactory->create(\Magento\Framework\Controller\ResultFactory::TYPE_PAGE);
3030
}
3131
}

resources/fileTemplates/internal/Magento Module Ui Custom Data Provider Php.php.ft

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,9 @@ class ${CLASS_NAME} extends DataProvider
1414
*/
1515
public function getData()
1616
{
17-
// todo: implement data retrieving here based on search criteria
18-
return parent::getData();
17+
//TODO: implement data retrieving here based on search criteria
18+
return [
19+
[]
20+
];
1921
}
2022
}

src/com/magento/idea/magento2plugin/actions/generation/NewUiComponentFormAction.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
import com.magento.idea.magento2plugin.actions.generation.dialog.NewUiComponentFormDialog;
1818

1919
public class NewUiComponentFormAction extends AnAction {
20-
public static final String ACTION_NAME = "Magento 2 UI Form";
20+
public static final String ACTION_NAME = "Magento 2 UI Component Form";
2121
public static final String ACTION_DESCRIPTION = "Create a new Magento 2 UI Form";
2222

2323
/**
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
/*
2+
* Copyright © Magento, Inc. All rights reserved.
3+
* See COPYING.txt for license details.
4+
*/
5+
6+
package com.magento.idea.magento2plugin.actions.generation.data;
7+
8+
public class DataProviderDeclarationData {
9+
10+
private final String moduleName;
11+
private final String virtualTypeName;
12+
private final String collectionFqn;
13+
private final String dataSource;
14+
private String tableName;
15+
16+
/**
17+
* Data Provider XML declaration data.
18+
*
19+
* @param moduleName String
20+
* @param virtualTypeName String
21+
* @param collectionFqn String
22+
* @param dataSource String
23+
*/
24+
public DataProviderDeclarationData(
25+
final String moduleName,
26+
final String virtualTypeName,
27+
final String collectionFqn,
28+
final String dataSource,
29+
final String tableName
30+
) {
31+
this.moduleName = moduleName;
32+
this.virtualTypeName = virtualTypeName;
33+
this.collectionFqn = collectionFqn;
34+
this.dataSource = dataSource;
35+
this.tableName = tableName;
36+
}
37+
38+
public String getModuleName() {
39+
return moduleName;
40+
}
41+
42+
public String getVirtualTypeName() {
43+
return virtualTypeName;
44+
}
45+
46+
public String getCollectionFqn() {
47+
return collectionFqn;
48+
}
49+
50+
public String getDataSource() {
51+
return dataSource;
52+
}
53+
54+
public String getTableName() {
55+
return tableName;
56+
}
57+
}

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
import com.magento.idea.magento2plugin.magento.files.ControllerBackendPhp;
4444
import com.magento.idea.magento2plugin.magento.files.ControllerFrontendPhp;
4545
import com.magento.idea.magento2plugin.magento.files.FormButtonBlockPhp;
46+
import com.magento.idea.magento2plugin.magento.files.ModuleMenuXml;
4647
import com.magento.idea.magento2plugin.magento.files.UiComponentDataProviderPhp;
4748
import com.magento.idea.magento2plugin.magento.packages.Areas;
4849
import com.magento.idea.magento2plugin.magento.packages.File;
@@ -554,6 +555,10 @@ private List<String> getAclResourcesList() {
554555
private void createUIComponents() {
555556
this.formAreaSelect = new FilteredComboBox(getAreaList());
556557
this.parentAcl = new FilteredComboBox(getAclResourcesList());
558+
559+
if (getAclResourcesList().contains(ModuleMenuXml.defaultAcl)) {
560+
parentAcl.setSelectedItem(ModuleMenuXml.defaultAcl);
561+
}
557562
}
558563

559564
private String getModuleName() {

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

Lines changed: 198 additions & 122 deletions
Large diffs are not rendered by default.

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

Lines changed: 89 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,10 @@
1414
import com.magento.idea.magento2plugin.actions.generation.NewUiComponentGridAction;
1515
import com.magento.idea.magento2plugin.actions.generation.data.AclXmlData;
1616
import com.magento.idea.magento2plugin.actions.generation.data.ControllerFileData;
17+
import com.magento.idea.magento2plugin.actions.generation.data.DataProviderDeclarationData;
1718
import com.magento.idea.magento2plugin.actions.generation.data.LayoutXmlData;
1819
import com.magento.idea.magento2plugin.actions.generation.data.MenuXmlData;
20+
import com.magento.idea.magento2plugin.actions.generation.data.RoutesXmlData;
1921
import com.magento.idea.magento2plugin.actions.generation.data.UiComponentDataProviderData;
2022
import com.magento.idea.magento2plugin.actions.generation.data.UiComponentGridData;
2123
import com.magento.idea.magento2plugin.actions.generation.data.UiComponentGridToolbarData;
@@ -32,20 +34,24 @@
3234
import com.magento.idea.magento2plugin.actions.generation.dialog.validator.rule.RouteIdRule;
3335
import com.magento.idea.magento2plugin.actions.generation.dialog.validator.rule.StartWithNumberOrCapitalLetterRule;
3436
import com.magento.idea.magento2plugin.actions.generation.generator.AclXmlGenerator;
37+
import com.magento.idea.magento2plugin.actions.generation.generator.DataProviderDeclarationGenerator;
3538
import com.magento.idea.magento2plugin.actions.generation.generator.LayoutXmlGenerator;
3639
import com.magento.idea.magento2plugin.actions.generation.generator.MenuXmlGenerator;
3740
import com.magento.idea.magento2plugin.actions.generation.generator.ModuleControllerClassGenerator;
41+
import com.magento.idea.magento2plugin.actions.generation.generator.RoutesXmlGenerator;
3842
import com.magento.idea.magento2plugin.actions.generation.generator.UiComponentDataProviderGenerator;
3943
import com.magento.idea.magento2plugin.actions.generation.generator.UiComponentGridXmlGenerator;
4044
import com.magento.idea.magento2plugin.actions.generation.generator.util.NamespaceBuilder;
4145
import com.magento.idea.magento2plugin.magento.files.ControllerBackendPhp;
46+
import com.magento.idea.magento2plugin.magento.files.ModuleMenuXml;
4247
import com.magento.idea.magento2plugin.magento.files.UiComponentDataProviderPhp;
4348
import com.magento.idea.magento2plugin.magento.packages.Areas;
4449
import com.magento.idea.magento2plugin.magento.packages.File;
4550
import com.magento.idea.magento2plugin.magento.packages.HttpMethod;
4651
import com.magento.idea.magento2plugin.magento.packages.Package;
4752
import com.magento.idea.magento2plugin.stubs.indexes.xml.MenuIndex;
4853
import com.magento.idea.magento2plugin.ui.FilteredComboBox;
54+
import com.magento.idea.magento2plugin.util.FirstLetterToLowercaseUtil;
4955
import com.magento.idea.magento2plugin.util.magento.GetAclResourcesListUtil;
5056
import com.magento.idea.magento2plugin.util.magento.GetModuleNameByDirectoryUtil;
5157
import com.magento.idea.magento2plugin.util.magento.GetResourceCollections;
@@ -66,11 +72,18 @@
6672
import javax.swing.KeyStroke;
6773
import org.jetbrains.annotations.NotNull;
6874

69-
@SuppressWarnings({"PMD.TooManyFields", "PMD.ExcessiveImports", "PMD.UnusedPrivateMethod"})
75+
@SuppressWarnings({
76+
"PMD.TooManyFields",
77+
"PMD.ExcessiveImports",
78+
"PMD.UnusedPrivateMethod",
79+
"PMD.ToManyMethods",
80+
"PMD.GodClass"
81+
})
7082
public class NewUiComponentGridDialog extends AbstractDialog {
7183
private static final String ACTION_NAME = "Action Name";
7284
private static final String DATA_PROVIDER_CLASS_NAME = "Data Provider Class Name";
7385
private static final String DATA_PROVIDER_DIRECTORY = "Data Provider Directory";
86+
private static final String NAME = "Name";
7487

7588
private final Project project;
7689
private final String moduleName;
@@ -79,12 +92,12 @@ public class NewUiComponentGridDialog extends AbstractDialog {
7992
private JButton buttonOK;
8093
private JButton buttonCancel;
8194

82-
@FieldValidation(rule = RuleRegistry.NOT_EMPTY, message = {NotEmptyRule.MESSAGE, "Name"})
83-
@FieldValidation(rule = RuleRegistry.IDENTIFIER, message = {IdentifierRule.MESSAGE, "Name"})
95+
@FieldValidation(rule = RuleRegistry.NOT_EMPTY, message = {NotEmptyRule.MESSAGE, NAME})
96+
@FieldValidation(rule = RuleRegistry.IDENTIFIER, message = {IdentifierRule.MESSAGE, NAME})
8497
private JTextField uiComponentName;
8598

86-
@FieldValidation(rule = RuleRegistry.NOT_EMPTY, message = {NotEmptyRule.MESSAGE, "Name"})
87-
@FieldValidation(rule = RuleRegistry.IDENTIFIER, message = {IdentifierRule.MESSAGE, "Name"})
99+
@FieldValidation(rule = RuleRegistry.NOT_EMPTY, message = {NotEmptyRule.MESSAGE, NAME})
100+
@FieldValidation(rule = RuleRegistry.IDENTIFIER, message = {IdentifierRule.MESSAGE, NAME})
88101
private JTextField idField;
89102

90103
private JCheckBox addToolBar;
@@ -168,7 +181,13 @@ public class NewUiComponentGridDialog extends AbstractDialog {
168181
private JLabel aclGeneralLabel;//NOPMD
169182
private JLabel parentAclID;//NOPMD
170183
private JLabel aclTitleLabel;//NOPMD
184+
private JLabel controllerGeneralLabel;//NOPMD
185+
private JLabel dataProviderGeneralLabel;//NOPMD
186+
private JLabel general;//NOPMD
171187
private JLabel collectionLabel;//NOPMD
188+
private JLabel dataProviderParentDirectoryLabel;
189+
private JLabel tableNameLabel;
190+
private JTextField tableName;
172191

173192
/**
174193
* New UI component grid dialog constructor.
@@ -206,7 +225,13 @@ public void windowClosing(final WindowEvent event) {
206225
KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0),
207226
JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT
208227
);
209-
menuIdentifier.setText(getModuleName() + "::listing");
228+
229+
final String componentIdentifierSuffix = "::listing";
230+
menuIdentifier.setText(getModuleName() + componentIdentifierSuffix);
231+
acl.setText(getModuleName() + componentIdentifierSuffix);
232+
233+
dataProviderParentDirectory.setVisible(false);
234+
dataProviderParentDirectoryLabel.setVisible(false);
210235
}
211236

212237
/**
@@ -283,6 +308,9 @@ private void onOK() {
283308
generateLayoutFile();
284309
generateMenuFile();
285310
generateAclXmlFile();
311+
generateRoutesXmlFile();
312+
generateDataProviderClass();
313+
generateDataProviderDeclaration();
286314
generateUiComponentFile();
287315
this.setVisible(false);
288316
}
@@ -297,21 +325,49 @@ private void addActionListeners() {
297325
dataProviderType.addActionListener(event -> onDataProviderTypeChange());
298326
}
299327

328+
private PsiFile generateRoutesXmlFile() {
329+
return new RoutesXmlGenerator(new RoutesXmlData(
330+
getArea(),
331+
getRoute(),
332+
getModuleName()
333+
), project).generate(NewUiComponentFormAction.ACTION_NAME, false);
334+
}
335+
300336
private void generateUiComponentFile() {
301-
final UiComponentDataProviderGenerator dataProviderGenerator;
302-
dataProviderGenerator = new UiComponentDataProviderGenerator(
303-
getGridDataProviderData(),
304-
getModuleName(),
305-
project
306-
);
307337
final UiComponentGridXmlGenerator gridXmlGenerator = new UiComponentGridXmlGenerator(
308338
getUiComponentGridData(),
309339
project
310340
);
311-
dataProviderGenerator.generate(NewUiComponentGridAction.ACTION_NAME);
312341
gridXmlGenerator.generate(NewUiComponentGridAction.ACTION_NAME, true);
313342
}
314343

344+
private void generateDataProviderClass() {
345+
if (getDataProviderType().equals(UiComponentDataProviderPhp.CUSTOM_TYPE)) {
346+
final UiComponentDataProviderGenerator dataProviderGenerator;
347+
dataProviderGenerator = new UiComponentDataProviderGenerator(
348+
getGridDataProviderData(),
349+
getModuleName(),
350+
project
351+
);
352+
dataProviderGenerator.generate(NewUiComponentGridAction.ACTION_NAME);
353+
}
354+
}
355+
356+
private void generateDataProviderDeclaration() {
357+
if (getDataProviderType().equals(UiComponentDataProviderPhp.COLLECTION_TYPE)) {
358+
final DataProviderDeclarationGenerator dataProviderGenerator;
359+
dataProviderGenerator = new DataProviderDeclarationGenerator(
360+
new DataProviderDeclarationData(
361+
getModuleName(),
362+
getDataProviderClass(),
363+
getCollection(),
364+
getUiComponentName() + "_data_source",
365+
getTableName()
366+
), project);
367+
dataProviderGenerator.generate(NewUiComponentGridAction.ACTION_NAME);
368+
}
369+
}
370+
315371
private PsiFile generateViewControllerFile() {
316372
final NamespaceBuilder namespace = new NamespaceBuilder(
317373
getModuleName(),
@@ -388,15 +444,24 @@ private void onDataProviderTypeChange() {
388444

389445
collection.setVisible(visible);
390446
collectionLabel.setVisible(visible);
447+
tableName.setVisible(visible);
448+
tableNameLabel.setVisible(visible);
449+
dataProviderParentDirectory.setVisible(!visible);
450+
dataProviderParentDirectoryLabel.setVisible(!visible);
391451
}
392452

393453
@SuppressWarnings({"PMD.UnusedPrivateMethod"})
394454
private void createUIComponents() {
395455
this.collection = new FilteredComboBox(getCollectionOptions());
396456
this.dataProviderType = new FilteredComboBox(getProviderTypeOptions());
397457
this.areaSelect = new FilteredComboBox(getAreaOptions());
458+
areaSelect.setEnabled(false);
398459
this.parentMenu = new FilteredComboBox(getMenuReferences());
399460
this.parentAcl = new FilteredComboBox(getAclResourcesList());
461+
462+
if (getAclResourcesList().contains(ModuleMenuXml.defaultAcl)) {
463+
parentAcl.setSelectedItem(ModuleMenuXml.defaultAcl);
464+
}
400465
}
401466

402467
@NotNull
@@ -411,7 +476,6 @@ private List<String> getMenuReferences() {
411476
private List<String> getCollectionOptions() {
412477
if (this.collectionOptions == null) {
413478
this.collectionOptions = new ArrayList<>();
414-
this.collectionOptions.add("");
415479
final GetResourceCollections getResourceCollections;
416480
getResourceCollections = GetResourceCollections.getInstance(
417481
this.project
@@ -428,8 +492,8 @@ private List<String> getCollectionOptions() {
428492
private List<String> getProviderTypeOptions() {
429493
return new ArrayList<>(
430494
Arrays.asList(
431-
UiComponentDataProviderPhp.CUSTOM_TYPE,
432-
UiComponentDataProviderPhp.COLLECTION_TYPE
495+
UiComponentDataProviderPhp.COLLECTION_TYPE,
496+
UiComponentDataProviderPhp.CUSTOM_TYPE
433497
)
434498
);
435499
}
@@ -465,6 +529,9 @@ private String getDataProviderNamespace() {
465529
}
466530

467531
private String getDataProviderClassFqn() {
532+
if (!getDataProviderType().equals(UiComponentDataProviderPhp.CUSTOM_TYPE)) {
533+
return UiComponentDataProviderPhp.DEFAULT_DATA_PROVIDER;
534+
}
468535
return String.format(
469536
"%s%s%s",
470537
getDataProviderNamespace(),
@@ -568,9 +635,9 @@ public String getMenuIdentifier() {
568635
private String getMenuAction() {
569636
return getRoute()
570637
+ File.separator
571-
+ getControllerName().toLowerCase(new java.util.Locale("en","EN"))
638+
+ FirstLetterToLowercaseUtil.convert(getControllerName())
572639
+ File.separator
573-
+ getActionName().toLowerCase(new java.util.Locale("en","EN"));
640+
+ FirstLetterToLowercaseUtil.convert(getActionName());
574641
}
575642

576643
public String getMenuTitle() {
@@ -588,4 +655,8 @@ public String getParentAcl() {
588655
public String getAclTitle() {
589656
return aclTitle.getText().trim();
590657
}
658+
659+
public String getTableName() {
660+
return tableName.getText().trim();
661+
}
591662
}

0 commit comments

Comments
 (0)