Skip to content

Commit c93644b

Browse files
committed
Added generator for NewAction Controller
1 parent 95c7134 commit c93644b

File tree

12 files changed

+392
-23
lines changed

12 files changed

+392
-23
lines changed

resources/META-INF/plugin.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,7 @@
234234
<internalFileTemplate name="Magento Save Entity Command Model"/>
235235
<internalFileTemplate name="Magento Entity Index Adminhtml Controller Class"/>
236236
<internalFileTemplate name="Magento Grid Ui Component Action Column Class"/>
237+
<internalFileTemplate name="Magento Entity New Action Controller Class"/>
237238

238239
<defaultLiveTemplates file="/liveTemplates/MagentoPWA.xml"/>
239240

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
<?php
2+
#parse("PHP File Header.php")
3+
4+
namespace ${NAMESPACE};
5+
6+
#set($uses = ${USES})
7+
#foreach ($use in $uses.split(","))
8+
use $use;
9+
#end
10+
11+
/**
12+
* New action ${ENTITY_NAME} controller.
13+
*/
14+
class ${CLASS_NAME} extends ${EXTENDS} implements ${IMPLEMENTS}
15+
{
16+
/**
17+
* Authorization level of a basic admin session.
18+
*
19+
* @see _isAllowed()
20+
*/
21+
const ADMIN_RESOURCE = '${ADMIN_RESOURCE}';
22+
23+
/**
24+
* Create new ${ENTITY_NAME} action.
25+
*
26+
* @return ${RESULT_INTERFACE}|${FORWARD}
27+
*/
28+
public function execute()
29+
{
30+
/** @var ${FORWARD} $resultForward */
31+
$resultForward = $this->resultFactory->create(${RESULT_FACTORY}::TYPE_FORWARD);
32+
$resultForward->forward('edit');
33+
34+
return $resultForward;
35+
}
36+
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<html lang="en">
2+
<body>
3+
<p face="verdana" size="-1">
4+
5+
</p>
6+
7+
<table width="100%" border="0" cellpadding="5" cellspacing="0" style="border-collapse: collapse">
8+
<tr>
9+
<td colspan="3"><font face="verdana" size="-1">Template's predefined variables:</font></td>
10+
</tr>
11+
<tr>
12+
<td valign="top"><nobr><font face="verdana" size="-2"><b>${NAMESPACE}</b></font></nobr></td>
13+
<td width="10">&nbsp;</td>
14+
<td width="100%" valign="top"><font face="verdana" size="-1"></font></td>
15+
</tr>
16+
</table>
17+
</body>
18+
</html>
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
/*
2+
* Copyright © Magento, Inc. All rights reserved.
3+
* See COPYING.txt for license details.
4+
*/
5+
6+
package com.magento.idea.magento2plugin.actions.generation.data;
7+
8+
import org.jetbrains.annotations.NotNull;
9+
10+
public class NewActionEntityControllerFileData {
11+
12+
private final String entityName;
13+
private final String moduleName;
14+
private final String namespace;
15+
private final String acl;
16+
17+
/**
18+
* Controller NewAction file constructor.
19+
*
20+
* @param entityName String
21+
* @param moduleName String
22+
* @param namespace String
23+
*/
24+
public NewActionEntityControllerFileData(
25+
final @NotNull String entityName,
26+
final @NotNull String moduleName,
27+
final @NotNull String namespace,
28+
final @NotNull String acl
29+
) {
30+
this.entityName = entityName;
31+
this.moduleName = moduleName;
32+
this.namespace = namespace;
33+
this.acl = acl;
34+
}
35+
36+
/**
37+
* Get entity name.
38+
*
39+
* @return String
40+
*/
41+
public String getEntityName() {
42+
return entityName;
43+
}
44+
45+
/**
46+
* Get module name.
47+
*
48+
* @return String
49+
*/
50+
public String getModuleName() {
51+
return moduleName;
52+
}
53+
54+
/**
55+
* Get namespace.
56+
*
57+
* @return String
58+
*/
59+
public String getNamespace() {
60+
return namespace;
61+
}
62+
63+
/**
64+
* Get acl.
65+
*
66+
* @return String
67+
*/
68+
public String getAcl() {
69+
return acl;
70+
}
71+
}

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

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,18 +13,19 @@
1313
import com.magento.idea.magento2plugin.actions.generation.NewEntityAction;
1414
import com.magento.idea.magento2plugin.actions.generation.OverrideClassByAPreferenceAction;
1515
import com.magento.idea.magento2plugin.actions.generation.data.AclXmlData;
16+
import com.magento.idea.magento2plugin.actions.generation.data.AdminListViewEntityActionData;
1617
import com.magento.idea.magento2plugin.actions.generation.data.CollectionData;
1718
import com.magento.idea.magento2plugin.actions.generation.data.ControllerFileData;
1819
import com.magento.idea.magento2plugin.actions.generation.data.DataModelData;
1920
import com.magento.idea.magento2plugin.actions.generation.data.DataModelInterfaceData;
2021
import com.magento.idea.magento2plugin.actions.generation.data.DbSchemaXmlData;
2122
import com.magento.idea.magento2plugin.actions.generation.data.EntityDataMapperData;
22-
import com.magento.idea.magento2plugin.actions.generation.data.AdminListViewEntityActionData;
2323
import com.magento.idea.magento2plugin.actions.generation.data.GetListQueryModelData;
2424
import com.magento.idea.magento2plugin.actions.generation.data.GridActionColumnData;
2525
import com.magento.idea.magento2plugin.actions.generation.data.LayoutXmlData;
2626
import com.magento.idea.magento2plugin.actions.generation.data.MenuXmlData;
2727
import com.magento.idea.magento2plugin.actions.generation.data.ModelData;
28+
import com.magento.idea.magento2plugin.actions.generation.data.NewActionEntityControllerFileData;
2829
import com.magento.idea.magento2plugin.actions.generation.data.PreferenceDiXmFileData;
2930
import com.magento.idea.magento2plugin.actions.generation.data.ResourceModelData;
3031
import com.magento.idea.magento2plugin.actions.generation.data.RoutesXmlData;
@@ -47,12 +48,12 @@
4748
import com.magento.idea.magento2plugin.actions.generation.dialog.validator.rule.NotEmptyRule;
4849
import com.magento.idea.magento2plugin.actions.generation.dialog.validator.rule.NumericRule;
4950
import com.magento.idea.magento2plugin.actions.generation.generator.AclXmlGenerator;
51+
import com.magento.idea.magento2plugin.actions.generation.generator.AdminListViewEntityActionGenerator;
5052
import com.magento.idea.magento2plugin.actions.generation.generator.DataModelGenerator;
5153
import com.magento.idea.magento2plugin.actions.generation.generator.DataModelInterfaceGenerator;
5254
import com.magento.idea.magento2plugin.actions.generation.generator.DbSchemaWhitelistJsonGenerator;
5355
import com.magento.idea.magento2plugin.actions.generation.generator.DbSchemaXmlGenerator;
5456
import com.magento.idea.magento2plugin.actions.generation.generator.EntityDataMapperGenerator;
55-
import com.magento.idea.magento2plugin.actions.generation.generator.AdminListViewEntityActionGenerator;
5657
import com.magento.idea.magento2plugin.actions.generation.generator.GetListQueryModelGenerator;
5758
import com.magento.idea.magento2plugin.actions.generation.generator.GridActionColumnFileGenerator;
5859
import com.magento.idea.magento2plugin.actions.generation.generator.LayoutXmlGenerator;
@@ -61,6 +62,7 @@
6162
import com.magento.idea.magento2plugin.actions.generation.generator.ModuleControllerClassGenerator;
6263
import com.magento.idea.magento2plugin.actions.generation.generator.ModuleModelGenerator;
6364
import com.magento.idea.magento2plugin.actions.generation.generator.ModuleResourceModelGenerator;
65+
import com.magento.idea.magento2plugin.actions.generation.generator.NewActionEntityControllerFileGenerator;
6466
import com.magento.idea.magento2plugin.actions.generation.generator.PreferenceDiXmlGenerator;
6567
import com.magento.idea.magento2plugin.actions.generation.generator.RoutesXmlGenerator;
6668
import com.magento.idea.magento2plugin.actions.generation.generator.SaveEntityCommandGenerator;
@@ -79,6 +81,7 @@
7981
import com.magento.idea.magento2plugin.magento.files.ResourceModelPhp;
8082
import com.magento.idea.magento2plugin.magento.files.UiComponentDataProviderPhp;
8183
import com.magento.idea.magento2plugin.magento.files.actions.AdminListViewActionFile;
84+
import com.magento.idea.magento2plugin.magento.files.actions.NewActionFile;
8285
import com.magento.idea.magento2plugin.magento.files.actions.SaveActionFile;
8386
import com.magento.idea.magento2plugin.magento.files.commands.SaveEntityCommandFile;
8487
import com.magento.idea.magento2plugin.magento.packages.Areas;
@@ -342,6 +345,7 @@ private void onOK() {
342345
generateFormLayoutFile();
343346
generateSaveEntityCommandFile();
344347
generateFormSaveControllerFile();
348+
generateFormNewActionControllerFile();
345349
generateUiComponentFormFile();
346350
}
347351

@@ -1172,6 +1176,24 @@ private void generateFormSaveControllerFile() {
11721176
), project).generate(ACTION_NAME, false);
11731177
}
11741178

