Skip to content

Commit e2b9371

Browse files
Refactored source model generation
1 parent 1714449 commit e2b9371

File tree

5 files changed

+45
-146
lines changed

5 files changed

+45
-146
lines changed

src/com/magento/idea/magento2plugin/actions/generation/data/SourceModelData.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
package com.magento.idea.magento2plugin.actions.generation.data;
77

8-
import com.magento.idea.magento2plugin.magento.files.SourceModelPhp;
8+
import com.magento.idea.magento2plugin.magento.files.SourceModelFile;
99
import com.magento.idea.magento2plugin.magento.packages.File;
1010
import com.magento.idea.magento2plugin.magento.packages.Package;
1111

@@ -63,7 +63,7 @@ public String getModuleName() {
6363
*/
6464
public String getDirectory() {
6565
if (this.directory == null) {
66-
return SourceModelPhp.DEFAULT_DIR;
66+
return SourceModelFile.DEFAULT_DIR;
6767
}
6868

6969
return this.directory;

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -293,7 +293,7 @@ private void generateSourceModelFile() {
293293
sourceModelData.setClassName(sourceModelNameTexField.getText().trim());
294294
sourceModelData.setDirectory(sourceModelDirectoryTexField.getText().trim());
295295

296-
new SourceModelGenerator(project, sourceModelData)
296+
new SourceModelGenerator(sourceModelData, project, true)
297297
.generate(NewEavAttributeAction.ACTION_NAME, false);
298298
}
299299

src/com/magento/idea/magento2plugin/actions/generation/generator/SourceModelGenerator.java

Lines changed: 28 additions & 127 deletions
Original file line numberDiff line numberDiff line change
@@ -6,149 +6,50 @@
66
package com.magento.idea.magento2plugin.actions.generation.generator;
77

88
import com.intellij.openapi.project.Project;
9-
import com.intellij.psi.PsiDirectory;
10-
import com.intellij.psi.PsiFile;
11-
import com.jetbrains.php.lang.psi.PhpFile;
12-
import com.jetbrains.php.lang.psi.elements.PhpClass;
139
import com.magento.idea.magento2plugin.actions.generation.data.SourceModelData;
14-
import com.magento.idea.magento2plugin.actions.generation.generator.util.DirectoryGenerator;
15-
import com.magento.idea.magento2plugin.actions.generation.generator.util.FileFromTemplateGenerator;
1610
import com.magento.idea.magento2plugin.actions.generation.generator.util.PhpClassGeneratorUtil;
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.SourceModelPhp;
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.GetPhpClassByFQN;
11+
import com.magento.idea.magento2plugin.magento.files.AbstractPhpFile;
12+
import com.magento.idea.magento2plugin.magento.files.SourceModelFile;
2413
import java.util.ArrayList;
2514
import java.util.List;
2615
import java.util.Properties;
27-
import javax.swing.JOptionPane;
16+
import org.jetbrains.annotations.NotNull;
2817

29-
public class SourceModelGenerator extends FileGenerator {
30-
private final SourceModelData sourceModelData;
31-
private final CommonBundle commonBundle;
32-
private final Project project;
33-
private final ValidatorBundle validatorBundle;
34-
private final DirectoryGenerator directoryGenerator;
35-
private final FileFromTemplateGenerator fileFromTemplateGenerator;
18+
public class SourceModelGenerator extends PhpFileGenerator {
19+
private final SourceModelData data;
3620

3721
/**
3822
* Constructor.
3923
*
4024
* @param project Project
41-
* @param sourceModelData SourceModelData
25+
* @param data SourceModelData
4226
*/
43-
public SourceModelGenerator(final Project project, final SourceModelData sourceModelData) {
44-
super(project);
45-
46-
this.project = project;
47-
this.sourceModelData = sourceModelData;
48-
this.commonBundle = new CommonBundle();
49-
this.fileFromTemplateGenerator = new FileFromTemplateGenerator(project);
50-
this.validatorBundle = new ValidatorBundle();
51-
this.directoryGenerator = new DirectoryGenerator();
52-
}
53-
54-
@Override
55-
public PsiFile generate(final String actionName) {
56-
final String errorTitle = commonBundle.message("common.error");
57-
final PhpClass dataPatchClass = GetPhpClassByFQN.getInstance(project)
58-
.execute(getSourceModelFqn());
59-
60-
if (validateIfFileAlreadyExist(dataPatchClass, errorTitle)) {
61-
return null;
62-
}
63-
64-
final PhpFile resourceModelFile = createResourceModelClass(actionName);
65-
66-
if (validateIfFileCanBeCreated(errorTitle, resourceModelFile)) {
67-
return null;
68-
}
69-
70-
return resourceModelFile;
71-
}
72-
73-
private boolean validateIfFileAlreadyExist(
74-
final PhpClass dataPatchClass,
75-
final String errorTitle
27+
public SourceModelGenerator(
28+
@NotNull final SourceModelData data,
29+
@NotNull final Project project
7630
) {
77-
if (dataPatchClass != null) {
78-
final String errorMessage = validatorBundle.message(
79-
"validator.file.alreadyExists",
80-
"Resource Class"
81-
);
82-
JOptionPane.showMessageDialog(
83-
null,
84-
errorMessage,
85-
errorTitle,
86-
JOptionPane.ERROR_MESSAGE
87-
);
88-
89-
return true;
90-
}
91-
92-
return false;
31+
this(data, project, true);
9332
}
9433

95-
private PhpFile createResourceModelClass(final String actionName) {
96-
final PsiDirectory parentDirectory = getResourceModelDirectory();
97-
final Properties attributes = getAttributes();
98-
final PsiFile dataPatchFile = fileFromTemplateGenerator.generate(
99-
new SourceModelPhp(sourceModelData.getClassName()),
100-
attributes,
101-
parentDirectory,
102-
actionName
103-
);
104-
105-
if (dataPatchFile == null) {
106-
return null;
107-
}
108-
109-
return (PhpFile) dataPatchFile;
110-
}
111-
112-
private PsiDirectory getResourceModelDirectory() {
113-
PsiDirectory parentDirectory = new ModuleIndex(project)
114-
.getModuleDirectoryByModuleName(sourceModelData.getModuleName());
115-
final String[] dataPatchDirectories = sourceModelData.getDirectory().split(File.separator);
116-
117-
for (final String sourceModelDirectory : dataPatchDirectories) {
118-
parentDirectory = directoryGenerator.findOrCreateSubdirectory(
119-
parentDirectory,
120-
sourceModelDirectory
121-
);
122-
}
123-
124-
return parentDirectory;
125-
}
126-
127-
private boolean validateIfFileCanBeCreated(
128-
final String errorTitle,
129-
final PhpFile dataPathFile
34+
/**
35+
* Constructor.
36+
*
37+
* @param project Project
38+
* @param data SourceModelData
39+
* @param checkFileAlreadyExists boolean
40+
*/
41+
public SourceModelGenerator(
42+
@NotNull final SourceModelData data,
43+
@NotNull final Project project,
44+
final boolean checkFileAlreadyExists
13045
) {
131-
if (dataPathFile == null) {
132-
final String errorMessage = validatorBundle.message(
133-
"validator.file.cantBeCreated",
134-
"Resource Model Class"
135-
);
136-
JOptionPane.showMessageDialog(
137-
null,
138-
errorMessage,
139-
errorTitle,
140-
JOptionPane.ERROR_MESSAGE
141-
);
142-
143-
return true;
144-
}
145-
return false;
46+
super(project, checkFileAlreadyExists);
47+
this.data = data;
14648
}
14749

148-
private String getSourceModelFqn() {
149-
return sourceModelData.getNamespace()
150-
+ Package.fqnSeparator
151-
+ sourceModelData.getClassName();
50+
@Override
51+
protected AbstractPhpFile initFile() {
52+
return new SourceModelFile(data.getModuleName(), data.getClassName());
15253
}
15354

15455
@Override
@@ -158,8 +59,8 @@ protected void fillAttributes(final Properties attributes) {
15859
final List<String> uses = new ArrayList<>();
15960
uses.add(abstractSourceClass);
16061

161-
attributes.setProperty("NAME", sourceModelData.getClassName());
162-
attributes.setProperty("NAMESPACE", sourceModelData.getNamespace());
62+
attributes.setProperty("NAME", data.getClassName());
63+
attributes.setProperty("NAMESPACE", data.getNamespace());
16364
attributes.setProperty(
16465
"EXTENDS",
16566
PhpClassGeneratorUtil.getNameFromFqn(abstractSourceClass)

src/com/magento/idea/magento2plugin/magento/files/SourceModelPhp.java renamed to src/com/magento/idea/magento2plugin/magento/files/SourceModelFile.java

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,39 +5,37 @@
55

66
package com.magento.idea.magento2plugin.magento.files;
77

8-
import com.intellij.lang.Language;
9-
import com.jetbrains.php.lang.PhpLanguage;
8+
import org.jetbrains.annotations.NotNull;
109

11-
public class SourceModelPhp implements ModuleFileInterface {
10+
public class SourceModelFile extends AbstractPhpFile {
11+
public static final String HUMAN_READABLE_NAME = "Source model class";
1212
public static final String TEMPLATE = "Magento Source Model Class";
1313
public static final String DEFAULT_DIR = "Model/Source";
14-
private String fileName;
1514

1615
/**
1716
* Constructor.
1817
*
1918
* @param className String
2019
*/
21-
public SourceModelPhp(final String className) {
22-
fileName = className.concat(".php");
20+
public SourceModelFile(
21+
@NotNull final String moduleName,
22+
@NotNull final String className
23+
) {
24+
super(moduleName, className);
2325
}
2426

25-
public void setFileName(final String fileName) {
26-
this.fileName = fileName;
27+
@Override
28+
public String getDirectory() {
29+
return DEFAULT_DIR;
2730
}
2831

2932
@Override
30-
public String getFileName() {
31-
return fileName;
33+
public String getHumanReadableName() {
34+
return HUMAN_READABLE_NAME;
3235
}
3336

3437
@Override
3538
public String getTemplate() {
3639
return TEMPLATE;
3740
}
38-
39-
@Override
40-
public Language getLanguage() {
41-
return PhpLanguage.INSTANCE;
42-
}
4341
}

tests/com/magento/idea/magento2plugin/actions/generation/generator/SourceModelGeneratorTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ public void testGenerateFile() {
2525
sourceModelData.setNamespace(SOURCE_MODEL_NAMESPACE);
2626

2727
final SourceModelGenerator sourceModelGeneratorGenerator =
28-
new SourceModelGenerator(project, sourceModelData);
28+
new SourceModelGenerator(sourceModelData, project);
2929
final PsiFile dataPatchFile = sourceModelGeneratorGenerator.generate("test");
3030
final String filePatch = this.getFixturePath("CustomSourceModel.php");
3131
final PsiFile expectedFile = myFixture.configureByFile(filePatch);

0 commit comments

Comments
 (0)