From 634890dce027e107c50913b3c2a0fd65261c6f10 Mon Sep 17 00:00:00 2001 From: Vladyslav_Prykhodko Date: Thu, 6 Aug 2020 14:14:03 +0300 Subject: [PATCH 1/2] Add new method for state controller pushAndOpenState --- .../default-state-controller.component.ts | 5 +++++ .../entity-state-controller.component.ts | 19 ++++++++++++++++++- .../states/state-controller.component.ts | 4 +++- 3 files changed, 26 insertions(+), 2 deletions(-) diff --git a/ui-ngx/src/app/modules/home/pages/dashboard/states/default-state-controller.component.ts b/ui-ngx/src/app/modules/home/pages/dashboard/states/default-state-controller.component.ts index 47282d0171..348f8db3fe 100644 --- a/ui-ngx/src/app/modules/home/pages/dashboard/states/default-state-controller.component.ts +++ b/ui-ngx/src/app/modules/home/pages/dashboard/states/default-state-controller.component.ts @@ -107,6 +107,11 @@ export class DefaultStateControllerComponent extends StateControllerComponent im } } + public pushAndOpenState(states: Array, openRightLayout?: boolean): void { + const state = states[states.length - 1]; + this.openState(state.id, state.params, openRightLayout); + } + public updateState(id: string, params?: StateParams, openRightLayout?: boolean): void { if (!id) { id = this.getStateId(); diff --git a/ui-ngx/src/app/modules/home/pages/dashboard/states/entity-state-controller.component.ts b/ui-ngx/src/app/modules/home/pages/dashboard/states/entity-state-controller.component.ts index ec9cac954c..7a79736d3f 100644 --- a/ui-ngx/src/app/modules/home/pages/dashboard/states/entity-state-controller.component.ts +++ b/ui-ngx/src/app/modules/home/pages/dashboard/states/entity-state-controller.component.ts @@ -17,7 +17,7 @@ import { Component, NgZone, OnDestroy, OnInit } from '@angular/core'; import { StateObject, StateParams } from '@core/api/widget-api.models'; import { ActivatedRoute, Router } from '@angular/router'; -import { Observable, of } from 'rxjs'; +import { forkJoin, Observable, of } from 'rxjs'; import { StateControllerState } from './state-controller.models'; import { StateControllerComponent } from './state-controller.component'; import { StatesControllerService } from '@home/pages/dashboard/states/states-controller.service'; @@ -116,6 +116,23 @@ export class EntityStateControllerComponent extends StateControllerComponent imp } } + public pushAndOpenState(states: Array, openRightLayout?: boolean): void { + if (this.states) { + for (const state of states) { + if (!this.states[state.id]) { + return; + } + } + forkJoin(states.map(state => this.resolveEntity(state.params))).subscribe( + () => { + this.stateObject.push(...states); + this.selectedStateIndex = this.stateObject.length - 1; + this.gotoState(this.stateObject[this.stateObject.length - 1].id, true, openRightLayout); + } + ); + } + } + public updateState(id: string, params?: StateParams, openRightLayout?: boolean): void { if (!id) { id = this.getStateId(); diff --git a/ui-ngx/src/app/modules/home/pages/dashboard/states/state-controller.component.ts b/ui-ngx/src/app/modules/home/pages/dashboard/states/state-controller.component.ts index b0825e8aa9..64b8ff3c47 100644 --- a/ui-ngx/src/app/modules/home/pages/dashboard/states/state-controller.component.ts +++ b/ui-ngx/src/app/modules/home/pages/dashboard/states/state-controller.component.ts @@ -22,7 +22,7 @@ import { NgZone, OnDestroy, OnInit } from '@angular/core'; import { ActivatedRoute, Params, Router } from '@angular/router'; import { StatesControllerService } from '@home/pages/dashboard/states/states-controller.service'; import { EntityId } from '@app/shared/models/id/entity-id'; -import { StateParams } from '@app/core/api/widget-api.models'; +import { StateObject, StateParams } from '@app/core/api/widget-api.models'; export abstract class StateControllerComponent implements IStateControllerComponent, OnInit, OnDestroy { @@ -178,6 +178,8 @@ export abstract class StateControllerComponent implements IStateControllerCompon public abstract openState(id: string, params?: StateParams, openRightLayout?: boolean): void; + public abstract pushAndOpenState(states: Array, openRightLayout?: boolean): void; + public abstract resetState(): void; public abstract updateState(id?: string, params?: StateParams, openRightLayout?: boolean): void; From c0ef747c00658818c8ba32ac3edd23ce8a7bc209 Mon Sep 17 00:00:00 2001 From: vzikratyi Date: Thu, 6 Aug 2020 11:30:34 +0300 Subject: [PATCH 2/2] Made RestApiCallNode extendable (for custom rule-nodes) --- .../java/org/thingsboard/rule/engine/rest/TbHttpClient.java | 4 ++-- .../org/thingsboard/rule/engine/rest/TbRestApiCallNode.java | 2 +- .../rule/engine/rest/TbRestApiCallNodeConfiguration.java | 2 ++ 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/rest/TbHttpClient.java b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/rest/TbHttpClient.java index 57bde77f9c..f25d246a2e 100644 --- a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/rest/TbHttpClient.java +++ b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/rest/TbHttpClient.java @@ -58,7 +58,7 @@ import java.util.concurrent.TimeUnit; @Data @Slf4j -class TbHttpClient { +public class TbHttpClient { private static final String STATUS = "status"; private static final String STATUS_CODE = "statusCode"; @@ -162,7 +162,7 @@ class TbHttpClient { } } - void processMessage(TbContext ctx, TbMsg msg) { + public void processMessage(TbContext ctx, TbMsg msg) { String endpointUrl = TbNodeUtils.processPattern(config.getRestEndpointUrlPattern(), msg.getMetaData()); HttpHeaders headers = prepareHeaders(msg.getMetaData()); HttpMethod method = HttpMethod.valueOf(config.getRequestMethod()); diff --git a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/rest/TbRestApiCallNode.java b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/rest/TbRestApiCallNode.java index 51363866bf..773fe4f9bf 100644 --- a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/rest/TbRestApiCallNode.java +++ b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/rest/TbRestApiCallNode.java @@ -46,7 +46,7 @@ import org.thingsboard.server.common.msg.TbMsg; public class TbRestApiCallNode implements TbNode { private boolean useRedisQueueForMsgPersistence; - private TbHttpClient httpClient; + protected TbHttpClient httpClient; @Override public void init(TbContext ctx, TbNodeConfiguration configuration) throws TbNodeException { diff --git a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/rest/TbRestApiCallNodeConfiguration.java b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/rest/TbRestApiCallNodeConfiguration.java index 3cccb2c2c5..bcc6ad60c8 100644 --- a/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/rest/TbRestApiCallNodeConfiguration.java +++ b/rule-engine/rule-engine-components/src/main/java/org/thingsboard/rule/engine/rest/TbRestApiCallNodeConfiguration.java @@ -15,12 +15,14 @@ */ package org.thingsboard.rule.engine.rest; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import lombok.Data; import org.thingsboard.rule.engine.api.NodeConfiguration; import java.util.Collections; import java.util.Map; +@JsonIgnoreProperties(ignoreUnknown = true) @Data public class TbRestApiCallNodeConfiguration implements NodeConfiguration {