Skip to content

Commit 8c7e9a1

Browse files
author
Vitaliy Boyko
committed
Added Magento 2 module project template
1 parent c1d0dfa commit 8c7e9a1

29 files changed

+1408
-75
lines changed

resources/META-INF/plugin.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,9 @@
7979
</actions>
8080

8181
<extensions defaultExtensionNs="com.intellij">
82+
<directoryProjectGenerator implementation="com.magento.idea.magento2plugin.generation.MagentoModuleGenerator"/>
83+
<projectTemplatesFactory implementation="com.magento.idea.magento2plugin.generation.MagentoTemplatesFactory"/>
84+
8285
<projectConfigurable instance="com.magento.idea.magento2plugin.project.SettingsForm"
8386
id="Magento2.SettingsForm"
8487
displayName="Magento"

src/com/magento/idea/magento2plugin/actions/generation/NewModuleAction.java

Lines changed: 39 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,20 @@
55
package com.magento.idea.magento2plugin.actions.generation;
66

77
import com.intellij.ide.IdeView;
8-
import com.intellij.openapi.actionSystem.AnActionEvent;
9-
import com.intellij.openapi.actionSystem.CommonDataKeys;
10-
import com.intellij.openapi.actionSystem.DataContext;
11-
import com.intellij.openapi.actionSystem.LangDataKeys;
8+
import com.intellij.openapi.actionSystem.*;
129
import com.intellij.openapi.editor.Editor;
1310
import com.intellij.openapi.project.Project;
11+
import com.intellij.openapi.util.Pair;
1412
import com.intellij.psi.PsiDirectory;
13+
import com.intellij.psi.PsiElement;
1514
import com.intellij.psi.PsiFile;
15+
import com.jetbrains.php.lang.psi.PhpFile;
16+
import com.jetbrains.php.lang.psi.elements.PhpClass;
1617
import com.magento.idea.magento2plugin.MagentoIcons;
1718
import com.magento.idea.magento2plugin.actions.generation.dialog.NewModuleDialog;
19+
import com.magento.idea.magento2plugin.actions.generation.util.IsClickedDirectoryInsideProject;
20+
import com.magento.idea.magento2plugin.project.Settings;
21+
import com.magento.idea.magento2plugin.util.magento.GetModuleNameByDirectory;
1822
import org.jetbrains.annotations.NotNull;
1923
import org.jetbrains.annotations.Nullable;
2024

@@ -57,5 +61,35 @@ private String getActionName() {
5761
public PsiFile getFile(DataContext dataContext) {
5862
return CommonDataKeys.PSI_FILE.getData(dataContext);
5963
}
60-
}
6164

