separated expression from output
This commit is contained in:
parent
c75603f57c
commit
6ed4abb903
@ -253,9 +253,9 @@ public class DefaultCalculatedFieldExecutionService extends AbstractPartitionBas
|
||||
CalculatedFieldConfiguration newConfig = newCalculatedField.getConfiguration();
|
||||
boolean argumentsChanged = !oldConfig.getArguments().equals(newConfig.getArguments());
|
||||
boolean outputTypeChanged = !oldConfig.getOutput().getType().equals(newConfig.getOutput().getType());
|
||||
boolean outputExpressionChanged = !oldConfig.getOutput().getExpression().equals(newConfig.getOutput().getExpression());
|
||||
boolean expressionChanged = !oldConfig.getExpression().equals(newConfig.getExpression());
|
||||
|
||||
return entityIdChanged || typeChanged || argumentsChanged || outputTypeChanged || outputExpressionChanged;
|
||||
return entityIdChanged || typeChanged || argumentsChanged || outputTypeChanged || expressionChanged;
|
||||
}
|
||||
|
||||
private void fetchCalculatedFields() {
|
||||
|
||||
@ -96,7 +96,7 @@ public class ScriptCalculatedFieldState implements CalculatedFieldState {
|
||||
calculatedFieldScriptEngine = new CalculatedFieldTbelScriptEngine(
|
||||
tenantId,
|
||||
tbelInvokeService,
|
||||
calculatedFieldConfiguration.getOutput().getExpression(),
|
||||
calculatedFieldConfiguration.getExpression(),
|
||||
arguments.keySet().toArray(new String[0])
|
||||
);
|
||||
}
|
||||
|
||||
@ -57,7 +57,7 @@ public class SimpleCalculatedFieldState implements CalculatedFieldState {
|
||||
|
||||
if (isValid(this.arguments, arguments)) {
|
||||
CalculatedFieldResult result = new CalculatedFieldResult();
|
||||
String expression = output.getExpression();
|
||||
String expression = calculatedFieldConfiguration.getExpression();
|
||||
ThreadLocal<Expression> customExpression = new ThreadLocal<>();
|
||||
var expr = customExpression.get();
|
||||
if (expr == null) {
|
||||
|
||||
@ -21,10 +21,10 @@ import org.junit.Test;
|
||||
import org.thingsboard.server.common.data.Device;
|
||||
import org.thingsboard.server.common.data.Tenant;
|
||||
import org.thingsboard.server.common.data.User;
|
||||
import org.thingsboard.server.common.data.cf.configuration.Argument;
|
||||
import org.thingsboard.server.common.data.cf.CalculatedField;
|
||||
import org.thingsboard.server.common.data.cf.configuration.CalculatedFieldConfiguration;
|
||||
import org.thingsboard.server.common.data.cf.CalculatedFieldType;
|
||||
import org.thingsboard.server.common.data.cf.configuration.Argument;
|
||||
import org.thingsboard.server.common.data.cf.configuration.CalculatedFieldConfiguration;
|
||||
import org.thingsboard.server.common.data.cf.configuration.Output;
|
||||
import org.thingsboard.server.common.data.cf.configuration.SimpleCalculatedFieldConfiguration;
|
||||
import org.thingsboard.server.common.data.id.DeviceId;
|
||||
@ -145,9 +145,11 @@ public class CalculatedFieldControllerTest extends AbstractControllerTest {
|
||||
|
||||
config.setArguments(Map.of("T", argument));
|
||||
|
||||
config.setExpression("T - (100 - H) / 5");
|
||||
|
||||
Output output = new Output();
|
||||
output.setName("output");
|
||||
output.setType("TIME_SERIES");
|
||||
output.setExpression("T - (100 - H) / 5");
|
||||
|
||||
config.setOutput(output);
|
||||
|
||||
|
||||
@ -40,6 +40,7 @@ public abstract class BaseCalculatedFieldConfiguration implements CalculatedFiel
|
||||
private final ObjectMapper mapper = new ObjectMapper();
|
||||
|
||||
protected Map<String, Argument> arguments;
|
||||
protected String expression;
|
||||
protected Output output;
|
||||
|
||||
public BaseCalculatedFieldConfiguration() {
|
||||
@ -48,6 +49,7 @@ public abstract class BaseCalculatedFieldConfiguration implements CalculatedFiel
|
||||
public BaseCalculatedFieldConfiguration(JsonNode config, EntityType entityType, UUID entityId) {
|
||||
BaseCalculatedFieldConfiguration calculatedFieldConfig = toCalculatedFieldConfig(config, entityType, entityId);
|
||||
this.arguments = calculatedFieldConfig.getArguments();
|
||||
this.expression = calculatedFieldConfig.getExpression();
|
||||
this.output = calculatedFieldConfig.getOutput();
|
||||
}
|
||||
|
||||
@ -101,12 +103,17 @@ public abstract class BaseCalculatedFieldConfiguration implements CalculatedFiel
|
||||
argumentNode.put("defaultValue", argument.getDefaultValue());
|
||||
});
|
||||
|
||||
if (expression != null) {
|
||||
configNode.put("expression", expression);
|
||||
}
|
||||
|
||||
if (output != null) {
|
||||
ObjectNode outputNode = configNode.putObject("output");
|
||||
outputNode.put("name", output.getName());
|
||||
outputNode.put("type", output.getType());
|
||||
if (output.getScope() != null) {
|
||||
outputNode.put("scope", String.valueOf(output.getScope()));
|
||||
outputNode.put("expression", output.getExpression());
|
||||
}
|
||||
}
|
||||
|
||||
return configNode;
|
||||
@ -133,20 +140,30 @@ public abstract class BaseCalculatedFieldConfiguration implements CalculatedFiel
|
||||
}
|
||||
argument.setKey(argumentNode.get("key").asText());
|
||||
argument.setType(argumentNode.get("type").asText());
|
||||
argument.setScope(AttributeScope.valueOf(argumentNode.get("scope").asText()));
|
||||
JsonNode scope = argumentNode.get("scope");
|
||||
if (scope != null && !scope.isNull() && !scope.asText().equals("null")) {
|
||||
argument.setScope(AttributeScope.valueOf(scope.asText()));
|
||||
}
|
||||
argument.setDefaultValue(argumentNode.get("defaultValue").asText());
|
||||
arguments.put(key, argument);
|
||||
});
|
||||
}
|
||||
this.setArguments(arguments);
|
||||
|
||||
JsonNode expressionNode = config.get("expression");
|
||||
if (expressionNode != null && expressionNode.isTextual()) {
|
||||
this.setExpression(expressionNode.asText());
|
||||
}
|
||||
|
||||
JsonNode outputNode = config.get("output");
|
||||
if (outputNode != null) {
|
||||
Output output = new Output();
|
||||
output.setName(outputNode.get("name").asText());
|
||||
output.setType(outputNode.get("type").asText());
|
||||
output.setScope(AttributeScope.valueOf(outputNode.get("scope").asText()));
|
||||
output.setExpression(outputNode.get("expression").asText());
|
||||
JsonNode scope = outputNode.get("scope");
|
||||
if (scope != null && !scope.isNull() && !scope.asText().equals("null")) {
|
||||
output.setScope(AttributeScope.valueOf(scope.asText()));
|
||||
}
|
||||
this.setOutput(output);
|
||||
}
|
||||
|
||||
|
||||
@ -44,6 +44,8 @@ public interface CalculatedFieldConfiguration {
|
||||
|
||||
Map<String, Argument> getArguments();
|
||||
|
||||
String getExpression();
|
||||
|
||||
Output getOutput();
|
||||
|
||||
@JsonIgnore
|
||||
|
||||
@ -24,6 +24,5 @@ public class Output {
|
||||
private String name;
|
||||
private String type;
|
||||
private AttributeScope scope;
|
||||
private String expression;
|
||||
|
||||
}
|
||||
|
||||
@ -25,10 +25,11 @@ import org.springframework.transaction.support.TransactionTemplate;
|
||||
import org.thingsboard.common.util.JacksonUtil;
|
||||
import org.thingsboard.server.common.data.EntityType;
|
||||
import org.thingsboard.server.common.data.cf.CalculatedField;
|
||||
import org.thingsboard.server.common.data.cf.configuration.CalculatedFieldConfiguration;
|
||||
import org.thingsboard.server.common.data.cf.CalculatedFieldLink;
|
||||
import org.thingsboard.server.common.data.cf.CalculatedFieldLinkConfiguration;
|
||||
import org.thingsboard.server.common.data.cf.CalculatedFieldType;
|
||||
import org.thingsboard.server.common.data.cf.configuration.CalculatedFieldConfiguration;
|
||||
import org.thingsboard.server.common.data.cf.configuration.ScriptCalculatedFieldConfiguration;
|
||||
import org.thingsboard.server.common.data.cf.configuration.SimpleCalculatedFieldConfiguration;
|
||||
import org.thingsboard.server.common.data.id.CalculatedFieldId;
|
||||
import org.thingsboard.server.common.data.id.CalculatedFieldLinkId;
|
||||
@ -138,6 +139,8 @@ public class DefaultNativeCalculatedFieldRepository implements NativeCalculatedF
|
||||
switch (type) {
|
||||
case SIMPLE:
|
||||
return new SimpleCalculatedFieldConfiguration(config, entityType, entityId);
|
||||
case SCRIPT:
|
||||
return new ScriptCalculatedFieldConfiguration(config, entityType, entityId);
|
||||
default:
|
||||
throw new IllegalArgumentException("Unsupported calculated field type: " + type + "!");
|
||||
}
|
||||
|
||||
@ -30,9 +30,9 @@ import org.thingsboard.server.common.data.Tenant;
|
||||
import org.thingsboard.server.common.data.asset.Asset;
|
||||
import org.thingsboard.server.common.data.asset.AssetInfo;
|
||||
import org.thingsboard.server.common.data.asset.AssetProfile;
|
||||
import org.thingsboard.server.common.data.cf.configuration.Argument;
|
||||
import org.thingsboard.server.common.data.cf.CalculatedField;
|
||||
import org.thingsboard.server.common.data.cf.CalculatedFieldType;
|
||||
import org.thingsboard.server.common.data.cf.configuration.Argument;
|
||||
import org.thingsboard.server.common.data.cf.configuration.Output;
|
||||
import org.thingsboard.server.common.data.cf.configuration.SimpleCalculatedFieldConfiguration;
|
||||
import org.thingsboard.server.common.data.id.CustomerId;
|
||||
@ -889,9 +889,11 @@ public class AssetServiceTest extends AbstractServiceTest {
|
||||
|
||||
config.setArguments(Map.of("T", argument));
|
||||
|
||||
config.setExpression("T - (100 - H) / 5");
|
||||
|
||||
Output output = new Output();
|
||||
output.setName("output");
|
||||
output.setType("TIME_SERIES");
|
||||
output.setExpression("T - (100 - H) / 5");
|
||||
|
||||
config.setOutput(output);
|
||||
|
||||
|
||||
@ -23,10 +23,10 @@ import org.junit.Test;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.thingsboard.common.util.ThingsBoardExecutors;
|
||||
import org.thingsboard.server.common.data.Device;
|
||||
import org.thingsboard.server.common.data.cf.configuration.Argument;
|
||||
import org.thingsboard.server.common.data.cf.CalculatedField;
|
||||
import org.thingsboard.server.common.data.cf.configuration.CalculatedFieldConfiguration;
|
||||
import org.thingsboard.server.common.data.cf.CalculatedFieldType;
|
||||
import org.thingsboard.server.common.data.cf.configuration.Argument;
|
||||
import org.thingsboard.server.common.data.cf.configuration.CalculatedFieldConfiguration;
|
||||
import org.thingsboard.server.common.data.cf.configuration.Output;
|
||||
import org.thingsboard.server.common.data.cf.configuration.SimpleCalculatedFieldConfiguration;
|
||||
import org.thingsboard.server.common.data.id.CalculatedFieldId;
|
||||
@ -158,9 +158,11 @@ public class CalculatedFieldServiceTest extends AbstractServiceTest {
|
||||
|
||||
config.setArguments(Map.of("T", argument));
|
||||
|
||||
config.setExpression("T - (100 - H) / 5");
|
||||
|
||||
Output output = new Output();
|
||||
output.setName("output");
|
||||
output.setType("TIME_SERIES");
|
||||
output.setExpression("T - (100 - H) / 5");
|
||||
|
||||
config.setOutput(output);
|
||||
|
||||
|
||||
@ -31,9 +31,9 @@ import org.thingsboard.common.util.ThingsBoardExecutors;
|
||||
import org.thingsboard.server.common.data.Customer;
|
||||
import org.thingsboard.server.common.data.StringUtils;
|
||||
import org.thingsboard.server.common.data.asset.Asset;
|
||||
import org.thingsboard.server.common.data.cf.configuration.Argument;
|
||||
import org.thingsboard.server.common.data.cf.CalculatedField;
|
||||
import org.thingsboard.server.common.data.cf.CalculatedFieldType;
|
||||
import org.thingsboard.server.common.data.cf.configuration.Argument;
|
||||
import org.thingsboard.server.common.data.cf.configuration.Output;
|
||||
import org.thingsboard.server.common.data.cf.configuration.SimpleCalculatedFieldConfiguration;
|
||||
import org.thingsboard.server.common.data.id.TenantId;
|
||||
@ -384,9 +384,11 @@ public class CustomerServiceTest extends AbstractServiceTest {
|
||||
|
||||
config.setArguments(Map.of("T", argument));
|
||||
|
||||
config.setExpression("T - (100 - H) / 5");
|
||||
|
||||
Output output = new Output();
|
||||
output.setName("output");
|
||||
output.setType("TIME_SERIES");
|
||||
output.setExpression("T - (100 - H) / 5");
|
||||
|
||||
config.setOutput(output);
|
||||
|
||||
|
||||
@ -39,9 +39,9 @@ import org.thingsboard.server.common.data.OtaPackageInfo;
|
||||
import org.thingsboard.server.common.data.StringUtils;
|
||||
import org.thingsboard.server.common.data.Tenant;
|
||||
import org.thingsboard.server.common.data.TenantProfile;
|
||||
import org.thingsboard.server.common.data.cf.configuration.Argument;
|
||||
import org.thingsboard.server.common.data.cf.CalculatedField;
|
||||
import org.thingsboard.server.common.data.cf.CalculatedFieldType;
|
||||
import org.thingsboard.server.common.data.cf.configuration.Argument;
|
||||
import org.thingsboard.server.common.data.cf.configuration.Output;
|
||||
import org.thingsboard.server.common.data.cf.configuration.SimpleCalculatedFieldConfiguration;
|
||||
import org.thingsboard.server.common.data.id.CustomerId;
|
||||
@ -1227,9 +1227,11 @@ public class DeviceServiceTest extends AbstractServiceTest {
|
||||
|
||||
config.setArguments(Map.of("T", argument));
|
||||
|
||||
config.setExpression("T - (100 - H) / 5");
|
||||
|
||||
Output output = new Output();
|
||||
output.setName("output");
|
||||
output.setType("TIME_SERIES");
|
||||
output.setExpression("T - (100 - H) / 5");
|
||||
|
||||
config.setOutput(output);
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user