Skip to content

Commit 65ad74d

Browse files
Added testing for entity manager in pool generation, showed message if generator handler is incorrect, fixed open file flag ignored
1 parent 7bc0a29 commit 65ad74d

File tree

39 files changed

+631
-301
lines changed

39 files changed

+631
-301
lines changed

Diff for: resources/magento2/exception.properties

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
exception.common.checkLogg=Please, check logging console to get full exception stack trace.
2+
exception.reflection.cannotInstantiate=Couldn't instantiate class: {0}
3+
exception.NoSuchMethod=Method {0} not found for class {1}. You should implement it.

Diff for: src/com/magento/idea/magento2plugin/actions/generation/data/dialog/EntityManagerContextData.java

+9
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ public class EntityManagerContextData implements GenerationContextData {
2020
private final Project project;
2121
private final String moduleName;
2222
private final String actionName;
23+
private final boolean hasOpenFileFlag;
2324
private final String indexViewAction;
2425
private final String editViewAction;
2526
private final String newViewAction;
@@ -52,6 +53,7 @@ public class EntityManagerContextData implements GenerationContextData {
5253
* @param project Project
5354
* @param moduleName String
5455
* @param actionName String
56+
* @param hasOpenFileFlag boolean
5557
* @param indexViewAction String
5658
* @param editViewAction String
5759
* @param newViewAction String
@@ -83,6 +85,7 @@ public EntityManagerContextData(
8385
final @NotNull Project project,
8486
final @NotNull String moduleName,
8587
final @NotNull String actionName,
88+
final boolean hasOpenFileFlag,
8689
final @NotNull String indexViewAction,
8790
final @NotNull String editViewAction,
8891
final @NotNull String newViewAction,
@@ -112,6 +115,7 @@ public EntityManagerContextData(
112115
this.project = project;
113116
this.moduleName = moduleName;
114117
this.actionName = actionName;
118+
this.hasOpenFileFlag = hasOpenFileFlag;
115119
this.indexViewAction = indexViewAction;
116120
this.editViewAction = editViewAction;
117121
this.newViewAction = newViewAction;
@@ -154,6 +158,11 @@ public String getActionName() {
154158
return actionName;
155159
}
156160

161+
@Override
162+
public boolean hasOpenFileFlag() {
163+
return hasOpenFileFlag;
164+
}
165+
157166
/**
158167
* Get index action.
159168
*

Diff for: src/com/magento/idea/magento2plugin/actions/generation/data/dialog/GenerationContextData.java

+7
Original file line numberDiff line numberDiff line change
@@ -32,4 +32,11 @@ public interface GenerationContextData {
3232
* @return String
3333
*/
3434
String getActionName();
35+
36+
/**
37+
* Check if files should be opened after generation.
38+
*
39+
* @return boolean
40+
*/
41+
boolean hasOpenFileFlag();
3542
}

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

+9-196
Large diffs are not rendered by default.

Diff for: src/com/magento/idea/magento2plugin/actions/generation/generator/FileGenerator.java

+16-7
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
* Copyright © Magento, Inc. All rights reserved.
33
* See COPYING.txt for license details.
44
*/
5+
56
package com.magento.idea.magento2plugin.actions.generation.generator;
67

78
import com.intellij.openapi.project.Project;
@@ -13,24 +14,32 @@ public abstract class FileGenerator {
1314
private final Project project;
1415
private final NavigateToCreatedFile navigateToCreatedFile;
1516

16-
public FileGenerator(Project project)
17-
{
17+
public FileGenerator(final Project project) {
1818
this.project = project;
1919
this.navigateToCreatedFile = NavigateToCreatedFile.getInstance();
2020
}
2121

22-
public abstract PsiFile generate(String actionName);
22+
public abstract PsiFile generate(final String actionName);
23+
24+
/**
25+
* Generate file.
26+
*
27+
* @param actionName String
28+
* @param openFile boolean
29+
*
30+
* @return PsiFile
31+
*/
32+
public PsiFile generate(final String actionName, final boolean openFile) {
33+
final PsiFile file = this.generate(actionName);
2334

24-
public PsiFile generate(String actionName, boolean openFile) {
25-
PsiFile file = this.generate(actionName);
26-
if (file != null) {
35+
if (file != null && openFile) {
2736
navigateToCreatedFile.navigate(project, file);
2837
}
2938
return file;
3039
}
3140

3241
protected Properties getAttributes() {
33-
Properties attributes = new Properties();
42+
final Properties attributes = new Properties();
3443
this.fillAttributes(attributes);
3544
return attributes;
3645
}

Diff for: src/com/magento/idea/magento2plugin/actions/generation/generator/pool/GeneratorHandler.java

+21-3
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,15 @@
88
import com.intellij.openapi.project.Project;
99
import com.magento.idea.magento2plugin.actions.generation.data.converter.DataObjectConverter;
1010
import com.magento.idea.magento2plugin.actions.generation.data.dialog.GenerationContextData;
11-
11+
import com.magento.idea.magento2plugin.actions.generation.generator.FileGenerator;
1212
import org.jetbrains.annotations.NotNull;
1313

1414
public abstract class GeneratorHandler {
1515

1616
private final GenerationContextData contextData;
1717
private final DataObjectConverter dataObjectConverter;
1818
private final GeneratorRunnerValidator runnerValidator;
19+
private FileGenerator generator;
1920

2021
/**
2122
* Generator handler constructor.
@@ -60,9 +61,26 @@ public boolean validate() {
6061
}
6162

6263
/**
63-
* Run chain of generators.
64+
* Instantiate and retrieve generator.
65+
* Must be separated from generate method to test converter type casting.
66+
*/
67+
public abstract void instantiateGenerator();
68+
69+
/**
70+
* Set generator.
71+
*
72+
* @param generator FileGenerator
73+
*/
74+
public void setGenerator(final FileGenerator generator) {
75+
this.generator = generator;
76+
}
77+
78+
/**
79+
* Run generator.
6480
*/
65-
public abstract void generate();
81+
public final void generate() {
82+
generator.generate(getContextData().getActionName(), getContextData().hasOpenFileFlag());
83+
}
6684

6785
/**
6886
* Get project.

Diff for: src/com/magento/idea/magento2plugin/actions/generation/generator/pool/GeneratorPoolHandler.java

+83-2
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,26 @@
55

66
package com.magento.idea.magento2plugin.actions.generation.generator.pool;
77

8+
import com.intellij.openapi.diagnostic.Logger;
89
import com.magento.idea.magento2plugin.actions.generation.data.converter.DataObjectConverter;
910
import com.magento.idea.magento2plugin.actions.generation.data.dialog.GenerationContextData;
11+
import com.magento.idea.magento2plugin.bundles.ExceptionBundle;
1012
import java.lang.reflect.Constructor;
13+
import java.lang.reflect.InvocationTargetException;
1114
import java.util.LinkedList;
1215
import java.util.List;
16+
import java.util.concurrent.atomic.AtomicInteger;
17+
import java.util.stream.Collectors;
18+
import javax.swing.JOptionPane;
1319
import org.jetbrains.annotations.NotNull;
1420

1521
public final class GeneratorPoolHandler {
1622

23+
private static final Logger LOGGER = Logger.getInstance(GeneratorPoolHandler.class);
1724
private final GenerationContextData contextData;
1825
private final List<GeneratorHandler> pool;
26+
private final ExceptionBundle exceptionBundle;
27+
private final List<String> errors;
1928

2029
/**
2130
* Generator pool handler constructor.
@@ -25,6 +34,8 @@ public final class GeneratorPoolHandler {
2534
public GeneratorPoolHandler(final @NotNull GenerationContextData contextData) {
2635
this.contextData = contextData;
2736
pool = new LinkedList<>();
37+
exceptionBundle = new ExceptionBundle();
38+
errors = new LinkedList<>();
2839
}
2940

3041
/**
@@ -85,9 +96,31 @@ public <T extends GeneratorHandler> GeneratorPoolHandler addNext(
8596
pool.add(handlerClassConstructor
8697
.newInstance(contextData, dataObjectConverter, runnerValidator));
8798
}
99+
} catch (InstantiationException | IllegalAccessException
100+
| InvocationTargetException exception) {
101+
LOGGER.error(exception.getMessage());
102+
errors.add(this.exceptionBundle.message(
103+
"exception.reflection.cannotInstantiate",
104+
handlerClass.getSimpleName()
105+
));
106+
} catch (NoSuchMethodException noSuchMethodException) {
107+
// This error can be caused if Handler class realization
108+
// doesn't have constructor with all required arguments.
109+
final String constructorDescWithTwoArgs = handlerClass.getSimpleName()
110+
+ " with arguments " + GenerationContextData.class.getSimpleName()
111+
+ ", " + DataObjectConverter.class.getSimpleName();
112+
final String constructorDescWithThreeArgs = handlerClass.getSimpleName()
113+
+ " with arguments " + GenerationContextData.class.getSimpleName() + ", "
114+
+ DataObjectConverter.class.getSimpleName() + ", "
115+
+ GeneratorRunnerValidator.class.getSimpleName();
88116

89-
} catch (Exception exception) {
90-
//
117+
LOGGER.error(noSuchMethodException.getMessage());
118+
errors.add(this.exceptionBundle.message(
119+
"exception.NoSuchMethod",
120+
runnerValidator == null ? constructorDescWithTwoArgs
121+
: constructorDescWithThreeArgs,
122+
handlerClass.getSimpleName()
123+
));
91124
}
92125

93126
return this;
@@ -97,10 +130,58 @@ public <T extends GeneratorHandler> GeneratorPoolHandler addNext(
97130
* Trigger generation process.
98131
*/
99132
public void run() {
133+
if (hasErrorMessages()) {
134+
showErrorMessages();
135+
return;
136+
}
100137
for (final GeneratorHandler handler : pool) {
138+
handler.instantiateGenerator();
139+
101140
if (handler.validate()) {
102141
handler.generate();
103142
}
104143
}
105144
}
145+
146+
/**
147+
* Instantiate all generators.
148+
*/
149+
public void instantiateAllGenerators() {
150+
for (final GeneratorHandler handler : pool) {
151+
handler.instantiateGenerator();
152+
}
153+
}
154+
155+
/**
156+
* Check if Generator Pool Handler has any error messages.
157+
*
158+
* @return boolean
159+
*/
160+
public boolean hasErrorMessages() {
161+
return !errors.isEmpty();
162+
}
163+
164+
/**
165+
* Show error messages for the user.
166+
* Those errors are system and must be processed by the dev during the testing.
167+
* They cannot go to live.
168+
*/
169+
private void showErrorMessages() {
170+
if (!errors.isEmpty()) {
171+
final String title = this.exceptionBundle.message(
172+
"exception.common.checkLogg"
173+
);
174+
final AtomicInteger messageNum = new AtomicInteger(1);
175+
final String errorMessage = errors.stream()
176+
.map(message -> messageNum.getAndIncrement() + ". " + message)
177+
.collect(Collectors.joining("\n"));
178+
179+
JOptionPane.showMessageDialog(
180+
null,
181+
errorMessage,
182+
title,
183+
JOptionPane.ERROR_MESSAGE
184+
);
185+
}
186+
}
106187
}

Diff for: src/com/magento/idea/magento2plugin/actions/generation/generator/pool/handler/AclXmlGeneratorHandler.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -44,11 +44,11 @@ public AclXmlGeneratorHandler(
4444
}
4545

4646
@Override
47-
public void generate() {
48-
new AclXmlGenerator(
47+
public void instantiateGenerator() {
48+
setGenerator(new AclXmlGenerator(
4949
(AclXmlData) getDataObjectConverter(),
5050
getContextData().getModuleName(),
5151
getProject()
52-
).generate(getContextData().getActionName(), true);
52+
));
5353
}
5454
}

Diff for: src/com/magento/idea/magento2plugin/actions/generation/generator/pool/handler/CollectionModelGeneratorHandler.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -44,10 +44,10 @@ public CollectionModelGeneratorHandler(
4444
}
4545

4646
@Override
47-
public void generate() {
48-
new ModuleCollectionGenerator(
47+
public void instantiateGenerator() {
48+
setGenerator(new ModuleCollectionGenerator(
4949
(CollectionData) getDataObjectConverter(),
5050
getProject()
51-
).generate(getContextData().getActionName(), true);
51+
));
5252
}
5353
}

Diff for: src/com/magento/idea/magento2plugin/actions/generation/generator/pool/handler/DataModelGeneratorHandler.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -44,10 +44,10 @@ public DataModelGeneratorHandler(
4444
}
4545

4646
@Override
47-
public void generate() {
48-
new DataModelGenerator(
47+
public void instantiateGenerator() {
48+
setGenerator(new DataModelGenerator(
4949
getProject(),
5050
(DataModelData) getDataObjectConverter()
51-
).generate(getContextData().getActionName(), true);
51+
));
5252
}
5353
}

Diff for: src/com/magento/idea/magento2plugin/actions/generation/generator/pool/handler/DataModelInterfaceGeneratorHandler.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -44,10 +44,10 @@ public DataModelInterfaceGeneratorHandler(
4444
}
4545

4646
@Override
47-
public void generate() {
48-
new DataModelInterfaceGenerator(
47+
public void instantiateGenerator() {
48+
setGenerator(new DataModelInterfaceGenerator(
4949
getProject(),
5050
(DataModelInterfaceData) getDataObjectConverter()
51-
).generate(getContextData().getActionName(), true);
51+
));
5252
}
5353
}

Diff for: src/com/magento/idea/magento2plugin/actions/generation/generator/pool/handler/DataModelPreferenceGeneratorHandler.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -44,10 +44,10 @@ public DataModelPreferenceGeneratorHandler(
4444
}
4545

4646
@Override
47-
public void generate() {
48-
new PreferenceDiXmlGenerator(
47+
public void instantiateGenerator() {
48+
setGenerator(new PreferenceDiXmlGenerator(
4949
(PreferenceDiXmFileData) getDataObjectConverter(),
5050
getProject()
51-
).generate(getContextData().getActionName(), true);
51+
));
5252
}
5353
}

Diff for: src/com/magento/idea/magento2plugin/actions/generation/generator/pool/handler/DataProviderGeneratorHandler.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -44,11 +44,11 @@ public DataProviderGeneratorHandler(
4444
}
4545

4646
@Override
47-
public void generate() {
48-
new UiComponentDataProviderGenerator(
47+
public void instantiateGenerator() {
48+
setGenerator(new UiComponentDataProviderGenerator(
4949
(UiComponentDataProviderData) getDataObjectConverter(),
5050
getContextData().getModuleName(),
5151
getProject()
52-
).generate(getContextData().getActionName(), true);
52+
));
5353
}
5454
}

Diff for: src/com/magento/idea/magento2plugin/actions/generation/generator/pool/handler/DbSchemaWhitelistGeneratorHandler.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -44,11 +44,11 @@ public DbSchemaWhitelistGeneratorHandler(
4444
}
4545

4646
@Override
47-
public void generate() {
48-
new DbSchemaWhitelistJsonGenerator(
47+
public void instantiateGenerator() {
48+
setGenerator(new DbSchemaWhitelistJsonGenerator(
4949
getProject(),
5050
(DbSchemaXmlData) getDataObjectConverter(),
5151
getContextData().getModuleName()
52-
).generate(getContextData().getActionName(), true);
52+
));
5353
}
5454
}

Diff for: src/com/magento/idea/magento2plugin/actions/generation/generator/pool/handler/DbSchemaXmlGeneratorHandler.java

+3-3
Original file line numberDiff line numberDiff line change
@@ -44,11 +44,11 @@ public DbSchemaXmlGeneratorHandler(
4444
}
4545

4646
@Override
47-
public void generate() {
48-
new DbSchemaXmlGenerator(
47+
public void instantiateGenerator() {
48+
setGenerator(new DbSchemaXmlGenerator(
4949
(DbSchemaXmlData) getDataObjectConverter(),
5050
getProject(),
5151
getContextData().getModuleName()
52-
).generate(getContextData().getActionName(), true);
52+
));
5353
}
5454
}

0 commit comments

Comments
 (0)