Skip to content

[NAE-1892] Validation register #208

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 4 commits into
base: release/6.4.0
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ import com.netgrif.application.engine.petrinet.domain.*
import com.netgrif.application.engine.petrinet.domain.dataset.*
import com.netgrif.application.engine.petrinet.domain.dataset.logic.ChangedField
import com.netgrif.application.engine.petrinet.domain.dataset.logic.FieldBehavior
import com.netgrif.application.engine.petrinet.domain.dataset.logic.action.runner.Expression
import com.netgrif.application.engine.petrinet.domain.dataset.logic.validation.DynamicValidation
import com.netgrif.application.engine.petrinet.domain.dataset.logic.validation.Validation
import com.netgrif.application.engine.petrinet.domain.roles.ProcessRole
Expand All @@ -41,6 +42,7 @@ import com.netgrif.application.engine.startup.DefaultFiltersRunner
import com.netgrif.application.engine.startup.FilterRunner
import com.netgrif.application.engine.startup.ImportHelper
import com.netgrif.application.engine.utils.FullPageRequest
import com.netgrif.application.engine.validation.converter.LegacyValidationConverter
import com.netgrif.application.engine.workflow.domain.Case
import com.netgrif.application.engine.workflow.domain.QCase
import com.netgrif.application.engine.workflow.domain.QTask
Expand Down Expand Up @@ -187,6 +189,9 @@ class ActionDelegate {

FrontendActionOutcome Frontend

@Autowired
LegacyValidationConverter legacyValidationConverter

/**
* Reference of case and task in which current action is taking place.
*/
Expand Down Expand Up @@ -537,8 +542,10 @@ class ActionDelegate {
targetCase.dataSet.get(field.stringId).validations = field.validations
saveTargetCase(targetCase)
List<Validation> compiled = field.validations.collect { it.clone() }
compiled.findAll { it instanceof DynamicValidation }.collect { (DynamicValidation) it }.each {
it.compiledRule = dataValidationExpressionEvaluator.compile(targetCase, it.expression)
compiled.findAll { it.getArguments().any {arg -> arg.value.dynamic}}.each {
it.getArguments().findAll {arg -> arg.value.dynamic}.each {
arg -> arg.value.value = dataValidationExpressionEvaluator.compile(targetCase, new Expression(arg.value.dynamicValue))
}
}
ChangedField changedField = new ChangedField(field.stringId)
changedField.addAttribute("validations", compiled.collect { it.getLocalizedValidation(LocaleContextHolder.locale) })
Expand Down Expand Up @@ -790,14 +797,14 @@ class ActionDelegate {
List<Validation> newValidations = []
if (valid != null) {
if (valid instanceof String) {
newValidations = [new Validation(valid as String)]
newValidations = [legacyValidationConverter.convert(new Validation(valid as String))]
} else if (valid instanceof Validation) {
newValidations = [valid]
newValidations = [legacyValidationConverter.convert(valid)]
} else if (valid instanceof Collection) {
if (valid.every { it instanceof Validation }) {
newValidations = valid
newValidations = valid.collect { it -> legacyValidationConverter.convert(it as Validation)}
} else {
newValidations = valid.collect { new Validation(it as String) }
newValidations = valid.collect { legacyValidationConverter.convert(new Validation(it as String)) }
}
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,129 @@
package com.netgrif.application.engine.petrinet.domain.dataset.logic.validation

import lombok.AllArgsConstructor
import lombok.Data
import lombok.NoArgsConstructor

@Data
class Argument {

private String name
private String value
private String dynamicValue
private boolean dynamic

static ArgumentBuilder builder() {
return new ArgumentBuilder()
}

Argument() {
}

Argument(String name, String value, boolean dynamic) {
this.name = name
this.value = value
this.dynamic = dynamic
}

Argument(String name, String value, String dynamicValue, boolean dynamic) {
this.name = name
this.value = value
this.dynamicValue = dynamicValue
this.dynamic = dynamic
}

Argument(String name, boolean dynamic) {
this.name = name
this.dynamic = dynamic
}

private Argument(ArgumentBuilder builder) {
this.name = builder.getName()
this.value = builder.getValue()
this.dynamicValue = builder.getDynamicValue()
this.dynamic = builder.getDynamic()
}

String getName() {
return name
}

void setName(String name) {
this.name = name
}

String getValue() {
return value
}

void setValue(String value) {
this.value = value
}

boolean getDynamic() {
return dynamic
}

void setDynamic(boolean dynamic) {
this.dynamic = dynamic
}

String getDynamicValue() {
return dynamicValue
}

void setDynamicValue(String dynamicValue) {
this.dynamicValue = dynamicValue
}

static class ArgumentBuilder {

private String name
private String value
private String dynamicValue
private boolean dynamic

ArgumentBuilder() {
}

ArgumentBuilder name(String name) {
this.name = name
return this
}

ArgumentBuilder dynamic(boolean dynamic) {
this.dynamic = dynamic
return this
}

ArgumentBuilder value(String value) {
if (dynamic) {
this.dynamicValue = value
} else {
this.value = value
}
return this
}

Argument build() {
return new Argument(this)
}

String getName() {
return name
}

String getValue() {
return value
}

String getDynamicValue() {
return dynamicValue
}

boolean getDynamic() {
return dynamic
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ class DynamicValidation extends Validation {
this.expression = new Expression("\"$validationRule\"" as String)
}



DynamicValidation() {}

String getCompiledRule() {
Expand All @@ -35,7 +37,7 @@ class DynamicValidation extends Validation {
}

LocalizedValidation getLocalizedValidation(Locale locale) {
LocalizedValidation ret = new LocalizedValidation(this.compiledRule, getTranslatedValidationMessage(locale))
LocalizedValidation ret = new LocalizedValidation(this.compiledRule, getArguments(), getTranslatedValidationMessage(locale))
return ret
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,17 @@
package com.netgrif.application.engine.petrinet.domain.dataset.logic.validation


class LocalizedValidation {

private String validationRule
private String name

private Map<String, Argument> arguments

private String validationMessage

LocalizedValidation(String validationRule, String validationMessage) {
this.validationRule = validationRule
LocalizedValidation(String name, Map<String, Argument> arguments, String validationMessage) {
this.name = name
this.arguments = arguments
this.validationMessage = validationMessage
}

Expand All @@ -19,11 +23,19 @@ class LocalizedValidation {
this.validationMessage = valMessage
}

String getValidationRule() {
return validationRule
Map<String, Argument> getArguments() {
return arguments
}

void setArguments(Map<String, Argument> arguments) {
this.arguments = arguments
}

String getName() {
return name
}

void setValidationRule(String validationRule) {
this.validationRule = validationRule
void setName(String name) {
this.name = name
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,27 +8,52 @@ class Validation implements Serializable {

private static final long serialVersionUID = 3287600522204188694L

protected String name

protected String validationRule

protected Map<String, Argument> arguments

protected I18nString validationMessage

Validation(String validationRule) {
this(validationRule, null)
this(validationRule, null as I18nString)
}

Validation(String validationRule, I18nString validationMessage) {
this.validationRule = validationRule
this.validationMessage = validationMessage
}

Validation(String name, Map<String, Argument> arguments, I18nString validationMessage) {
this()
this.name = name
this.arguments = arguments
this.validationMessage = validationMessage
}

Validation(String name, String validationRule, Map<String, Argument> arguments, I18nString validationMessage) {
this.name = name
this.validationRule = validationRule
this.arguments = arguments
this.validationMessage = validationMessage
}

Validation() {}

LocalizedValidation getLocalizedValidation(Locale locale) {
LocalizedValidation ret = new LocalizedValidation(this.validationRule, getTranslatedValidationMessage(locale))
LocalizedValidation ret = new LocalizedValidation(name, this.arguments, getTranslatedValidationMessage(locale))
return ret
}

String getName() {
return name
}

void setName(String name) {
this.name = name
}

I18nString getValidationMessage() {
return validationMessage
}
Expand All @@ -41,6 +66,14 @@ class Validation implements Serializable {
return validationMessage?.getTranslation(locale)
}

Map<String, Argument> getArguments() {
return arguments
}

void setArguments(Map<String, Argument> arguments) {
this.arguments = arguments
}

String getValidationRule() {
return validationRule
}
Expand All @@ -51,7 +84,7 @@ class Validation implements Serializable {

@Override
Validation clone() {
return new Validation(this.validationRule, this.validationMessage)
return new Validation(this.name, this.validationRule, this.arguments, this.validationMessage)
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ class ValidationService implements IValidationService {
return
}
field.getValidations().forEach(validation -> {
List<String> rules = validation.getValidationRule().trim().split(" ")
List<String> rules = validation.getArguments().trim().split(" ")
if (rules.size() >= 1) {
AbstractFieldValidation instance = new AbstractFieldValidation()
if (field instanceof NumberField) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ public class DataValidator implements IDataValidator {
@Override
public void checkDeprecatedAttributes(Data data) {
validateAttribute(data.getView(), "view", data.getId());
validateAttribute(data.getValid() != null && !data.getValid().isEmpty() ? data.getValid() : null, "valid", data.getId());
validateAttribute(data.getFormat(), "format", data.getId());
validateAttribute(data.getValues() != null && !data.getValues().isEmpty() ? data.getValues() : null, "values", data.getId());
}
Expand Down
Loading
Loading