Skip to content

Commit cc66260

Browse files
committed
added generator for save controller
1 parent 5a68b4c commit cc66260

File tree

14 files changed

+869
-23
lines changed

14 files changed

+869
-23
lines changed

resources/META-INF/plugin.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -229,6 +229,7 @@
229229
<internalFileTemplate name="Magento Module Declarative Schema XML"/>
230230
<internalFileTemplate name="Magento Module Declarative Schema Whitelist JSON"/>
231231
<internalFileTemplate name="Magento Get List Query Model"/>
232+
<internalFileTemplate name="Magento Entity Save Controller Class"/>
232233

233234
<defaultLiveTemplates file="/liveTemplates/MagentoPWA.xml"/>
234235

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
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+
* Save ${ENTITY_NAME} controller action.
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+
* @var ${DATA_PERSISTOR}
25+
*/
26+
private $dataPersistor;
27+
28+
/**
29+
* @var ${SAVE_COMMAND}
30+
*/
31+
private $saveCommand;
32+
33+
/**
34+
* @var ${ENTITY_DTO_FACTORY}
35+
*/
36+
private $entityDataFactory;
37+
38+
/**
39+
* @param Context $context
40+
* @param ${DATA_PERSISTOR} $dataPersistor
41+
* @param ${SAVE_COMMAND} $saveCommand
42+
* @param ${ENTITY_DTO_FACTORY} $entityDataFactory
43+
*/
44+
public function __construct(
45+
Context $context,
46+
${DATA_PERSISTOR} $dataPersistor,
47+
${SAVE_COMMAND} $saveCommand,
48+
${ENTITY_DTO_FACTORY} $entityDataFactory
49+
) {
50+
parent::__construct($context);
51+
$this->dataPersistor = $dataPersistor;
52+
$this->saveCommand = $saveCommand;
53+
$this->entityDataFactory = $entityDataFactory;
54+
}
55+
56+
/**
57+
* Save ${ENTITY_NAME} Action.
58+
*
59+
* @return ResponseInterface|ResultInterface
60+
*/
61+
public function execute()
62+
{
63+
$resultRedirect = $this->resultRedirectFactory->create();
64+
$params = $this->getRequest()->getParams();
65+
66+
try {
67+
/** @var ${ENTITY_DTO}|${DATA_OBJECT} $entityModel */
68+
$entityModel = $this->entityDataFactory->create();
69+
$entityModel->addData($params);
70+
$this->saveCommand->execute($entityModel);
71+
$this->messageManager->addSuccessMessage(
72+
__('The ${ENTITY_NAME} data was saved successfully')
73+
);
74+
$this->dataPersistor->clear('entity');
75+
} catch (${COULD_NOT_SAVE} $exception) {
76+
$this->messageManager->addErrorMessage($exception->getMessage());
77+
$this->dataPersistor->set('entity', $params);
78+
79+
return $resultRedirect->setPath('*/*/edit', [
80+
'${ENTITY_ID}'=> $this->getRequest()->getParam('${ENTITY_ID}')
81+
]);
82+
}
83+
84+
return $resultRedirect->setPath('*/*/');
85+
}
86+
}
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: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
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 SaveEntityControllerFileData {
11+
12+
private final String entityName;
13+
private final String moduleName;
14+
private final String namespace;
15+
private final String saveCommandFqn;
16+
private final String dtoType;
17+
private final String acl;
18+
private final String entityId;
19+
20+
/**
21+
* Controller save file constructor.
22+
*
23+
* @param entityName String
24+
* @param moduleName String
25+
* @param namespace String
26+
* @param saveCommandFqn String
27+
* @param acl String
28+
* @param dtoType String
29+
* @param entityId String
30+
*/
31+
public SaveEntityControllerFileData(
32+
final @NotNull String entityName,
33+
final @NotNull String moduleName,
34+
final @NotNull String namespace,
35+
final @NotNull String saveCommandFqn,
36+
final @NotNull String dtoType,
37+
final @NotNull String acl,
38+
final @NotNull String entityId
39+
) {
40+
this.entityName = entityName;
41+
this.moduleName = moduleName;
42+
this.namespace = namespace;
43+
this.saveCommandFqn = saveCommandFqn;
44+
this.dtoType = dtoType;
45+
this.acl = acl;
46+
this.entityId = entityId;
47+
}
48+
49+
/**
50+
* Get entity id.
51+
*
52+
* @return String
53+
*/
54+
public String getEntityId() {
55+
return entityId;
56+
}
57+
58+
/**
59+
* Get acl.
60+
*
61+
* @return String
62+
*/
63+
public String getAcl() {
64+
return acl;
65+
}
66+
67+
/**
68+
* Get dto type.
69+
*
70+
* @return String
71+
*/
72+
public String getDtoType() {
73+
return dtoType;
74+
}
75+
76+
/**
77+
* Get save command Fqn.
78+
*
79+
* @return String
80+
*/
81+
public String getSaveCommandFqn() {
82+
return saveCommandFqn;
83+
}
84+
85+
/**
86+
* Get entity name.
87+
*
88+
* @return String
89+
*/
90+
public String getEntityName() {
91+
return entityName;
92+
}
93+
94+
/**
95+
* Get module name.
96+
*
97+
* @return String
98+
*/
99+
public String getModuleName() {
100+
return moduleName;
101+
}
102+
103+
/**
104+
* Get namespace.
105+
*
106+
* @return String
107+
*/
108+
public String getNamespace() {
109+
return namespace;
110+
}
111+
}

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

