Commit 79814877cd4100fe320f1927f24a072910bc4de4
Committed by
GitHub
Merge pull request #4021 from thingsboard/lwm2m_cert
[3.3] Lwm2m cert
Showing
10 changed files
with
100 additions
and
130 deletions
@@ -148,7 +148,7 @@ public class LwM2MTransportServiceImpl implements LwM2MTransportService { | @@ -148,7 +148,7 @@ public class LwM2MTransportServiceImpl implements LwM2MTransportService { | ||
148 | public void onRegistered(LeshanServer lwServer, Registration registration, Collection<Observation> previousObsersations) { | 148 | public void onRegistered(LeshanServer lwServer, Registration registration, Collection<Observation> previousObsersations) { |
149 | executorRegistered.submit(() -> { | 149 | executorRegistered.submit(() -> { |
150 | try { | 150 | try { |
151 | -// log.warn("[{}] [{{}] Client: create after Registration", registration.getEndpoint(), registration.getId()); | 151 | + log.warn("[{}] [{{}] Client: create after Registration", registration.getEndpoint(), registration.getId()); |
152 | LwM2MClient lwM2MClient = lwM2mInMemorySecurityStore.updateInSessionsLwM2MClient(lwServer, registration); | 152 | LwM2MClient lwM2MClient = lwM2mInMemorySecurityStore.updateInSessionsLwM2MClient(lwServer, registration); |
153 | if (lwM2MClient != null) { | 153 | if (lwM2MClient != null) { |
154 | lwM2MClient.setLwM2MTransportServiceImpl(this); | 154 | lwM2MClient.setLwM2MTransportServiceImpl(this); |
@@ -51,6 +51,7 @@ import { TranslateService } from '@ngx-translate/core'; | @@ -51,6 +51,7 @@ import { TranslateService } from '@ngx-translate/core'; | ||
51 | export class Lwm2mDeviceConfigServerComponent implements ControlValueAccessor { | 51 | export class Lwm2mDeviceConfigServerComponent implements ControlValueAccessor { |
52 | 52 | ||
53 | private requiredValue: boolean; | 53 | private requiredValue: boolean; |
54 | + private disabled = false; | ||
54 | 55 | ||
55 | valuePrev = null; | 56 | valuePrev = null; |
56 | serverFormGroup: FormGroup; | 57 | serverFormGroup: FormGroup; |
@@ -61,10 +62,6 @@ export class Lwm2mDeviceConfigServerComponent implements ControlValueAccessor { | @@ -61,10 +62,6 @@ export class Lwm2mDeviceConfigServerComponent implements ControlValueAccessor { | ||
61 | lenMaxServerPublicKey = LEN_MAX_PUBLIC_KEY_RPK; | 62 | lenMaxServerPublicKey = LEN_MAX_PUBLIC_KEY_RPK; |
62 | currentSecurityMode = null; | 63 | currentSecurityMode = null; |
63 | 64 | ||
64 | - | ||
65 | - @Input() | ||
66 | - disabled: boolean; | ||
67 | - | ||
68 | @Input() | 65 | @Input() |
69 | bootstrapServerIs: boolean; | 66 | bootstrapServerIs: boolean; |
70 | 67 | ||
@@ -142,7 +139,7 @@ export class Lwm2mDeviceConfigServerComponent implements ControlValueAccessor { | @@ -142,7 +139,7 @@ export class Lwm2mDeviceConfigServerComponent implements ControlValueAccessor { | ||
142 | Validators.maxLength(this.lenMaxServerPublicKey)]); | 139 | Validators.maxLength(this.lenMaxServerPublicKey)]); |
143 | } | 140 | } |
144 | 141 | ||
145 | - writeValue(value: any): void { | 142 | + writeValue(value: ServerSecurityConfig): void { |
146 | if (value) { | 143 | if (value) { |
147 | this.updateValueFields(value); | 144 | this.updateValueFields(value); |
148 | } | 145 | } |
@@ -15,7 +15,7 @@ | @@ -15,7 +15,7 @@ | ||
15 | limitations under the License. | 15 | limitations under the License. |
16 | 16 | ||
17 | --> | 17 | --> |
18 | -<section style="padding-bottom: 16px;" mat-dialog-content> | 18 | +<section style="padding-bottom: 16px; margin: 0" mat-dialog-content> |
19 | <mat-tab-group dynamicHeight> | 19 | <mat-tab-group dynamicHeight> |
20 | <mat-tab label="{{ 'device-profile.lwm2m.model-tab' | translate }}"> | 20 | <mat-tab label="{{ 'device-profile.lwm2m.model-tab' | translate }}"> |
21 | <ng-template matTabContent> | 21 | <ng-template matTabContent> |
@@ -21,16 +21,11 @@ import { Store } from '@ngrx/store'; | @@ -21,16 +21,11 @@ import { Store } from '@ngrx/store'; | ||
21 | import { AppState } from '@app/core/core.state'; | 21 | import { AppState } from '@app/core/core.state'; |
22 | import { coerceBooleanProperty } from '@angular/cdk/coercion'; | 22 | import { coerceBooleanProperty } from '@angular/cdk/coercion'; |
23 | import { | 23 | import { |
24 | - ATTR, | 24 | + INSTANCES, RESOURCES, OBSERVE_ATTR_TELEMETRY, OBSERVE, ATTRIBUTE, TELEMETRY, KEY_NAME, |
25 | getDefaultProfileConfig, | 25 | getDefaultProfileConfig, |
26 | - Instance, | ||
27 | - KEY_NAME, | ||
28 | ObjectLwM2M, | 26 | ObjectLwM2M, |
29 | - OBSERVE, | ||
30 | - OBSERVE_ATTR, | ||
31 | ProfileConfigModels, | 27 | ProfileConfigModels, |
32 | - ResourceLwM2M, | ||
33 | - TELEMETRY | 28 | + ModelValue |
34 | } from './profile-config.models'; | 29 | } from './profile-config.models'; |
35 | import { DeviceProfileService } from '@core/http/device-profile.service'; | 30 | import { DeviceProfileService } from '@core/http/device-profile.service'; |
36 | import { deepClone, isDefinedAndNotNull, isUndefined } from '@core/utils'; | 31 | import { deepClone, isDefinedAndNotNull, isUndefined } from '@core/utils'; |
@@ -55,11 +50,6 @@ export class Lwm2mDeviceProfileTransportConfigurationComponent implements Contro | @@ -55,11 +50,6 @@ export class Lwm2mDeviceProfileTransportConfigurationComponent implements Contro | ||
55 | 50 | ||
56 | lwm2mDeviceProfileFormGroup: FormGroup; | 51 | lwm2mDeviceProfileFormGroup: FormGroup; |
57 | lwm2mDeviceConfigFormGroup: FormGroup; | 52 | lwm2mDeviceConfigFormGroup: FormGroup; |
58 | - observeAttr = OBSERVE_ATTR; | ||
59 | - observe = OBSERVE; | ||
60 | - attribute = ATTR; | ||
61 | - telemetry = TELEMETRY; | ||
62 | - keyName = KEY_NAME; | ||
63 | bootstrapServers: string; | 53 | bootstrapServers: string; |
64 | bootstrapServer: string; | 54 | bootstrapServer: string; |
65 | lwm2mServer: string; | 55 | lwm2mServer: string; |
@@ -122,7 +112,7 @@ export class Lwm2mDeviceProfileTransportConfigurationComponent implements Contro | @@ -122,7 +112,7 @@ export class Lwm2mDeviceProfileTransportConfigurationComponent implements Contro | ||
122 | } | 112 | } |
123 | } | 113 | } |
124 | 114 | ||
125 | - writeValue(value: any | null): void { | 115 | + writeValue(value: ProfileConfigModels | null): void { |
126 | this.configurationValue = (Object.keys(value).length === 0) ? getDefaultProfileConfig() : value; | 116 | this.configurationValue = (Object.keys(value).length === 0) ? getDefaultProfileConfig() : value; |
127 | this.lwm2mDeviceConfigFormGroup.patchValue({ | 117 | this.lwm2mDeviceConfigFormGroup.patchValue({ |
128 | configurationJson: this.configurationValue | 118 | configurationJson: this.configurationValue |
@@ -131,7 +121,7 @@ export class Lwm2mDeviceProfileTransportConfigurationComponent implements Contro | @@ -131,7 +121,7 @@ export class Lwm2mDeviceProfileTransportConfigurationComponent implements Contro | ||
131 | } | 121 | } |
132 | 122 | ||
133 | private initWriteValue = (): void => { | 123 | private initWriteValue = (): void => { |
134 | - const modelValue = {objectIds: null, objectsList: []}; | 124 | + const modelValue = {objectIds: null, objectsList: []} as ModelValue; |
135 | modelValue.objectIds = this.getObjectsFromJsonAllConfig(); | 125 | modelValue.objectIds = this.getObjectsFromJsonAllConfig(); |
136 | if (modelValue.objectIds !== null) { | 126 | if (modelValue.objectIds !== null) { |
137 | const sortOrder = { | 127 | const sortOrder = { |
@@ -149,11 +139,10 @@ export class Lwm2mDeviceProfileTransportConfigurationComponent implements Contro | @@ -149,11 +139,10 @@ export class Lwm2mDeviceProfileTransportConfigurationComponent implements Contro | ||
149 | } | 139 | } |
150 | } | 140 | } |
151 | 141 | ||
152 | - private updateWriteValue = (value: any): void => { | ||
153 | - const objectsList = value.objectsList; | 142 | + private updateWriteValue = (value: ModelValue): void => { |
154 | this.lwm2mDeviceProfileFormGroup.patchValue({ | 143 | this.lwm2mDeviceProfileFormGroup.patchValue({ |
155 | objectIds: value, | 144 | objectIds: value, |
156 | - observeAttrTelemetry: this.getObserveAttrTelemetryObjects(objectsList), | 145 | + observeAttrTelemetry: this.getObserveAttrTelemetryObjects(value['objectsList']), |
157 | shortId: this.configurationValue.bootstrap.servers.shortId, | 146 | shortId: this.configurationValue.bootstrap.servers.shortId, |
158 | lifetime: this.configurationValue.bootstrap.servers.lifetime, | 147 | lifetime: this.configurationValue.bootstrap.servers.lifetime, |
159 | defaultMinPeriod: this.configurationValue.bootstrap.servers.defaultMinPeriod, | 148 | defaultMinPeriod: this.configurationValue.bootstrap.servers.defaultMinPeriod, |
@@ -199,22 +188,22 @@ export class Lwm2mDeviceProfileTransportConfigurationComponent implements Contro | @@ -199,22 +188,22 @@ export class Lwm2mDeviceProfileTransportConfigurationComponent implements Contro | ||
199 | 188 | ||
200 | private getObserveAttrTelemetryObjects = (listObject: ObjectLwM2M[]): object => { | 189 | private getObserveAttrTelemetryObjects = (listObject: ObjectLwM2M[]): object => { |
201 | const clientObserveAttrTelemetry = listObject; | 190 | const clientObserveAttrTelemetry = listObject; |
202 | - if (this.configurationValue[this.observeAttr]) { | ||
203 | - const observeArray = this.configurationValue[this.observeAttr][this.observe]; | ||
204 | - const attributeArray = this.configurationValue[this.observeAttr][this.attribute]; | ||
205 | - const telemetryArray = this.configurationValue[this.observeAttr][this.telemetry]; | ||
206 | - const keyNameJson = this.configurationValue[this.observeAttr][this.keyName]; | 191 | + if (this.configurationValue.observeAttr) { |
192 | + const observeArray = this.configurationValue.observeAttr.observe; | ||
193 | + const attributeArray = this.configurationValue.observeAttr.attribute; | ||
194 | + const telemetryArray = this.configurationValue.observeAttr.telemetry; | ||
195 | + const keyNameJson = this.configurationValue.observeAttr.keyName; | ||
207 | if (this.includesNotZeroInstance(attributeArray, telemetryArray)) { | 196 | if (this.includesNotZeroInstance(attributeArray, telemetryArray)) { |
208 | this.addInstances(attributeArray, telemetryArray, clientObserveAttrTelemetry); | 197 | this.addInstances(attributeArray, telemetryArray, clientObserveAttrTelemetry); |
209 | } | 198 | } |
210 | if (isDefinedAndNotNull(observeArray)) { | 199 | if (isDefinedAndNotNull(observeArray)) { |
211 | - this.updateObserveAttrTelemetryObjects(observeArray, clientObserveAttrTelemetry, 'observe'); | 200 | + this.updateObserveAttrTelemetryObjects(observeArray, clientObserveAttrTelemetry, OBSERVE); |
212 | } | 201 | } |
213 | if (isDefinedAndNotNull(attributeArray)) { | 202 | if (isDefinedAndNotNull(attributeArray)) { |
214 | - this.updateObserveAttrTelemetryObjects(attributeArray, clientObserveAttrTelemetry, 'attribute'); | 203 | + this.updateObserveAttrTelemetryObjects(attributeArray, clientObserveAttrTelemetry, ATTRIBUTE); |
215 | } | 204 | } |
216 | if (isDefinedAndNotNull(telemetryArray)) { | 205 | if (isDefinedAndNotNull(telemetryArray)) { |
217 | - this.updateObserveAttrTelemetryObjects(telemetryArray, clientObserveAttrTelemetry, 'telemetry'); | 206 | + this.updateObserveAttrTelemetryObjects(telemetryArray, clientObserveAttrTelemetry, TELEMETRY); |
218 | } | 207 | } |
219 | if (isDefinedAndNotNull(keyNameJson)) { | 208 | if (isDefinedAndNotNull(keyNameJson)) { |
220 | this.updateKeyNameObjects(keyNameJson, clientObserveAttrTelemetry); | 209 | this.updateKeyNameObjects(keyNameJson, clientObserveAttrTelemetry); |
@@ -273,74 +262,51 @@ export class Lwm2mDeviceProfileTransportConfigurationComponent implements Contro | @@ -273,74 +262,51 @@ export class Lwm2mDeviceProfileTransportConfigurationComponent implements Contro | ||
273 | const telemetryArray: Array<string> = []; | 262 | const telemetryArray: Array<string> = []; |
274 | const keyNameNew = {}; | 263 | const keyNameNew = {}; |
275 | const observeJson: ObjectLwM2M[] = JSON.parse(JSON.stringify(val)); | 264 | const observeJson: ObjectLwM2M[] = JSON.parse(JSON.stringify(val)); |
276 | - const paths = new Set<string>(); | ||
277 | - let pathObj; | ||
278 | - let pathInst; | ||
279 | - let pathRes; | ||
280 | observeJson.forEach(obj => { | 265 | observeJson.forEach(obj => { |
281 | - for (const [key, value] of Object.entries(obj)) { | ||
282 | - if (key === 'id') { | ||
283 | - pathObj = value; | ||
284 | - } | ||
285 | - if (key === 'instances') { | ||
286 | - const instancesJson = value as Instance[]; | ||
287 | - if (instancesJson.length > 0) { | ||
288 | - instancesJson.forEach(instance => { | ||
289 | - for (const [instanceKey, instanceValue] of Object.entries(instance)) { | ||
290 | - if (instanceKey === 'id') { | ||
291 | - pathInst = instanceValue; | 266 | + if (obj.hasOwnProperty(INSTANCES) && Array.isArray(obj.instances)) { |
267 | + obj.instances.forEach(instance => { | ||
268 | + if (instance.hasOwnProperty(RESOURCES) && Array.isArray(instance.resources)) { | ||
269 | + instance.resources.forEach(resource => { | ||
270 | + if (resource.attribute || resource.telemetry) { | ||
271 | + let pathRes = `/${obj.id}/${instance.id}/${resource.id}`; | ||
272 | + if (resource.observe) { | ||
273 | + observeArray.push(pathRes); | ||
274 | + } | ||
275 | + if (resource.attribute) { | ||
276 | + attributeArray.push(pathRes); | ||
292 | } | 277 | } |
293 | - if (instanceKey === 'resources') { | ||
294 | - const resourcesJson = instanceValue as ResourceLwM2M[]; | ||
295 | - if (resourcesJson.length > 0) { | ||
296 | - resourcesJson.forEach(res => { | ||
297 | - for (const [resourceKey, value] of Object.entries(res)) { | ||
298 | - if (resourceKey === 'id') { | ||
299 | - pathRes = `/${pathObj}/${pathInst}/${value}`; | ||
300 | - } else if (resourceKey === 'observe' && value) { | ||
301 | - observeArray.push(pathRes); | ||
302 | - } else if (resourceKey === 'attribute' && value) { | ||
303 | - attributeArray.push(pathRes); | ||
304 | - paths.add(pathRes); | ||
305 | - } else if (resourceKey === 'telemetry' && value) { | ||
306 | - telemetryArray.push(pathRes); | ||
307 | - paths.add(pathRes); | ||
308 | - } | ||
309 | - else if (resourceKey === this.keyName && paths.has(pathRes)) { | ||
310 | - console.warn(pathRes, value); | ||
311 | - keyNameNew[pathRes] = value; | ||
312 | - } | ||
313 | - } | ||
314 | - }); | ||
315 | - } | 278 | + if (resource.telemetry) { |
279 | + telemetryArray.push(pathRes); | ||
316 | } | 280 | } |
281 | + keyNameNew[pathRes] = resource.keyName; | ||
317 | } | 282 | } |
318 | - }); | 283 | + }) |
319 | } | 284 | } |
320 | - } | 285 | + }) |
321 | } | 286 | } |
322 | }); | 287 | }); |
323 | - if (isUndefined(this.configurationValue[this.observeAttr])) { | ||
324 | - this.configurationValue[this.observeAttr] = { | ||
325 | - [this.observe]: observeArray, | ||
326 | - [this.attribute]: attributeArray, | ||
327 | - [this.telemetry]: telemetryArray | 288 | + if (isUndefined(this.configurationValue.observeAttr)) { |
289 | + this.configurationValue.observeAttr = { | ||
290 | + observe: observeArray, | ||
291 | + attribute: attributeArray, | ||
292 | + telemetry: telemetryArray, | ||
293 | + keyName: this.sortObjectKeyPathJson(KEY_NAME, keyNameNew) | ||
328 | }; | 294 | }; |
329 | } else { | 295 | } else { |
330 | - this.configurationValue[this.observeAttr][this.observe] = observeArray; | ||
331 | - this.configurationValue[this.observeAttr][this.attribute] = attributeArray; | ||
332 | - this.configurationValue[this.observeAttr][this.telemetry] = telemetryArray; | 296 | + this.configurationValue.observeAttr.observe = observeArray; |
297 | + this.configurationValue.observeAttr.attribute = attributeArray; | ||
298 | + this.configurationValue.observeAttr.telemetry = telemetryArray; | ||
299 | + this.configurationValue.observeAttr.keyName = this.sortObjectKeyPathJson(KEY_NAME, keyNameNew); | ||
333 | } | 300 | } |
334 | - this.configurationValue[this.observeAttr][this.keyName] = this.sortObjectKeyPathJson('keyName', keyNameNew); | ||
335 | } | 301 | } |
336 | 302 | ||
337 | sortObjectKeyPathJson = (key: string, value: object): object => { | 303 | sortObjectKeyPathJson = (key: string, value: object): object => { |
338 | - if (key === 'keyName') { | 304 | + if (key === KEY_NAME) { |
339 | return Object.keys(value).sort(this.sortPath).reduce((obj, keySort) => { | 305 | return Object.keys(value).sort(this.sortPath).reduce((obj, keySort) => { |
340 | obj[keySort] = value[keySort]; | 306 | obj[keySort] = value[keySort]; |
341 | return obj; | 307 | return obj; |
342 | }, {}); | 308 | }, {}); |
343 | - } else if (key === 'observe' || key === 'attribute' || key === 'telemetry') { | 309 | + } else if (key === OBSERVE || key === ATTRIBUTE || key === TELEMETRY) { |
344 | return Object.values(value).sort(this.sortPath).reduce((arr, arrValue) => { | 310 | return Object.values(value).sort(this.sortPath).reduce((arr, arrValue) => { |
345 | arr.push(arrValue); | 311 | arr.push(arrValue); |
346 | return arr; | 312 | return arr; |
@@ -359,19 +325,19 @@ export class Lwm2mDeviceProfileTransportConfigurationComponent implements Contro | @@ -359,19 +325,19 @@ export class Lwm2mDeviceProfileTransportConfigurationComponent implements Contro | ||
359 | 325 | ||
360 | private getObjectsFromJsonAllConfig = (): number[] => { | 326 | private getObjectsFromJsonAllConfig = (): number[] => { |
361 | const objectsIds = new Set<number>(); | 327 | const objectsIds = new Set<number>(); |
362 | - if (this.configurationValue[this.observeAttr]) { | ||
363 | - if (this.configurationValue[this.observeAttr][this.observe]) { | ||
364 | - this.configurationValue[this.observeAttr][this.observe].forEach(obj => { | 328 | + if (this.configurationValue.observeAttr) { |
329 | + if (this.configurationValue.observeAttr.observe) { | ||
330 | + this.configurationValue.observeAttr.observe.forEach(obj => { | ||
365 | objectsIds.add(Array.from(obj.substring(1).split('/'), Number)[0]); | 331 | objectsIds.add(Array.from(obj.substring(1).split('/'), Number)[0]); |
366 | }); | 332 | }); |
367 | } | 333 | } |
368 | - if (this.configurationValue[this.observeAttr][this.attribute]) { | ||
369 | - this.configurationValue[this.observeAttr][this.attribute].forEach(obj => { | 334 | + if (this.configurationValue.observeAttr.attribute) { |
335 | + this.configurationValue.observeAttr.attribute.forEach(obj => { | ||
370 | objectsIds.add(Array.from(obj.substring(1).split('/'), Number)[0]); | 336 | objectsIds.add(Array.from(obj.substring(1).split('/'), Number)[0]); |
371 | }); | 337 | }); |
372 | } | 338 | } |
373 | - if (this.configurationValue[this.observeAttr][this.telemetry]) { | ||
374 | - this.configurationValue[this.observeAttr][this.telemetry].forEach(obj => { | 339 | + if (this.configurationValue.observeAttr.telemetry) { |
340 | + this.configurationValue.observeAttr.telemetry.forEach(obj => { | ||
375 | objectsIds.add(Array.from(obj.substring(1).split('/'), Number)[0]); | 341 | objectsIds.add(Array.from(obj.substring(1).split('/'), Number)[0]); |
376 | }); | 342 | }); |
377 | } | 343 | } |
@@ -390,15 +356,15 @@ export class Lwm2mDeviceProfileTransportConfigurationComponent implements Contro | @@ -390,15 +356,15 @@ export class Lwm2mDeviceProfileTransportConfigurationComponent implements Contro | ||
390 | } | 356 | } |
391 | 357 | ||
392 | removeObjectsList = (value: ObjectLwM2M): void => { | 358 | removeObjectsList = (value: ObjectLwM2M): void => { |
393 | - const objectsOld = this.lwm2mDeviceProfileFormGroup.get('observeAttrTelemetry').value.clientLwM2M; | 359 | + const objectsOld = this.lwm2mDeviceProfileFormGroup.get(OBSERVE_ATTR_TELEMETRY).value.clientLwM2M; |
394 | const isIdIndex = (element) => element.id === value.id; | 360 | const isIdIndex = (element) => element.id === value.id; |
395 | const index = objectsOld.findIndex(isIdIndex); | 361 | const index = objectsOld.findIndex(isIdIndex); |
396 | if (index >= 0) { | 362 | if (index >= 0) { |
397 | objectsOld.splice(index, 1); | 363 | objectsOld.splice(index, 1); |
398 | } | 364 | } |
399 | - this.removeObserveAttrTelemetryFromJson(this.observe, value.id); | ||
400 | - this.removeObserveAttrTelemetryFromJson(this.telemetry, value.id); | ||
401 | - this.removeObserveAttrTelemetryFromJson(this.attribute, value.id); | 365 | + this.removeObserveAttrTelemetryFromJson(OBSERVE, value.id); |
366 | + this.removeObserveAttrTelemetryFromJson(TELEMETRY, value.id); | ||
367 | + this.removeObserveAttrTelemetryFromJson(ATTRIBUTE, value.id); | ||
402 | this.removeKeyNameFromJson(value.id); | 368 | this.removeKeyNameFromJson(value.id); |
403 | this.updateObserveAttrTelemetryObjectFormGroup(objectsOld); | 369 | this.updateObserveAttrTelemetryObjectFormGroup(objectsOld); |
404 | this.upDateJsonAllConfig(); | 370 | this.upDateJsonAllConfig(); |
@@ -406,15 +372,15 @@ export class Lwm2mDeviceProfileTransportConfigurationComponent implements Contro | @@ -406,15 +372,15 @@ export class Lwm2mDeviceProfileTransportConfigurationComponent implements Contro | ||
406 | 372 | ||
407 | private removeObserveAttrTelemetryFromJson = (observeAttrTel: string, id: number): void => { | 373 | private removeObserveAttrTelemetryFromJson = (observeAttrTel: string, id: number): void => { |
408 | const isIdIndex = (element) => element.startsWith(`/${id}`); | 374 | const isIdIndex = (element) => element.startsWith(`/${id}`); |
409 | - let index = this.configurationValue[this.observeAttr][observeAttrTel].findIndex(isIdIndex); | 375 | + let index = this.configurationValue.observeAttr[observeAttrTel].findIndex(isIdIndex); |
410 | while (index >= 0) { | 376 | while (index >= 0) { |
411 | - this.configurationValue[this.observeAttr][observeAttrTel].splice(index, 1); | ||
412 | - index = this.configurationValue[this.observeAttr][observeAttrTel].findIndex(isIdIndex, index); | 377 | + this.configurationValue.observeAttr[observeAttrTel].splice(index, 1); |
378 | + index = this.configurationValue.observeAttr[observeAttrTel].findIndex(isIdIndex, index); | ||
413 | } | 379 | } |
414 | } | 380 | } |
415 | 381 | ||
416 | private removeKeyNameFromJson = (id: number): void => { | 382 | private removeKeyNameFromJson = (id: number): void => { |
417 | - const keyNameJson = this.configurationValue[this.observeAttr][this.keyName]; | 383 | + const keyNameJson = this.configurationValue.observeAttr.keyName; |
418 | Object.keys(keyNameJson).forEach(key => { | 384 | Object.keys(keyNameJson).forEach(key => { |
419 | if (key.startsWith(`/${id}`)) { | 385 | if (key.startsWith(`/${id}`)) { |
420 | delete keyNameJson[key]; | 386 | delete keyNameJson[key]; |
@@ -423,17 +389,17 @@ export class Lwm2mDeviceProfileTransportConfigurationComponent implements Contro | @@ -423,17 +389,17 @@ export class Lwm2mDeviceProfileTransportConfigurationComponent implements Contro | ||
423 | } | 389 | } |
424 | 390 | ||
425 | isPathInJson(path: string): boolean { | 391 | isPathInJson(path: string): boolean { |
426 | - let isPath = this.findPathInJson(path, this.attribute); | 392 | + let isPath = this.findPathInJson(path, ATTRIBUTE); |
427 | if (!isPath) { | 393 | if (!isPath) { |
428 | - isPath = this.findPathInJson(path, this.telemetry); | 394 | + isPath = this.findPathInJson(path, TELEMETRY); |
429 | } | 395 | } |
430 | return !!isPath; | 396 | return !!isPath; |
431 | } | 397 | } |
432 | 398 | ||
433 | private findPathInJson = (path: string, side: string): string => { | 399 | private findPathInJson = (path: string, side: string): string => { |
434 | - if (this.configurationValue[this.observeAttr]) { | ||
435 | - if (this.configurationValue[this.observeAttr][side]) { | ||
436 | - return this.configurationValue[this.observeAttr][side].find( | 400 | + if (this.configurationValue.observeAttr) { |
401 | + if (this.configurationValue.observeAttr[side]) { | ||
402 | + return this.configurationValue.bootstrap[side].find( | ||
437 | pathJs => pathJs === path); | 403 | pathJs => pathJs === path); |
438 | } | 404 | } |
439 | } | 405 | } |
@@ -25,7 +25,6 @@ import { DeviceProfileService } from '@core/http/device-profile.service'; | @@ -25,7 +25,6 @@ import { DeviceProfileService } from '@core/http/device-profile.service'; | ||
25 | @Component({ | 25 | @Component({ |
26 | selector: 'tb-profile-lwm2m-object-add-instances-list', | 26 | selector: 'tb-profile-lwm2m-object-add-instances-list', |
27 | templateUrl: './lwm2m-object-add-instances-list.component.html', | 27 | templateUrl: './lwm2m-object-add-instances-list.component.html', |
28 | - styleUrls: [], | ||
29 | providers: [{ | 28 | providers: [{ |
30 | provide: NG_VALUE_ACCESSOR, | 29 | provide: NG_VALUE_ACCESSOR, |
31 | useExisting: forwardRef(() => Lwm2mObjectAddInstancesListComponent), | 30 | useExisting: forwardRef(() => Lwm2mObjectAddInstancesListComponent), |
@@ -30,8 +30,7 @@ export interface Lwm2mObjectAddInstancesData { | @@ -30,8 +30,7 @@ export interface Lwm2mObjectAddInstancesData { | ||
30 | 30 | ||
31 | @Component({ | 31 | @Component({ |
32 | selector: 'tb-lwm2m-object-add-instances', | 32 | selector: 'tb-lwm2m-object-add-instances', |
33 | - templateUrl: './lwm2m-object-add-instances.component.html', | ||
34 | - styleUrls: [] | 33 | + templateUrl: './lwm2m-object-add-instances.component.html' |
35 | }) | 34 | }) |
36 | export class Lwm2mObjectAddInstancesComponent extends DialogComponent<Lwm2mObjectAddInstancesComponent, object> implements OnInit { | 35 | export class Lwm2mObjectAddInstancesComponent extends DialogComponent<Lwm2mObjectAddInstancesComponent, object> implements OnInit { |
37 | 36 |
@@ -21,7 +21,7 @@ import { Store } from '@ngrx/store'; | @@ -21,7 +21,7 @@ import { Store } from '@ngrx/store'; | ||
21 | import { AppState } from '@core/core.state'; | 21 | import { AppState } from '@core/core.state'; |
22 | import { Observable } from 'rxjs'; | 22 | import { Observable } from 'rxjs'; |
23 | import { filter, map, mergeMap, publishReplay, refCount, tap } from 'rxjs/operators'; | 23 | import { filter, map, mergeMap, publishReplay, refCount, tap } from 'rxjs/operators'; |
24 | -import { ObjectLwM2M } from './profile-config.models'; | 24 | +import { ModelValue, ObjectLwM2M } from './profile-config.models'; |
25 | import { TranslateService } from '@ngx-translate/core'; | 25 | import { TranslateService } from '@ngx-translate/core'; |
26 | import { DeviceProfileService } from '@core/http/device-profile.service'; | 26 | import { DeviceProfileService } from '@core/http/device-profile.service'; |
27 | import { Direction } from '@shared/models/page/sort-order'; | 27 | import { Direction } from '@shared/models/page/sort-order'; |
@@ -120,7 +120,7 @@ export class Lwm2mObjectListComponent implements ControlValueAccessor, OnInit, V | @@ -120,7 +120,7 @@ export class Lwm2mObjectListComponent implements ControlValueAccessor, OnInit, V | ||
120 | } | 120 | } |
121 | } | 121 | } |
122 | 122 | ||
123 | - writeValue(value: any): void { | 123 | + writeValue(value: ModelValue): void { |
124 | this.searchText = ''; | 124 | this.searchText = ''; |
125 | if (isDefinedAndNotNull(value)) { | 125 | if (isDefinedAndNotNull(value)) { |
126 | if (Array.isArray(value.objectIds)) { | 126 | if (Array.isArray(value.objectIds)) { |
@@ -193,7 +193,6 @@ export class Lwm2mObjectListComponent implements ControlValueAccessor, OnInit, V | @@ -193,7 +193,6 @@ export class Lwm2mObjectListComponent implements ControlValueAccessor, OnInit, V | ||
193 | return this.lw2mModels; | 193 | return this.lw2mModels; |
194 | } | 194 | } |
195 | 195 | ||
196 | - | ||
197 | onFocus = (): void => { | 196 | onFocus = (): void => { |
198 | if (!this.dirty) { | 197 | if (!this.dirty) { |
199 | this.lwm2mListFormGroup.get('objectLwm2m').updateValueAndValidity({onlySelf: true, emitEvent: true}); | 198 | this.lwm2mListFormGroup.get('objectLwm2m').updateValueAndValidity({onlySelf: true, emitEvent: true}); |
@@ -25,7 +25,6 @@ import { coerceBooleanProperty } from '@angular/cdk/coercion'; | @@ -25,7 +25,6 @@ import { coerceBooleanProperty } from '@angular/cdk/coercion'; | ||
25 | @Component({ | 25 | @Component({ |
26 | selector: 'tb-profile-lwm2m-observe-attr-telemetry-resource', | 26 | selector: 'tb-profile-lwm2m-observe-attr-telemetry-resource', |
27 | templateUrl: './lwm2m-observe-attr-telemetry-resource.component.html', | 27 | templateUrl: './lwm2m-observe-attr-telemetry-resource.component.html', |
28 | - styleUrls: [], | ||
29 | providers: [ | 28 | providers: [ |
30 | { | 29 | { |
31 | provide: NG_VALUE_ACCESSOR, | 30 | provide: NG_VALUE_ACCESSOR, |
@@ -28,7 +28,7 @@ import { | @@ -28,7 +28,7 @@ import { | ||
28 | import { Store } from '@ngrx/store'; | 28 | import { Store } from '@ngrx/store'; |
29 | import { AppState } from '@core/core.state'; | 29 | import { AppState } from '@core/core.state'; |
30 | import { coerceBooleanProperty } from '@angular/cdk/coercion'; | 30 | import { coerceBooleanProperty } from '@angular/cdk/coercion'; |
31 | -import { Instance, ObjectLwM2M, ResourceLwM2M } from './profile-config.models'; | 31 | +import { CLIENT_LWM2M, Instance, INSTANCES, ObjectLwM2M, ResourceLwM2M, RESOURCES } from './profile-config.models'; |
32 | import { deepClone, isDefinedAndNotNull, isEqual, isUndefined } from '@core/utils'; | 32 | import { deepClone, isDefinedAndNotNull, isEqual, isUndefined } from '@core/utils'; |
33 | import { MatDialog } from '@angular/material/dialog'; | 33 | import { MatDialog } from '@angular/material/dialog'; |
34 | import { TranslateService } from '@ngx-translate/core'; | 34 | import { TranslateService } from '@ngx-translate/core'; |
@@ -78,7 +78,7 @@ export class Lwm2mObserveAttrTelemetryComponent implements ControlValueAccessor | @@ -78,7 +78,7 @@ export class Lwm2mObserveAttrTelemetryComponent implements ControlValueAccessor | ||
78 | private dialog: MatDialog, | 78 | private dialog: MatDialog, |
79 | public translate: TranslateService) { | 79 | public translate: TranslateService) { |
80 | this.observeAttrTelemetryFormGroup = this.fb.group({ | 80 | this.observeAttrTelemetryFormGroup = this.fb.group({ |
81 | - clientLwM2M: this.fb.array([]) | 81 | + [CLIENT_LWM2M]: this.fb.array([]) |
82 | }); | 82 | }); |
83 | this.observeAttrTelemetryFormGroup.valueChanges.subscribe(value => { | 83 | this.observeAttrTelemetryFormGroup.valueChanges.subscribe(value => { |
84 | if (isUndefined(this.disabled) || !this.disabled) { | 84 | if (isUndefined(this.disabled) || !this.disabled) { |
@@ -87,7 +87,8 @@ export class Lwm2mObserveAttrTelemetryComponent implements ControlValueAccessor | @@ -87,7 +87,8 @@ export class Lwm2mObserveAttrTelemetryComponent implements ControlValueAccessor | ||
87 | }); | 87 | }); |
88 | } | 88 | } |
89 | 89 | ||
90 | - private propagateChange = (v: any) => { }; | 90 | + private propagateChange = (v: any) => { |
91 | + }; | ||
91 | 92 | ||
92 | registerOnChange(fn: any): void { | 93 | registerOnChange(fn: any): void { |
93 | this.propagateChange = fn; | 94 | this.propagateChange = fn; |
@@ -123,14 +124,14 @@ export class Lwm2mObserveAttrTelemetryComponent implements ControlValueAccessor | @@ -123,14 +124,14 @@ export class Lwm2mObserveAttrTelemetryComponent implements ControlValueAccessor | ||
123 | } | 124 | } |
124 | } | 125 | } |
125 | 126 | ||
126 | - writeValue(value: any): void { | 127 | + writeValue(value: {}): void { |
127 | if (isDefinedAndNotNull(value)) { | 128 | if (isDefinedAndNotNull(value)) { |
128 | - this.buildClientObjectsLwM2M(value.clientLwM2M); | 129 | + this.buildClientObjectsLwM2M(value[CLIENT_LWM2M]); |
129 | } | 130 | } |
130 | } | 131 | } |
131 | 132 | ||
132 | private buildClientObjectsLwM2M = (objectsLwM2M: ObjectLwM2M []): void => { | 133 | private buildClientObjectsLwM2M = (objectsLwM2M: ObjectLwM2M []): void => { |
133 | - this.observeAttrTelemetryFormGroup.setControl('clientLwM2M', | 134 | + this.observeAttrTelemetryFormGroup.setControl(CLIENT_LWM2M, |
134 | this.createObjectsLwM2M(objectsLwM2M) | 135 | this.createObjectsLwM2M(objectsLwM2M) |
135 | ); | 136 | ); |
136 | } | 137 | } |
@@ -157,23 +158,23 @@ export class Lwm2mObserveAttrTelemetryComponent implements ControlValueAccessor | @@ -157,23 +158,23 @@ export class Lwm2mObserveAttrTelemetryComponent implements ControlValueAccessor | ||
157 | } | 158 | } |
158 | 159 | ||
159 | get clientLwM2MFormArray(): FormArray { | 160 | get clientLwM2MFormArray(): FormArray { |
160 | - return this.observeAttrTelemetryFormGroup.get('clientLwM2M') as FormArray; | 161 | + return this.observeAttrTelemetryFormGroup.get(CLIENT_LWM2M) as FormArray; |
161 | } | 162 | } |
162 | 163 | ||
163 | instancesLwm2mFormArray = (objectLwM2M: AbstractControl): FormArray => { | 164 | instancesLwm2mFormArray = (objectLwM2M: AbstractControl): FormArray => { |
164 | - return objectLwM2M.get('instances') as FormArray; | 165 | + return objectLwM2M.get(INSTANCES) as FormArray; |
165 | } | 166 | } |
166 | 167 | ||
167 | changeInstanceResourcesCheckBox = (value: boolean, instance: AbstractControl, type: string): void => { | 168 | changeInstanceResourcesCheckBox = (value: boolean, instance: AbstractControl, type: string): void => { |
168 | - const resources = deepClone(instance.get('resources').value as ResourceLwM2M[]); | 169 | + const resources = deepClone(instance.get(RESOURCES).value as ResourceLwM2M[]); |
169 | resources.forEach(resource => resource[type] = value); | 170 | resources.forEach(resource => resource[type] = value); |
170 | - instance.get('resources').patchValue(resources); | 171 | + instance.get(RESOURCES).patchValue(resources); |
171 | this.propagateChange(this.observeAttrTelemetryFormGroup.value); | 172 | this.propagateChange(this.observeAttrTelemetryFormGroup.value); |
172 | } | 173 | } |
173 | 174 | ||
174 | private updateValidators = (): void => { | 175 | private updateValidators = (): void => { |
175 | - this.observeAttrTelemetryFormGroup.get('clientLwM2M').setValidators(this.required ? Validators.required : []); | ||
176 | - this.observeAttrTelemetryFormGroup.get('clientLwM2M').updateValueAndValidity(); | 176 | + this.observeAttrTelemetryFormGroup.get(CLIENT_LWM2M).setValidators(this.required ? Validators.required : []); |
177 | + this.observeAttrTelemetryFormGroup.get(CLIENT_LWM2M).updateValueAndValidity(); | ||
177 | } | 178 | } |
178 | 179 | ||
179 | trackByParams = (index: number, element: any): number => { | 180 | trackByParams = (index: number, element: any): number => { |
@@ -181,7 +182,7 @@ export class Lwm2mObserveAttrTelemetryComponent implements ControlValueAccessor | @@ -181,7 +182,7 @@ export class Lwm2mObserveAttrTelemetryComponent implements ControlValueAccessor | ||
181 | } | 182 | } |
182 | 183 | ||
183 | getIndeterminate = (instance: AbstractControl, type: string): boolean => { | 184 | getIndeterminate = (instance: AbstractControl, type: string): boolean => { |
184 | - const resources = instance.get('resources').value as ResourceLwM2M[]; | 185 | + const resources = instance.get(RESOURCES).value as ResourceLwM2M[]; |
185 | if (isDefinedAndNotNull(resources)) { | 186 | if (isDefinedAndNotNull(resources)) { |
186 | const checkedResource = resources.filter(resource => resource[type]); | 187 | const checkedResource = resources.filter(resource => resource[type]); |
187 | return checkedResource.length !== 0 && checkedResource.length !== resources.length; | 188 | return checkedResource.length !== 0 && checkedResource.length !== resources.length; |
@@ -190,7 +191,7 @@ export class Lwm2mObserveAttrTelemetryComponent implements ControlValueAccessor | @@ -190,7 +191,7 @@ export class Lwm2mObserveAttrTelemetryComponent implements ControlValueAccessor | ||
190 | } | 191 | } |
191 | 192 | ||
192 | getChecked = (instance: AbstractControl, type: string): boolean => { | 193 | getChecked = (instance: AbstractControl, type: string): boolean => { |
193 | - const resources = instance.get('resources').value as ResourceLwM2M[]; | 194 | + const resources = instance.get(RESOURCES).value as ResourceLwM2M[]; |
194 | return isDefinedAndNotNull(resources) && resources.every(resource => resource[type]); | 195 | return isDefinedAndNotNull(resources) && resources.every(resource => resource[type]); |
195 | } | 196 | } |
196 | 197 | ||
@@ -239,10 +240,10 @@ export class Lwm2mObserveAttrTelemetryComponent implements ControlValueAccessor | @@ -239,10 +240,10 @@ export class Lwm2mObserveAttrTelemetryComponent implements ControlValueAccessor | ||
239 | } | 240 | } |
240 | 241 | ||
241 | private updateInstancesIds = (data: Lwm2mObjectAddInstancesData): void => { | 242 | private updateInstancesIds = (data: Lwm2mObjectAddInstancesData): void => { |
242 | - const objectLwM2MFormGroup = (this.observeAttrTelemetryFormGroup.get('clientLwM2M') as FormArray).controls | 243 | + const objectLwM2MFormGroup = (this.observeAttrTelemetryFormGroup.get(CLIENT_LWM2M) as FormArray).controls |
243 | .find(e => e.value.id === data.objectId) as FormGroup; | 244 | .find(e => e.value.id === data.objectId) as FormGroup; |
244 | const instancesArray = objectLwM2MFormGroup.value.instances as Instance []; | 245 | const instancesArray = objectLwM2MFormGroup.value.instances as Instance []; |
245 | - const instancesFormArray = objectLwM2MFormGroup.get('instances') as FormArray; | 246 | + const instancesFormArray = objectLwM2MFormGroup.get(INSTANCES) as FormArray; |
246 | const instance0 = deepClone(instancesFormArray.at(0).value as Instance); | 247 | const instance0 = deepClone(instancesFormArray.at(0).value as Instance); |
247 | instance0.resources.forEach(r => { | 248 | instance0.resources.forEach(r => { |
248 | r.attribute = false; | 249 | r.attribute = false; |
@@ -14,11 +14,16 @@ | @@ -14,11 +14,16 @@ | ||
14 | /// limitations under the License. | 14 | /// limitations under the License. |
15 | /// | 15 | /// |
16 | 16 | ||
17 | -export const OBSERVE_ATTR = 'observeAttr'; | 17 | +import { JsonObject } from '@angular/compiler-cli/ngcc/src/packages/entry_point'; |
18 | + | ||
19 | +export const INSTANCES = 'instances'; | ||
20 | +export const RESOURCES = 'resources'; | ||
21 | +export const OBSERVE_ATTR_TELEMETRY = 'observeAttrTelemetry'; | ||
18 | export const OBSERVE = 'observe'; | 22 | export const OBSERVE = 'observe'; |
19 | -export const ATTR = 'attribute'; | 23 | +export const ATTRIBUTE = 'attribute'; |
20 | export const TELEMETRY = 'telemetry'; | 24 | export const TELEMETRY = 'telemetry'; |
21 | export const KEY_NAME = 'keyName'; | 25 | export const KEY_NAME = 'keyName'; |
26 | +export const CLIENT_LWM2M = 'clientLwM2M'; | ||
22 | export const DEFAULT_ID_SERVER = 123; | 27 | export const DEFAULT_ID_SERVER = 123; |
23 | export const DEFAULT_ID_BOOTSTRAP = 111; | 28 | export const DEFAULT_ID_BOOTSTRAP = 111; |
24 | export const DEFAULT_HOST_NAME = 'localhost'; | 29 | export const DEFAULT_HOST_NAME = 'localhost'; |
@@ -53,6 +58,11 @@ export const SECURITY_CONFIG_MODE_NAMES = new Map<SECURITY_CONFIG_MODE, string>( | @@ -53,6 +58,11 @@ export const SECURITY_CONFIG_MODE_NAMES = new Map<SECURITY_CONFIG_MODE, string>( | ||
53 | ] | 58 | ] |
54 | ); | 59 | ); |
55 | 60 | ||
61 | +export interface ModelValue { | ||
62 | + objectIds: number[] | null, | ||
63 | + objectsList: ObjectLwM2M[] | ||
64 | +} | ||
65 | + | ||
56 | export interface BootstrapServersSecurityConfig { | 66 | export interface BootstrapServersSecurityConfig { |
57 | shortId: number; | 67 | shortId: number; |
58 | lifetime: number; | 68 | lifetime: number; |
@@ -89,7 +99,7 @@ export interface ObservableAttributes { | @@ -89,7 +99,7 @@ export interface ObservableAttributes { | ||
89 | observe: string[]; | 99 | observe: string[]; |
90 | attribute: string[]; | 100 | attribute: string[]; |
91 | telemetry: string[]; | 101 | telemetry: string[]; |
92 | - keyName: string[]; | 102 | + keyName: {}; |
93 | } | 103 | } |
94 | 104 | ||
95 | export function getDefaultBootstrapServersSecurityConfig(): BootstrapServersSecurityConfig { | 105 | export function getDefaultBootstrapServersSecurityConfig(): BootstrapServersSecurityConfig { |
@@ -138,7 +148,7 @@ export function getDefaultProfileConfig(hostname?: any): ProfileConfigModels { | @@ -138,7 +148,7 @@ export function getDefaultProfileConfig(hostname?: any): ProfileConfigModels { | ||
138 | observe: [], | 148 | observe: [], |
139 | attribute: [], | 149 | attribute: [], |
140 | telemetry: [], | 150 | telemetry: [], |
141 | - keyName: [] | 151 | + keyName: {} |
142 | } | 152 | } |
143 | }; | 153 | }; |
144 | } | 154 | } |