Skip to content

Commit e4b19ea

Browse files
author
Vitaliy Boyko
committed
Fixed null pointer
1 parent c473393 commit e4b19ea

File tree

2 files changed

+169
-0
lines changed

2 files changed

+169
-0
lines changed

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

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import com.intellij.openapi.ui.ComboBoxTableRenderer;
1111
import com.intellij.psi.PsiDirectory;
1212
import com.intellij.psi.PsiFile;
13+
import com.intellij.util.indexing.FileBasedIndex;
1314
import com.magento.idea.magento2plugin.actions.generation.NewDbSchemaAction;
1415
import com.magento.idea.magento2plugin.actions.generation.NewUiComponentGridAction;
1516
import com.magento.idea.magento2plugin.actions.generation.NewViewModelAction;
@@ -18,6 +19,8 @@
1819
import java.awt.event.WindowAdapter;
1920
import java.awt.event.WindowEvent;
2021
import java.util.ArrayList;
22+
import java.util.Collection;
23+
import java.util.Collections;
2124
import java.util.List;
2225
import java.util.Map;
2326
import javax.swing.*;
@@ -68,6 +71,7 @@
6871
import com.magento.idea.magento2plugin.magento.packages.File;
6972
import com.magento.idea.magento2plugin.magento.packages.HttpMethod;
7073
import com.magento.idea.magento2plugin.magento.packages.PropertiesTypes;
74+
import com.magento.idea.magento2plugin.stubs.indexes.xml.MenuIndex;
7175
import com.magento.idea.magento2plugin.ui.FilteredComboBox;
7276
import com.magento.idea.magento2plugin.ui.table.ComboBoxEditor;
7377
import com.magento.idea.magento2plugin.ui.table.DeleteRowButton;
@@ -740,6 +744,7 @@ public List<UiComponentFormFieldData> getFields() {
740744
@SuppressWarnings({"PMD.UnusedPrivateMethod"})
741745
private void createUIComponents() {
742746
this.parentAcl = new FilteredComboBox(getAclResourcesList());
747+
this.parentMenu = new FilteredComboBox(getMenuReferences());
743748

744749
if (getAclResourcesList().contains(ModuleMenuXml.defaultAcl)) {
745750
parentAcl.setSelectedItem(ModuleMenuXml.defaultAcl);
@@ -927,4 +932,13 @@ private String getTableEngine() {
927932
private List<Map<String, String>> getColumns() {
928933
return columnsTableGroupWrapper.getColumnsData();
929934
}
935+
936+
@NotNull
937+
private List<String> getMenuReferences() {
938+
final Collection<String> menuReferences
939+
= FileBasedIndex.getInstance().getAllKeys(MenuIndex.KEY, project);
940+
final ArrayList<String> menuReferencesList = new ArrayList<>(menuReferences);
941+
Collections.sort(menuReferencesList);
942+
return menuReferencesList;
943+
}
930944
}
Lines changed: 155 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,155 @@
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.generator;
7+
8+
import com.intellij.openapi.command.WriteCommandAction;
9+
import com.intellij.openapi.project.Project;
10+
import com.intellij.psi.PsiDirectory;
11+
import com.intellij.psi.PsiFile;
12+
import com.jetbrains.php.lang.psi.PhpFile;
13+
import com.jetbrains.php.lang.psi.elements.PhpClass;
14+
import com.magento.idea.magento2plugin.actions.generation.data.UiComponentDataProviderData;
15+
import com.magento.idea.magento2plugin.actions.generation.generator.util.DirectoryGenerator;
16+
import com.magento.idea.magento2plugin.actions.generation.generator.util.FileFromTemplateGenerator;
17+
import com.magento.idea.magento2plugin.bundles.CommonBundle;
18+
import com.magento.idea.magento2plugin.bundles.ValidatorBundle;
19+
import com.magento.idea.magento2plugin.indexes.ModuleIndex;
20+
import com.magento.idea.magento2plugin.magento.files.UiComponentDataProviderPhp;
21+
import com.magento.idea.magento2plugin.magento.packages.File;
22+
import com.magento.idea.magento2plugin.magento.packages.Package;
23+
import com.magento.idea.magento2plugin.util.GetFirstClassOfFile;
24+
import com.magento.idea.magento2plugin.util.GetPhpClassByFQN;
25+
26+
import javax.swing.*;
27+
import java.util.Properties;
28+
29+
public class QueryGenerator extends FileGenerator {
30+
private final UiComponentDataProviderData uiComponentGridDataProviderData;
31+
private final Project project;
32+
private final DirectoryGenerator directoryGenerator;
33+
private final FileFromTemplateGenerator fileFromTemplateGenerator;
34+
private final ValidatorBundle validatorBundle;
35+
private final CommonBundle commonBundle;
36+
private final String moduleName;
37+
private final GetFirstClassOfFile getFirstClassOfFile;
38+
39+
/**
40+
* Ui component grid data provider constructor.
41+
*
42+
* @param uiComponentGridDataProviderData UiComponentGridDataProviderData
43+
* @param moduleName String
44+
* @param project Project
45+
*/
46+
public QueryGenerator(
47+
final UiComponentDataProviderData uiComponentGridDataProviderData,
48+
final String moduleName,
49+
final Project project
50+
) {
51+
super(project);
52+
53+
this.uiComponentGridDataProviderData = uiComponentGridDataProviderData;
54+
this.directoryGenerator = DirectoryGenerator.getInstance();
55+
this.fileFromTemplateGenerator = FileFromTemplateGenerator.getInstance(project);
56+
this.validatorBundle = new ValidatorBundle();
57+
this.commonBundle = new CommonBundle();
58+
this.getFirstClassOfFile = GetFirstClassOfFile.getInstance();
59+
this.project = project;
60+
this.moduleName = moduleName;
61+
}
62+
63+
@Override
64+
public PsiFile generate(final String actionName) {
65+
final PsiFile[] dataProviderFiles = new PsiFile[1];
66+
67+
WriteCommandAction.runWriteCommandAction(project, () -> {
68+
PhpClass dataProvider = GetPhpClassByFQN.getInstance(project).execute(
69+
getDataProviderFqn()
70+
);
71+
72+
if (dataProvider != null) {
73+
final String errorMessage = this.validatorBundle.message(
74+
"validator.file.alreadyExists",
75+
"DataProvider Class"
76+
);
77+
JOptionPane.showMessageDialog(
78+
null,
79+
errorMessage,
80+
commonBundle.message("common.error"),
81+
JOptionPane.ERROR_MESSAGE
82+
);
83+
84+
return;
85+
}
86+
87+
dataProvider = createDataProviderClass(actionName);
88+
89+
if (dataProvider == null) {
90+
final String errorMessage = this.validatorBundle.message(
91+
"validator.file.cantBeCreated",
92+
"DataProvider Class"
93+
);
94+
JOptionPane.showMessageDialog(
95+
null,
96+
errorMessage,
97+
commonBundle.message("common.error"),
98+
JOptionPane.ERROR_MESSAGE
99+
);
100+
101+
return;
102+
}
103+
104+
dataProviderFiles[0] = dataProvider.getContainingFile();
105+
});
106+
107+
return dataProviderFiles[0];
108+
}
109+
110+
@Override
111+
protected void fillAttributes(final Properties attributes) {
112+
attributes.setProperty("NAMESPACE", uiComponentGridDataProviderData.getNamespace());
113+
attributes.setProperty("CLASS_NAME", uiComponentGridDataProviderData.getName());
114+
}
115+
116+
private PhpClass createDataProviderClass(final String actionName) {
117+
PsiDirectory parentDirectory = ModuleIndex.getInstance(project)
118+
.getModuleDirectoryByModuleName(this.moduleName);
119+
final PsiFile dataProviderFile;
120+
final String[] dataProviderDirectories = uiComponentGridDataProviderData.getPath().split(
121+
File.separator
122+
);
123+
for (final String dataProviderDirectory: dataProviderDirectories) {
124+
parentDirectory = directoryGenerator.findOrCreateSubdirectory(
125+
parentDirectory, dataProviderDirectory
126+
);
127+
}
128+
129+
final Properties attributes = getAttributes();
130+
131+
dataProviderFile = fileFromTemplateGenerator.generate(
132+
UiComponentDataProviderPhp.getInstance(
133+
uiComponentGridDataProviderData.getName()
134+
),
135+
attributes,
136+
parentDirectory,
137+
actionName
138+
);
139+
140+
if (dataProviderFile == null) {
141+
return null;
142+
}
143+
144+
return getFirstClassOfFile.execute((PhpFile) dataProviderFile);
145+
}
146+
147+
private String getDataProviderFqn() {
148+
return String.format(
149+
"%s%s%s",
150+
uiComponentGridDataProviderData.getNamespace(),
151+
Package.fqnSeparator,
152+
uiComponentGridDataProviderData.getName()
153+
);
154+
}
155+
}

0 commit comments

Comments
 (0)