added validate method to config

This commit is contained in:
IrynaMatveieva 2025-08-26 15:13:17 +03:00
parent 90d34b5bd0
commit 6db073ba53
5 changed files with 11 additions and 15 deletions

View File

@ -213,8 +213,7 @@ public class CalculatedFieldController extends BaseController {
@RequestBody JsonNode inputParams) { @RequestBody JsonNode inputParams) {
String expression = inputParams.get("expression").asText(); String expression = inputParams.get("expression").asText();
Map<String, TbelCfArg> arguments = Objects.requireNonNullElse( Map<String, TbelCfArg> arguments = Objects.requireNonNullElse(
JacksonUtil.convertValue(inputParams.get("arguments"), new TypeReference<>() { JacksonUtil.convertValue(inputParams.get("arguments"), new TypeReference<>() {}),
}),
Collections.emptyMap() Collections.emptyMap()
); );
@ -289,8 +288,7 @@ public class CalculatedFieldController extends BaseController {
return; return;
} }
case CUSTOMER, ASSET, DEVICE -> checkEntityId(referencedEntityId, Operation.READ); case CUSTOMER, ASSET, DEVICE -> checkEntityId(referencedEntityId, Operation.READ);
default -> default -> throw new IllegalArgumentException("Calculated fields do not support '" + entityType + "' for referenced entities.");
throw new IllegalArgumentException("Calculated fields do not support '" + entityType + "' for referenced entities.");
} }
} }
} }

View File

@ -14,8 +14,6 @@ public interface ArgumentsBasedCalculatedFieldConfiguration extends CalculatedFi
Output getOutput(); Output getOutput();
void validate();
@JsonIgnore @JsonIgnore
default boolean isScheduledUpdateEnabled() { default boolean isScheduledUpdateEnabled() {
return false; return false;

View File

@ -60,6 +60,9 @@ public abstract class BaseCalculatedFieldConfiguration implements ArgumentsBased
@Override @Override
public void validate() { public void validate() {
if (arguments.containsKey("ctx")) {
throw new IllegalArgumentException("Argument name 'ctx' is reserved and cannot be used.");
}
if (arguments.values().stream().anyMatch(Argument::hasDynamicSource)) { if (arguments.values().stream().anyMatch(Argument::hasDynamicSource)) {
throw new IllegalArgumentException("Calculated field with type: '" + getType() + "' doesn't support dynamic source configuration!"); throw new IllegalArgumentException("Calculated field with type: '" + getType() + "' doesn't support dynamic source configuration!");
} }

View File

@ -44,6 +44,8 @@ public interface CalculatedFieldConfiguration {
@JsonIgnore @JsonIgnore
CalculatedFieldType getType(); CalculatedFieldType getType();
void validate();
@JsonIgnore @JsonIgnore
default List<EntityId> getReferencedEntities() { default List<EntityId> getReferencedEntities() {
return Collections.emptyList(); return Collections.emptyList();

View File

@ -82,15 +82,10 @@ public class CalculatedFieldDataValidator extends DataValidator<CalculatedField>
} }
private void validateCalculatedFieldConfiguration(CalculatedField calculatedField) { private void validateCalculatedFieldConfiguration(CalculatedField calculatedField) {
if (calculatedField.getConfiguration() instanceof ArgumentsBasedCalculatedFieldConfiguration configuration) { try {
if (configuration.getArguments().containsKey("ctx")) { calculatedField.getConfiguration().validate();
throw new DataValidationException("Argument name 'ctx' is reserved and cannot be used."); } catch (IllegalArgumentException e) {
} throw new DataValidationException(e.getMessage(), e);
try {
configuration.validate();
} catch (IllegalArgumentException e) {
throw new DataValidationException(e.getMessage(), e);
}
} }
} }