1179+
/**
1180+
* Generate NewAction Controller file.
1181+
*/
1182+
private void generateFormNewActionControllerFile() {
1183+
final NamespaceBuilder namespace = new NamespaceBuilder(
1184+
getModuleName(),
1185+
NewActionFile.CLASS_NAME,
1186+
NewActionFile.getDirectory(getEntityName())
1187+
);
1188+
1189+
new NewActionEntityControllerFileGenerator(new NewActionEntityControllerFileData(
1190+
getEntityName(),
1191+
getModuleName(),
1192+
namespace.getNamespace(),
1193+
getAcl()
1194+
), project).generate(ACTION_NAME, false);
1195+
}
1196+
11751197
/**
11761198
* Get save entity command class Fqn.
11771199
*
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
package com.magento.idea.magento2plugin.actions.generation.generator;
2+
3+
import com.intellij.openapi.project.Project;
4+
import com.intellij.psi.PsiDirectory;
5+
import com.intellij.psi.PsiFile;
6+
import com.magento.idea.magento2plugin.actions.generation.data.NewActionEntityControllerFileData;
7+
import com.magento.idea.magento2plugin.actions.generation.generator.util.DirectoryGenerator;
8+
import com.magento.idea.magento2plugin.actions.generation.generator.util.FileFromTemplateGenerator;
9+
import com.magento.idea.magento2plugin.actions.generation.generator.util.PhpClassGeneratorUtil;
10+
import com.magento.idea.magento2plugin.indexes.ModuleIndex;
11+
import com.magento.idea.magento2plugin.magento.files.actions.NewActionFile;
12+
import com.magento.idea.magento2plugin.magento.packages.HttpMethod;
13+
import com.magento.idea.magento2plugin.magento.packages.code.BackendModuleType;
14+
import com.magento.idea.magento2plugin.magento.packages.code.FrameworkLibraryType;
15+
import org.jetbrains.annotations.NotNull;
16+
17+
import java.util.ArrayList;
18+
import java.util.List;
19+
import java.util.Properties;
20+
21+
public class NewActionEntityControllerFileGenerator extends FileGenerator {
22+
23+
private final NewActionEntityControllerFileData fileData;
24+
private final FileFromTemplateGenerator fileFromTemplateGenerator;
25+
private final DirectoryGenerator directoryGenerator;
26+
private final ModuleIndex moduleIndex;
27+
private final List<String> uses;
28+
29+
/**
30+
* NewAction Entity Controller File Generator.
31+
* @param fileData NewActionEntityControllerFileData
32+
* @param project Project
33+
*/
34+
public NewActionEntityControllerFileGenerator(
35+
final NewActionEntityControllerFileData fileData,
36+
final @NotNull Project project
37+
) {
38+
super(project);
39+
this.fileData = fileData;
40+
fileFromTemplateGenerator = FileFromTemplateGenerator.getInstance(project);
41+
moduleIndex = ModuleIndex.getInstance(project);
42+
directoryGenerator = DirectoryGenerator.getInstance();
43+
uses = new ArrayList<>();
44+
}
45+
46+
/**
47+
* Generate NewAction controller for entity.
48+
*
49+
* @param actionName String
50+
*
51+
* @return PsiFile
52+
*/
53+
@Override
54+
public PsiFile generate(final @NotNull String actionName) {
55+
final PsiDirectory moduleBaseDir = moduleIndex.getModuleDirectoryByModuleName(
56+
fileData.getModuleName()
57+
);
58+
final PsiDirectory baseDirectory = directoryGenerator.findOrCreateSubdirectories(
59+
moduleBaseDir,
60+
NewActionFile.getDirectory(fileData.getEntityName())
61+
);
62+
63+
return fileFromTemplateGenerator.generate(
64+
NewActionFile.getInstance(),
65+
getAttributes(),
66+
baseDirectory,
67+
actionName
68+
);
69+
}
70+
71+
@Override
72+
protected void fillAttributes(final @NotNull Properties attributes) {
73+
attributes.setProperty("NAMESPACE", fileData.getNamespace());
74+
attributes.setProperty("ENTITY_NAME", fileData.getEntityName());
75+
attributes.setProperty("CLASS_NAME", NewActionFile.CLASS_NAME);
76+
addProperty(attributes, "EXTENDS", BackendModuleType.EXTENDS.getType());
77+
addProperty(attributes, "IMPLEMENTS", HttpMethod.GET.getInterfaceFqn());
78+
attributes.setProperty("ADMIN_RESOURCE", fileData.getAcl());
79+
addProperty(attributes, "RESULT_INTERFACE", FrameworkLibraryType.RESULT_INTERFACE.getType());
80+
addProperty(attributes, "RESULT_FACTORY", FrameworkLibraryType.RESULT_FACTORY.getType());
81+
addProperty(attributes, "FORWARD", BackendModuleType.FORWARD.getType());
82+
83+
attributes.setProperty("USES", PhpClassGeneratorUtil.formatUses(uses));
84+
}
85+
86+
/**
87+
* Add type to properties.
88+
*
89+
* @param properties Properties
90+
* @param propertyName String
91+
* @param type String
92+
*/
93+
protected void addProperty(
94+
final @NotNull Properties properties,
95+
final String propertyName,
96+
final String type
97+
) {
98+
uses.add(type);
99+
properties.setProperty(propertyName, PhpClassGeneratorUtil.getNameFromFqn(type));
100+
}
101+
}

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

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -111,11 +111,7 @@ protected void fillAttributes(final @NotNull Properties attributes) {
111111
attributes.setProperty("ENTITY_NAME", fileData.getEntityName());
112112
attributes.setProperty("CLASS_NAME", SaveActionFile.CLASS_NAME);
113113
attributes.setProperty("ENTITY_ID", fileData.getEntityId());
114-
attributes.setProperty("ADMIN_RESOURCE", SaveActionFile.getAdminResource(
115-
fileData.getModuleName(),
116-
fileData.getAcl()
117-
)
118-
);
114+
attributes.setProperty("ADMIN_RESOURCE", fileData.getAcl());
119115
addProperty(attributes, "IMPLEMENTS", HttpMethod.POST.getInterfaceFqn());
120116
addProperty(attributes, "DATA_PERSISTOR", FrameworkLibraryType.DATA_PERSISTOR.getType());
121117
addProperty(attributes, "ENTITY_DTO", fileData.getDtoType());
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
/*
2+
* Copyright © Magento, Inc. All rights reserved.
3+
* See COPYING.txt for license details.
4+
*/
5+
6+
package com.magento.idea.magento2plugin.magento.files.actions;
7+
8+
import com.intellij.lang.Language;
9+
import com.jetbrains.php.lang.PhpLanguage;
10+
import com.magento.idea.magento2plugin.magento.files.ModuleFileInterface;
11+
import org.jetbrains.annotations.NotNull;
12+
13+
public final class NewActionFile implements ModuleFileInterface {
14+
public static final String CLASS_NAME = "NewAction";
15+
public static final String FILE_EXTENSION = "php";
16+
public static final String TEMPLATE = "Magento Entity New Action Controller Class";
17+
private static final String DIRECTORY = "Controller/Adminhtml";
18+
private static final NewActionFile INSTANCE = new NewActionFile();
19+
20+
/**
21+
* Get singleton instance of the class.
22+
*
23+
* @return NewAction
24+
*/
25+
public static NewActionFile getInstance() {
26+
return INSTANCE;
27+
}
28+
29+
/**
30+
* Get Directory path from the module root.
31+
*
32+
* @param entityName String
33+
*
34+
* @return String
35+
*/
36+
public static String getDirectory(final @NotNull String entityName) {
37+
return DIRECTORY.concat("/" + entityName);
38+
}
39+
40+
@Override
41+
public String getFileName() {
42+
return CLASS_NAME.concat("." + FILE_EXTENSION);
43+
}
44+
45+
@Override
46+
public String getTemplate() {
47+
return TEMPLATE;
48+
}
49+
50+
@Override
51+
public Language getLanguage() {
52+
return PhpLanguage.INSTANCE;
53+
}
54+
}

0 commit comments

Comments
 (0)