Lines changed: 56 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,14 @@
1818
import com.magento.idea.magento2plugin.actions.generation.data.DataModelData;
1919
import com.magento.idea.magento2plugin.actions.generation.data.DataModelInterfaceData;
2020
import com.magento.idea.magento2plugin.actions.generation.data.DbSchemaXmlData;
21+
import com.magento.idea.magento2plugin.actions.generation.data.GetListQueryModelData;
2122
import com.magento.idea.magento2plugin.actions.generation.data.LayoutXmlData;
2223
import com.magento.idea.magento2plugin.actions.generation.data.MenuXmlData;
2324
import com.magento.idea.magento2plugin.actions.generation.data.ModelData;
24-
import com.magento.idea.magento2plugin.actions.generation.data.GetListQueryModelData;
2525
import com.magento.idea.magento2plugin.actions.generation.data.PreferenceDiXmFileData;
2626
import com.magento.idea.magento2plugin.actions.generation.data.ResourceModelData;
2727
import com.magento.idea.magento2plugin.actions.generation.data.RoutesXmlData;
28+
import com.magento.idea.magento2plugin.actions.generation.data.SaveEntityControllerFileData;
2829
import com.magento.idea.magento2plugin.actions.generation.data.UiComponentDataProviderData;
2930
import com.magento.idea.magento2plugin.actions.generation.data.UiComponentFormButtonData;
3031
import com.magento.idea.magento2plugin.actions.generation.data.UiComponentFormFieldData;
@@ -39,15 +40,16 @@
3940
import com.magento.idea.magento2plugin.actions.generation.generator.DataModelInterfaceGenerator;
4041
import com.magento.idea.magento2plugin.actions.generation.generator.DbSchemaWhitelistJsonGenerator;
4142
import com.magento.idea.magento2plugin.actions.generation.generator.DbSchemaXmlGenerator;
43+
import com.magento.idea.magento2plugin.actions.generation.generator.GetListQueryModelGenerator;
4244
import com.magento.idea.magento2plugin.actions.generation.generator.LayoutXmlGenerator;
4345
import com.magento.idea.magento2plugin.actions.generation.generator.MenuXmlGenerator;
4446
import com.magento.idea.magento2plugin.actions.generation.generator.ModuleCollectionGenerator;
4547
import com.magento.idea.magento2plugin.actions.generation.generator.ModuleControllerClassGenerator;
4648
import com.magento.idea.magento2plugin.actions.generation.generator.ModuleModelGenerator;
4749
import com.magento.idea.magento2plugin.actions.generation.generator.ModuleResourceModelGenerator;
48-
import com.magento.idea.magento2plugin.actions.generation.generator.GetListQueryModelGenerator;
4950
import com.magento.idea.magento2plugin.actions.generation.generator.PreferenceDiXmlGenerator;
5051
import com.magento.idea.magento2plugin.actions.generation.generator.RoutesXmlGenerator;
52+
import com.magento.idea.magento2plugin.actions.generation.generator.SaveEntityControllerFileGenerator;
5153
import com.magento.idea.magento2plugin.actions.generation.generator.UiComponentDataProviderGenerator;
5254
import com.magento.idea.magento2plugin.actions.generation.generator.UiComponentFormGenerator;
5355
import com.magento.idea.magento2plugin.actions.generation.generator.UiComponentGridXmlGenerator;
@@ -60,6 +62,7 @@
6062
import com.magento.idea.magento2plugin.magento.files.ModuleMenuXml;
6163
import com.magento.idea.magento2plugin.magento.files.ResourceModelPhp;
6264
import com.magento.idea.magento2plugin.magento.files.UiComponentDataProviderPhp;
65+
import com.magento.idea.magento2plugin.magento.files.actions.SaveActionFile;
6366
import com.magento.idea.magento2plugin.magento.packages.Areas;
6467
import com.magento.idea.magento2plugin.magento.packages.File;
6568
import com.magento.idea.magento2plugin.magento.packages.HttpMethod;
@@ -107,7 +110,8 @@
107110
"PMD.ExcessiveImports",
108111
"PMD.GodClass",
109112
"PMD.TooManyMethods",
110-
"PMD.CyclomaticComplexity"
113+
"PMD.CyclomaticComplexity",
114+
"PMD.ExcessiveClassLength"
111115
})
112116
public class NewEntityDialog extends AbstractDialog {
113117
@NotNull
@@ -279,7 +283,7 @@ private void onOK() {
279283

280284
generateRoutesXmlFile();
281285
generateViewControllerFile();
282-
generateSubmitControllerFile();
286+
generateSaveControllerFile();
283287
generateModelGetListQueryFile();
284288
generateDataProviderFile();
285289
generateLayoutFile();
@@ -303,6 +307,49 @@ private void onOK() {
303307
this.setVisible(false);
304308
}
305309

310+
/**
311+
* Generate Save Controller file.
312+
*/
313+
private void generateSaveControllerFile() {
314+
final NamespaceBuilder dtoModelNamespace = getDataModelNamespace();
315+
final NamespaceBuilder dtoInterfaceModelNamespace = getDataModelInterfaceNamespace();
316+
final NamespaceBuilder namespace = new NamespaceBuilder(
317+
getModuleName(),
318+
SaveActionFile.CLASS_NAME,
319+
SaveActionFile.getDirectory(getEntityName())
320+
);
321+
final String dtoType;
322+
323+
if (createInterface.isSelected()) {
324+
dtoType = dtoInterfaceModelNamespace.getClassFqn();
325+
} else {
326+
dtoType = dtoModelNamespace.getClassFqn();
327+
}
328+
329+
new SaveEntityControllerFileGenerator(new SaveEntityControllerFileData(
330+
getEntityName(),
331+
getModuleName(),
332+
namespace.getNamespace(),
333+
getSaveEntityCommandClassFqn(),
334+
dtoType,
335+
getAcl(),
336+
getEntityIdColumn()
337+
), project).generate(ACTION_NAME, false);
338+
}
339+
340+
/**
341+
* Get save entity command class Fqn.
342+
*
343+
* @return String
344+
*/
345+
private String getSaveEntityCommandClassFqn() {
346+
//TODO: change this stub after the save command generated will be implemented.
347+
final NamespaceBuilder namespaceBuilder =
348+
new NamespaceBuilder(getModuleName(), "SaveCommand", "Command/" + getEntityName());
349+
350+
return namespaceBuilder.getClassFqn();
351+
}
352+
306353
private PsiFile generateModelFile() {
307354
final NamespaceBuilder modelNamespace = getModelNamespace();
308355
final NamespaceBuilder resourceModelNamespace = getResourceModelNamespace();
@@ -574,24 +621,11 @@ private String getControllerDirectory() {
574621
return ControllerBackendPhp.DEFAULT_DIR + File.separator;
575622
}
576623

577-
private PsiFile generateSubmitControllerFile() {
578-
final NamespaceBuilder namespace = new NamespaceBuilder(
579-
getModuleName(),
580-
getSubmitActionName(),
581-
getViewControllerDirectory()
582-
);
583-
return new ModuleControllerClassGenerator(new ControllerFileData(
584-
getViewControllerDirectory(),
585-
getSubmitActionName(),
586-
getModuleName(),
587-
Areas.adminhtml.toString(),
588-
HttpMethod.POST.toString(),
589-
getAcl(),
590-
true,
591-
namespace.getNamespace()
592-
), project).generate(ACTION_NAME, false);
593-
}
594-
624+
/**
625+
* Get Acl id.
626+
*
627+
* @return String
628+
*/
595629
public String getAcl() {
596630
return acl.getText().trim();
597631
}

0 commit comments

Comments
 (0)