SUPPORT-9389: add server validation
This commit is contained in:
parent
d2db023bb1
commit
f4529a2fc7
5 changed files with 271 additions and 17 deletions
|
|
@ -0,0 +1,51 @@
|
|||
package ru.micord.ervu.account_applications.component.validator;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import model.FieldData;
|
||||
import model.FormValidationResult;
|
||||
import model.SimpleFormValidationResult;
|
||||
import org.springframework.context.support.MessageSourceAccessor;
|
||||
import service.FormValidatorWithCode;
|
||||
|
||||
import ru.cg.webbpm.modules.core.runtime.api.MessageBundleUtils;
|
||||
import ru.cg.webbpm.modules.database.bean.entity_graph.EntityColumn;
|
||||
|
||||
public class RequiredFieldValidator extends FormValidatorWithCode {
|
||||
private static final MessageSourceAccessor MESSAGE_SOURCE = MessageBundleUtils.createAccessor(
|
||||
"messages/common_errors_messages");
|
||||
public String[] requiredFields;
|
||||
|
||||
@Override
|
||||
public FormValidationResult validate(Map<EntityColumn, Object> values,
|
||||
List<FieldData> fieldData) {
|
||||
List<String> missingFields = new ArrayList<>();
|
||||
|
||||
for (String fieldName : requiredFields) {
|
||||
if (isFieldNull(fieldName, values, fieldData)) {
|
||||
missingFields.add(fieldName);
|
||||
}
|
||||
}
|
||||
|
||||
if (!missingFields.isEmpty()) {
|
||||
String message =
|
||||
MESSAGE_SOURCE.getMessage("form_field_required") + String.join(", ", missingFields);
|
||||
return SimpleFormValidationResult.invalid(code, message);
|
||||
}
|
||||
|
||||
return SimpleFormValidationResult.valid(code);
|
||||
}
|
||||
|
||||
private boolean isFieldNull(String fieldName, Map<EntityColumn, Object> values,
|
||||
List<FieldData> fieldData) {
|
||||
for (Map.Entry<EntityColumn, Object> entry : values.entrySet()) {
|
||||
if (fieldName.equals(entry.getKey().getName())) {
|
||||
return entry.getValue() == null;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
@ -1,31 +1,88 @@
|
|||
package ru.micord.ervu.account_applications.service;
|
||||
|
||||
import exception.FormValidationException;
|
||||
import model.BpmnVariableForSave;
|
||||
import model.FieldData;
|
||||
|
||||
import ru.cg.webbpm.modules.core.error_handling.api.ErrorMetadata;
|
||||
import ru.cg.webbpm.modules.core.error_handling.api.ErrorMetadataItem;
|
||||
import ru.cg.webbpm.modules.core.runtime.api.LocalizedException;
|
||||
import ru.cg.webbpm.modules.core.runtime.api.MessageBundleUtils;
|
||||
import ru.cg.webbpm.modules.database.bean.entity_graph.EntityColumn;
|
||||
import ru.cg.webbpm.modules.webkit.annotations.RpcSharedProperty;
|
||||
|
||||
import model.FormValidationResult;
|
||||
import org.springframework.context.support.MessageSourceAccessor;
|
||||
import service.FormValidator;
|
||||
import service.container.AbstractGraphFormService;
|
||||
import service.container.FormMode;
|
||||
import service.container.FormService;
|
||||
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* Обрезанный FormServiceImpl из платформы, отвязанный от BPMN зависимостей
|
||||
* Поддержку BMPN решели из этого проекта убрать
|
||||
* Обрезанный FormServiceImpl из платформы, отвязанный от BPMN зависимостей Поддержку BMPN решели из
|
||||
* этого проекта убрать
|
||||
*
|
||||
* @author Denis Ivanov
|
||||
*/
|
||||
|
||||
public class UserAuthorityFormService extends AbstractGraphFormService implements FormService {
|
||||
|
||||
private static final MessageSourceAccessor MESSAGE_SOURCE = MessageBundleUtils.createAccessor(
|
||||
"messages/form_messages");
|
||||
@RpcSharedProperty
|
||||
public FormMode mode = FormMode.SIMPLE; // this is to share property with the default Form.ts
|
||||
|
||||
@Override
|
||||
public Object saveData(String s, List<FieldData> list, Boolean aBoolean,
|
||||
List<BpmnVariableForSave> list1) throws Exception {
|
||||
List<BpmnVariableForSave> list1) throws Exception {
|
||||
throw new UnsupportedOperationException("BPMN operations are unsupported");
|
||||
}
|
||||
|
||||
protected Object saveDataById(Object selectedId, List<FieldData> fieldData) {
|
||||
Map<EntityColumn, Object> valuesForSave = this.getValuesForSave(selectedId, fieldData);
|
||||
if (valuesForSave.isEmpty()) {
|
||||
throw new LocalizedException("form_field.entity_not_exists", MESSAGE_SOURCE,
|
||||
new Object[] {selectedId}
|
||||
);
|
||||
}
|
||||
else {
|
||||
executeValidators(valuesForSave, fieldData);
|
||||
return this.save(fieldData, valuesForSave);
|
||||
}
|
||||
}
|
||||
|
||||
protected void executeValidators(Map<EntityColumn, Object> valuesForSave,
|
||||
List<FieldData> fieldData) {
|
||||
if (this.formValidators != null && this.formValidators.length > 0) {
|
||||
StringBuilder errorMessageBuilder = new StringBuilder();
|
||||
ErrorMetadata errorMetadata = new ErrorMetadata();
|
||||
List<String> errorMessages = new LinkedList();
|
||||
|
||||
for (FormValidator formValidator : this.formValidators) {
|
||||
FormValidationResult result = formValidator.validate(valuesForSave, fieldData);
|
||||
if (!result.isValid()) {
|
||||
String validationResultMessage = result.getMessage();
|
||||
errorMessages.add(validationResultMessage);
|
||||
errorMessageBuilder.append(String.join("\n", validationResultMessage));
|
||||
ErrorMetadataItem errorMetadataItem = new ErrorMetadataItem(result.getCode(),
|
||||
validationResultMessage
|
||||
);
|
||||
errorMetadata.getItems().add(errorMetadataItem);
|
||||
}
|
||||
}
|
||||
|
||||
if (!errorMessages.isEmpty()) {
|
||||
throw new FormValidationException(errorMessageBuilder.toString(), errorMetadata,
|
||||
errorMessages
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public List<FieldData> loadData() {
|
||||
throw new UnsupportedOperationException("Loading with no id is unsupported");
|
||||
|
|
|
|||
|
|
@ -0,0 +1,2 @@
|
|||
form_field_required=Обязательные поля не заполнены:
|
||||
|
||||
|
|
@ -0,0 +1 @@
|
|||
form_field_required=Обязательные поля не заполнены:
|
||||
|
|
@ -4280,7 +4280,22 @@
|
|||
<name>Form1</name>
|
||||
<container>true</container>
|
||||
<childrenReordered>false</childrenReordered>
|
||||
<scripts id="bf098f19-480e-44e4-9084-aa42955c4d0f"/>
|
||||
<scripts id="bf098f19-480e-44e4-9084-aa42955c4d0f">
|
||||
<properties>
|
||||
<entry>
|
||||
<key>cssClasses</key>
|
||||
<value>
|
||||
<item id="92d2eaad-00c8-4c34-83c8-0df2a27bb794" removed="true"/>
|
||||
</value>
|
||||
</entry>
|
||||
<entry>
|
||||
<key>showServerValidationErrors</key>
|
||||
<value>
|
||||
<simple>null</simple>
|
||||
</value>
|
||||
</entry>
|
||||
</properties>
|
||||
</scripts>
|
||||
<scripts id="c0bf7050-bd39-426a-8f1e-1600bbd4b9bb">
|
||||
<properties>
|
||||
<entry>
|
||||
|
|
@ -4304,6 +4319,52 @@
|
|||
</implRef>
|
||||
</value>
|
||||
</entry>
|
||||
<entry>
|
||||
<key>formValidators</key>
|
||||
<value>
|
||||
<item id="b217b0bc-42a1-4d28-880d-36d0080d3038" removed="false">
|
||||
<value>
|
||||
<complex>
|
||||
<entry>
|
||||
<key>requiredFields</key>
|
||||
<value>
|
||||
<item id="f84415d3-14f8-41e1-8ea0-46252fb46642" removed="false">
|
||||
<value>
|
||||
<simple>"application_kind"</simple>
|
||||
</value>
|
||||
</item>
|
||||
<item id="8954ce7f-8f29-4d5c-8fe6-bc721cfa73fc" removed="false">
|
||||
<value>
|
||||
<simple>"user_login"</simple>
|
||||
</value>
|
||||
</item>
|
||||
<item id="cc9e1215-b578-4917-88f1-a62e3009b757" removed="false">
|
||||
<value>
|
||||
<simple>"secondname"</simple>
|
||||
</value>
|
||||
</item>
|
||||
<item id="7c489802-7ac8-4ad7-812c-4fd0e88d73e3" removed="false">
|
||||
<value>
|
||||
<simple>"firstname"</simple>
|
||||
</value>
|
||||
</item>
|
||||
<item id="1aef3d97-6409-4de0-b911-11181fb57fa5" removed="false">
|
||||
<value>
|
||||
<simple>"application_status"</simple>
|
||||
</value>
|
||||
</item>
|
||||
</value>
|
||||
</entry>
|
||||
</complex>
|
||||
<expanded>false</expanded>
|
||||
<implRef type="JAVA">
|
||||
<className>RequiredFieldValidator</className>
|
||||
<packageName>ru.micord.ervu.account_applications.component.validator</packageName>
|
||||
</implRef>
|
||||
</value>
|
||||
</item>
|
||||
</value>
|
||||
</entry>
|
||||
<entry>
|
||||
<key>mode</key>
|
||||
<value>
|
||||
|
|
@ -9301,6 +9362,55 @@
|
|||
</implRef>
|
||||
</value>
|
||||
</entry>
|
||||
<entry>
|
||||
<key>formValidators</key>
|
||||
<value>
|
||||
<item id="fd720809-4cb5-475b-a86d-b6eb5ba85f77" removed="false">
|
||||
<value>
|
||||
<complex>
|
||||
<entry>
|
||||
<key>requiredFields</key>
|
||||
<value>
|
||||
<item id="013a8262-26a9-45f2-ab43-136bd0f64868" removed="false">
|
||||
<value>
|
||||
<simple>"application_kind"</simple>
|
||||
</value>
|
||||
</item>
|
||||
<item id="2dca08b6-fa69-4325-bb9d-4c9568c112c0" removed="false">
|
||||
<value>
|
||||
<simple>"user_login"</simple>
|
||||
</value>
|
||||
</item>
|
||||
<item id="e85a4b5b-876a-4737-9767-0bf5aa3d3a10" removed="false">
|
||||
<value>
|
||||
<simple>"secondname"</simple>
|
||||
</value>
|
||||
</item>
|
||||
<item id="493dc756-4d47-450d-a878-4cc1d4276eeb" removed="false">
|
||||
<value>
|
||||
<simple>"firstname"</simple>
|
||||
</value>
|
||||
</item>
|
||||
<item id="7eaef52d-1a3a-401c-9921-e5cc9a1a0ea9" removed="false">
|
||||
<value>
|
||||
<simple>"application_status"</simple>
|
||||
</value>
|
||||
</item>
|
||||
</value>
|
||||
</entry>
|
||||
</complex>
|
||||
<implRef type="JAVA">
|
||||
<className>RequiredFieldValidator</className>
|
||||
<packageName>ru.micord.ervu.account_applications.component.validator</packageName>
|
||||
</implRef>
|
||||
</value>
|
||||
</item>
|
||||
<item id="e9713085-43b4-4342-b03f-3cb85a2a07fd" removed="true"/>
|
||||
<item id="19c2ffbd-24a4-4d18-b58b-2bb1565fbed1" removed="true"/>
|
||||
<item id="9f5154a3-ab2b-44ed-9119-b4e0133397e8" removed="true"/>
|
||||
<item id="80e67982-87b0-499a-93a5-885df6939d23" removed="true"/>
|
||||
</value>
|
||||
</entry>
|
||||
<entry>
|
||||
<key>mode</key>
|
||||
<value>
|
||||
|
|
@ -12430,12 +12540,6 @@
|
|||
<simple>"btn-main"</simple>
|
||||
</value>
|
||||
</item>
|
||||
</value>
|
||||
</entry>
|
||||
<entry>
|
||||
<key>disabled</key>
|
||||
<value>
|
||||
<simple>true</simple>
|
||||
</value>
|
||||
</entry>
|
||||
</properties>
|
||||
|
|
@ -13692,6 +13796,51 @@
|
|||
</implRef>
|
||||
</value>
|
||||
</entry>
|
||||
<entry>
|
||||
<key>formValidators</key>
|
||||
<value>
|
||||
<item id="5418ccb0-8f0b-4dd3-8ff1-db313a673dcc" removed="false">
|
||||
<value>
|
||||
<complex>
|
||||
<entry>
|
||||
<key>requiredFields</key>
|
||||
<value>
|
||||
<item id="d3a90814-af6b-49a6-99e0-a8a439a7d0af" removed="false">
|
||||
<value>
|
||||
<simple>"application_kind"</simple>
|
||||
</value>
|
||||
</item>
|
||||
<item id="3433096e-85f7-4c39-87fa-48aa410bfda6" removed="false">
|
||||
<value>
|
||||
<simple>"user_login"</simple>
|
||||
</value>
|
||||
</item>
|
||||
<item id="be29a25b-86e7-40d9-bacd-d098fbed1b41" removed="false">
|
||||
<value>
|
||||
<simple>"secondname"</simple>
|
||||
</value>
|
||||
</item>
|
||||
<item id="40aca80c-9e5e-43e9-8837-d0f7bf510d39" removed="false">
|
||||
<value>
|
||||
<simple>"firstname"</simple>
|
||||
</value>
|
||||
</item>
|
||||
<item id="356e3761-05ce-4801-9b71-d941c0010520" removed="false">
|
||||
<value>
|
||||
<simple>"application_status"</simple>
|
||||
</value>
|
||||
</item>
|
||||
</value>
|
||||
</entry>
|
||||
</complex>
|
||||
<implRef type="JAVA">
|
||||
<className>RequiredFieldValidator</className>
|
||||
<packageName>ru.micord.ervu.account_applications.component.validator</packageName>
|
||||
</implRef>
|
||||
</value>
|
||||
</item>
|
||||
</value>
|
||||
</entry>
|
||||
<entry>
|
||||
<key>mode</key>
|
||||
<value>
|
||||
|
|
@ -16880,12 +17029,6 @@
|
|||
<simple>"btn-main"</simple>
|
||||
</value>
|
||||
</item>
|
||||
</value>
|
||||
</entry>
|
||||
<entry>
|
||||
<key>disabled</key>
|
||||
<value>
|
||||
<simple>true</simple>
|
||||
</value>
|
||||
</entry>
|
||||
</properties>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue