Browse Source

made executeScrioptAsync method flexible

pull/12092/head
IrynaMatveieva 2 years ago
parent
commit
dfeb0a7dba
  1. 4
      application/src/main/java/org/thingsboard/server/service/cf/ctx/state/CalculatedFieldScriptEngine.java
  2. 11
      application/src/main/java/org/thingsboard/server/service/cf/ctx/state/CalculatedFieldTbelScriptEngine.java
  3. 3
      application/src/main/java/org/thingsboard/server/service/cf/ctx/state/ScriptCalculatedFieldState.java

4
application/src/main/java/org/thingsboard/server/service/cf/ctx/state/CalculatedFieldScriptEngine.java

@ -21,9 +21,9 @@ import java.util.Map;
public interface CalculatedFieldScriptEngine { public interface CalculatedFieldScriptEngine {
ListenableFuture<Object> executeScriptAsync(Map<String, ArgumentEntry> arguments); ListenableFuture<Object> executeScriptAsync(Object[] args);
ListenableFuture<Map<String, Object>> executeToMapAsync(Map<String, ArgumentEntry> arguments); ListenableFuture<Map<String, Object>> executeToMapAsync(Object[] args);
ListenableFuture<Map<String, Object>> executeToMapTransform(Object result); ListenableFuture<Map<String, Object>> executeToMapTransform(Object result);

11
application/src/main/java/org/thingsboard/server/service/cf/ctx/state/CalculatedFieldTbelScriptEngine.java

@ -19,11 +19,9 @@ import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.ListenableFuture;
import com.google.common.util.concurrent.MoreExecutors; import com.google.common.util.concurrent.MoreExecutors;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.thingsboard.common.util.JacksonUtil;
import org.thingsboard.script.api.ScriptType; import org.thingsboard.script.api.ScriptType;
import org.thingsboard.script.api.tbel.TbelInvokeService; import org.thingsboard.script.api.tbel.TbelInvokeService;
import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.data.id.TenantId;
import org.thingsboard.server.common.data.kv.KvEntry;
import javax.script.ScriptException; import javax.script.ScriptException;
import java.util.Map; import java.util.Map;
@ -53,9 +51,8 @@ public class CalculatedFieldTbelScriptEngine implements CalculatedFieldScriptEng
} }
@Override @Override
public ListenableFuture<Object> executeScriptAsync(Map<String, ArgumentEntry> arguments) { public ListenableFuture<Object> executeScriptAsync(Object[] args) {
log.trace("execute script async, arguments {}", arguments); log.trace("Executing script async, args {}", args);
Object[] args = arguments.values().stream().map(ArgumentEntry::getValue).toArray();
return Futures.transformAsync(tbelInvokeService.invokeScript(tenantId, null, this.scriptId, args), return Futures.transformAsync(tbelInvokeService.invokeScript(tenantId, null, this.scriptId, args),
o -> { o -> {
try { try {
@ -73,8 +70,8 @@ public class CalculatedFieldTbelScriptEngine implements CalculatedFieldScriptEng
} }
@Override @Override
public ListenableFuture<Map<String, Object>> executeToMapAsync(Map<String, ArgumentEntry> arguments) { public ListenableFuture<Map<String, Object>> executeToMapAsync(Object[] args) {
return Futures.transformAsync(executeScriptAsync(arguments), this::executeToMapTransform, MoreExecutors.directExecutor()); return Futures.transformAsync(executeScriptAsync(args), this::executeToMapTransform, MoreExecutors.directExecutor());
} }
@Override @Override

3
application/src/main/java/org/thingsboard/server/service/cf/ctx/state/ScriptCalculatedFieldState.java

@ -39,7 +39,8 @@ public class ScriptCalculatedFieldState extends BaseCalculatedFieldState {
public ListenableFuture<CalculatedFieldResult> performCalculation(CalculatedFieldCtx ctx) { public ListenableFuture<CalculatedFieldResult> performCalculation(CalculatedFieldCtx ctx) {
Output output = ctx.getOutput(); Output output = ctx.getOutput();
if (isValid(ctx.getArguments())) { if (isValid(ctx.getArguments())) {
ListenableFuture<Map<String, Object>> resultFuture = ctx.getCalculatedFieldScriptEngine().executeToMapAsync(this.arguments); Object[] args = arguments.values().stream().map(ArgumentEntry::getValue).toArray();
ListenableFuture<Map<String, Object>> resultFuture = ctx.getCalculatedFieldScriptEngine().executeToMapAsync(args);
return Futures.transform(resultFuture, return Futures.transform(resultFuture,
result -> new CalculatedFieldResult(output.getType(), output.getScope(), result), result -> new CalculatedFieldResult(output.getType(), output.getScope(), result),
MoreExecutors.directExecutor() MoreExecutors.directExecutor()

Loading…
Cancel
Save