From 31b51cfc9f28ea4e8b43b8a53ce9d9e8c8eb3464 Mon Sep 17 00:00:00 2001 From: nickAS21 Date: Wed, 27 Jan 2021 16:04:20 +0200 Subject: [PATCH 1/5] Lwm2m: back: start fix --- .../transport/lwm2m/server/LwM2MTransportServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/LwM2MTransportServiceImpl.java b/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/LwM2MTransportServiceImpl.java index 8a62e5aa2a..e412e113e9 100644 --- a/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/LwM2MTransportServiceImpl.java +++ b/common/transport/lwm2m/src/main/java/org/thingsboard/server/transport/lwm2m/server/LwM2MTransportServiceImpl.java @@ -148,7 +148,7 @@ public class LwM2MTransportServiceImpl implements LwM2MTransportService { public void onRegistered(LeshanServer lwServer, Registration registration, Collection previousObsersations) { executorRegistered.submit(() -> { try { -// log.warn("[{}] [{{}] Client: create after Registration", registration.getEndpoint(), registration.getId()); + log.warn("[{}] [{{}] Client: create after Registration", registration.getEndpoint(), registration.getId()); LwM2MClient lwM2MClient = lwM2mInMemorySecurityStore.updateInSessionsLwM2MClient(lwServer, registration); if (lwM2MClient != null) { lwM2MClient.setLwM2MTransportServiceImpl(this); From ac89b188f2913b9f14dd9beadb45a9e4974e993f Mon Sep 17 00:00:00 2001 From: nickAS21 Date: Thu, 28 Jan 2021 16:53:13 +0200 Subject: [PATCH 2/5] Lwm2m: front: fix any bug --- .../lwm2m-device-config-server.component.ts | 5 +- ...ile-transport-configuration.component.html | 2 +- ...ofile-transport-configuration.component.ts | 122 +++++++++--------- .../device/lwm2m/profile-config.models.ts | 13 +- 4 files changed, 72 insertions(+), 70 deletions(-) diff --git a/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-device-config-server.component.ts b/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-device-config-server.component.ts index 441bc71eeb..b61b35296d 100644 --- a/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-device-config-server.component.ts +++ b/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-device-config-server.component.ts @@ -51,6 +51,7 @@ import { TranslateService } from '@ngx-translate/core'; export class Lwm2mDeviceConfigServerComponent implements ControlValueAccessor { private requiredValue: boolean; + private disabled = false; valuePrev = null; serverFormGroup: FormGroup; @@ -61,10 +62,6 @@ export class Lwm2mDeviceConfigServerComponent implements ControlValueAccessor { lenMaxServerPublicKey = LEN_MAX_PUBLIC_KEY_RPK; currentSecurityMode = null; - - @Input() - disabled: boolean; - @Input() bootstrapServerIs: boolean; diff --git a/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-device-profile-transport-configuration.component.html b/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-device-profile-transport-configuration.component.html index 3b728c8d1f..312f0cf4a3 100644 --- a/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-device-profile-transport-configuration.component.html +++ b/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-device-profile-transport-configuration.component.html @@ -15,7 +15,7 @@ limitations under the License. --> -
+
diff --git a/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-device-profile-transport-configuration.component.ts b/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-device-profile-transport-configuration.component.ts index f63af09457..c77cdbf8c0 100644 --- a/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-device-profile-transport-configuration.component.ts +++ b/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-device-profile-transport-configuration.component.ts @@ -21,16 +21,12 @@ import { Store } from '@ngrx/store'; import { AppState } from '@app/core/core.state'; import { coerceBooleanProperty } from '@angular/cdk/coercion'; import { - ATTR, + ID, INSTANCES, RESOURCES, OBSERVE_ATTR_TELEMETRY, OBSERVE, ATTRIBUTE, TELEMETRY, KEY_NAME, getDefaultProfileConfig, Instance, - KEY_NAME, ObjectLwM2M, - OBSERVE, - OBSERVE_ATTR, ProfileConfigModels, - ResourceLwM2M, - TELEMETRY + ResourceLwM2M } from './profile-config.models'; import { DeviceProfileService } from '@core/http/device-profile.service'; import { deepClone, isDefinedAndNotNull, isUndefined } from '@core/utils'; @@ -55,11 +51,6 @@ export class Lwm2mDeviceProfileTransportConfigurationComponent implements Contro lwm2mDeviceProfileFormGroup: FormGroup; lwm2mDeviceConfigFormGroup: FormGroup; - observeAttr = OBSERVE_ATTR; - observe = OBSERVE; - attribute = ATTR; - telemetry = TELEMETRY; - keyName = KEY_NAME; bootstrapServers: string; bootstrapServer: string; lwm2mServer: string; @@ -199,22 +190,22 @@ export class Lwm2mDeviceProfileTransportConfigurationComponent implements Contro private getObserveAttrTelemetryObjects = (listObject: ObjectLwM2M[]): object => { const clientObserveAttrTelemetry = listObject; - if (this.configurationValue[this.observeAttr]) { - const observeArray = this.configurationValue[this.observeAttr][this.observe]; - const attributeArray = this.configurationValue[this.observeAttr][this.attribute]; - const telemetryArray = this.configurationValue[this.observeAttr][this.telemetry]; - const keyNameJson = this.configurationValue[this.observeAttr][this.keyName]; + if (this.configurationValue.observeAttr) { + const observeArray = this.configurationValue.observeAttr.observe; + const attributeArray = this.configurationValue.observeAttr.attribute; + const telemetryArray = this.configurationValue.observeAttr.telemetry; + const keyNameJson = this.configurationValue.observeAttr.keyName; if (this.includesNotZeroInstance(attributeArray, telemetryArray)) { this.addInstances(attributeArray, telemetryArray, clientObserveAttrTelemetry); } if (isDefinedAndNotNull(observeArray)) { - this.updateObserveAttrTelemetryObjects(observeArray, clientObserveAttrTelemetry, 'observe'); + this.updateObserveAttrTelemetryObjects(observeArray, clientObserveAttrTelemetry, OBSERVE); } if (isDefinedAndNotNull(attributeArray)) { - this.updateObserveAttrTelemetryObjects(attributeArray, clientObserveAttrTelemetry, 'attribute'); + this.updateObserveAttrTelemetryObjects(attributeArray, clientObserveAttrTelemetry, ATTRIBUTE); } if (isDefinedAndNotNull(telemetryArray)) { - this.updateObserveAttrTelemetryObjects(telemetryArray, clientObserveAttrTelemetry, 'telemetry'); + this.updateObserveAttrTelemetryObjects(telemetryArray, clientObserveAttrTelemetry, TELEMETRY); } if (isDefinedAndNotNull(keyNameJson)) { this.updateKeyNameObjects(keyNameJson, clientObserveAttrTelemetry); @@ -279,35 +270,43 @@ export class Lwm2mDeviceProfileTransportConfigurationComponent implements Contro let pathRes; observeJson.forEach(obj => { for (const [key, value] of Object.entries(obj)) { - if (key === 'id') { + if (key === ID) { pathObj = value; } - if (key === 'instances') { + if (key === INSTANCES) { const instancesJson = value as Instance[]; if (instancesJson.length > 0) { instancesJson.forEach(instance => { for (const [instanceKey, instanceValue] of Object.entries(instance)) { - if (instanceKey === 'id') { + if (instanceKey === ID) { pathInst = instanceValue; } - if (instanceKey === 'resources') { + if (instanceKey === RESOURCES) { const resourcesJson = instanceValue as ResourceLwM2M[]; if (resourcesJson.length > 0) { resourcesJson.forEach(res => { for (const [resourceKey, value] of Object.entries(res)) { - if (resourceKey === 'id') { + if (resourceKey === ID) { pathRes = `/${pathObj}/${pathInst}/${value}`; - } else if (resourceKey === 'observe' && value) { - observeArray.push(pathRes); - } else if (resourceKey === 'attribute' && value) { + } else if (resourceKey === ATTRIBUTE && value) { attributeArray.push(pathRes); paths.add(pathRes); - } else if (resourceKey === 'telemetry' && value) { + } else if (resourceKey === TELEMETRY && value) { telemetryArray.push(pathRes); paths.add(pathRes); } - else if (resourceKey === this.keyName && paths.has(pathRes)) { - console.warn(pathRes, value); + } + }); + /** + * only if these paths are marked in ATTRIBUTE or TELEMETRY + */ + resourcesJson.forEach(res => { + for (const [resourceKey, value] of Object.entries(res)) { + if (resourceKey === ID) { + pathRes = `/${pathObj}/${pathInst}/${value}`; + } else if (resourceKey === OBSERVE && paths.has(pathRes) && value) { + observeArray.push(pathRes); + } else if (resourceKey === KEY_NAME && paths.has(pathRes)) { keyNameNew[pathRes] = value; } } @@ -320,27 +319,28 @@ export class Lwm2mDeviceProfileTransportConfigurationComponent implements Contro } } }); - if (isUndefined(this.configurationValue[this.observeAttr])) { - this.configurationValue[this.observeAttr] = { - [this.observe]: observeArray, - [this.attribute]: attributeArray, - [this.telemetry]: telemetryArray + if (isUndefined(this.configurationValue.observeAttr)) { + this.configurationValue.observeAttr = { + observe: observeArray, + attribute: attributeArray, + telemetry: telemetryArray, + keyName: this.sortObjectKeyPathJson(KEY_NAME, keyNameNew) }; } else { - this.configurationValue[this.observeAttr][this.observe] = observeArray; - this.configurationValue[this.observeAttr][this.attribute] = attributeArray; - this.configurationValue[this.observeAttr][this.telemetry] = telemetryArray; + this.configurationValue.observeAttr.observe = observeArray; + this.configurationValue.observeAttr.attribute = attributeArray; + this.configurationValue.observeAttr.telemetry = telemetryArray; + this.configurationValue.observeAttr.keyName = this.sortObjectKeyPathJson(KEY_NAME, keyNameNew); } - this.configurationValue[this.observeAttr][this.keyName] = this.sortObjectKeyPathJson('keyName', keyNameNew); } sortObjectKeyPathJson = (key: string, value: object): object => { - if (key === 'keyName') { + if (key === KEY_NAME) { return Object.keys(value).sort(this.sortPath).reduce((obj, keySort) => { obj[keySort] = value[keySort]; return obj; }, {}); - } else if (key === 'observe' || key === 'attribute' || key === 'telemetry') { + } else if (key === OBSERVE || key === ATTRIBUTE || key === TELEMETRY) { return Object.values(value).sort(this.sortPath).reduce((arr, arrValue) => { arr.push(arrValue); return arr; @@ -359,19 +359,19 @@ export class Lwm2mDeviceProfileTransportConfigurationComponent implements Contro private getObjectsFromJsonAllConfig = (): number[] => { const objectsIds = new Set(); - if (this.configurationValue[this.observeAttr]) { - if (this.configurationValue[this.observeAttr][this.observe]) { - this.configurationValue[this.observeAttr][this.observe].forEach(obj => { + if (this.configurationValue.observeAttr) { + if (this.configurationValue.observeAttr.observe) { + this.configurationValue.observeAttr.observe.forEach(obj => { objectsIds.add(Array.from(obj.substring(1).split('/'), Number)[0]); }); } - if (this.configurationValue[this.observeAttr][this.attribute]) { - this.configurationValue[this.observeAttr][this.attribute].forEach(obj => { + if (this.configurationValue.observeAttr.attribute) { + this.configurationValue.observeAttr.attribute.forEach(obj => { objectsIds.add(Array.from(obj.substring(1).split('/'), Number)[0]); }); } - if (this.configurationValue[this.observeAttr][this.telemetry]) { - this.configurationValue[this.observeAttr][this.telemetry].forEach(obj => { + if (this.configurationValue.observeAttr.telemetry) { + this.configurationValue.observeAttr.telemetry.forEach(obj => { objectsIds.add(Array.from(obj.substring(1).split('/'), Number)[0]); }); } @@ -390,15 +390,15 @@ export class Lwm2mDeviceProfileTransportConfigurationComponent implements Contro } removeObjectsList = (value: ObjectLwM2M): void => { - const objectsOld = this.lwm2mDeviceProfileFormGroup.get('observeAttrTelemetry').value.clientLwM2M; + const objectsOld = this.lwm2mDeviceProfileFormGroup.get(OBSERVE_ATTR_TELEMETRY).value.clientLwM2M; const isIdIndex = (element) => element.id === value.id; const index = objectsOld.findIndex(isIdIndex); if (index >= 0) { objectsOld.splice(index, 1); } - this.removeObserveAttrTelemetryFromJson(this.observe, value.id); - this.removeObserveAttrTelemetryFromJson(this.telemetry, value.id); - this.removeObserveAttrTelemetryFromJson(this.attribute, value.id); + this.removeObserveAttrTelemetryFromJson(OBSERVE, value.id); + this.removeObserveAttrTelemetryFromJson(TELEMETRY, value.id); + this.removeObserveAttrTelemetryFromJson(ATTRIBUTE, value.id); this.removeKeyNameFromJson(value.id); this.updateObserveAttrTelemetryObjectFormGroup(objectsOld); this.upDateJsonAllConfig(); @@ -406,15 +406,15 @@ export class Lwm2mDeviceProfileTransportConfigurationComponent implements Contro private removeObserveAttrTelemetryFromJson = (observeAttrTel: string, id: number): void => { const isIdIndex = (element) => element.startsWith(`/${id}`); - let index = this.configurationValue[this.observeAttr][observeAttrTel].findIndex(isIdIndex); + let index = this.configurationValue.observeAttr[observeAttrTel].findIndex(isIdIndex); while (index >= 0) { - this.configurationValue[this.observeAttr][observeAttrTel].splice(index, 1); - index = this.configurationValue[this.observeAttr][observeAttrTel].findIndex(isIdIndex, index); + this.configurationValue.observeAttr[observeAttrTel].splice(index, 1); + index = this.configurationValue.observeAttr[observeAttrTel].findIndex(isIdIndex, index); } } private removeKeyNameFromJson = (id: number): void => { - const keyNameJson = this.configurationValue[this.observeAttr][this.keyName]; + const keyNameJson = this.configurationValue.observeAttr.keyName; Object.keys(keyNameJson).forEach(key => { if (key.startsWith(`/${id}`)) { delete keyNameJson[key]; @@ -423,17 +423,17 @@ export class Lwm2mDeviceProfileTransportConfigurationComponent implements Contro } isPathInJson(path: string): boolean { - let isPath = this.findPathInJson(path, this.attribute); + let isPath = this.findPathInJson(path, ATTRIBUTE); if (!isPath) { - isPath = this.findPathInJson(path, this.telemetry); + isPath = this.findPathInJson(path, TELEMETRY); } return !!isPath; } private findPathInJson = (path: string, side: string): string => { - if (this.configurationValue[this.observeAttr]) { - if (this.configurationValue[this.observeAttr][side]) { - return this.configurationValue[this.observeAttr][side].find( + if (this.configurationValue.observeAttr) { + if (this.configurationValue.observeAttr[side]) { + return this.configurationValue.bootstrap[side].find( pathJs => pathJs === path); } } diff --git a/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/profile-config.models.ts b/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/profile-config.models.ts index 49ed272821..583cc72a44 100644 --- a/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/profile-config.models.ts +++ b/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/profile-config.models.ts @@ -14,9 +14,14 @@ /// limitations under the License. /// -export const OBSERVE_ATTR = 'observeAttr'; +import { JsonObject } from '@angular/compiler-cli/ngcc/src/packages/entry_point'; + +export const ID = 'id'; +export const INSTANCES = 'instances'; +export const RESOURCES = 'resources'; +export const OBSERVE_ATTR_TELEMETRY = 'observeAttrTelemetry'; export const OBSERVE = 'observe'; -export const ATTR = 'attribute'; +export const ATTRIBUTE = 'attribute'; export const TELEMETRY = 'telemetry'; export const KEY_NAME = 'keyName'; export const DEFAULT_ID_SERVER = 123; @@ -89,7 +94,7 @@ export interface ObservableAttributes { observe: string[]; attribute: string[]; telemetry: string[]; - keyName: string[]; + keyName: {}; } export function getDefaultBootstrapServersSecurityConfig(): BootstrapServersSecurityConfig { @@ -138,7 +143,7 @@ export function getDefaultProfileConfig(hostname?: any): ProfileConfigModels { observe: [], attribute: [], telemetry: [], - keyName: [] + keyName: {} } }; } From e32e90932bc9d87051124c802f5ac703d3c39692 Mon Sep 17 00:00:00 2001 From: nickAS21 Date: Thu, 28 Jan 2021 19:27:24 +0200 Subject: [PATCH 3/5] Lwm2m: front: fix bug updateObserve...ToJson --- ...ofile-transport-configuration.component.ts | 66 +++++-------------- 1 file changed, 17 insertions(+), 49 deletions(-) diff --git a/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-device-profile-transport-configuration.component.ts b/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-device-profile-transport-configuration.component.ts index c77cdbf8c0..5277c791cc 100644 --- a/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-device-profile-transport-configuration.component.ts +++ b/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-device-profile-transport-configuration.component.ts @@ -264,59 +264,27 @@ export class Lwm2mDeviceProfileTransportConfigurationComponent implements Contro const telemetryArray: Array = []; const keyNameNew = {}; const observeJson: ObjectLwM2M[] = JSON.parse(JSON.stringify(val)); - const paths = new Set(); - let pathObj; - let pathInst; - let pathRes; observeJson.forEach(obj => { - for (const [key, value] of Object.entries(obj)) { - if (key === ID) { - pathObj = value; - } - if (key === INSTANCES) { - const instancesJson = value as Instance[]; - if (instancesJson.length > 0) { - instancesJson.forEach(instance => { - for (const [instanceKey, instanceValue] of Object.entries(instance)) { - if (instanceKey === ID) { - pathInst = instanceValue; - } - if (instanceKey === RESOURCES) { - const resourcesJson = instanceValue as ResourceLwM2M[]; - if (resourcesJson.length > 0) { - resourcesJson.forEach(res => { - for (const [resourceKey, value] of Object.entries(res)) { - if (resourceKey === ID) { - pathRes = `/${pathObj}/${pathInst}/${value}`; - } else if (resourceKey === ATTRIBUTE && value) { - attributeArray.push(pathRes); - paths.add(pathRes); - } else if (resourceKey === TELEMETRY && value) { - telemetryArray.push(pathRes); - paths.add(pathRes); - } - } - }); - /** - * only if these paths are marked in ATTRIBUTE or TELEMETRY - */ - resourcesJson.forEach(res => { - for (const [resourceKey, value] of Object.entries(res)) { - if (resourceKey === ID) { - pathRes = `/${pathObj}/${pathInst}/${value}`; - } else if (resourceKey === OBSERVE && paths.has(pathRes) && value) { - observeArray.push(pathRes); - } else if (resourceKey === KEY_NAME && paths.has(pathRes)) { - keyNameNew[pathRes] = value; - } - } - }); - } + if (obj.hasOwnProperty(INSTANCES) && Array.isArray(obj.instances)) { + obj.instances.forEach(instance => { + if (instance.hasOwnProperty(RESOURCES) && Array.isArray(instance.resources)) { + instance.resources.forEach(resource => { + let pathRes = `/${obj.id}/${instance.id}/${resource.id}`; + if (resource.attribute) { + attributeArray.push(pathRes); + } + if (resource.telemetry) { + telemetryArray.push(pathRes); + } + if (resource.attribute || resource.telemetry) { + keyNameNew[pathRes] = resource.keyName; + if (resource.observe) { + observeArray.push(pathRes); } } - }); + }) } - } + }) } }); if (isUndefined(this.configurationValue.observeAttr)) { From 4382c0c4b872986e830257b33cf9040f2fca63b9 Mon Sep 17 00:00:00 2001 From: nickAS21 Date: Fri, 29 Jan 2021 09:05:53 +0200 Subject: [PATCH 4/5] Lwm2m: front: fix bug2 updateObserve...ToJson --- ...-profile-transport-configuration.component.ts | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-device-profile-transport-configuration.component.ts b/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-device-profile-transport-configuration.component.ts index 5277c791cc..2aa835d6d7 100644 --- a/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-device-profile-transport-configuration.component.ts +++ b/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-device-profile-transport-configuration.component.ts @@ -269,18 +269,18 @@ export class Lwm2mDeviceProfileTransportConfigurationComponent implements Contro obj.instances.forEach(instance => { if (instance.hasOwnProperty(RESOURCES) && Array.isArray(instance.resources)) { instance.resources.forEach(resource => { - let pathRes = `/${obj.id}/${instance.id}/${resource.id}`; - if (resource.attribute) { - attributeArray.push(pathRes); - } - if (resource.telemetry) { - telemetryArray.push(pathRes); - } if (resource.attribute || resource.telemetry) { - keyNameNew[pathRes] = resource.keyName; + let pathRes = `/${obj.id}/${instance.id}/${resource.id}`; if (resource.observe) { observeArray.push(pathRes); } + if (resource.attribute) { + attributeArray.push(pathRes); + } + if (resource.telemetry) { + telemetryArray.push(pathRes); + } + keyNameNew[pathRes] = resource.keyName; } }) } From d56c33ddb120d180f8ebb5bbfeafa4540c9af81e Mon Sep 17 00:00:00 2001 From: nickAS21 Date: Fri, 29 Jan 2021 12:44:31 +0200 Subject: [PATCH 5/5] Lwm2m: front: refactoring --- .../lwm2m-device-config-server.component.ts | 2 +- ...ofile-transport-configuration.component.ts | 14 ++++---- ...m2m-object-add-instances-list.component.ts | 1 - .../lwm2m-object-add-instances.component.ts | 3 +- .../lwm2m/lwm2m-object-list.component.ts | 5 ++- ...serve-attr-telemetry-resource.component.ts | 1 - .../lwm2m-observe-attr-telemetry.component.ts | 33 ++++++++++--------- .../device/lwm2m/profile-config.models.ts | 7 +++- 8 files changed, 33 insertions(+), 33 deletions(-) diff --git a/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-device-config-server.component.ts b/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-device-config-server.component.ts index b61b35296d..adc7fcaa65 100644 --- a/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-device-config-server.component.ts +++ b/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-device-config-server.component.ts @@ -139,7 +139,7 @@ export class Lwm2mDeviceConfigServerComponent implements ControlValueAccessor { Validators.maxLength(this.lenMaxServerPublicKey)]); } - writeValue(value: any): void { + writeValue(value: ServerSecurityConfig): void { if (value) { this.updateValueFields(value); } diff --git a/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-device-profile-transport-configuration.component.ts b/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-device-profile-transport-configuration.component.ts index 2aa835d6d7..ab3fa4f7b4 100644 --- a/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-device-profile-transport-configuration.component.ts +++ b/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-device-profile-transport-configuration.component.ts @@ -21,12 +21,11 @@ import { Store } from '@ngrx/store'; import { AppState } from '@app/core/core.state'; import { coerceBooleanProperty } from '@angular/cdk/coercion'; import { - ID, INSTANCES, RESOURCES, OBSERVE_ATTR_TELEMETRY, OBSERVE, ATTRIBUTE, TELEMETRY, KEY_NAME, + INSTANCES, RESOURCES, OBSERVE_ATTR_TELEMETRY, OBSERVE, ATTRIBUTE, TELEMETRY, KEY_NAME, getDefaultProfileConfig, - Instance, ObjectLwM2M, ProfileConfigModels, - ResourceLwM2M + ModelValue } from './profile-config.models'; import { DeviceProfileService } from '@core/http/device-profile.service'; import { deepClone, isDefinedAndNotNull, isUndefined } from '@core/utils'; @@ -113,7 +112,7 @@ export class Lwm2mDeviceProfileTransportConfigurationComponent implements Contro } } - writeValue(value: any | null): void { + writeValue(value: ProfileConfigModels | null): void { this.configurationValue = (Object.keys(value).length === 0) ? getDefaultProfileConfig() : value; this.lwm2mDeviceConfigFormGroup.patchValue({ configurationJson: this.configurationValue @@ -122,7 +121,7 @@ export class Lwm2mDeviceProfileTransportConfigurationComponent implements Contro } private initWriteValue = (): void => { - const modelValue = {objectIds: null, objectsList: []}; + const modelValue = {objectIds: null, objectsList: []} as ModelValue; modelValue.objectIds = this.getObjectsFromJsonAllConfig(); if (modelValue.objectIds !== null) { const sortOrder = { @@ -140,11 +139,10 @@ export class Lwm2mDeviceProfileTransportConfigurationComponent implements Contro } } - private updateWriteValue = (value: any): void => { - const objectsList = value.objectsList; + private updateWriteValue = (value: ModelValue): void => { this.lwm2mDeviceProfileFormGroup.patchValue({ objectIds: value, - observeAttrTelemetry: this.getObserveAttrTelemetryObjects(objectsList), + observeAttrTelemetry: this.getObserveAttrTelemetryObjects(value['objectsList']), shortId: this.configurationValue.bootstrap.servers.shortId, lifetime: this.configurationValue.bootstrap.servers.lifetime, defaultMinPeriod: this.configurationValue.bootstrap.servers.defaultMinPeriod, diff --git a/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-object-add-instances-list.component.ts b/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-object-add-instances-list.component.ts index c556cef7c8..d1f47d4d03 100644 --- a/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-object-add-instances-list.component.ts +++ b/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-object-add-instances-list.component.ts @@ -25,7 +25,6 @@ import { DeviceProfileService } from '@core/http/device-profile.service'; @Component({ selector: 'tb-profile-lwm2m-object-add-instances-list', templateUrl: './lwm2m-object-add-instances-list.component.html', - styleUrls: [], providers: [{ provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => Lwm2mObjectAddInstancesListComponent), diff --git a/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-object-add-instances.component.ts b/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-object-add-instances.component.ts index 91dbc824fc..3e482120d9 100644 --- a/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-object-add-instances.component.ts +++ b/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-object-add-instances.component.ts @@ -30,8 +30,7 @@ export interface Lwm2mObjectAddInstancesData { @Component({ selector: 'tb-lwm2m-object-add-instances', - templateUrl: './lwm2m-object-add-instances.component.html', - styleUrls: [] + templateUrl: './lwm2m-object-add-instances.component.html' }) export class Lwm2mObjectAddInstancesComponent extends DialogComponent implements OnInit { diff --git a/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-object-list.component.ts b/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-object-list.component.ts index 718c9281d7..300f95f83f 100644 --- a/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-object-list.component.ts +++ b/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-object-list.component.ts @@ -21,7 +21,7 @@ import { Store } from '@ngrx/store'; import { AppState } from '@core/core.state'; import { Observable } from 'rxjs'; import { filter, map, mergeMap, publishReplay, refCount, tap } from 'rxjs/operators'; -import { ObjectLwM2M } from './profile-config.models'; +import { ModelValue, ObjectLwM2M } from './profile-config.models'; import { TranslateService } from '@ngx-translate/core'; import { DeviceProfileService } from '@core/http/device-profile.service'; import { Direction } from '@shared/models/page/sort-order'; @@ -120,7 +120,7 @@ export class Lwm2mObjectListComponent implements ControlValueAccessor, OnInit, V } } - writeValue(value: any): void { + writeValue(value: ModelValue): void { this.searchText = ''; if (isDefinedAndNotNull(value)) { if (Array.isArray(value.objectIds)) { @@ -193,7 +193,6 @@ export class Lwm2mObjectListComponent implements ControlValueAccessor, OnInit, V return this.lw2mModels; } - onFocus = (): void => { if (!this.dirty) { this.lwm2mListFormGroup.get('objectLwm2m').updateValueAndValidity({onlySelf: true, emitEvent: true}); diff --git a/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-observe-attr-telemetry-resource.component.ts b/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-observe-attr-telemetry-resource.component.ts index 4441a285b2..678137140d 100644 --- a/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-observe-attr-telemetry-resource.component.ts +++ b/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-observe-attr-telemetry-resource.component.ts @@ -25,7 +25,6 @@ import { coerceBooleanProperty } from '@angular/cdk/coercion'; @Component({ selector: 'tb-profile-lwm2m-observe-attr-telemetry-resource', templateUrl: './lwm2m-observe-attr-telemetry-resource.component.html', - styleUrls: [], providers: [ { provide: NG_VALUE_ACCESSOR, diff --git a/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-observe-attr-telemetry.component.ts b/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-observe-attr-telemetry.component.ts index 2419e007c2..d53e8f241b 100644 --- a/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-observe-attr-telemetry.component.ts +++ b/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/lwm2m-observe-attr-telemetry.component.ts @@ -28,7 +28,7 @@ import { import { Store } from '@ngrx/store'; import { AppState } from '@core/core.state'; import { coerceBooleanProperty } from '@angular/cdk/coercion'; -import { Instance, ObjectLwM2M, ResourceLwM2M } from './profile-config.models'; +import { CLIENT_LWM2M, Instance, INSTANCES, ObjectLwM2M, ResourceLwM2M, RESOURCES } from './profile-config.models'; import { deepClone, isDefinedAndNotNull, isEqual, isUndefined } from '@core/utils'; import { MatDialog } from '@angular/material/dialog'; import { TranslateService } from '@ngx-translate/core'; @@ -78,7 +78,7 @@ export class Lwm2mObserveAttrTelemetryComponent implements ControlValueAccessor private dialog: MatDialog, public translate: TranslateService) { this.observeAttrTelemetryFormGroup = this.fb.group({ - clientLwM2M: this.fb.array([]) + [CLIENT_LWM2M]: this.fb.array([]) }); this.observeAttrTelemetryFormGroup.valueChanges.subscribe(value => { if (isUndefined(this.disabled) || !this.disabled) { @@ -87,7 +87,8 @@ export class Lwm2mObserveAttrTelemetryComponent implements ControlValueAccessor }); } - private propagateChange = (v: any) => { }; + private propagateChange = (v: any) => { + }; registerOnChange(fn: any): void { this.propagateChange = fn; @@ -123,14 +124,14 @@ export class Lwm2mObserveAttrTelemetryComponent implements ControlValueAccessor } } - writeValue(value: any): void { + writeValue(value: {}): void { if (isDefinedAndNotNull(value)) { - this.buildClientObjectsLwM2M(value.clientLwM2M); + this.buildClientObjectsLwM2M(value[CLIENT_LWM2M]); } } private buildClientObjectsLwM2M = (objectsLwM2M: ObjectLwM2M []): void => { - this.observeAttrTelemetryFormGroup.setControl('clientLwM2M', + this.observeAttrTelemetryFormGroup.setControl(CLIENT_LWM2M, this.createObjectsLwM2M(objectsLwM2M) ); } @@ -157,23 +158,23 @@ export class Lwm2mObserveAttrTelemetryComponent implements ControlValueAccessor } get clientLwM2MFormArray(): FormArray { - return this.observeAttrTelemetryFormGroup.get('clientLwM2M') as FormArray; + return this.observeAttrTelemetryFormGroup.get(CLIENT_LWM2M) as FormArray; } instancesLwm2mFormArray = (objectLwM2M: AbstractControl): FormArray => { - return objectLwM2M.get('instances') as FormArray; + return objectLwM2M.get(INSTANCES) as FormArray; } changeInstanceResourcesCheckBox = (value: boolean, instance: AbstractControl, type: string): void => { - const resources = deepClone(instance.get('resources').value as ResourceLwM2M[]); + const resources = deepClone(instance.get(RESOURCES).value as ResourceLwM2M[]); resources.forEach(resource => resource[type] = value); - instance.get('resources').patchValue(resources); + instance.get(RESOURCES).patchValue(resources); this.propagateChange(this.observeAttrTelemetryFormGroup.value); } private updateValidators = (): void => { - this.observeAttrTelemetryFormGroup.get('clientLwM2M').setValidators(this.required ? Validators.required : []); - this.observeAttrTelemetryFormGroup.get('clientLwM2M').updateValueAndValidity(); + this.observeAttrTelemetryFormGroup.get(CLIENT_LWM2M).setValidators(this.required ? Validators.required : []); + this.observeAttrTelemetryFormGroup.get(CLIENT_LWM2M).updateValueAndValidity(); } trackByParams = (index: number, element: any): number => { @@ -181,7 +182,7 @@ export class Lwm2mObserveAttrTelemetryComponent implements ControlValueAccessor } getIndeterminate = (instance: AbstractControl, type: string): boolean => { - const resources = instance.get('resources').value as ResourceLwM2M[]; + const resources = instance.get(RESOURCES).value as ResourceLwM2M[]; if (isDefinedAndNotNull(resources)) { const checkedResource = resources.filter(resource => resource[type]); return checkedResource.length !== 0 && checkedResource.length !== resources.length; @@ -190,7 +191,7 @@ export class Lwm2mObserveAttrTelemetryComponent implements ControlValueAccessor } getChecked = (instance: AbstractControl, type: string): boolean => { - const resources = instance.get('resources').value as ResourceLwM2M[]; + const resources = instance.get(RESOURCES).value as ResourceLwM2M[]; return isDefinedAndNotNull(resources) && resources.every(resource => resource[type]); } @@ -239,10 +240,10 @@ export class Lwm2mObserveAttrTelemetryComponent implements ControlValueAccessor } private updateInstancesIds = (data: Lwm2mObjectAddInstancesData): void => { - const objectLwM2MFormGroup = (this.observeAttrTelemetryFormGroup.get('clientLwM2M') as FormArray).controls + const objectLwM2MFormGroup = (this.observeAttrTelemetryFormGroup.get(CLIENT_LWM2M) as FormArray).controls .find(e => e.value.id === data.objectId) as FormGroup; const instancesArray = objectLwM2MFormGroup.value.instances as Instance []; - const instancesFormArray = objectLwM2MFormGroup.get('instances') as FormArray; + const instancesFormArray = objectLwM2MFormGroup.get(INSTANCES) as FormArray; const instance0 = deepClone(instancesFormArray.at(0).value as Instance); instance0.resources.forEach(r => { r.attribute = false; diff --git a/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/profile-config.models.ts b/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/profile-config.models.ts index 583cc72a44..05a4e42d2f 100644 --- a/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/profile-config.models.ts +++ b/ui-ngx/src/app/modules/home/components/profile/device/lwm2m/profile-config.models.ts @@ -16,7 +16,6 @@ import { JsonObject } from '@angular/compiler-cli/ngcc/src/packages/entry_point'; -export const ID = 'id'; export const INSTANCES = 'instances'; export const RESOURCES = 'resources'; export const OBSERVE_ATTR_TELEMETRY = 'observeAttrTelemetry'; @@ -24,6 +23,7 @@ export const OBSERVE = 'observe'; export const ATTRIBUTE = 'attribute'; export const TELEMETRY = 'telemetry'; export const KEY_NAME = 'keyName'; +export const CLIENT_LWM2M = 'clientLwM2M'; export const DEFAULT_ID_SERVER = 123; export const DEFAULT_ID_BOOTSTRAP = 111; export const DEFAULT_HOST_NAME = 'localhost'; @@ -58,6 +58,11 @@ export const SECURITY_CONFIG_MODE_NAMES = new Map( ] ); +export interface ModelValue { + objectIds: number[] | null, + objectsList: ObjectLwM2M[] +} + export interface BootstrapServersSecurityConfig { shortId: number; lifetime: number;