65+
public void update(AnActionEvent event) {
66+
Project project = event.getData(PlatformDataKeys.PROJECT);
67+
68+
if (Settings.isEnabled(project)) {
69+
String magentoPath = Settings.getMagentoPath(project);
70+
if (magentoPath == null) {
71+
event.getPresentation().setVisible(false);
72+
return;
73+
}
74+
PsiElement psiElement = event.getData(PlatformDataKeys.PSI_ELEMENT);
75+
if (!(psiElement instanceof PsiDirectory)) {
76+
event.getPresentation().setVisible(false);
77+
return;
78+
}
79+
80+
if(!IsClickedDirectoryInsideProject.getInstance().execute(project, (PsiDirectory) psiElement)) {
81+
event.getPresentation().setVisible(false);
82+
return;
83+
}
84+
85+
GetModuleNameByDirectory getModuleName = GetModuleNameByDirectory.getInstance(project);
86+
String moduleName = getModuleName.execute((PsiDirectory) psiElement);
87+
if (moduleName == null) {
88+
event.getPresentation().setVisible(true);
89+
return;
90+
}
91+
}
92+
93+
event.getPresentation().setVisible(false);
94+
}
95+
}

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

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ public class ModuleComposerJsonData {
1616
private final String moduleVersion;
1717
private final List<String> moduleLicense;
1818
private final List<String> moduleDependencies;
19+
private final boolean createModuleDirs;
1920

2021
public ModuleComposerJsonData(
2122
String packageName,
@@ -25,7 +26,8 @@ public ModuleComposerJsonData(
2526
String composerPackageName,
2627
String moduleVersion,
2728
List<String> moduleLicense,
28-
List<String> moduleDependencies
29+
List<String> moduleDependencies,
30+
boolean createModuleDirs
2931
) {
3032
this.packageName = packageName;
3133
this.moduleName = moduleName;
@@ -35,6 +37,7 @@ public ModuleComposerJsonData(
3537
this.moduleVersion = moduleVersion;
3638
this.moduleLicense = moduleLicense;
3739
this.moduleDependencies = moduleDependencies;
40+
this.createModuleDirs = createModuleDirs;
3841
}
3942

4043
public String getPackageName() {
@@ -68,4 +71,7 @@ public List<String> getModuleLicense() {
6871
public List<String> getModuleDependencies() {
6972
return moduleDependencies;
7073
}
74+
75+
public boolean getCreateModuleDirs() { return this.createModuleDirs; }
76+
7177
}

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

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,18 @@ public class ModuleRegistrationPhpData {
1010
private final String packageName;
1111
private final String moduleName;
1212
private PsiDirectory baseDir;
13+
private boolean createModuleDirs;
1314

1415
public ModuleRegistrationPhpData(
1516
String packageName,
1617
String moduleName,
17-
PsiDirectory baseDir
18+
PsiDirectory baseDir,
19+
boolean createModuleDirs
1820
) {
1921
this.packageName = packageName;
2022
this.moduleName = moduleName;
2123
this.baseDir = baseDir;
24+
this.createModuleDirs = createModuleDirs;
2225
}
2326

2427
public String getPackageName() {
@@ -32,4 +35,6 @@ public String getModuleName() {
3235
public PsiDirectory getBaseDir() {
3336
return this.baseDir;
3437
}
38+
39+
public boolean getCreateModuleDirs() { return this.createModuleDirs; }
3540
}

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

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,18 @@ public class ModuleXmlData {
1010
private final String packageName;
1111
private final String moduleName;
1212
private PsiDirectory baseDir;
13+
private boolean createModuleDirs;
1314

1415
public ModuleXmlData(
1516
String packageName,
1617
String moduleName,
17-
PsiDirectory baseDir
18+
PsiDirectory baseDir,
19+
boolean createModuleDirs
1820
) {
1921
this.packageName = packageName;
2022
this.moduleName = moduleName;
2123
this.baseDir = baseDir;
24+
this.createModuleDirs = createModuleDirs;
2225
}
2326

2427
public String getPackageName() {
@@ -32,4 +35,6 @@ public String getModuleName() {
3235
public PsiDirectory getBaseDir() {
3336
return this.baseDir;
3437
}
38+
39+
public boolean getCreateModuleDirs() { return this.createModuleDirs; }
3540
}

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

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -168,23 +168,26 @@ private PsiFile generateComposerJson() {
168168
getComposerPackageName(),
169169
getModuleVersion(),
170170
getModuleLicense(),
171-
getModuleDependencies()
171+
getModuleDependencies(),
172+
true
172173
), project).generate(NewModuleAction.ACTION_NAME);
173174
}
174175

175176
private PsiFile generateRegistrationPhp() {
176177
return new ModuleRegistrationPhpGenerator(new ModuleRegistrationPhpData(
177178
getPackageName(),
178179
getModuleName(),
179-
getBaseDir()
180+
getBaseDir(),
181+
true
180182
), project).generate(NewModuleAction.ACTION_NAME);
181183
}
182184

183185
private void generateModuleXml() {
184186
new ModuleXmlGenerator(new ModuleXmlData(
185187
getPackageName(),
186188
getModuleName(),
187-
getBaseDir()
189+
getBaseDir(),
190+
true
188191
), project).generate(NewModuleAction.ACTION_NAME, true);
189192
}
190193

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

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
package com.magento.idea.magento2plugin.actions.generation.generator;
66

77
import com.google.gson.JsonElement;
8-
import com.google.gson.JsonObject;
98
import com.google.gson.JsonParser;
109
import com.intellij.openapi.project.Project;
1110
import com.intellij.openapi.vfs.VirtualFile;
@@ -18,10 +17,8 @@
1817
import com.magento.idea.magento2plugin.magento.files.ComposerJson;
1918
import com.magento.idea.magento2plugin.util.CamelCaseToHyphen;
2019
import org.jetbrains.annotations.NotNull;
21-
2220
import java.io.FileNotFoundException;
2321
import java.io.FileReader;
24-
import java.util.ArrayList;
2522
import java.util.Properties;
2623
import java.util.List;
2724

@@ -45,8 +42,12 @@ public ModuleComposerJsonGenerator(@NotNull ModuleComposerJsonData moduleCompose
4542
}
4643

4744
public PsiFile generate(String actionName) {
48-
ModuleDirectoriesData moduleDirectoriesData = directoryGenerator.createOrFindModuleDirectories(moduleComposerJsonData.getPackageName(), moduleComposerJsonData.getModuleName(), moduleComposerJsonData.getBaseDir());
49-
return fileFromTemplateGenerator.generate(ComposerJson.getInstance(), getAttributes(), moduleDirectoriesData.getModuleDirectory(), actionName);
45+
if (moduleComposerJsonData.getCreateModuleDirs()) {
46+
ModuleDirectoriesData moduleDirectoriesData = directoryGenerator.createOrFindModuleDirectories(moduleComposerJsonData.getPackageName(), moduleComposerJsonData.getModuleName(), moduleComposerJsonData.getBaseDir());
47+
return fileFromTemplateGenerator.generate(ComposerJson.getInstance(), getAttributes(), moduleDirectoriesData.getModuleDirectory(), actionName);
48+
} else {
49+
return fileFromTemplateGenerator.generate(ComposerJson.getInstance(), getAttributes(), moduleComposerJsonData.getBaseDir(), actionName);
50+
}
5051
}
5152

5253
protected void fillAttributes(Properties attributes) {
@@ -81,6 +82,12 @@ protected String getLicensesString(List licensesList) {
8182
private String getDependenciesString(List dependenciesList) {
8283
String result = "";
8384
Object[] dependencies = dependenciesList.toArray();
85+
result = result.concat(ComposerJson.DEFAULT_DEPENDENCY);
86+
if (dependencies.length == 0) {
87+
result = result.concat("\n");
88+
} else {
89+
result = result.concat(",\n");
90+
}
8491

8592
for (int i = 0; i < dependencies.length; i++) {
8693
String dependency = dependencies[i].toString();
@@ -105,7 +112,7 @@ private String getDependencyVersion(String dependency) {
105112
String version = "*";
106113
try {
107114
VirtualFile virtualFile = moduleIndex.getModuleDirectoryByModuleName(dependency)
108-
.findFile("composer.json")
115+
.findFile(ComposerJson.FILE_NAME)
109116
.getVirtualFile();
110117
if (virtualFile.exists()) {
111118
JsonElement jsonElement = new JsonParser().parse(new FileReader(virtualFile.getPath()));

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

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,12 @@ public ModuleRegistrationPhpGenerator(@NotNull ModuleRegistrationPhpData moduleR
2828
}
2929

3030
public PsiFile generate(String actionName) {
31-
ModuleDirectoriesData moduleDirectoriesData = directoryGenerator.createOrFindModuleDirectories(moduleRegistrationPhpData.getPackageName(), moduleRegistrationPhpData.getModuleName(), moduleRegistrationPhpData.getBaseDir());
32-
return fileFromTemplateGenerator.generate(RegistrationPhp.getInstance(), getAttributes(), moduleDirectoriesData.getModuleDirectory(), actionName);
31+
if (moduleRegistrationPhpData.getCreateModuleDirs()) {
32+
ModuleDirectoriesData moduleDirectoriesData = directoryGenerator.createOrFindModuleDirectories(moduleRegistrationPhpData.getPackageName(), moduleRegistrationPhpData.getModuleName(), moduleRegistrationPhpData.getBaseDir());
33+
return fileFromTemplateGenerator.generate(RegistrationPhp.getInstance(), getAttributes(), moduleDirectoriesData.getModuleDirectory(), actionName);
34+
} else {
35+
return fileFromTemplateGenerator.generate(RegistrationPhp.getInstance(), getAttributes(), moduleRegistrationPhpData.getBaseDir(), actionName);
36+
}
3337
}
3438

3539
protected void fillAttributes(Properties attributes) {

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

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,15 @@
55
package com.magento.idea.magento2plugin.actions.generation.generator;
66

77
import com.intellij.openapi.project.Project;
8+
import com.intellij.psi.PsiDirectory;
89
import com.intellij.psi.PsiFile;
910
import com.magento.idea.magento2plugin.actions.generation.data.ModuleXmlData;
1011
import com.magento.idea.magento2plugin.actions.generation.generator.data.ModuleDirectoriesData;
1112
import com.magento.idea.magento2plugin.actions.generation.generator.util.DirectoryGenerator;
1213
import com.magento.idea.magento2plugin.actions.generation.generator.util.FileFromTemplateGenerator;
1314
import com.magento.idea.magento2plugin.magento.files.ModuleXml;
15+
import com.magento.idea.magento2plugin.magento.packages.Package;
1416
import org.jetbrains.annotations.NotNull;
15-
16-
import java.util.List;
1717
import java.util.Properties;
1818

1919
public class ModuleXmlGenerator extends FileGenerator {
@@ -31,8 +31,13 @@ public ModuleXmlGenerator(@NotNull ModuleXmlData moduleXmlData, Project project)
3131

3232
@Override
3333
public PsiFile generate(String actionName) {
34-
ModuleDirectoriesData moduleDirectoriesData = directoryGenerator.createOrFindModuleDirectories(moduleXmlData.getPackageName(), moduleXmlData.getModuleName(), moduleXmlData.getBaseDir());
35-
return fileFromTemplateGenerator.generate(ModuleXml.getInstance(), getAttributes(), moduleDirectoriesData.getModuleEtcDirectory(), actionName);
34+
if (moduleXmlData.getCreateModuleDirs()) {
35+
ModuleDirectoriesData moduleDirectoriesData = directoryGenerator.createOrFindModuleDirectories(moduleXmlData.getPackageName(), moduleXmlData.getModuleName(), moduleXmlData.getBaseDir());
36+
return fileFromTemplateGenerator.generate(ModuleXml.getInstance(), getAttributes(), moduleDirectoriesData.getModuleEtcDirectory(), actionName);
37+
} else {
38+
PsiDirectory etcDirectory = directoryGenerator.findOrCreateSubdirectory(moduleXmlData.getBaseDir(), Package.MODULE_BASE_AREA_DIR);
39+
return fileFromTemplateGenerator.generate(ModuleXml.getInstance(), getAttributes(), etcDirectory, actionName);
40+
}
3641
}
3742

3843
protected void fillAttributes(Properties attributes) {
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
/**
2+
* Copyright © Magento, Inc. All rights reserved.
3+
* See COPYING.txt for license details.
4+
*/
5+
package com.magento.idea.magento2plugin.actions.generation.util;
6+
7+
import com.intellij.openapi.project.Project;
8+
import com.intellij.openapi.vfs.VfsUtilCore;
9+
import com.intellij.psi.PsiDirectory;
10+
import com.magento.idea.magento2plugin.project.util.GetProjectBasePath;
11+
import org.jetbrains.annotations.NotNull;
12+
13+
public class IsClickedDirectoryInsideProject {
14+
15+
private static IsClickedDirectoryInsideProject INSTANCE = null;
16+
17+
public static IsClickedDirectoryInsideProject getInstance() {
18+
if (null == INSTANCE) {
19+
INSTANCE = new IsClickedDirectoryInsideProject();
20+
}
21+
return INSTANCE;
22+
}
23+
24+
public boolean execute(@NotNull Project project, PsiDirectory directory) {
25+
return VfsUtilCore.isAncestor(GetProjectBasePath.execute(project), directory.getVirtualFile(), false);
26+
}
27+
}

0 commit comments

Comments
 (0)