diff --git a/resources/fileTemplates/internal/Magento Entity Delete Controller Class.php.ft b/resources/fileTemplates/internal/Magento Entity Delete Controller Class.php.ft index 432f096c4..01097476c 100644 --- a/resources/fileTemplates/internal/Magento Entity Delete Controller Class.php.ft +++ b/resources/fileTemplates/internal/Magento Entity Delete Controller Class.php.ft @@ -27,7 +27,7 @@ class ${CLASS_NAME} extends ${EXTENDS} implements ${IMPLEMENTS_POST}, ${IMPLEMEN /** * @param Context $context - * @param DeleteByIdCommand $deleteByIdCommand + * @param ${DELETE_COMMAND} $deleteByIdCommand */ public function __construct( ${CONTEXT} $context, diff --git a/src/com/magento/idea/magento2plugin/actions/generation/data/DeleteEntityByIdCommandData.java b/src/com/magento/idea/magento2plugin/actions/generation/data/DeleteEntityByIdCommandData.java index 446730e54..bd9722d72 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/data/DeleteEntityByIdCommandData.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/data/DeleteEntityByIdCommandData.java @@ -14,6 +14,7 @@ public class DeleteEntityByIdCommandData { private final String entityId; private final String modelName; private final String resourceModelName; + private final String aclResource; /** * Delete Command DTO Constructor. @@ -23,19 +24,22 @@ public class DeleteEntityByIdCommandData { * @param entityId String * @param modelName String * @param resourceModelName String + * @param aclResource String */ public DeleteEntityByIdCommandData( final @NotNull String moduleName, final @NotNull String entityName, final @NotNull String entityId, final @NotNull String modelName, - final @NotNull String resourceModelName + final @NotNull String resourceModelName, + final @NotNull String aclResource ) { this.moduleName = moduleName; this.entityName = entityName; this.entityId = entityId; this.modelName = modelName; this.resourceModelName = resourceModelName; + this.aclResource = aclResource; } /** @@ -82,4 +86,13 @@ public String getModelName() { public String getResourceModelName() { return resourceModelName; } + + /** + * Get ACL resource. + * + * @return String + */ + public String getAclResource() { + return aclResource; + } } diff --git a/src/com/magento/idea/magento2plugin/actions/generation/data/DeleteEntityControllerFileData.java b/src/com/magento/idea/magento2plugin/actions/generation/data/DeleteEntityControllerFileData.java index f83516204..0d18938fa 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/data/DeleteEntityControllerFileData.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/data/DeleteEntityControllerFileData.java @@ -13,6 +13,7 @@ public class DeleteEntityControllerFileData { private final String moduleName; private final String acl; private final String entityId; + private final boolean hasDeleteCommandInterface; /** * Controller Delete file constructor. @@ -21,17 +22,20 @@ public class DeleteEntityControllerFileData { * @param moduleName String * @param acl String * @param entityId String + * @param hasDeleteCommandInterface boolean */ public DeleteEntityControllerFileData( final @NotNull String entityName, final @NotNull String moduleName, final @NotNull String acl, - final @NotNull String entityId + final @NotNull String entityId, + final boolean hasDeleteCommandInterface ) { this.entityName = entityName; this.moduleName = moduleName; this.acl = acl; this.entityId = entityId; + this.hasDeleteCommandInterface = hasDeleteCommandInterface; } /** @@ -69,4 +73,13 @@ public String getAcl() { public String getEntityId() { return entityId; } + + /** + * Check if delete command has Web API interface. + * + * @return boolean + */ + public boolean isHasDeleteCommandInterface() { + return hasDeleteCommandInterface; + } } diff --git a/src/com/magento/idea/magento2plugin/actions/generation/data/EntityDataMapperData.java b/src/com/magento/idea/magento2plugin/actions/generation/data/EntityDataMapperData.java index 4a4e24c68..d954d4c7d 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/data/EntityDataMapperData.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/data/EntityDataMapperData.java @@ -15,7 +15,7 @@ public class EntityDataMapperData { private final String modelName; private final String dtoName; private final String dtoInterfaceName; - private final boolean dtoWithInterface; + private final boolean hasDtoInterface; /** * Magento entity data mapper data constructor. @@ -25,7 +25,7 @@ public class EntityDataMapperData { * @param modelName String * @param dtoName String * @param dtoInterfaceName String - * @param isDtoWithInterface boolean + * @param hasDtoInterface boolean */ public EntityDataMapperData( final @NotNull String moduleName, @@ -33,14 +33,14 @@ public EntityDataMapperData( final @NotNull String modelName, final @NotNull String dtoName, final @NotNull String dtoInterfaceName, - final boolean isDtoWithInterface + final boolean hasDtoInterface ) { this.moduleName = moduleName; this.entityName = entityName; this.modelName = modelName; this.dtoName = dtoName; this.dtoInterfaceName = dtoInterfaceName; - this.dtoWithInterface = isDtoWithInterface; + this.hasDtoInterface = hasDtoInterface; } /** @@ -93,7 +93,7 @@ public String getDtoInterfaceName() { * * @return boolean */ - public boolean isDtoWithInterface() { - return dtoWithInterface; + public boolean isHasDtoInterface() { + return hasDtoInterface; } } diff --git a/src/com/magento/idea/magento2plugin/actions/generation/data/GetListQueryModelData.java b/src/com/magento/idea/magento2plugin/actions/generation/data/GetListQueryModelData.java index 882f433aa..67915847e 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/data/GetListQueryModelData.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/data/GetListQueryModelData.java @@ -13,6 +13,7 @@ public class GetListQueryModelData { private final String entityName; private final String modelName; private final String collectionName; + private final String aclResource; /** * Query Model DTO Constructor. @@ -21,17 +22,20 @@ public class GetListQueryModelData { * @param entityName String * @param modelName String * @param collectionName String + * @param aclResource String */ public GetListQueryModelData( final @NotNull String moduleName, final @NotNull String entityName, final @NotNull String modelName, - final @NotNull String collectionName + final @NotNull String collectionName, + final @NotNull String aclResource ) { this.moduleName = moduleName; this.entityName = entityName; this.modelName = modelName; this.collectionName = collectionName; + this.aclResource = aclResource; } /** @@ -69,4 +73,13 @@ public String getModelName() { public String getCollectionName() { return collectionName; } + + /** + * Get entity acl resource. + * + * @return String + */ + public String getAclResource() { + return aclResource; + } } diff --git a/src/com/magento/idea/magento2plugin/actions/generation/data/SaveEntityCommandData.java b/src/com/magento/idea/magento2plugin/actions/generation/data/SaveEntityCommandData.java index 257b932ab..ecea167c0 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/data/SaveEntityCommandData.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/data/SaveEntityCommandData.java @@ -16,6 +16,7 @@ public class SaveEntityCommandData { private final String dtoName; private final String dtoInterfaceName; private final boolean dtoWithInterface; + private final String aclResource; /** * Save Command DTO Constructor. @@ -27,6 +28,7 @@ public class SaveEntityCommandData { * @param dtoName String * @param dtoInterfaceName String * @param isDtoWithInterface boolean + * @param aclResource String */ public SaveEntityCommandData( final @NotNull String moduleName, @@ -35,7 +37,8 @@ public SaveEntityCommandData( final @NotNull String resourceModelName, final @NotNull String dtoName, final @NotNull String dtoInterfaceName, - final boolean isDtoWithInterface + final boolean isDtoWithInterface, + final @NotNull String aclResource ) { this.moduleName = moduleName; this.entityName = entityName; @@ -44,6 +47,7 @@ public SaveEntityCommandData( this.dtoName = dtoName; this.dtoInterfaceName = dtoInterfaceName; this.dtoWithInterface = isDtoWithInterface; + this.aclResource = aclResource; } /** @@ -108,4 +112,13 @@ public String getDtoInterfaceName() { public boolean isDtoWithInterface() { return dtoWithInterface; } + + /** + * Get ACL resource. + * + * @return String + */ + public String getAclResource() { + return aclResource; + } } diff --git a/src/com/magento/idea/magento2plugin/actions/generation/data/SaveEntityControllerFileData.java b/src/com/magento/idea/magento2plugin/actions/generation/data/SaveEntityControllerFileData.java index 5508f1bc3..0cb54aedc 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/data/SaveEntityControllerFileData.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/data/SaveEntityControllerFileData.java @@ -15,7 +15,8 @@ public class SaveEntityControllerFileData { private final String entityId; private final String dtoName; private final String dtoInterfaceName; - private final boolean dtoWithInterface; + private final boolean hasDtoInterface; + private final boolean hasSaveCommandInterface; /** * Controller save file constructor. @@ -26,7 +27,8 @@ public class SaveEntityControllerFileData { * @param entityId String * @param dtoName String * @param dtoInterfaceName String - * @param isDtoWithInterface boolean + * @param hasDtoInterface boolean + * @param hasSaveCommandInterface boolean */ public SaveEntityControllerFileData( final @NotNull String entityName, @@ -35,7 +37,8 @@ public SaveEntityControllerFileData( final @NotNull String entityId, final @NotNull String dtoName, final @NotNull String dtoInterfaceName, - final boolean isDtoWithInterface + final boolean hasDtoInterface, + final boolean hasSaveCommandInterface ) { this.entityName = entityName; this.moduleName = moduleName; @@ -43,7 +46,8 @@ public SaveEntityControllerFileData( this.entityId = entityId; this.dtoName = dtoName; this.dtoInterfaceName = dtoInterfaceName; - this.dtoWithInterface = isDtoWithInterface; + this.hasDtoInterface = hasDtoInterface; + this.hasSaveCommandInterface = hasSaveCommandInterface; } /** @@ -105,7 +109,16 @@ public String getDtoInterfaceName() { * * @return boolean */ - public boolean isDtoWithInterface() { - return dtoWithInterface; + public boolean isHasDtoInterface() { + return hasDtoInterface; + } + + /** + * Check if save command has interface. + * + * @return boolean + */ + public boolean isHasSaveCommandInterface() { + return hasSaveCommandInterface; } } diff --git a/src/com/magento/idea/magento2plugin/actions/generation/data/UiComponentDataProviderData.java b/src/com/magento/idea/magento2plugin/actions/generation/data/UiComponentDataProviderData.java index fe112761f..fbd7a09f7 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/data/UiComponentDataProviderData.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/data/UiComponentDataProviderData.java @@ -11,6 +11,7 @@ public class UiComponentDataProviderData { private final String path; private final String entityName; private final String entityIdFieldName; + private final boolean hasQueryInterface; /** * UiComponentGridDataProviderData constructor. @@ -22,7 +23,7 @@ public UiComponentDataProviderData( final String name, final String path ) { - this(name, path, null, null); + this(name, path, null, null, false); } /** @@ -32,17 +33,20 @@ public UiComponentDataProviderData( * @param path String * @param entityName String * @param entityIdFieldName String + * @param hasQueryInterface boolean */ public UiComponentDataProviderData( final String name, final String path, final String entityName, - final String entityIdFieldName + final String entityIdFieldName, + final boolean hasQueryInterface ) { this.name = name; this.path = path; this.entityName = entityName; this.entityIdFieldName = entityIdFieldName; + this.hasQueryInterface = hasQueryInterface; } /** @@ -80,4 +84,13 @@ public String getEntityName() { public String getEntityIdFieldName() { return entityIdFieldName; } + + /** + * Check if query service has Web API interface. + * + * @return boolean + */ + public boolean isHasQueryInterface() { + return hasQueryInterface; + } } diff --git a/src/com/magento/idea/magento2plugin/actions/generation/data/converter/newentitydialog/DataProviderDtoConverter.java b/src/com/magento/idea/magento2plugin/actions/generation/data/converter/newentitydialog/DataProviderDtoConverter.java index ea11eb0d6..d91fdf242 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/data/converter/newentitydialog/DataProviderDtoConverter.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/data/converter/newentitydialog/DataProviderDtoConverter.java @@ -30,7 +30,8 @@ public DataProviderDtoConverter( newEntityDialogData.getEntityName().concat("DataProvider"), UiComponentDataProviderFile.DIRECTORY, newEntityDialogData.getEntityName(), - newEntityDialogData.getIdFieldName() + newEntityDialogData.getIdFieldName(), + newEntityDialogData.hasWebApi() ); } } diff --git a/src/com/magento/idea/magento2plugin/actions/generation/data/converter/newentitydialog/DeleteEntityByIdCommandDtoConverter.java b/src/com/magento/idea/magento2plugin/actions/generation/data/converter/newentitydialog/DeleteEntityByIdCommandDtoConverter.java index d0f9e457c..1328ef2b9 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/data/converter/newentitydialog/DeleteEntityByIdCommandDtoConverter.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/data/converter/newentitydialog/DeleteEntityByIdCommandDtoConverter.java @@ -29,7 +29,8 @@ public DeleteEntityByIdCommandDtoConverter( newEntityDialogData.getEntityName(), newEntityDialogData.getIdFieldName(), newEntityDialogData.getEntityName().concat("Model"), - newEntityDialogData.getEntityName().concat("Resource") + newEntityDialogData.getEntityName().concat("Resource"), + newEntityDialogData.getAclId() ); } } diff --git a/src/com/magento/idea/magento2plugin/actions/generation/data/converter/newentitydialog/FormDeleteControllerDtoConverter.java b/src/com/magento/idea/magento2plugin/actions/generation/data/converter/newentitydialog/FormDeleteControllerDtoConverter.java index c3a5f797d..9c67a43c3 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/data/converter/newentitydialog/FormDeleteControllerDtoConverter.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/data/converter/newentitydialog/FormDeleteControllerDtoConverter.java @@ -28,7 +28,8 @@ public FormDeleteControllerDtoConverter( newEntityDialogData.getEntityName(), generationContextData.getModuleName(), newEntityDialogData.getAclId(), - newEntityDialogData.getIdFieldName() + newEntityDialogData.getIdFieldName(), + newEntityDialogData.hasWebApi() ); } } diff --git a/src/com/magento/idea/magento2plugin/actions/generation/data/converter/newentitydialog/FormSaveControllerDtoConverter.java b/src/com/magento/idea/magento2plugin/actions/generation/data/converter/newentitydialog/FormSaveControllerDtoConverter.java index c80380378..de354165e 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/data/converter/newentitydialog/FormSaveControllerDtoConverter.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/data/converter/newentitydialog/FormSaveControllerDtoConverter.java @@ -31,7 +31,8 @@ public FormSaveControllerDtoConverter( newEntityDialogData.getIdFieldName(), newEntityDialogData.getEntityName().concat("Data"), newEntityDialogData.getEntityName().concat("Interface"), - newEntityDialogData.hasDtoInterface() + newEntityDialogData.hasDtoInterface(), + newEntityDialogData.hasWebApi() ); } } diff --git a/src/com/magento/idea/magento2plugin/actions/generation/data/converter/newentitydialog/GetListQueryDtoConverter.java b/src/com/magento/idea/magento2plugin/actions/generation/data/converter/newentitydialog/GetListQueryDtoConverter.java index 08acdfbc7..36f3b9ea9 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/data/converter/newentitydialog/GetListQueryDtoConverter.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/data/converter/newentitydialog/GetListQueryDtoConverter.java @@ -28,7 +28,8 @@ public GetListQueryDtoConverter( generationContextData.getModuleName(), newEntityDialogData.getEntityName(), newEntityDialogData.getEntityName().concat("Model"), - newEntityDialogData.getEntityName().concat("Collection") + newEntityDialogData.getEntityName().concat("Collection"), + newEntityDialogData.getAclId() ); } } diff --git a/src/com/magento/idea/magento2plugin/actions/generation/data/converter/newentitydialog/SaveEntityCommandDtoConverter.java b/src/com/magento/idea/magento2plugin/actions/generation/data/converter/newentitydialog/SaveEntityCommandDtoConverter.java index 85d9182b7..bc2b0086c 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/data/converter/newentitydialog/SaveEntityCommandDtoConverter.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/data/converter/newentitydialog/SaveEntityCommandDtoConverter.java @@ -31,7 +31,8 @@ public SaveEntityCommandDtoConverter( newEntityDialogData.getEntityName().concat("Resource"), newEntityDialogData.getEntityName().concat("Data"), newEntityDialogData.getEntityName().concat("Interface"), - newEntityDialogData.hasDtoInterface() + newEntityDialogData.hasDtoInterface(), + newEntityDialogData.getAclId() ); } } diff --git a/src/com/magento/idea/magento2plugin/actions/generation/data/dialog/EntityCreatorContextData.java b/src/com/magento/idea/magento2plugin/actions/generation/data/dialog/EntityCreatorContextData.java index 63ac992b8..7ccd81d0a 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/data/dialog/EntityCreatorContextData.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/data/dialog/EntityCreatorContextData.java @@ -21,6 +21,7 @@ public class EntityCreatorContextData implements GenerationContextData { private final String moduleName; private final String actionName; private final boolean hasOpenFileFlag; + private final boolean webApi; private final String indexViewAction; private final String editViewAction; private final String newViewAction; @@ -41,6 +42,7 @@ public class EntityCreatorContextData implements GenerationContextData { * @param moduleName String * @param actionName String * @param hasOpenFileFlag boolean + * @param hasWebApi boolean * @param indexViewAction String * @param editViewAction String * @param newViewAction String @@ -60,6 +62,7 @@ public EntityCreatorContextData( final @NotNull String moduleName, final @NotNull String actionName, final boolean hasOpenFileFlag, + final boolean hasWebApi, final @NotNull String indexViewAction, final @NotNull String editViewAction, final @NotNull String newViewAction, @@ -77,6 +80,7 @@ public EntityCreatorContextData( this.moduleName = moduleName; this.actionName = actionName; this.hasOpenFileFlag = hasOpenFileFlag; + this.webApi = hasWebApi; this.indexViewAction = indexViewAction; this.editViewAction = editViewAction; this.newViewAction = newViewAction; @@ -111,6 +115,15 @@ public boolean checkIfHasOpenFileFlag() { return hasOpenFileFlag; } + /** + * Check if entity creator should generate Web API for entity management services. + * + * @return boolean + */ + public boolean hasWebApi() { + return webApi; + } + /** * Get index action. * diff --git a/src/com/magento/idea/magento2plugin/actions/generation/data/dialog/NewEntityDialogData.java b/src/com/magento/idea/magento2plugin/actions/generation/data/dialog/NewEntityDialogData.java index ba6d6c2f3..19360cb98 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/data/dialog/NewEntityDialogData.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/data/dialog/NewEntityDialogData.java @@ -18,6 +18,7 @@ public class NewEntityDialogData implements DialogData { private final String tableResource; private final boolean adminUiComponents; private final boolean dtoInterface; + private final boolean webApi; // Admin UI Components tab data. private final String route; @@ -55,6 +56,7 @@ public class NewEntityDialogData implements DialogData { * @param tableResource String * @param hasAdminUiComponents boolean * @param hasDtoInterface boolean + * @param hasWebApi boolean * @param route String * @param formLabel String * @param formName String @@ -82,6 +84,7 @@ public NewEntityDialogData( final @NotNull String tableResource, final boolean hasAdminUiComponents, final boolean hasDtoInterface, + final boolean hasWebApi, final @NotNull String route, final @NotNull String formLabel, final @NotNull String formName, @@ -108,6 +111,7 @@ public NewEntityDialogData( this.tableResource = tableResource; this.adminUiComponents = hasAdminUiComponents; this.dtoInterface = hasDtoInterface; + this.webApi = hasWebApi; this.route = route; this.formLabel = formLabel; this.formName = formName; @@ -191,6 +195,15 @@ public boolean hasDtoInterface() { return dtoInterface; } + /** + * Check if has web api services. + * + * @return boolean + */ + public boolean hasWebApi() { + return webApi; + } + /** * Get route. * diff --git a/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewEntityDialog.form b/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewEntityDialog.form index 3f76f15e7..45b9e07da 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewEntityDialog.form +++ b/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewEntityDialog.form @@ -21,7 +21,7 @@ - + @@ -134,7 +134,7 @@ - + @@ -206,6 +206,14 @@ + + + + + + + + diff --git a/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewEntityDialog.java b/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewEntityDialog.java index b94448b76..38db2f6a0 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewEntityDialog.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewEntityDialog.java @@ -218,6 +218,7 @@ public class NewEntityDialog extends AbstractDialog { private JLabel dbTableNameErrorMessage; private JLabel entityIdErrorMessage; private JLabel routeErrorMessage; + private JCheckBox createWebApi; private JTextField observerName; private final ProcessWorker.InProgressFlag onOkActionFired; @@ -462,6 +463,7 @@ private EntityCreatorContextData getEntityCreatorContextData( moduleName, ACTION_NAME, OPEN_FILES_FLAG, + dialogData.hasWebApi(), actionsPathPrefix.concat("index"), actionsPathPrefix.concat("edit"), actionsPathPrefix.concat("new"), @@ -718,6 +720,7 @@ private NewEntityDialogData getNewEntityDialogData() { getTableResource(), createUiComponent.isSelected(), createInterface.isSelected(), + createWebApi.isSelected(), route.getText().trim(), formLabel.getText().trim(), formName.getText().trim(), diff --git a/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewInterfaceForServiceDialog.java b/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewInterfaceForServiceDialog.java index f242d1b62..fef954f4a 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewInterfaceForServiceDialog.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/dialog/NewInterfaceForServiceDialog.java @@ -9,20 +9,15 @@ import com.intellij.openapi.project.Project; import com.intellij.psi.PsiDirectory; import com.jetbrains.php.lang.actions.PhpNamedElementNode; -import com.jetbrains.php.lang.psi.PhpFile; import com.jetbrains.php.lang.psi.elements.Method; import com.jetbrains.php.lang.psi.elements.PhpClass; import com.magento.idea.magento2plugin.actions.generation.NewWebApiInterfaceAction; -import com.magento.idea.magento2plugin.actions.generation.data.PreferenceDiXmFileData; import com.magento.idea.magento2plugin.actions.generation.data.php.WebApiInterfaceData; import com.magento.idea.magento2plugin.actions.generation.dialog.validator.annotation.FieldValidation; import com.magento.idea.magento2plugin.actions.generation.dialog.validator.annotation.RuleRegistry; import com.magento.idea.magento2plugin.actions.generation.dialog.validator.rule.NotEmptyRule; import com.magento.idea.magento2plugin.actions.generation.dialog.validator.rule.PhpClassRule; -import com.magento.idea.magento2plugin.actions.generation.generator.PreferenceDiXmlGenerator; import com.magento.idea.magento2plugin.actions.generation.generator.php.WebApiInterfaceGenerator; -import com.magento.idea.magento2plugin.magento.packages.Areas; -import com.magento.idea.magento2plugin.util.GetFirstClassOfFile; import com.magento.idea.magento2plugin.util.magento.GetModuleNameByDirectoryUtil; import com.magento.idea.magento2plugin.util.php.PhpTypeMetadataParserUtil; import java.awt.event.KeyEvent; @@ -31,7 +26,6 @@ import java.util.Arrays; import java.util.LinkedList; import java.util.List; -import java.util.Objects; import javax.swing.JButton; import javax.swing.JComponent; import javax.swing.JLabel; @@ -179,26 +173,11 @@ private void onOK() { } final WebApiInterfaceData data = getDialogDataObject(); - final PhpFile webApiInterfaceFile = (PhpFile) new WebApiInterfaceGenerator( + new WebApiInterfaceGenerator( data, project ).generate(NewWebApiInterfaceAction.ACTION_NAME, true); - if (webApiInterfaceFile != null) { - final PhpClass interfaceClass = - GetFirstClassOfFile.getInstance().execute(webApiInterfaceFile); - - new PreferenceDiXmlGenerator( - new PreferenceDiXmFileData( - moduleName, - Objects.requireNonNull(interfaceClass).getPresentableFQN(), - data.getClassFqn(), - Areas.base.toString() - ), - project - ).generate(NewWebApiInterfaceAction.ACTION_NAME, true); - } - this.setVisible(false); } diff --git a/src/com/magento/idea/magento2plugin/actions/generation/generator/DeleteEntityControllerFileGenerator.java b/src/com/magento/idea/magento2plugin/actions/generation/generator/DeleteEntityControllerFileGenerator.java index 153892910..d8e7bff6d 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/generator/DeleteEntityControllerFileGenerator.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/DeleteEntityControllerFileGenerator.java @@ -71,7 +71,8 @@ protected void fillAttributes(final @NotNull Properties attributes) { .append("DELETE_COMMAND", new DeleteEntityByIdCommandFile( data.getModuleName(), - data.getEntityName() + data.getEntityName(), + data.isHasDeleteCommandInterface() ).getClassFqn() ) .append("CONTEXT", BackendModuleType.CONTEXT.getType()) diff --git a/src/com/magento/idea/magento2plugin/actions/generation/generator/EntityDataMapperGenerator.java b/src/com/magento/idea/magento2plugin/actions/generation/generator/EntityDataMapperGenerator.java index 0deb41025..8046644f2 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/generator/EntityDataMapperGenerator.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/EntityDataMapperGenerator.java @@ -62,12 +62,12 @@ protected AbstractPhpFile initFile() { @Override protected void fillAttributes(final @NotNull Properties attributes) { final ModelFile modelFile = new ModelFile(data.getModuleName(), data.getModelName()); - final DataModelFile dtoFile = new DataModelFile(data.getDtoName(), data.getModuleName()); + final DataModelFile dtoFile = new DataModelFile(data.getModuleName(), data.getDtoName()); final DataModelInterfaceFile dtoInterfaceFile = new DataModelInterfaceFile(data.getModuleName(), data.getDtoInterfaceName()); String dtoType; - if (data.isDtoWithInterface()) { + if (data.isHasDtoInterface()) { dtoType = dtoInterfaceFile.getClassFqn(); } else { dtoType = dtoFile.getClassFqn(); diff --git a/src/com/magento/idea/magento2plugin/actions/generation/generator/PhpFileGenerator.java b/src/com/magento/idea/magento2plugin/actions/generation/generator/PhpFileGenerator.java index de6437ea6..2e7730f08 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/generator/PhpFileGenerator.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/PhpFileGenerator.java @@ -88,7 +88,7 @@ public PsiFile generate(final @NotNull String actionName) { fileBaseDir, actionName ); - onFileGenerated(generatedFile); + onFileGenerated(generatedFile, actionName); return generatedFile; } @@ -116,8 +116,10 @@ protected void onClassAlreadyExists(final @NotNull PhpClass phpClass) { * Implement this method to add on file has been generated behaviour. * * @param generatedFile PsiFile + * @param actionName String */ - protected void onFileGenerated(final PsiFile generatedFile) { + @SuppressWarnings("PMD.UnusedFormalParameter") + protected void onFileGenerated(final PsiFile generatedFile, final @NotNull String actionName) { if (generatedFile == null) { JOptionPane.showMessageDialog( null, diff --git a/src/com/magento/idea/magento2plugin/actions/generation/generator/SaveEntityControllerFileGenerator.java b/src/com/magento/idea/magento2plugin/actions/generation/generator/SaveEntityControllerFileGenerator.java index 3b658d459..5c853b6b9 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/generator/SaveEntityControllerFileGenerator.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/SaveEntityControllerFileGenerator.java @@ -65,7 +65,7 @@ protected AbstractPhpFile initFile() { protected void fillAttributes(final @NotNull Properties attributes) { String dtoType; - if (data.isDtoWithInterface()) { + if (data.isHasDtoInterface()) { final DataModelInterfaceFile dataModelInterfaceFile = new DataModelInterfaceFile(data.getModuleName(), data.getDtoInterfaceName()); dtoType = dataModelInterfaceFile.getClassFqn(); @@ -89,7 +89,8 @@ protected void fillAttributes(final @NotNull Properties attributes) { .append("SAVE_COMMAND", new SaveEntityCommandFile( data.getModuleName(), - data.getEntityName() + data.getEntityName(), + data.isHasSaveCommandInterface() ).getClassFqn() ) .append("DATA_OBJECT", FrameworkLibraryType.DATA_OBJECT.getType()) diff --git a/src/com/magento/idea/magento2plugin/actions/generation/generator/UiComponentDataProviderGenerator.java b/src/com/magento/idea/magento2plugin/actions/generation/generator/UiComponentDataProviderGenerator.java index cf8e04309..bea312eb6 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/generator/UiComponentDataProviderGenerator.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/UiComponentDataProviderGenerator.java @@ -78,7 +78,11 @@ protected void fillAttributes(final @NotNull Properties attributes) { .append("HAS_GET_LIST_QUERY", "true", false) .append( "GET_LIST_QUERY_TYPE", - new GetListQueryFile(moduleName, data.getEntityName()).getClassFqn() + new GetListQueryFile( + moduleName, + data.getEntityName(), + data.isHasQueryInterface() + ).getClassFqn() ) .append("REPORTING_TYPE", FrameworkLibraryType.REPORTING.getType()) .append("SEARCH_CRITERIA_BUILDER", diff --git a/src/com/magento/idea/magento2plugin/actions/generation/generator/php/WebApiInterfaceGenerator.java b/src/com/magento/idea/magento2plugin/actions/generation/generator/php/WebApiInterfaceGenerator.java index 8d12a2256..a50decb59 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/generator/php/WebApiInterfaceGenerator.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/php/WebApiInterfaceGenerator.java @@ -7,16 +7,23 @@ import com.intellij.openapi.project.Project; import com.intellij.psi.PsiFile; +import com.jetbrains.php.lang.psi.PhpFile; import com.jetbrains.php.lang.psi.elements.Method; +import com.jetbrains.php.lang.psi.elements.PhpClass; +import com.magento.idea.magento2plugin.actions.generation.data.PreferenceDiXmFileData; import com.magento.idea.magento2plugin.actions.generation.data.php.WebApiInterfaceData; import com.magento.idea.magento2plugin.actions.generation.generator.PhpFileGenerator; +import com.magento.idea.magento2plugin.actions.generation.generator.PreferenceDiXmlGenerator; import com.magento.idea.magento2plugin.actions.generation.generator.util.PhpClassGeneratorUtil; import com.magento.idea.magento2plugin.magento.files.AbstractPhpFile; import com.magento.idea.magento2plugin.magento.files.WebApiInterfaceFile; +import com.magento.idea.magento2plugin.magento.packages.Areas; +import com.magento.idea.magento2plugin.util.GetFirstClassOfFile; import com.magento.idea.magento2plugin.util.php.PhpTypeMetadataParserUtil; import com.magento.idea.magento2plugin.util.php.PhpTypeModifierUtil; import java.util.ArrayList; import java.util.List; +import java.util.Objects; import java.util.Properties; import org.jetbrains.annotations.NotNull; @@ -59,16 +66,29 @@ protected AbstractPhpFile initFile() { } @Override - protected void onFileGenerated(final PsiFile generatedFile) { - super.onFileGenerated(generatedFile); + protected void onFileGenerated(final PsiFile generatedFile, final @NotNull String actionName) { + super.onFileGenerated(generatedFile, actionName); - if (generatedFile != null) { + if (generatedFile instanceof PhpFile) { PhpTypeModifierUtil.addImplementForPhpClass( data.getClassFqn(), file.getClassFqn(), project ); PhpTypeModifierUtil.insertInheritDocCommentForMethods(data.getMethods()); + + final PhpClass interfaceClass = + GetFirstClassOfFile.getInstance().execute((PhpFile) generatedFile); + + new PreferenceDiXmlGenerator( + new PreferenceDiXmFileData( + data.getModuleName(), + Objects.requireNonNull(interfaceClass).getPresentableFQN(), + data.getClassFqn(), + Areas.base.toString() + ), + project + ).generate(actionName, false); } } diff --git a/src/com/magento/idea/magento2plugin/actions/generation/generator/php/WebApiInterfaceWithDeclarationGenerator.java b/src/com/magento/idea/magento2plugin/actions/generation/generator/php/WebApiInterfaceWithDeclarationGenerator.java new file mode 100644 index 000000000..a2fe8f3c9 --- /dev/null +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/php/WebApiInterfaceWithDeclarationGenerator.java @@ -0,0 +1,58 @@ +/* + * Copyright © Magento, Inc. All rights reserved. + * See COPYING.txt for license details. + */ + +package com.magento.idea.magento2plugin.actions.generation.generator.php; + +import com.intellij.openapi.project.Project; +import com.intellij.psi.PsiFile; +import com.jetbrains.php.lang.psi.PhpFile; +import com.magento.idea.magento2plugin.actions.generation.data.php.WebApiInterfaceData; +import com.magento.idea.magento2plugin.actions.generation.data.xml.WebApiXmlRouteData; +import com.magento.idea.magento2plugin.actions.generation.generator.xml.WebApiDeclarationGenerator; +import org.jetbrains.annotations.NotNull; + +public final class WebApiInterfaceWithDeclarationGenerator { + + private final Project project; + private final WebApiInterfaceData interfaceData; + private final WebApiXmlRouteData routeData; + + /** + * Web API interface and declaration generator. + * + * @param interfaceData WebApiInterfaceData + * @param routeData WebApiXmlRouteData + * @param project Project + */ + public WebApiInterfaceWithDeclarationGenerator( + final @NotNull WebApiInterfaceData interfaceData, + final @NotNull WebApiXmlRouteData routeData, + final @NotNull Project project + ) { + this.project = project; + this.interfaceData = interfaceData; + this.routeData = routeData; + } + + /** + * Generate Web API interface and declaration. + * + * @param actionName String + * @param shouldOpenFiles boolean + */ + public void generate(final @NotNull String actionName, final boolean shouldOpenFiles) { + final PsiFile webApiInterfaceFile = new WebApiInterfaceGenerator( + interfaceData, + project + ).generate(actionName, shouldOpenFiles); + + if (webApiInterfaceFile instanceof PhpFile) { + new WebApiDeclarationGenerator( + routeData, + project + ).generate(actionName, shouldOpenFiles); + } + } +} diff --git a/src/com/magento/idea/magento2plugin/actions/generation/generator/pool/GeneratorHandler.java b/src/com/magento/idea/magento2plugin/actions/generation/generator/pool/GeneratorHandler.java index 6004a57d5..c308ffee8 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/generator/pool/GeneratorHandler.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/pool/GeneratorHandler.java @@ -6,6 +6,7 @@ package com.magento.idea.magento2plugin.actions.generation.generator.pool; import com.intellij.openapi.project.Project; +import com.intellij.psi.PsiFile; import com.magento.idea.magento2plugin.actions.generation.data.converter.DataObjectConverter; import com.magento.idea.magento2plugin.actions.generation.data.dialog.GenerationContextData; import com.magento.idea.magento2plugin.actions.generation.generator.FileGenerator; @@ -79,10 +80,21 @@ public void setGenerator(final FileGenerator generator) { * Run generator. */ public final void generate() { - generator.generate( + final PsiFile result = generator.generate( getContextData().getActionName(), getContextData().checkIfHasOpenFileFlag() ); + afterFileGenerated(result); + } + + /** + * Implement to do some actions after file is generated. + * + * @param file PsiFile + */ + @SuppressWarnings("PMD.EmptyMethodInAbstractClassShouldBeAbstract") + protected void afterFileGenerated(final PsiFile file) { + // override to do some stuff with generated file. } /** diff --git a/src/com/magento/idea/magento2plugin/actions/generation/generator/pool/handler/DeleteByIdCommandGeneratorHandler.java b/src/com/magento/idea/magento2plugin/actions/generation/generator/pool/handler/DeleteByIdCommandGeneratorHandler.java index 6c7c7ec30..09e4a5ace 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/generator/pool/handler/DeleteByIdCommandGeneratorHandler.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/pool/handler/DeleteByIdCommandGeneratorHandler.java @@ -5,12 +5,23 @@ package com.magento.idea.magento2plugin.actions.generation.generator.pool.handler; +import com.intellij.psi.PsiFile; +import com.jetbrains.php.lang.psi.PhpFile; +import com.jetbrains.php.lang.psi.elements.PhpClass; import com.magento.idea.magento2plugin.actions.generation.data.DeleteEntityByIdCommandData; import com.magento.idea.magento2plugin.actions.generation.data.converter.DataObjectConverter; +import com.magento.idea.magento2plugin.actions.generation.data.dialog.EntityCreatorContextData; import com.magento.idea.magento2plugin.actions.generation.data.dialog.GenerationContextData; +import com.magento.idea.magento2plugin.actions.generation.data.php.WebApiInterfaceData; +import com.magento.idea.magento2plugin.actions.generation.data.xml.WebApiXmlRouteData; import com.magento.idea.magento2plugin.actions.generation.generator.DeleteEntityByIdCommandGenerator; +import com.magento.idea.magento2plugin.actions.generation.generator.php.WebApiInterfaceWithDeclarationGenerator; import com.magento.idea.magento2plugin.actions.generation.generator.pool.GeneratorHandler; import com.magento.idea.magento2plugin.actions.generation.generator.pool.GeneratorRunnerValidator; +import com.magento.idea.magento2plugin.magento.files.commands.DeleteEntityByIdCommandFile; +import com.magento.idea.magento2plugin.magento.packages.HttpMethod; +import com.magento.idea.magento2plugin.util.GetFirstClassOfFile; +import com.magento.idea.magento2plugin.util.php.PhpTypeMetadataParserUtil; import org.jetbrains.annotations.NotNull; public class DeleteByIdCommandGeneratorHandler extends GeneratorHandler { @@ -50,4 +61,48 @@ public void instantiateGenerator() { getProject() )); } + + @Override + protected void afterFileGenerated(final PsiFile file) { + if (!(file instanceof PhpFile)) { + return; + } + final EntityCreatorContextData contextData = (EntityCreatorContextData) getContextData(); + final DeleteEntityByIdCommandData data = + (DeleteEntityByIdCommandData) getDataObjectConverter(); + + if (contextData.hasWebApi()) { + final PhpClass serviceClass = GetFirstClassOfFile.getInstance().execute((PhpFile) file); + + if (serviceClass == null) { + return; + } + final DeleteEntityByIdCommandFile fileConfiguration = new DeleteEntityByIdCommandFile( + data.getModuleName(), + data.getEntityName(), + true + ); + new WebApiInterfaceWithDeclarationGenerator( + new WebApiInterfaceData( + data.getModuleName(), + PhpTypeMetadataParserUtil.getFqn(serviceClass), + fileConfiguration.getWebApiInterfaceName(), + PhpTypeMetadataParserUtil.getShortDescription(serviceClass), + PhpTypeMetadataParserUtil.getMethodsByNames( + serviceClass, + DeleteEntityByIdCommandFile.WEB_API_METHOD_NAME + ) + ), + new WebApiXmlRouteData( + data.getModuleName(), + fileConfiguration.getWebApiUrl(), + HttpMethod.DELETE.name(), + fileConfiguration.getClassFqn(), + DeleteEntityByIdCommandFile.WEB_API_METHOD_NAME, + data.getAclResource() + ), + getProject() + ).generate(contextData.getActionName(), contextData.checkIfHasOpenFileFlag()); + } + } } diff --git a/src/com/magento/idea/magento2plugin/actions/generation/generator/pool/handler/GetListQueryGeneratorHandler.java b/src/com/magento/idea/magento2plugin/actions/generation/generator/pool/handler/GetListQueryGeneratorHandler.java index 120c74943..3ec312133 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/generator/pool/handler/GetListQueryGeneratorHandler.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/pool/handler/GetListQueryGeneratorHandler.java @@ -5,12 +5,23 @@ package com.magento.idea.magento2plugin.actions.generation.generator.pool.handler; +import com.intellij.psi.PsiFile; +import com.jetbrains.php.lang.psi.PhpFile; +import com.jetbrains.php.lang.psi.elements.PhpClass; import com.magento.idea.magento2plugin.actions.generation.data.GetListQueryModelData; import com.magento.idea.magento2plugin.actions.generation.data.converter.DataObjectConverter; +import com.magento.idea.magento2plugin.actions.generation.data.dialog.EntityCreatorContextData; import com.magento.idea.magento2plugin.actions.generation.data.dialog.GenerationContextData; +import com.magento.idea.magento2plugin.actions.generation.data.php.WebApiInterfaceData; +import com.magento.idea.magento2plugin.actions.generation.data.xml.WebApiXmlRouteData; import com.magento.idea.magento2plugin.actions.generation.generator.GetListQueryModelGenerator; +import com.magento.idea.magento2plugin.actions.generation.generator.php.WebApiInterfaceWithDeclarationGenerator; import com.magento.idea.magento2plugin.actions.generation.generator.pool.GeneratorHandler; import com.magento.idea.magento2plugin.actions.generation.generator.pool.GeneratorRunnerValidator; +import com.magento.idea.magento2plugin.magento.files.queries.GetListQueryFile; +import com.magento.idea.magento2plugin.magento.packages.HttpMethod; +import com.magento.idea.magento2plugin.util.GetFirstClassOfFile; +import com.magento.idea.magento2plugin.util.php.PhpTypeMetadataParserUtil; import org.jetbrains.annotations.NotNull; public class GetListQueryGeneratorHandler extends GeneratorHandler { @@ -50,4 +61,47 @@ public void instantiateGenerator() { getProject() )); } + + @Override + protected void afterFileGenerated(final PsiFile file) { + if (!(file instanceof PhpFile)) { + return; + } + final EntityCreatorContextData contextData = (EntityCreatorContextData) getContextData(); + final GetListQueryModelData data = (GetListQueryModelData) getDataObjectConverter(); + + if (contextData.hasWebApi()) { + final PhpClass serviceClass = GetFirstClassOfFile.getInstance().execute((PhpFile) file); + + if (serviceClass == null) { + return; + } + final GetListQueryFile fileConfiguration = new GetListQueryFile( + data.getModuleName(), + data.getEntityName(), + true + ); + new WebApiInterfaceWithDeclarationGenerator( + new WebApiInterfaceData( + data.getModuleName(), + PhpTypeMetadataParserUtil.getFqn(serviceClass), + fileConfiguration.getWebApiInterfaceName(), + PhpTypeMetadataParserUtil.getShortDescription(serviceClass), + PhpTypeMetadataParserUtil.getMethodsByNames( + serviceClass, + GetListQueryFile.WEB_API_METHOD_NAME + ) + ), + new WebApiXmlRouteData( + data.getModuleName(), + fileConfiguration.getWebApiUrl(), + HttpMethod.GET.name(), + fileConfiguration.getClassFqn(), + GetListQueryFile.WEB_API_METHOD_NAME, + data.getAclResource() + ), + getProject() + ).generate(contextData.getActionName(), contextData.checkIfHasOpenFileFlag()); + } + } } diff --git a/src/com/magento/idea/magento2plugin/actions/generation/generator/pool/handler/SaveCommandGeneratorHandler.java b/src/com/magento/idea/magento2plugin/actions/generation/generator/pool/handler/SaveCommandGeneratorHandler.java index cec5271b7..d75ca4978 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/generator/pool/handler/SaveCommandGeneratorHandler.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/pool/handler/SaveCommandGeneratorHandler.java @@ -5,12 +5,23 @@ package com.magento.idea.magento2plugin.actions.generation.generator.pool.handler; +import com.intellij.psi.PsiFile; +import com.jetbrains.php.lang.psi.PhpFile; +import com.jetbrains.php.lang.psi.elements.PhpClass; import com.magento.idea.magento2plugin.actions.generation.data.SaveEntityCommandData; import com.magento.idea.magento2plugin.actions.generation.data.converter.DataObjectConverter; +import com.magento.idea.magento2plugin.actions.generation.data.dialog.EntityCreatorContextData; import com.magento.idea.magento2plugin.actions.generation.data.dialog.GenerationContextData; +import com.magento.idea.magento2plugin.actions.generation.data.php.WebApiInterfaceData; +import com.magento.idea.magento2plugin.actions.generation.data.xml.WebApiXmlRouteData; import com.magento.idea.magento2plugin.actions.generation.generator.SaveEntityCommandGenerator; +import com.magento.idea.magento2plugin.actions.generation.generator.php.WebApiInterfaceWithDeclarationGenerator; import com.magento.idea.magento2plugin.actions.generation.generator.pool.GeneratorHandler; import com.magento.idea.magento2plugin.actions.generation.generator.pool.GeneratorRunnerValidator; +import com.magento.idea.magento2plugin.magento.files.commands.SaveEntityCommandFile; +import com.magento.idea.magento2plugin.magento.packages.HttpMethod; +import com.magento.idea.magento2plugin.util.GetFirstClassOfFile; +import com.magento.idea.magento2plugin.util.php.PhpTypeMetadataParserUtil; import org.jetbrains.annotations.NotNull; public class SaveCommandGeneratorHandler extends GeneratorHandler { @@ -50,4 +61,47 @@ public void instantiateGenerator() { getProject() )); } + + @Override + protected void afterFileGenerated(final PsiFile file) { + if (!(file instanceof PhpFile)) { + return; + } + final EntityCreatorContextData contextData = (EntityCreatorContextData) getContextData(); + final SaveEntityCommandData data = (SaveEntityCommandData) getDataObjectConverter(); + + if (contextData.hasWebApi()) { + final PhpClass serviceClass = GetFirstClassOfFile.getInstance().execute((PhpFile) file); + + if (serviceClass == null) { + return; + } + final SaveEntityCommandFile fileConfiguration = new SaveEntityCommandFile( + data.getModuleName(), + data.getEntityName(), + true + ); + new WebApiInterfaceWithDeclarationGenerator( + new WebApiInterfaceData( + data.getModuleName(), + PhpTypeMetadataParserUtil.getFqn(serviceClass), + fileConfiguration.getWebApiInterfaceName(), + PhpTypeMetadataParserUtil.getShortDescription(serviceClass), + PhpTypeMetadataParserUtil.getMethodsByNames( + serviceClass, + SaveEntityCommandFile.WEB_API_METHOD_NAME + ) + ), + new WebApiXmlRouteData( + data.getModuleName(), + fileConfiguration.getWebApiUrl(), + HttpMethod.POST.name(), + fileConfiguration.getClassFqn(), + SaveEntityCommandFile.WEB_API_METHOD_NAME, + data.getAclResource() + ), + getProject() + ).generate(contextData.getActionName(), contextData.checkIfHasOpenFileFlag()); + } + } } diff --git a/src/com/magento/idea/magento2plugin/actions/generation/generator/pool/provider/NewEntityGeneratorsProviderUtil.java b/src/com/magento/idea/magento2plugin/actions/generation/generator/pool/provider/NewEntityGeneratorsProviderUtil.java index 8d6895f55..fa4a936ff 100644 --- a/src/com/magento/idea/magento2plugin/actions/generation/generator/pool/provider/NewEntityGeneratorsProviderUtil.java +++ b/src/com/magento/idea/magento2plugin/actions/generation/generator/pool/provider/NewEntityGeneratorsProviderUtil.java @@ -138,13 +138,11 @@ public static void initializeGenerators( ) .addNext( EntityDataMapperGeneratorHandler.class, - new EntityDataMapperDtoConverter(context, dialogData), - dialogData::hasAdminUiComponents + new EntityDataMapperDtoConverter(context, dialogData) ) .addNext( GetListQueryGeneratorHandler.class, - new GetListQueryDtoConverter(context, dialogData), - dialogData::hasAdminUiComponents + new GetListQueryDtoConverter(context, dialogData) ) .addNext( DataProviderGeneratorHandler.class, @@ -173,13 +171,11 @@ public static void initializeGenerators( ) .addNext( SaveCommandGeneratorHandler.class, - new SaveEntityCommandDtoConverter(context, dialogData), - dialogData::hasAdminUiComponents + new SaveEntityCommandDtoConverter(context, dialogData) ) .addNext( DeleteByIdCommandGeneratorHandler.class, - new DeleteEntityByIdCommandDtoConverter(context, dialogData), - dialogData::hasAdminUiComponents + new DeleteEntityByIdCommandDtoConverter(context, dialogData) ) .addNext( FormSaveControllerGeneratorHandler.class, diff --git a/src/com/magento/idea/magento2plugin/magento/files/commands/DeleteEntityByIdCommandFile.java b/src/com/magento/idea/magento2plugin/magento/files/commands/DeleteEntityByIdCommandFile.java index 2093e93f8..fed5a1cec 100644 --- a/src/com/magento/idea/magento2plugin/magento/files/commands/DeleteEntityByIdCommandFile.java +++ b/src/com/magento/idea/magento2plugin/magento/files/commands/DeleteEntityByIdCommandFile.java @@ -5,7 +5,10 @@ package com.magento.idea.magento2plugin.magento.files.commands; +import com.magento.idea.magento2plugin.actions.generation.generator.util.NamespaceBuilder; import com.magento.idea.magento2plugin.magento.files.AbstractPhpFile; +import com.magento.idea.magento2plugin.magento.files.WebApiInterfaceFile; +import com.magento.idea.magento2plugin.util.CamelCaseToHyphen; import org.jetbrains.annotations.NotNull; public class DeleteEntityByIdCommandFile extends AbstractPhpFile { @@ -13,8 +16,12 @@ public class DeleteEntityByIdCommandFile extends AbstractPhpFile { public static final String CLASS_NAME = "DeleteByIdCommand"; public static final String HUMAN_READABLE_NAME = "Delete entity by id command class"; public static final String TEMPLATE = "Magento Delete Entity By Id Command"; + public static final String WEB_API_METHOD_NAME = "execute"; private static final String DIRECTORY = "Command"; + private static final String WEB_API_INTERFACE_NAME_PATTERN = "Delete%entityName%ByIdInterface"; + private static final String WEB_API_URL_PATTERN = "%entityName%/delete-by-id"; private final String entityName; + private final boolean hasWebApiInterface; /** * Delete entity by id command file constructor. @@ -25,9 +32,58 @@ public class DeleteEntityByIdCommandFile extends AbstractPhpFile { public DeleteEntityByIdCommandFile( final @NotNull String moduleName, final @NotNull String entityName + ) { + this(moduleName, entityName, false); + } + + /** + * Delete entity by id command file constructor. + * + * @param moduleName String + * @param entityName String + * @param hasWebApiInterface boolean + */ + public DeleteEntityByIdCommandFile( + final @NotNull String moduleName, + final @NotNull String entityName, + final boolean hasWebApiInterface ) { super(moduleName, CLASS_NAME); this.entityName = entityName; + this.hasWebApiInterface = hasWebApiInterface; + } + + /** + * Get Web API interface name. + * + * @return String + */ + public String getWebApiInterfaceName() { + return WEB_API_INTERFACE_NAME_PATTERN.replace("%entityName%", entityName); + } + + /** + * Get Web API url. + * + * @return String + */ + public String getWebApiUrl() { + return WEB_API_URL_PATTERN.replace( + "%entityName%", + CamelCaseToHyphen.getInstance().convert(entityName) + ); + } + + @Override + public @NotNull NamespaceBuilder getNamespaceBuilder() { + if (hasWebApiInterface) { + final WebApiInterfaceFile interfaceFile = new WebApiInterfaceFile( + getModuleName(), + getWebApiInterfaceName() + ); + return interfaceFile.getNamespaceBuilder(); + } + return super.getNamespaceBuilder(); } @Override diff --git a/src/com/magento/idea/magento2plugin/magento/files/commands/SaveEntityCommandFile.java b/src/com/magento/idea/magento2plugin/magento/files/commands/SaveEntityCommandFile.java index 61573a503..9161b51dc 100644 --- a/src/com/magento/idea/magento2plugin/magento/files/commands/SaveEntityCommandFile.java +++ b/src/com/magento/idea/magento2plugin/magento/files/commands/SaveEntityCommandFile.java @@ -5,8 +5,11 @@ package com.magento.idea.magento2plugin.magento.files.commands; +import com.magento.idea.magento2plugin.actions.generation.generator.util.NamespaceBuilder; import com.magento.idea.magento2plugin.magento.files.AbstractPhpFile; import com.magento.idea.magento2plugin.magento.files.ModuleFileInterface; +import com.magento.idea.magento2plugin.magento.files.WebApiInterfaceFile; +import com.magento.idea.magento2plugin.util.CamelCaseToHyphen; import org.jetbrains.annotations.NotNull; public class SaveEntityCommandFile extends AbstractPhpFile implements ModuleFileInterface { @@ -14,8 +17,12 @@ public class SaveEntityCommandFile extends AbstractPhpFile implements ModuleFile public static final String CLASS_NAME = "SaveCommand"; public static final String TEMPLATE = "Magento Save Entity Command Model"; public static final String HUMAN_READABLE_NAME = "Save entity command model"; + public static final String WEB_API_METHOD_NAME = "execute"; private static final String DIRECTORY = "Command"; + private static final String WEB_API_INTERFACE_NAME_PATTERN = "Save%entityName%Interface"; + private static final String WEB_API_URL_PATTERN = "%entityName%/save"; private final String entityName; + private final boolean hasWebApiInterface; /** * Save entity command file constructor. @@ -26,9 +33,58 @@ public class SaveEntityCommandFile extends AbstractPhpFile implements ModuleFile public SaveEntityCommandFile( final @NotNull String moduleName, final @NotNull String entityName + ) { + this(moduleName, entityName, false); + } + + /** + * Save entity command file constructor. + * + * @param moduleName String + * @param entityName String + * @param hasWebApiInterface boolean + */ + public SaveEntityCommandFile( + final @NotNull String moduleName, + final @NotNull String entityName, + final boolean hasWebApiInterface ) { super(moduleName, CLASS_NAME); this.entityName = entityName; + this.hasWebApiInterface = hasWebApiInterface; + } + + /** + * Get Web API interface name. + * + * @return String + */ + public String getWebApiInterfaceName() { + return WEB_API_INTERFACE_NAME_PATTERN.replace("%entityName%", entityName); + } + + /** + * Get Web API url. + * + * @return String + */ + public String getWebApiUrl() { + return WEB_API_URL_PATTERN.replace( + "%entityName%", + CamelCaseToHyphen.getInstance().convert(entityName) + ); + } + + @Override + public @NotNull NamespaceBuilder getNamespaceBuilder() { + if (hasWebApiInterface) { + final WebApiInterfaceFile interfaceFile = new WebApiInterfaceFile( + getModuleName(), + getWebApiInterfaceName() + ); + return interfaceFile.getNamespaceBuilder(); + } + return super.getNamespaceBuilder(); } /** diff --git a/src/com/magento/idea/magento2plugin/magento/files/queries/GetListQueryFile.java b/src/com/magento/idea/magento2plugin/magento/files/queries/GetListQueryFile.java index db4732721..d8d6827bf 100644 --- a/src/com/magento/idea/magento2plugin/magento/files/queries/GetListQueryFile.java +++ b/src/com/magento/idea/magento2plugin/magento/files/queries/GetListQueryFile.java @@ -5,8 +5,11 @@ package com.magento.idea.magento2plugin.magento.files.queries; +import com.magento.idea.magento2plugin.actions.generation.generator.util.NamespaceBuilder; import com.magento.idea.magento2plugin.magento.files.AbstractPhpFile; +import com.magento.idea.magento2plugin.magento.files.WebApiInterfaceFile; import com.magento.idea.magento2plugin.magento.packages.File; +import com.magento.idea.magento2plugin.util.CamelCaseToHyphen; import org.jetbrains.annotations.NotNull; public final class GetListQueryFile extends AbstractPhpFile { @@ -14,8 +17,12 @@ public final class GetListQueryFile extends AbstractPhpFile { public static final String CLASS_NAME = "GetListQuery"; public static final String HUMAN_READABLE_NAME = "Get list query class"; public static final String TEMPLATE = "Magento Get List Query Model"; + public static final String WEB_API_METHOD_NAME = "execute"; private static final String DIRECTORY = "Query"; + private static final String WEB_API_INTERFACE_NAME_PATTERN = "Get%entityName%ListInterface"; + private static final String WEB_API_URL_PATTERN = "%entityName%/get-list"; private final String entityName; + private final boolean hasWebApiInterface; /** * Get list query file constructor. @@ -26,9 +33,58 @@ public final class GetListQueryFile extends AbstractPhpFile { public GetListQueryFile( final @NotNull String moduleName, final @NotNull String entityName + ) { + this(moduleName, entityName, false); + } + + /** + * Get list query file constructor. + * + * @param moduleName String + * @param entityName String + * @param hasWebApiInterface boolean + */ + public GetListQueryFile( + final @NotNull String moduleName, + final @NotNull String entityName, + final boolean hasWebApiInterface ) { super(moduleName, CLASS_NAME); this.entityName = entityName; + this.hasWebApiInterface = hasWebApiInterface; + } + + /** + * Get Web API interface name. + * + * @return String + */ + public String getWebApiInterfaceName() { + return WEB_API_INTERFACE_NAME_PATTERN.replace("%entityName%", entityName); + } + + /** + * Get Web API url. + * + * @return String + */ + public String getWebApiUrl() { + return WEB_API_URL_PATTERN.replace( + "%entityName%", + CamelCaseToHyphen.getInstance().convert(entityName) + ); + } + + @Override + public @NotNull NamespaceBuilder getNamespaceBuilder() { + if (hasWebApiInterface) { + final WebApiInterfaceFile interfaceFile = new WebApiInterfaceFile( + getModuleName(), + getWebApiInterfaceName() + ); + return interfaceFile.getNamespaceBuilder(); + } + return super.getNamespaceBuilder(); } @Override diff --git a/src/com/magento/idea/magento2plugin/util/php/PhpTypeMetadataParserUtil.java b/src/com/magento/idea/magento2plugin/util/php/PhpTypeMetadataParserUtil.java index ac59bc94f..5e424d4e6 100644 --- a/src/com/magento/idea/magento2plugin/util/php/PhpTypeMetadataParserUtil.java +++ b/src/com/magento/idea/magento2plugin/util/php/PhpTypeMetadataParserUtil.java @@ -103,6 +103,30 @@ public static List getPublicMethods(final @NotNull PhpClass phpClass) { return methods; } + /** + * Get methods by names. + * + * @param phpClass PhpClass + * @param names String + * + * @return List[Method] + */ + public static List getMethodsByNames( + final @NotNull PhpClass phpClass, + final @NotNull String... names + ) { + final List methods = new LinkedList<>(); + final List methodNames = Arrays.asList(names); + + for (final Method method : phpClass.getMethods()) { + if (methodNames.contains(method.getName())) { + methods.add(method); + } + } + + return methods; + } + /** * Get method declaration for interface. * diff --git a/tests/com/magento/idea/magento2plugin/actions/generation/generator/DeleteEntityCommandGeneratorTest.java b/tests/com/magento/idea/magento2plugin/actions/generation/generator/DeleteEntityCommandGeneratorTest.java index bea393ebd..8933d848d 100644 --- a/tests/com/magento/idea/magento2plugin/actions/generation/generator/DeleteEntityCommandGeneratorTest.java +++ b/tests/com/magento/idea/magento2plugin/actions/generation/generator/DeleteEntityCommandGeneratorTest.java @@ -17,6 +17,7 @@ public class DeleteEntityCommandGeneratorTest extends BaseGeneratorTestCase { private static final String RESOURCE_MODEL_NAME = ENTITY_NAME + "Resource"; private static final String EXPECTED_DIRECTORY = "src/app/code/Foo/Bar/Command/" + ENTITY_NAME; private static final String ENTITY_ID = "book_id"; + private static final String ACL = "Foo_Bar::book_management"; /** * Test generation of DeleteByIdCommand model for entity. @@ -28,7 +29,8 @@ public void testGenerateDeleteEntityByIdCommandFile() { ENTITY_NAME, ENTITY_ID, MODEL_NAME, - RESOURCE_MODEL_NAME + RESOURCE_MODEL_NAME, + ACL ); final DeleteEntityByIdCommandGenerator deleteEntityByIdCommandGenerator = new DeleteEntityByIdCommandGenerator( diff --git a/tests/com/magento/idea/magento2plugin/actions/generation/generator/DeleteEntityGeneratorTest.java b/tests/com/magento/idea/magento2plugin/actions/generation/generator/DeleteEntityGeneratorTest.java index 2533f44e5..0554c016a 100644 --- a/tests/com/magento/idea/magento2plugin/actions/generation/generator/DeleteEntityGeneratorTest.java +++ b/tests/com/magento/idea/magento2plugin/actions/generation/generator/DeleteEntityGeneratorTest.java @@ -27,7 +27,8 @@ public void testGenerateDeleteEntityFile() { ENTITY_NAME, MODULE_NAME, ACL, - ENTITY_ID + ENTITY_ID, + false ); final DeleteEntityControllerFileGenerator deleteEntityControllerFileGenerator = new DeleteEntityControllerFileGenerator( diff --git a/tests/com/magento/idea/magento2plugin/actions/generation/generator/QueryModelGeneratorTest.java b/tests/com/magento/idea/magento2plugin/actions/generation/generator/QueryModelGeneratorTest.java index 5c6728351..debbda644 100644 --- a/tests/com/magento/idea/magento2plugin/actions/generation/generator/QueryModelGeneratorTest.java +++ b/tests/com/magento/idea/magento2plugin/actions/generation/generator/QueryModelGeneratorTest.java @@ -14,6 +14,7 @@ public class QueryModelGeneratorTest extends BaseGeneratorTestCase { private static final String ENTITY_NAME = "Book"; private static final String MODEL_NAME = "Book"; private static final String COLLECTION_NAME = "Collection"; + private static final String ACL = "Foo_Bar::book_management"; /** * Test generation of GetListQuery model for entity. @@ -24,7 +25,8 @@ public void testGenerateGetListQueryModelFile() { MODULE_NAME, ENTITY_NAME, MODEL_NAME, - COLLECTION_NAME + COLLECTION_NAME, + ACL ); final GetListQueryModelGenerator getListQueryModelGenerator = new GetListQueryModelGenerator( diff --git a/tests/com/magento/idea/magento2plugin/actions/generation/generator/SaveEntityActionGeneratorTest.java b/tests/com/magento/idea/magento2plugin/actions/generation/generator/SaveEntityActionGeneratorTest.java index 4ea056ff0..2380e210b 100644 --- a/tests/com/magento/idea/magento2plugin/actions/generation/generator/SaveEntityActionGeneratorTest.java +++ b/tests/com/magento/idea/magento2plugin/actions/generation/generator/SaveEntityActionGeneratorTest.java @@ -32,6 +32,7 @@ public void testGenerateSaveEntityActionWithoutInterfaceFile() { ENTITY_ID, DTO_NAME, "", + false, false ); final SaveEntityControllerFileGenerator saveEntityControllerFileGenerator = @@ -65,7 +66,8 @@ public void testGenerateSaveEntityActionWithInterfaceFile() { ENTITY_ID, DTO_NAME, DTO_TYPE_INTERFACE, - true + true, + false ); final SaveEntityControllerFileGenerator saveEntityControllerFileGenerator = new SaveEntityControllerFileGenerator( diff --git a/tests/com/magento/idea/magento2plugin/actions/generation/generator/SaveEntityCommandGeneratorTest.java b/tests/com/magento/idea/magento2plugin/actions/generation/generator/SaveEntityCommandGeneratorTest.java index 2a677b6c8..74607e64e 100644 --- a/tests/com/magento/idea/magento2plugin/actions/generation/generator/SaveEntityCommandGeneratorTest.java +++ b/tests/com/magento/idea/magento2plugin/actions/generation/generator/SaveEntityCommandGeneratorTest.java @@ -17,6 +17,7 @@ public class SaveEntityCommandGeneratorTest extends BaseGeneratorTestCase { private static final String DTO_NAME = ENTITY_NAME + "Data"; private static final boolean IS_DTO_HAS_INTERFACE = false; private static final String EXPECTED_DIRECTORY = "src/app/code/Foo/Bar/Command/" + ENTITY_NAME; + private static final String ACL = "Foo_Bar::book_management"; /** * Test generation of SaveCommand model for entity. @@ -29,7 +30,8 @@ public void testGenerateSaveEntityCommandFile() { RESOURCE_MODEL_NAME, DTO_NAME, "", - IS_DTO_HAS_INTERFACE + IS_DTO_HAS_INTERFACE, + ACL ); final SaveEntityCommandGenerator saveEntityCommandGenerator = new SaveEntityCommandGenerator( diff --git a/tests/com/magento/idea/magento2plugin/actions/generation/generator/UiComponentGridDataProviderGeneratorTest.java b/tests/com/magento/idea/magento2plugin/actions/generation/generator/UiComponentGridDataProviderGeneratorTest.java index 057782ca9..07d91ae3c 100644 --- a/tests/com/magento/idea/magento2plugin/actions/generation/generator/UiComponentGridDataProviderGeneratorTest.java +++ b/tests/com/magento/idea/magento2plugin/actions/generation/generator/UiComponentGridDataProviderGeneratorTest.java @@ -20,6 +20,7 @@ public class UiComponentGridDataProviderGeneratorTest extends BaseGeneratorTestC private static final String PROVIDER_CLASS_NAME = "GridDataProvider"; private static final String PROVIDER_PATH = "Ui/Component/Listing"; private static final String COLLECTION_NAME = "Collection"; + private static final String ACL = "Foo_Bar::book_management"; /** * Test data provider class file generation with custom type. @@ -48,7 +49,8 @@ public void testGenerateDataProviderWithInjectedGetListQuery() { PROVIDER_CLASS_NAME, PROVIDER_PATH, ENTITY_NAME, - ENTITY_ID_FIELD_NAME + ENTITY_ID_FIELD_NAME, + false )); final String filePath = this.getFixturePath("GridDataProvider.php"); final PsiFile expectedFile = myFixture.configureByFile(filePath); @@ -84,7 +86,8 @@ private void generateGetListQuery() { MODULE_NAME, ENTITY_NAME, MODEL_NAME, - COLLECTION_NAME + COLLECTION_NAME, + ACL ); new GetListQueryModelGenerator(getListData, project, false).generate("test"); } diff --git a/tests/com/magento/idea/magento2plugin/actions/generation/generator/pool/NewEntityGeneratorPoolTest.java b/tests/com/magento/idea/magento2plugin/actions/generation/generator/pool/NewEntityGeneratorPoolTest.java index 34f06821d..53b6a0580 100644 --- a/tests/com/magento/idea/magento2plugin/actions/generation/generator/pool/NewEntityGeneratorPoolTest.java +++ b/tests/com/magento/idea/magento2plugin/actions/generation/generator/pool/NewEntityGeneratorPoolTest.java @@ -77,6 +77,7 @@ private NewEntityDialogData getMockNewEntityDialogData() { "test", true, true, + false, "test", "test", "test", @@ -115,6 +116,7 @@ private EntityCreatorContextData getMockContext() { MODULE_NAME, ACTION_NAME, false, + false, INDEX_PATH, EDIT_PATH, NEW_PATH,