55
66package com .magento .idea .magento2plugin .actions .generation .generator ;
77
8- import com .intellij .openapi .command .WriteCommandAction ;
98import 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 ;
149import 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 ;
1710import com .magento .idea .magento2plugin .actions .generation .generator .util .PhpClassGeneratorUtil ;
1811import 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 ;
2213import com .magento .idea .magento2plugin .magento .files .DataModelFile ;
2314import com .magento .idea .magento2plugin .magento .files .DataModelInterfaceFile ;
24- import com .magento .idea .magento2plugin .util .GetFirstClassOfFile ;
25- import com .magento .idea .magento2plugin .util .GetPhpClassByFQN ;
2615import java .util .Properties ;
27- import javax .swing .JOptionPane ;
2816import org .jetbrains .annotations .NotNull ;
2917
30- public class DataModelGenerator extends FileGenerator {
18+ public class DataModelGenerator extends PhpFileGenerator {
3119
32- private final Project project ;
3320 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 ;
4021
4122 /**
4223 * Data model generator constructor.
@@ -48,83 +29,28 @@ public DataModelGenerator(
4829 final @ NotNull Project project ,
4930 final @ NotNull DataModelData data
5031 ) {
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 );
10333 }
10434
10535 /**
106- * Create model class.
107- *
108- * @param actionName String
36+ * Data model generator constructor.
10937 *
110- * @return PhpClass
38+ * @param project Project
39+ * @param data DataModelData
40+ * @param checkFileAlreadyExists boolean
11141 */
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+ }
12650
127- return dataModelFile == null ? null : getFirstClassOfFile .execute ((PhpFile ) dataModelFile );
51+ @ Override
52+ protected AbstractPhpFile initFile () {
53+ return new DataModelFile (data .getModuleName (), data .getName ());
12854 }
12955
13056 /**
@@ -137,10 +63,7 @@ protected void fillAttributes(final @NotNull Properties attributes) {
13763 final PhpClassTypesBuilder phpClassTypesBuilder = new PhpClassTypesBuilder ();
13864
13965 phpClassTypesBuilder
140- .appendProperty (
141- "NAMESPACE" ,
142- file .getNamespaceBuilder (data .getModuleName ()).getNamespace ()
143- )
66+ .appendProperty ("NAMESPACE" , file .getNamespace ())
14467 .appendProperty ("NAME" , data .getName ())
14568 .appendProperty ("PROPERTIES" , data .getProperties ())
14669 .appendProperty ("HASINTERFACE" , Boolean .toString (data .hasInterface ()))
@@ -150,8 +73,9 @@ protected void fillAttributes(final @NotNull Properties attributes) {
15073 phpClassTypesBuilder .append (
15174 "IMPLEMENTS" ,
15275 new DataModelInterfaceFile (
76+ data .getModuleName (),
15377 data .getInterfaceName ()
154- ).getNamespaceBuilder ( data . getModuleName ()). getClassFqn ());
78+ ).getClassFqn ());
15579 }
15680
15781 phpClassTypesBuilder .mergeProperties (attributes );
0 commit comments