5
5
6
6
package com .magento .idea .magento2plugin .actions .generation .generator ;
7
7
8
- import com .intellij .openapi .command .WriteCommandAction ;
9
8
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
9
import com .magento .idea .magento2plugin .actions .generation .data .DataModelData ;
15
- import com .magento .idea .magento2plugin .actions .generation .generator .util .DirectoryGenerator ;
16
- import com .magento .idea .magento2plugin .actions .generation .generator .util .FileFromTemplateGenerator ;
17
10
import com .magento .idea .magento2plugin .actions .generation .generator .util .PhpClassGeneratorUtil ;
18
11
import com .magento .idea .magento2plugin .actions .generation .generator .util .PhpClassTypesBuilder ;
19
- import com .magento .idea .magento2plugin .bundles .CommonBundle ;
20
- import com .magento .idea .magento2plugin .bundles .ValidatorBundle ;
21
- import com .magento .idea .magento2plugin .indexes .ModuleIndex ;
12
+ import com .magento .idea .magento2plugin .magento .files .AbstractPhpFile ;
22
13
import com .magento .idea .magento2plugin .magento .files .DataModelFile ;
23
14
import com .magento .idea .magento2plugin .magento .files .DataModelInterfaceFile ;
24
- import com .magento .idea .magento2plugin .util .GetFirstClassOfFile ;
25
- import com .magento .idea .magento2plugin .util .GetPhpClassByFQN ;
26
15
import java .util .Properties ;
27
- import javax .swing .JOptionPane ;
28
16
import org .jetbrains .annotations .NotNull ;
29
17
30
- public class DataModelGenerator extends FileGenerator {
18
+ public class DataModelGenerator extends PhpFileGenerator {
31
19
32
- private final Project project ;
33
20
private final DataModelData data ;
34
- private final DirectoryGenerator directoryGenerator ;
35
- private final FileFromTemplateGenerator fileFromTemplateGenerator ;
36
- private final GetFirstClassOfFile getFirstClassOfFile ;
37
- private final ValidatorBundle validatorBundle ;
38
- private final CommonBundle commonBundle ;
39
- private final DataModelFile file ;
40
21
41
22
/**
42
23
* Data model generator constructor.
@@ -48,83 +29,28 @@ public DataModelGenerator(
48
29
final @ NotNull Project project ,
49
30
final @ NotNull DataModelData data
50
31
) {
51
- super (project );
52
- this .project = project ;
53
- this .data = data ;
54
- this .directoryGenerator = DirectoryGenerator .getInstance ();
55
- this .fileFromTemplateGenerator = new FileFromTemplateGenerator (project );
56
- this .getFirstClassOfFile = GetFirstClassOfFile .getInstance ();
57
- this .validatorBundle = new ValidatorBundle ();
58
- this .commonBundle = new CommonBundle ();
59
- file = new DataModelFile (data .getName ());
60
- }
61
-
62
- @ Override
63
- public PsiFile generate (final @ NotNull String actionName ) {
64
- final PsiFile [] files = new PsiFile [1 ];
65
-
66
- WriteCommandAction .runWriteCommandAction (project , () -> {
67
- PhpClass dataModel = GetPhpClassByFQN .getInstance (project ).execute (
68
- file .getNamespaceBuilder (data .getModuleName ()).getClassFqn ()
69
- );
70
-
71
- if (dataModel == null ) {
72
- dataModel = createModel (actionName );
73
-
74
- if (dataModel == null ) {
75
- final String errorMessage = this .validatorBundle .message (
76
- "validator.file.cantBeCreated" ,
77
- "Data Model"
78
- );
79
- JOptionPane .showMessageDialog (
80
- null ,
81
- errorMessage ,
82
- commonBundle .message ("common.error" ),
83
- JOptionPane .ERROR_MESSAGE
84
- );
85
- } else {
86
- files [0 ] = dataModel .getContainingFile ();
87
- }
88
- } else {
89
- final String errorMessage = this .validatorBundle .message (
90
- "validator.file.alreadyExists" ,
91
- "Data Model"
92
- );
93
- JOptionPane .showMessageDialog (
94
- null ,
95
- errorMessage ,
96
- commonBundle .message ("common.error" ),
97
- JOptionPane .ERROR_MESSAGE
98
- );
99
- }
100
- });
101
-
102
- return files [0 ];
32
+ this (project , data , true );
103
33
}
104
34
105
35
/**
106
- * Create model class.
107
- *
108
- * @param actionName String
36
+ * Data model generator constructor.
109
37
*
110
- * @return PhpClass
38
+ * @param project Project
39
+ * @param data DataModelData
40
+ * @param checkFileAlreadyExists boolean
111
41
*/
112
- private PhpClass createModel (final @ NotNull String actionName ) {
113
- final PsiDirectory parentDirectory = new ModuleIndex (project )
114
- .getModuleDirectoryByModuleName (data .getModuleName ());
115
- final PsiDirectory dataModelDirectory = directoryGenerator .findOrCreateSubdirectories (
116
- parentDirectory ,
117
- DataModelFile .DIRECTORY
118
- );
119
-
120
- final PsiFile dataModelFile = fileFromTemplateGenerator .generate (
121
- file ,
122
- getAttributes (),
123
- dataModelDirectory ,
124
- actionName
125
- );
42
+ public DataModelGenerator (
43
+ final @ NotNull Project project ,
44
+ final @ NotNull DataModelData data ,
45
+ final boolean checkFileAlreadyExists
46
+ ) {
47
+ super (project , checkFileAlreadyExists );
48
+ this .data = data ;
49
+ }
126
50
127
- return dataModelFile == null ? null : getFirstClassOfFile .execute ((PhpFile ) dataModelFile );
51
+ @ Override
52
+ protected AbstractPhpFile initFile () {
53
+ return new DataModelFile (data .getModuleName (), data .getName ());
128
54
}
129
55
130
56
/**
@@ -137,10 +63,7 @@ protected void fillAttributes(final @NotNull Properties attributes) {
137
63
final PhpClassTypesBuilder phpClassTypesBuilder = new PhpClassTypesBuilder ();
138
64
139
65
phpClassTypesBuilder
140
- .appendProperty (
141
- "NAMESPACE" ,
142
- file .getNamespaceBuilder (data .getModuleName ()).getNamespace ()
143
- )
66
+ .appendProperty ("NAMESPACE" , file .getNamespace ())
144
67
.appendProperty ("NAME" , data .getName ())
145
68
.appendProperty ("PROPERTIES" , data .getProperties ())
146
69
.appendProperty ("HASINTERFACE" , Boolean .toString (data .hasInterface ()))
@@ -150,8 +73,9 @@ protected void fillAttributes(final @NotNull Properties attributes) {
150
73
phpClassTypesBuilder .append (
151
74
"IMPLEMENTS" ,
152
75
new DataModelInterfaceFile (
76
+ data .getModuleName (),
153
77
data .getInterfaceName ()
154
- ).getNamespaceBuilder ( data . getModuleName ()). getClassFqn ());
78
+ ).getClassFqn ());
155
79
}
156
80
157
81
phpClassTypesBuilder .mergeProperties (attributes );
0 commit comments