1414import com .magento .idea .magento2plugin .actions .generation .NewUiComponentGridAction ;
1515import com .magento .idea .magento2plugin .actions .generation .data .AclXmlData ;
1616import com .magento .idea .magento2plugin .actions .generation .data .ControllerFileData ;
17+ import com .magento .idea .magento2plugin .actions .generation .data .DataProviderDeclarationData ;
1718import com .magento .idea .magento2plugin .actions .generation .data .LayoutXmlData ;
1819import com .magento .idea .magento2plugin .actions .generation .data .MenuXmlData ;
20+ import com .magento .idea .magento2plugin .actions .generation .data .RoutesXmlData ;
1921import com .magento .idea .magento2plugin .actions .generation .data .UiComponentDataProviderData ;
2022import com .magento .idea .magento2plugin .actions .generation .data .UiComponentGridData ;
2123import com .magento .idea .magento2plugin .actions .generation .data .UiComponentGridToolbarData ;
3234import com .magento .idea .magento2plugin .actions .generation .dialog .validator .rule .RouteIdRule ;
3335import com .magento .idea .magento2plugin .actions .generation .dialog .validator .rule .StartWithNumberOrCapitalLetterRule ;
3436import com .magento .idea .magento2plugin .actions .generation .generator .AclXmlGenerator ;
37+ import com .magento .idea .magento2plugin .actions .generation .generator .DataProviderDeclarationGenerator ;
3538import com .magento .idea .magento2plugin .actions .generation .generator .LayoutXmlGenerator ;
3639import com .magento .idea .magento2plugin .actions .generation .generator .MenuXmlGenerator ;
3740import com .magento .idea .magento2plugin .actions .generation .generator .ModuleControllerClassGenerator ;
41+ import com .magento .idea .magento2plugin .actions .generation .generator .RoutesXmlGenerator ;
3842import com .magento .idea .magento2plugin .actions .generation .generator .UiComponentDataProviderGenerator ;
3943import com .magento .idea .magento2plugin .actions .generation .generator .UiComponentGridXmlGenerator ;
4044import com .magento .idea .magento2plugin .actions .generation .generator .util .NamespaceBuilder ;
4145import com .magento .idea .magento2plugin .magento .files .ControllerBackendPhp ;
46+ import com .magento .idea .magento2plugin .magento .files .ModuleMenuXml ;
4247import com .magento .idea .magento2plugin .magento .files .UiComponentDataProviderPhp ;
4348import com .magento .idea .magento2plugin .magento .packages .Areas ;
4449import com .magento .idea .magento2plugin .magento .packages .File ;
4550import com .magento .idea .magento2plugin .magento .packages .HttpMethod ;
4651import com .magento .idea .magento2plugin .magento .packages .Package ;
4752import com .magento .idea .magento2plugin .stubs .indexes .xml .MenuIndex ;
4853import com .magento .idea .magento2plugin .ui .FilteredComboBox ;
54+ import com .magento .idea .magento2plugin .util .FirstLetterToLowercaseUtil ;
4955import com .magento .idea .magento2plugin .util .magento .GetAclResourcesListUtil ;
5056import com .magento .idea .magento2plugin .util .magento .GetModuleNameByDirectoryUtil ;
5157import com .magento .idea .magento2plugin .util .magento .GetResourceCollections ;
6672import javax .swing .KeyStroke ;
6773import 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+ })
7082public 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