Commit b978f0f7abe01dbb7fa79e301cab735029242f07
Committed by
GitHub
Merge pull request #4672 from thingsboard/merge-issue-fix
Merge issue fix
Showing
79 changed files
with
1044 additions
and
935 deletions
Too many changes to show.
To preserve performance only 79 of 130 files are displayed.
1 | 1 | { |
2 | 2 | "title": "Firmware", |
3 | + "image": null, | |
3 | 4 | "configuration": { |
4 | 5 | "description": "", |
5 | 6 | "widgets": { |
... | ... | @@ -247,7 +248,7 @@ |
247 | 248 | "name": "Edit firmware", |
248 | 249 | "icon": "edit", |
249 | 250 | "type": "customPretty", |
250 | - "customHtml": "<form #editEntityForm=\"ngForm\" [formGroup]=\"editEntityFormGroup\"\n (ngSubmit)=\"save()\" class=\"edit-entity-form\">\n <mat-toolbar fxLayout=\"row\" color=\"primary\">\n <h2>Edit firmware {{entityName}}</h2>\n <span fxFlex></span>\n <button mat-icon-button (click)=\"cancel()\" type=\"button\">\n <mat-icon class=\"material-icons\">close</mat-icon>\n </button>\n </mat-toolbar>\n <mat-progress-bar color=\"warn\" mode=\"indeterminate\" *ngIf=\"isLoading$ | async\">\n </mat-progress-bar>\n <div style=\"height: 4px;\" *ngIf=\"!(isLoading$ | async)\"></div>\n <div *ngIf=\"entity.deviceProfileId\" mat-dialog-content fxLayout=\"column\">\n <tb-firmware-autocomplete\n [useFullEntityId]=\"true\"\n [deviceProfileId]=\"entity.deviceProfileId.id\"\n formControlName=\"firmwareId\">\n </tb-firmware-autocomplete>\n </div>\n <div mat-dialog-actions fxLayout=\"row\" fxLayoutAlign=\"end center\">\n <button mat-button color=\"primary\"\n type=\"button\"\n [disabled]=\"(isLoading$ | async)\"\n (click)=\"cancel()\" cdkFocusInitial>\n Cancel\n </button>\n <button mat-button mat-raised-button color=\"primary\"\n type=\"submit\"\n [disabled]=\"(isLoading$ | async) || editEntityForm.invalid || !editEntityForm.dirty\">\n Save\n </button>\n </div>\n</form>", | |
251 | + "customHtml": "<form #editEntityForm=\"ngForm\" [formGroup]=\"editEntityFormGroup\"\n (ngSubmit)=\"save()\" class=\"edit-entity-form\">\n <mat-toolbar fxLayout=\"row\" color=\"primary\">\n <h2>Edit firmware {{entityName}}</h2>\n <span fxFlex></span>\n <button mat-icon-button (click)=\"cancel()\" type=\"button\">\n <mat-icon class=\"material-icons\">close</mat-icon>\n </button>\n </mat-toolbar>\n <mat-progress-bar color=\"warn\" mode=\"indeterminate\" *ngIf=\"isLoading$ | async\">\n </mat-progress-bar>\n <div style=\"height: 4px;\" *ngIf=\"!(isLoading$ | async)\"></div>\n <div *ngIf=\"entity.deviceProfileId\" mat-dialog-content fxLayout=\"column\">\n <tb-ota-package-autocomplete\n [useFullEntityId]=\"true\"\n [deviceProfileId]=\"entity.deviceProfileId.id\"\n formControlName=\"firmwareId\">\n </tb-ota-package-autocomplete>\n </div>\n <div mat-dialog-actions fxLayout=\"row\" fxLayoutAlign=\"end center\">\n <button mat-button color=\"primary\"\n type=\"button\"\n [disabled]=\"(isLoading$ | async)\"\n (click)=\"cancel()\" cdkFocusInitial>\n Cancel\n </button>\n <button mat-button mat-raised-button color=\"primary\"\n type=\"submit\"\n [disabled]=\"(isLoading$ | async) || editEntityForm.invalid || !editEntityForm.dirty\">\n Save\n </button>\n </div>\n</form>", | |
251 | 252 | "customCss": "", |
252 | 253 | "customFunction": "let $injector = widgetContext.$scope.$injector;\nlet customDialog = $injector.get(widgetContext.servicesMap.get('customDialog'));\nlet entityService = $injector.get(widgetContext.servicesMap.get('entityService'));\nlet deviceService = $injector.get(widgetContext.servicesMap.get('deviceService'));\n\nopenEditEntityDialog();\n\nfunction openEditEntityDialog() {\n customDialog.customDialog(htmlTemplate, EditEntityDialogController).subscribe();\n}\n\nfunction EditEntityDialogController(instance) {\n let vm = instance;\n\n vm.entityName = entityName;\n vm.entity = {};\n\n vm.editEntityFormGroup = vm.fb.group({\n firmwareId: [null]\n });\n\n getEntityInfo();\n\n vm.cancel = function() {\n vm.dialogRef.close(null);\n };\n\n vm.save = function() {\n vm.editEntityFormGroup.markAsPristine();\n saveEntity().subscribe(\n function () {\n // widgetContext.updateAliases();\n vm.dialogRef.close(null);\n }\n );\n };\n\n\n function getEntityInfo() {\n entityService.getEntity(entityId.entityType, entityId.id).subscribe(\n function (data) {\n vm.entity = data;\n vm.editEntityFormGroup.patchValue({\n firmwareId: vm.entity.firmwareId\n }, {emitEvent: false});\n }\n );\n }\n\n function saveEntity() {\n const formValues = vm.editEntityFormGroup.value;\n vm.entity.firmwareId = formValues.firmwareId;\n return deviceService.saveDevice(vm.entity);\n }\n}", |
253 | 254 | "customResources": [], |
... | ... | @@ -257,7 +258,7 @@ |
257 | 258 | "name": "Download firware", |
258 | 259 | "icon": "file_download", |
259 | 260 | "type": "custom", |
260 | - "customFunction": "let $injector = widgetContext.$scope.$injector;\nlet entityService = $injector.get(widgetContext.servicesMap.get('entityService'));\nlet firmwareService = $injector.get(widgetContext.servicesMap.get('firmwareService'));\nlet deviceProfileService = $injector.get(widgetContext.servicesMap.get('deviceProfileService'));\n\ngetDeviceFirmware();\n\nfunction getDeviceFirmware() {\n entityService.getEntity(entityId.entityType, entityId.id).subscribe(\n function (data) {\n if (data.firmwareId !== null) {\n firmwareService.downloadFirmware(data.firmwareId.id).subscribe(); \n } else {\n deviceProfileService.getDeviceProfile(data.deviceProfileId.id).subscribe(\n function (deviceProfile) {\n if (deviceProfile.firmwareId !== null) {\n firmwareService.downloadFirmware(deviceProfile.firmwareId.id).subscribe();\n } else {\n widgetContext.showToast('warn', 'Device ' + entityName +' has not firmware set.', 2000, 'top');\n\n }\n });\n }\n }\n );\n}", | |
261 | + "customFunction": "let $injector = widgetContext.$scope.$injector;\nlet entityService = $injector.get(widgetContext.servicesMap.get('entityService'));\nlet otaPackageService = $injector.get(widgetContext.servicesMap.get('otaPackageService'));\nlet deviceProfileService = $injector.get(widgetContext.servicesMap.get('deviceProfileService'));\n\ngetDeviceFirmware();\n\nfunction getDeviceFirmware() {\n entityService.getEntity(entityId.entityType, entityId.id).subscribe(\n function (data) {\n if (data.firmwareId !== null) {\n otaPackageService.downloadOtaPackage(data.firmwareId.id).subscribe(); \n } else {\n deviceProfileService.getDeviceProfile(data.deviceProfileId.id).subscribe(\n function (deviceProfile) {\n if (deviceProfile.firmwareId !== null) {\n otaPackageService.downloadOtaPackage(deviceProfile.firmwareId.id).subscribe();\n } else {\n widgetContext.showToast('warn', 'Device ' + entityName +' has not firmware set.', 2000, 'top');\n\n }\n });\n }\n }\n );\n}", | |
261 | 262 | "id": "12533058-42f6-e75f-620c-219c48d01ec0" |
262 | 263 | }, |
263 | 264 | { |
... | ... | @@ -1021,7 +1022,7 @@ |
1021 | 1022 | "name": "Edit firmware", |
1022 | 1023 | "icon": "edit", |
1023 | 1024 | "type": "customPretty", |
1024 | - "customHtml": "<form #editEntityForm=\"ngForm\" [formGroup]=\"editEntityFormGroup\"\n (ngSubmit)=\"save()\" class=\"edit-entity-form\">\n <mat-toolbar fxLayout=\"row\" color=\"primary\">\n <h2>Edit firmware {{entityName}}</h2>\n <span fxFlex></span>\n <button mat-icon-button (click)=\"cancel()\" type=\"button\">\n <mat-icon class=\"material-icons\">close</mat-icon>\n </button>\n </mat-toolbar>\n <mat-progress-bar color=\"warn\" mode=\"indeterminate\" *ngIf=\"isLoading$ | async\">\n </mat-progress-bar>\n <div style=\"height: 4px;\" *ngIf=\"!(isLoading$ | async)\"></div>\n <div mat-dialog-content fxLayout=\"column\">\n <tb-firmware-autocomplete\n [useFullEntityId]=\"true\"\n formControlName=\"firmwareId\">\n </tb-firmware-autocomplete>\n </div>\n <div mat-dialog-actions fxLayout=\"row\" fxLayoutAlign=\"end center\">\n <button mat-button color=\"primary\"\n type=\"button\"\n [disabled]=\"(isLoading$ | async)\"\n (click)=\"cancel()\" cdkFocusInitial>\n Cancel\n </button>\n <button mat-button mat-raised-button color=\"primary\"\n type=\"submit\"\n [disabled]=\"(isLoading$ | async) || editEntityForm.invalid || !editEntityForm.dirty\">\n Save\n </button>\n </div>\n</form>", | |
1025 | + "customHtml": "<form #editEntityForm=\"ngForm\" [formGroup]=\"editEntityFormGroup\"\n (ngSubmit)=\"save()\" class=\"edit-entity-form\">\n <mat-toolbar fxLayout=\"row\" color=\"primary\">\n <h2>Edit firmware {{entityName}}</h2>\n <span fxFlex></span>\n <button mat-icon-button (click)=\"cancel()\" type=\"button\">\n <mat-icon class=\"material-icons\">close</mat-icon>\n </button>\n </mat-toolbar>\n <mat-progress-bar color=\"warn\" mode=\"indeterminate\" *ngIf=\"isLoading$ | async\">\n </mat-progress-bar>\n <div style=\"height: 4px;\" *ngIf=\"!(isLoading$ | async)\"></div>\n <div *ngIf=\"entity.deviceProfileId\" mat-dialog-content fxLayout=\"column\">\n <tb-ota-package-autocomplete\n [useFullEntityId]=\"true\"\n [deviceProfileId]=\"entity.deviceProfileId.id\"\n formControlName=\"firmwareId\">\n </tb-ota-package-autocomplete>\n </div>\n <div mat-dialog-actions fxLayout=\"row\" fxLayoutAlign=\"end center\">\n <button mat-button color=\"primary\"\n type=\"button\"\n [disabled]=\"(isLoading$ | async)\"\n (click)=\"cancel()\" cdkFocusInitial>\n Cancel\n </button>\n <button mat-button mat-raised-button color=\"primary\"\n type=\"submit\"\n [disabled]=\"(isLoading$ | async) || editEntityForm.invalid || !editEntityForm.dirty\">\n Save\n </button>\n </div>\n</form>", | |
1025 | 1026 | "customCss": "", |
1026 | 1027 | "customFunction": "let $injector = widgetContext.$scope.$injector;\nlet customDialog = $injector.get(widgetContext.servicesMap.get('customDialog'));\nlet entityService = $injector.get(widgetContext.servicesMap.get('entityService'));\nlet deviceService = $injector.get(widgetContext.servicesMap.get('deviceService'));\n\nopenEditEntityDialog();\n\nfunction openEditEntityDialog() {\n customDialog.customDialog(htmlTemplate, EditEntityDialogController).subscribe();\n}\n\nfunction EditEntityDialogController(instance) {\n let vm = instance;\n\n vm.entityName = entityName;\n vm.entity = {};\n\n vm.editEntityFormGroup = vm.fb.group({\n firmwareId: [null]\n });\n\n getEntityInfo();\n\n vm.cancel = function() {\n vm.dialogRef.close(null);\n };\n\n vm.save = function() {\n vm.editEntityFormGroup.markAsPristine();\n saveEntity().subscribe(\n function () {\n // widgetContext.updateAliases();\n vm.dialogRef.close(null);\n }\n );\n };\n\n\n function getEntityInfo() {\n entityService.getEntity(entityId.entityType, entityId.id).subscribe(\n function (data) {\n vm.entity = data;\n vm.editEntityFormGroup.patchValue({\n firmwareId: vm.entity.firmwareId\n }, {emitEvent: false});\n }\n );\n }\n\n function saveEntity() {\n const formValues = vm.editEntityFormGroup.value;\n vm.entity.firmwareId = formValues.firmwareId;\n return deviceService.saveDevice(vm.entity);\n }\n}", |
1027 | 1028 | "customResources": [], |
... | ... | @@ -1031,7 +1032,7 @@ |
1031 | 1032 | "name": "Download firware", |
1032 | 1033 | "icon": "file_download", |
1033 | 1034 | "type": "custom", |
1034 | - "customFunction": "let $injector = widgetContext.$scope.$injector;\nlet entityService = $injector.get(widgetContext.servicesMap.get('entityService'));\nlet firmwareService = $injector.get(widgetContext.servicesMap.get('firmwareService'));\nlet deviceProfileService = $injector.get(widgetContext.servicesMap.get('deviceProfileService'));\n\ngetDeviceFirmware();\n\nfunction getDeviceFirmware() {\n entityService.getEntity(entityId.entityType, entityId.id).subscribe(\n function (data) {\n if (data.firmwareId !== null) {\n firmwareService.downloadFirmware(data.firmwareId.id).subscribe(); \n } else {\n deviceProfileService.getDeviceProfile(data.deviceProfileId.id).subscribe(\n function (deviceProfile) {\n if (deviceProfile.firmwareId !== null) {\n firmwareService.downloadFirmware(deviceProfile.firmwareId.id).subscribe();\n } else {\n widgetContext.showToast('warn', 'Device ' + entityName +' has not firmware set.', 2000, 'top');\n\n }\n });\n }\n }\n );\n}", | |
1035 | + "customFunction": "let $injector = widgetContext.$scope.$injector;\nlet entityService = $injector.get(widgetContext.servicesMap.get('entityService'));\nlet otaPackageService = $injector.get(widgetContext.servicesMap.get('otaPackageService'));\nlet deviceProfileService = $injector.get(widgetContext.servicesMap.get('deviceProfileService'));\n\ngetDeviceFirmware();\n\nfunction getDeviceFirmware() {\n entityService.getEntity(entityId.entityType, entityId.id).subscribe(\n function (data) {\n if (data.firmwareId !== null) {\n otaPackageService.downloadOtaPackage(data.firmwareId.id).subscribe(); \n } else {\n deviceProfileService.getDeviceProfile(data.deviceProfileId.id).subscribe(\n function (deviceProfile) {\n if (deviceProfile.firmwareId !== null) {\n otaPackageService.downloadOtaPackage(deviceProfile.firmwareId.id).subscribe();\n } else {\n widgetContext.showToast('warn', 'Device ' + entityName +' has not firmware set.', 2000, 'top');\n\n }\n });\n }\n }\n );\n}", | |
1035 | 1036 | "id": "12533058-42f6-e75f-620c-219c48d01ec0" |
1036 | 1037 | }, |
1037 | 1038 | { |
... | ... | @@ -1297,7 +1298,7 @@ |
1297 | 1298 | "name": "Edit firmware", |
1298 | 1299 | "icon": "edit", |
1299 | 1300 | "type": "customPretty", |
1300 | - "customHtml": "<form #editEntityForm=\"ngForm\" [formGroup]=\"editEntityFormGroup\"\n (ngSubmit)=\"save()\" class=\"edit-entity-form\">\n <mat-toolbar fxLayout=\"row\" color=\"primary\">\n <h2>Edit firmware {{entityName}}</h2>\n <span fxFlex></span>\n <button mat-icon-button (click)=\"cancel()\" type=\"button\">\n <mat-icon class=\"material-icons\">close</mat-icon>\n </button>\n </mat-toolbar>\n <mat-progress-bar color=\"warn\" mode=\"indeterminate\" *ngIf=\"isLoading$ | async\">\n </mat-progress-bar>\n <div style=\"height: 4px;\" *ngIf=\"!(isLoading$ | async)\"></div>\n <div mat-dialog-content fxLayout=\"column\">\n <tb-firmware-autocomplete\n [useFullEntityId]=\"true\"\n formControlName=\"firmwareId\">\n </tb-firmware-autocomplete>\n </div>\n <div mat-dialog-actions fxLayout=\"row\" fxLayoutAlign=\"end center\">\n <button mat-button color=\"primary\"\n type=\"button\"\n [disabled]=\"(isLoading$ | async)\"\n (click)=\"cancel()\" cdkFocusInitial>\n Cancel\n </button>\n <button mat-button mat-raised-button color=\"primary\"\n type=\"submit\"\n [disabled]=\"(isLoading$ | async) || editEntityForm.invalid || !editEntityForm.dirty\">\n Save\n </button>\n </div>\n</form>", | |
1301 | + "customHtml": "<form #editEntityForm=\"ngForm\" [formGroup]=\"editEntityFormGroup\"\n (ngSubmit)=\"save()\" class=\"edit-entity-form\">\n <mat-toolbar fxLayout=\"row\" color=\"primary\">\n <h2>Edit firmware {{entityName}}</h2>\n <span fxFlex></span>\n <button mat-icon-button (click)=\"cancel()\" type=\"button\">\n <mat-icon class=\"material-icons\">close</mat-icon>\n </button>\n </mat-toolbar>\n <mat-progress-bar color=\"warn\" mode=\"indeterminate\" *ngIf=\"isLoading$ | async\">\n </mat-progress-bar>\n <div style=\"height: 4px;\" *ngIf=\"!(isLoading$ | async)\"></div>\n <div *ngIf=\"entity.deviceProfileId\" mat-dialog-content fxLayout=\"column\">\n <tb-ota-package-autocomplete\n [useFullEntityId]=\"true\"\n [deviceProfileId]=\"entity.deviceProfileId.id\"\n formControlName=\"firmwareId\">\n </tb-ota-package-autocomplete>\n </div>\n <div mat-dialog-actions fxLayout=\"row\" fxLayoutAlign=\"end center\">\n <button mat-button color=\"primary\"\n type=\"button\"\n [disabled]=\"(isLoading$ | async)\"\n (click)=\"cancel()\" cdkFocusInitial>\n Cancel\n </button>\n <button mat-button mat-raised-button color=\"primary\"\n type=\"submit\"\n [disabled]=\"(isLoading$ | async) || editEntityForm.invalid || !editEntityForm.dirty\">\n Save\n </button>\n </div>\n</form>", | |
1301 | 1302 | "customCss": "", |
1302 | 1303 | "customFunction": "let $injector = widgetContext.$scope.$injector;\nlet customDialog = $injector.get(widgetContext.servicesMap.get('customDialog'));\nlet entityService = $injector.get(widgetContext.servicesMap.get('entityService'));\nlet deviceService = $injector.get(widgetContext.servicesMap.get('deviceService'));\n\nopenEditEntityDialog();\n\nfunction openEditEntityDialog() {\n customDialog.customDialog(htmlTemplate, EditEntityDialogController).subscribe();\n}\n\nfunction EditEntityDialogController(instance) {\n let vm = instance;\n\n vm.entityName = entityName;\n vm.entity = {};\n\n vm.editEntityFormGroup = vm.fb.group({\n firmwareId: [null]\n });\n\n getEntityInfo();\n\n vm.cancel = function() {\n vm.dialogRef.close(null);\n };\n\n vm.save = function() {\n vm.editEntityFormGroup.markAsPristine();\n saveEntity().subscribe(\n function () {\n // widgetContext.updateAliases();\n vm.dialogRef.close(null);\n }\n );\n };\n\n\n function getEntityInfo() {\n entityService.getEntity(entityId.entityType, entityId.id).subscribe(\n function (data) {\n vm.entity = data;\n vm.editEntityFormGroup.patchValue({\n firmwareId: vm.entity.firmwareId\n }, {emitEvent: false});\n }\n );\n }\n\n function saveEntity() {\n const formValues = vm.editEntityFormGroup.value;\n vm.entity.firmwareId = formValues.firmwareId;\n return deviceService.saveDevice(vm.entity);\n }\n}", |
1303 | 1304 | "customResources": [], |
... | ... | @@ -1307,7 +1308,7 @@ |
1307 | 1308 | "name": "Download firware", |
1308 | 1309 | "icon": "file_download", |
1309 | 1310 | "type": "custom", |
1310 | - "customFunction": "let $injector = widgetContext.$scope.$injector;\nlet entityService = $injector.get(widgetContext.servicesMap.get('entityService'));\nlet firmwareService = $injector.get(widgetContext.servicesMap.get('firmwareService'));\nlet deviceProfileService = $injector.get(widgetContext.servicesMap.get('deviceProfileService'));\n\ngetDeviceFirmware();\n\nfunction getDeviceFirmware() {\n entityService.getEntity(entityId.entityType, entityId.id).subscribe(\n function (data) {\n if (data.firmwareId !== null) {\n firmwareService.downloadFirmware(data.firmwareId.id).subscribe(); \n } else {\n deviceProfileService.getDeviceProfile(data.deviceProfileId.id).subscribe(\n function (deviceProfile) {\n if (deviceProfile.firmwareId !== null) {\n firmwareService.downloadFirmware(deviceProfile.firmwareId.id).subscribe();\n } else {\n widgetContext.showToast('warn', 'Device ' + entityName +' has not firmware set.', 2000, 'top');\n\n }\n });\n }\n }\n );\n}", | |
1311 | + "customFunction": "let $injector = widgetContext.$scope.$injector;\nlet entityService = $injector.get(widgetContext.servicesMap.get('entityService'));\nlet otaPackageService = $injector.get(widgetContext.servicesMap.get('otaPackageService'));\nlet deviceProfileService = $injector.get(widgetContext.servicesMap.get('deviceProfileService'));\n\ngetDeviceFirmware();\n\nfunction getDeviceFirmware() {\n entityService.getEntity(entityId.entityType, entityId.id).subscribe(\n function (data) {\n if (data.firmwareId !== null) {\n otaPackageService.downloadOtaPackage(data.firmwareId.id).subscribe(); \n } else {\n deviceProfileService.getDeviceProfile(data.deviceProfileId.id).subscribe(\n function (deviceProfile) {\n if (deviceProfile.firmwareId !== null) {\n otaPackageService.downloadOtaPackage(deviceProfile.firmwareId.id).subscribe();\n } else {\n widgetContext.showToast('warn', 'Device ' + entityName +' has not firmware set.', 2000, 'top');\n\n }\n });\n }\n }\n );\n}", | |
1311 | 1312 | "id": "12533058-42f6-e75f-620c-219c48d01ec0" |
1312 | 1313 | }, |
1313 | 1314 | { |
... | ... | @@ -1573,7 +1574,7 @@ |
1573 | 1574 | "name": "Edit firmware", |
1574 | 1575 | "icon": "edit", |
1575 | 1576 | "type": "customPretty", |
1576 | - "customHtml": "<form #editEntityForm=\"ngForm\" [formGroup]=\"editEntityFormGroup\"\n (ngSubmit)=\"save()\" class=\"edit-entity-form\">\n <mat-toolbar fxLayout=\"row\" color=\"primary\">\n <h2>Edit firmware {{entityName}}</h2>\n <span fxFlex></span>\n <button mat-icon-button (click)=\"cancel()\" type=\"button\">\n <mat-icon class=\"material-icons\">close</mat-icon>\n </button>\n </mat-toolbar>\n <mat-progress-bar color=\"warn\" mode=\"indeterminate\" *ngIf=\"isLoading$ | async\">\n </mat-progress-bar>\n <div style=\"height: 4px;\" *ngIf=\"!(isLoading$ | async)\"></div>\n <div mat-dialog-content fxLayout=\"column\">\n <tb-firmware-autocomplete\n [useFullEntityId]=\"true\"\n formControlName=\"firmwareId\">\n </tb-firmware-autocomplete>\n </div>\n <div mat-dialog-actions fxLayout=\"row\" fxLayoutAlign=\"end center\">\n <button mat-button color=\"primary\"\n type=\"button\"\n [disabled]=\"(isLoading$ | async)\"\n (click)=\"cancel()\" cdkFocusInitial>\n Cancel\n </button>\n <button mat-button mat-raised-button color=\"primary\"\n type=\"submit\"\n [disabled]=\"(isLoading$ | async) || editEntityForm.invalid || !editEntityForm.dirty\">\n Save\n </button>\n </div>\n</form>", | |
1577 | + "customHtml": "<form #editEntityForm=\"ngForm\" [formGroup]=\"editEntityFormGroup\"\n (ngSubmit)=\"save()\" class=\"edit-entity-form\">\n <mat-toolbar fxLayout=\"row\" color=\"primary\">\n <h2>Edit firmware {{entityName}}</h2>\n <span fxFlex></span>\n <button mat-icon-button (click)=\"cancel()\" type=\"button\">\n <mat-icon class=\"material-icons\">close</mat-icon>\n </button>\n </mat-toolbar>\n <mat-progress-bar color=\"warn\" mode=\"indeterminate\" *ngIf=\"isLoading$ | async\">\n </mat-progress-bar>\n <div style=\"height: 4px;\" *ngIf=\"!(isLoading$ | async)\"></div>\n <div *ngIf=\"entity.deviceProfileId\" mat-dialog-content fxLayout=\"column\">\n <tb-ota-package-autocomplete\n [useFullEntityId]=\"true\"\n [deviceProfileId]=\"entity.deviceProfileId.id\"\n formControlName=\"firmwareId\">\n </tb-ota-package-autocomplete>\n </div>\n <div mat-dialog-actions fxLayout=\"row\" fxLayoutAlign=\"end center\">\n <button mat-button color=\"primary\"\n type=\"button\"\n [disabled]=\"(isLoading$ | async)\"\n (click)=\"cancel()\" cdkFocusInitial>\n Cancel\n </button>\n <button mat-button mat-raised-button color=\"primary\"\n type=\"submit\"\n [disabled]=\"(isLoading$ | async) || editEntityForm.invalid || !editEntityForm.dirty\">\n Save\n </button>\n </div>\n</form>", | |
1577 | 1578 | "customCss": "", |
1578 | 1579 | "customFunction": "let $injector = widgetContext.$scope.$injector;\nlet customDialog = $injector.get(widgetContext.servicesMap.get('customDialog'));\nlet entityService = $injector.get(widgetContext.servicesMap.get('entityService'));\nlet deviceService = $injector.get(widgetContext.servicesMap.get('deviceService'));\n\nopenEditEntityDialog();\n\nfunction openEditEntityDialog() {\n customDialog.customDialog(htmlTemplate, EditEntityDialogController).subscribe();\n}\n\nfunction EditEntityDialogController(instance) {\n let vm = instance;\n\n vm.entityName = entityName;\n vm.entity = {};\n\n vm.editEntityFormGroup = vm.fb.group({\n firmwareId: [null]\n });\n\n getEntityInfo();\n\n vm.cancel = function() {\n vm.dialogRef.close(null);\n };\n\n vm.save = function() {\n vm.editEntityFormGroup.markAsPristine();\n saveEntity().subscribe(\n function () {\n // widgetContext.updateAliases();\n vm.dialogRef.close(null);\n }\n );\n };\n\n\n function getEntityInfo() {\n entityService.getEntity(entityId.entityType, entityId.id).subscribe(\n function (data) {\n vm.entity = data;\n vm.editEntityFormGroup.patchValue({\n firmwareId: vm.entity.firmwareId\n }, {emitEvent: false});\n }\n );\n }\n\n function saveEntity() {\n const formValues = vm.editEntityFormGroup.value;\n vm.entity.firmwareId = formValues.firmwareId;\n return deviceService.saveDevice(vm.entity);\n }\n}", |
1579 | 1580 | "customResources": [], |
... | ... | @@ -1583,7 +1584,7 @@ |
1583 | 1584 | "name": "Download firware", |
1584 | 1585 | "icon": "file_download", |
1585 | 1586 | "type": "custom", |
1586 | - "customFunction": "let $injector = widgetContext.$scope.$injector;\nlet entityService = $injector.get(widgetContext.servicesMap.get('entityService'));\nlet firmwareService = $injector.get(widgetContext.servicesMap.get('firmwareService'));\nlet deviceProfileService = $injector.get(widgetContext.servicesMap.get('deviceProfileService'));\n\ngetDeviceFirmware();\n\nfunction getDeviceFirmware() {\n entityService.getEntity(entityId.entityType, entityId.id).subscribe(\n function (data) {\n if (data.firmwareId !== null) {\n firmwareService.downloadFirmware(data.firmwareId.id).subscribe(); \n } else {\n deviceProfileService.getDeviceProfile(data.deviceProfileId.id).subscribe(\n function (deviceProfile) {\n if (deviceProfile.firmwareId !== null) {\n firmwareService.downloadFirmware(deviceProfile.firmwareId.id).subscribe();\n } else {\n widgetContext.showToast('warn', 'Device ' + entityName +' has not firmware set.', 2000, 'top');\n\n }\n });\n }\n }\n );\n}", | |
1587 | + "customFunction": "let $injector = widgetContext.$scope.$injector;\nlet entityService = $injector.get(widgetContext.servicesMap.get('entityService'));\nlet otaPackageService = $injector.get(widgetContext.servicesMap.get('otaPackageService'));\nlet deviceProfileService = $injector.get(widgetContext.servicesMap.get('deviceProfileService'));\n\ngetDeviceFirmware();\n\nfunction getDeviceFirmware() {\n entityService.getEntity(entityId.entityType, entityId.id).subscribe(\n function (data) {\n if (data.firmwareId !== null) {\n otaPackageService.downloadOtaPackage(data.firmwareId.id).subscribe(); \n } else {\n deviceProfileService.getDeviceProfile(data.deviceProfileId.id).subscribe(\n function (deviceProfile) {\n if (deviceProfile.firmwareId !== null) {\n otaPackageService.downloadOtaPackage(deviceProfile.firmwareId.id).subscribe();\n } else {\n widgetContext.showToast('warn', 'Device ' + entityName +' has not firmware set.', 2000, 'top');\n\n }\n });\n }\n }\n );\n}", | |
1587 | 1588 | "id": "12533058-42f6-e75f-620c-219c48d01ec0" |
1588 | 1589 | }, |
1589 | 1590 | { |
... | ... | @@ -1849,7 +1850,7 @@ |
1849 | 1850 | "name": "Edit firmware", |
1850 | 1851 | "icon": "edit", |
1851 | 1852 | "type": "customPretty", |
1852 | - "customHtml": "<form #editEntityForm=\"ngForm\" [formGroup]=\"editEntityFormGroup\"\n (ngSubmit)=\"save()\" class=\"edit-entity-form\">\n <mat-toolbar fxLayout=\"row\" color=\"primary\">\n <h2>Edit firmware {{entityName}}</h2>\n <span fxFlex></span>\n <button mat-icon-button (click)=\"cancel()\" type=\"button\">\n <mat-icon class=\"material-icons\">close</mat-icon>\n </button>\n </mat-toolbar>\n <mat-progress-bar color=\"warn\" mode=\"indeterminate\" *ngIf=\"isLoading$ | async\">\n </mat-progress-bar>\n <div style=\"height: 4px;\" *ngIf=\"!(isLoading$ | async)\"></div>\n <div mat-dialog-content fxLayout=\"column\">\n <tb-firmware-autocomplete\n [useFullEntityId]=\"true\"\n formControlName=\"firmwareId\">\n </tb-firmware-autocomplete>\n </div>\n <div mat-dialog-actions fxLayout=\"row\" fxLayoutAlign=\"end center\">\n <button mat-button color=\"primary\"\n type=\"button\"\n [disabled]=\"(isLoading$ | async)\"\n (click)=\"cancel()\" cdkFocusInitial>\n Cancel\n </button>\n <button mat-button mat-raised-button color=\"primary\"\n type=\"submit\"\n [disabled]=\"(isLoading$ | async) || editEntityForm.invalid || !editEntityForm.dirty\">\n Save\n </button>\n </div>\n</form>", | |
1853 | + "customHtml": "<form #editEntityForm=\"ngForm\" [formGroup]=\"editEntityFormGroup\"\n (ngSubmit)=\"save()\" class=\"edit-entity-form\">\n <mat-toolbar fxLayout=\"row\" color=\"primary\">\n <h2>Edit firmware {{entityName}}</h2>\n <span fxFlex></span>\n <button mat-icon-button (click)=\"cancel()\" type=\"button\">\n <mat-icon class=\"material-icons\">close</mat-icon>\n </button>\n </mat-toolbar>\n <mat-progress-bar color=\"warn\" mode=\"indeterminate\" *ngIf=\"isLoading$ | async\">\n </mat-progress-bar>\n <div style=\"height: 4px;\" *ngIf=\"!(isLoading$ | async)\"></div>\n <div *ngIf=\"entity.deviceProfileId\" mat-dialog-content fxLayout=\"column\">\n <tb-ota-package-autocomplete\n [useFullEntityId]=\"true\"\n [deviceProfileId]=\"entity.deviceProfileId.id\"\n formControlName=\"firmwareId\">\n </tb-ota-package-autocomplete>\n </div>\n <div mat-dialog-actions fxLayout=\"row\" fxLayoutAlign=\"end center\">\n <button mat-button color=\"primary\"\n type=\"button\"\n [disabled]=\"(isLoading$ | async)\"\n (click)=\"cancel()\" cdkFocusInitial>\n Cancel\n </button>\n <button mat-button mat-raised-button color=\"primary\"\n type=\"submit\"\n [disabled]=\"(isLoading$ | async) || editEntityForm.invalid || !editEntityForm.dirty\">\n Save\n </button>\n </div>\n</form>", | |
1853 | 1854 | "customCss": "", |
1854 | 1855 | "customFunction": "let $injector = widgetContext.$scope.$injector;\nlet customDialog = $injector.get(widgetContext.servicesMap.get('customDialog'));\nlet entityService = $injector.get(widgetContext.servicesMap.get('entityService'));\nlet deviceService = $injector.get(widgetContext.servicesMap.get('deviceService'));\n\nopenEditEntityDialog();\n\nfunction openEditEntityDialog() {\n customDialog.customDialog(htmlTemplate, EditEntityDialogController).subscribe();\n}\n\nfunction EditEntityDialogController(instance) {\n let vm = instance;\n\n vm.entityName = entityName;\n vm.entity = {};\n\n vm.editEntityFormGroup = vm.fb.group({\n firmwareId: [null]\n });\n\n getEntityInfo();\n\n vm.cancel = function() {\n vm.dialogRef.close(null);\n };\n\n vm.save = function() {\n vm.editEntityFormGroup.markAsPristine();\n saveEntity().subscribe(\n function () {\n // widgetContext.updateAliases();\n vm.dialogRef.close(null);\n }\n );\n };\n\n\n function getEntityInfo() {\n entityService.getEntity(entityId.entityType, entityId.id).subscribe(\n function (data) {\n vm.entity = data;\n vm.editEntityFormGroup.patchValue({\n firmwareId: vm.entity.firmwareId\n }, {emitEvent: false});\n }\n );\n }\n\n function saveEntity() {\n const formValues = vm.editEntityFormGroup.value;\n vm.entity.firmwareId = formValues.firmwareId;\n return deviceService.saveDevice(vm.entity);\n }\n}", |
1855 | 1856 | "customResources": [], |
... | ... | @@ -1859,7 +1860,7 @@ |
1859 | 1860 | "name": "Download firware", |
1860 | 1861 | "icon": "file_download", |
1861 | 1862 | "type": "custom", |
1862 | - "customFunction": "let $injector = widgetContext.$scope.$injector;\nlet entityService = $injector.get(widgetContext.servicesMap.get('entityService'));\nlet firmwareService = $injector.get(widgetContext.servicesMap.get('firmwareService'));\nlet deviceProfileService = $injector.get(widgetContext.servicesMap.get('deviceProfileService'));\n\ngetDeviceFirmware();\n\nfunction getDeviceFirmware() {\n entityService.getEntity(entityId.entityType, entityId.id).subscribe(\n function (data) {\n if (data.firmwareId !== null) {\n firmwareService.downloadFirmware(data.firmwareId.id).subscribe(); \n } else {\n deviceProfileService.getDeviceProfile(data.deviceProfileId.id).subscribe(\n function (deviceProfile) {\n if (deviceProfile.firmwareId !== null) {\n firmwareService.downloadFirmware(deviceProfile.firmwareId.id).subscribe();\n } else {\n widgetContext.showToast('warn', 'Device ' + entityName +' has not firmware set.', 2000, 'top');\n\n }\n });\n }\n }\n );\n}", | |
1863 | + "customFunction": "let $injector = widgetContext.$scope.$injector;\nlet entityService = $injector.get(widgetContext.servicesMap.get('entityService'));\nlet otaPackageService = $injector.get(widgetContext.servicesMap.get('otaPackageService'));\nlet deviceProfileService = $injector.get(widgetContext.servicesMap.get('deviceProfileService'));\n\ngetDeviceFirmware();\n\nfunction getDeviceFirmware() {\n entityService.getEntity(entityId.entityType, entityId.id).subscribe(\n function (data) {\n if (data.firmwareId !== null) {\n otaPackageService.downloadOtaPackage(data.firmwareId.id).subscribe(); \n } else {\n deviceProfileService.getDeviceProfile(data.deviceProfileId.id).subscribe(\n function (deviceProfile) {\n if (deviceProfile.firmwareId !== null) {\n otaPackageService.downloadOtaPackage(deviceProfile.firmwareId.id).subscribe();\n } else {\n widgetContext.showToast('warn', 'Device ' + entityName +' has not firmware set.', 2000, 'top');\n\n }\n });\n }\n }\n );\n}", | |
1863 | 1864 | "id": "12533058-42f6-e75f-620c-219c48d01ec0" |
1864 | 1865 | }, |
1865 | 1866 | { | ... | ... |
... | ... | @@ -59,8 +59,8 @@ CREATE TABLE IF NOT EXISTS resource ( |
59 | 59 | CONSTRAINT resource_unq_key UNIQUE (tenant_id, resource_type, resource_key) |
60 | 60 | ); |
61 | 61 | |
62 | -CREATE TABLE IF NOT EXISTS firmware ( | |
63 | - id uuid NOT NULL CONSTRAINT firmware_pkey PRIMARY KEY, | |
62 | +CREATE TABLE IF NOT EXISTS ota_package ( | |
63 | + id uuid NOT NULL CONSTRAINT ota_package_pkey PRIMARY KEY, | |
64 | 64 | created_time bigint NOT NULL, |
65 | 65 | tenant_id uuid NOT NULL, |
66 | 66 | device_profile_id uuid, |
... | ... | @@ -75,7 +75,7 @@ CREATE TABLE IF NOT EXISTS firmware ( |
75 | 75 | data_size bigint, |
76 | 76 | additional_info varchar, |
77 | 77 | search_text varchar(255), |
78 | - CONSTRAINT firmware_tenant_title_version_unq_key UNIQUE (tenant_id, title, version) | |
78 | + CONSTRAINT ota_package_tenant_title_version_unq_key UNIQUE (tenant_id, title, version) | |
79 | 79 | ); |
80 | 80 | |
81 | 81 | ALTER TABLE dashboard |
... | ... | @@ -101,13 +101,13 @@ DO $$ |
101 | 101 | IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'fk_firmware_device_profile') THEN |
102 | 102 | ALTER TABLE device_profile |
103 | 103 | ADD CONSTRAINT fk_firmware_device_profile |
104 | - FOREIGN KEY (firmware_id) REFERENCES firmware(id); | |
104 | + FOREIGN KEY (firmware_id) REFERENCES ota_package(id); | |
105 | 105 | END IF; |
106 | 106 | |
107 | 107 | IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'fk_software_device_profile') THEN |
108 | 108 | ALTER TABLE device_profile |
109 | 109 | ADD CONSTRAINT fk_software_device_profile |
110 | - FOREIGN KEY (firmware_id) REFERENCES firmware(id); | |
110 | + FOREIGN KEY (firmware_id) REFERENCES ota_package(id); | |
111 | 111 | END IF; |
112 | 112 | |
113 | 113 | IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'fk_default_dashboard_device_profile') THEN |
... | ... | @@ -119,13 +119,13 @@ DO $$ |
119 | 119 | IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'fk_firmware_device') THEN |
120 | 120 | ALTER TABLE device |
121 | 121 | ADD CONSTRAINT fk_firmware_device |
122 | - FOREIGN KEY (firmware_id) REFERENCES firmware(id); | |
122 | + FOREIGN KEY (firmware_id) REFERENCES ota_package(id); | |
123 | 123 | END IF; |
124 | 124 | |
125 | 125 | IF NOT EXISTS (SELECT 1 FROM pg_constraint WHERE conname = 'fk_software_device') THEN |
126 | 126 | ALTER TABLE device |
127 | 127 | ADD CONSTRAINT fk_software_device |
128 | - FOREIGN KEY (firmware_id) REFERENCES firmware(id); | |
128 | + FOREIGN KEY (firmware_id) REFERENCES ota_package(id); | |
129 | 129 | END IF; |
130 | 130 | END; |
131 | 131 | $$; | ... | ... |
... | ... | @@ -39,8 +39,8 @@ import org.thingsboard.server.common.data.EdgeUtils; |
39 | 39 | import org.thingsboard.server.common.data.EntityType; |
40 | 40 | import org.thingsboard.server.common.data.EntityView; |
41 | 41 | import org.thingsboard.server.common.data.EntityViewInfo; |
42 | -import org.thingsboard.server.common.data.Firmware; | |
43 | -import org.thingsboard.server.common.data.FirmwareInfo; | |
42 | +import org.thingsboard.server.common.data.OtaPackage; | |
43 | +import org.thingsboard.server.common.data.OtaPackageInfo; | |
44 | 44 | import org.thingsboard.server.common.data.HasName; |
45 | 45 | import org.thingsboard.server.common.data.HasTenantId; |
46 | 46 | import org.thingsboard.server.common.data.TbResourceInfo; |
... | ... | @@ -70,7 +70,7 @@ import org.thingsboard.server.common.data.id.EdgeId; |
70 | 70 | import org.thingsboard.server.common.data.id.EntityId; |
71 | 71 | import org.thingsboard.server.common.data.id.EntityIdFactory; |
72 | 72 | import org.thingsboard.server.common.data.id.EntityViewId; |
73 | -import org.thingsboard.server.common.data.id.FirmwareId; | |
73 | +import org.thingsboard.server.common.data.id.OtaPackageId; | |
74 | 74 | import org.thingsboard.server.common.data.id.TbResourceId; |
75 | 75 | import org.thingsboard.server.common.data.id.RuleChainId; |
76 | 76 | import org.thingsboard.server.common.data.id.RuleNodeId; |
... | ... | @@ -110,7 +110,7 @@ import org.thingsboard.server.dao.edge.EdgeService; |
110 | 110 | import org.thingsboard.server.dao.entityview.EntityViewService; |
111 | 111 | import org.thingsboard.server.dao.exception.DataValidationException; |
112 | 112 | import org.thingsboard.server.dao.exception.IncorrectParameterException; |
113 | -import org.thingsboard.server.dao.firmware.FirmwareService; | |
113 | +import org.thingsboard.server.dao.ota.OtaPackageService; | |
114 | 114 | import org.thingsboard.server.dao.model.ModelConstants; |
115 | 115 | import org.thingsboard.server.dao.oauth2.OAuth2ConfigTemplateService; |
116 | 116 | import org.thingsboard.server.dao.oauth2.OAuth2Service; |
... | ... | @@ -128,7 +128,7 @@ import org.thingsboard.server.queue.discovery.PartitionService; |
128 | 128 | import org.thingsboard.server.queue.provider.TbQueueProducerProvider; |
129 | 129 | import org.thingsboard.server.queue.util.TbCoreComponent; |
130 | 130 | import org.thingsboard.server.service.component.ComponentDiscoveryService; |
131 | -import org.thingsboard.server.service.firmware.FirmwareStateService; | |
131 | +import org.thingsboard.server.service.ota.OtaPackageStateService; | |
132 | 132 | import org.thingsboard.server.service.edge.EdgeNotificationService; |
133 | 133 | import org.thingsboard.server.service.edge.rpc.EdgeGrpcService; |
134 | 134 | import org.thingsboard.server.service.edge.rpc.init.SyncEdgeService; |
... | ... | @@ -250,10 +250,10 @@ public abstract class BaseController { |
250 | 250 | protected TbResourceService resourceService; |
251 | 251 | |
252 | 252 | @Autowired |
253 | - protected FirmwareService firmwareService; | |
253 | + protected OtaPackageService otaPackageService; | |
254 | 254 | |
255 | 255 | @Autowired |
256 | - protected FirmwareStateService firmwareStateService; | |
256 | + protected OtaPackageStateService otaPackageStateService; | |
257 | 257 | |
258 | 258 | @Autowired |
259 | 259 | protected TbQueueProducerProvider producerProvider; |
... | ... | @@ -511,8 +511,8 @@ public abstract class BaseController { |
511 | 511 | case TB_RESOURCE: |
512 | 512 | checkResourceId(new TbResourceId(entityId.getId()), operation); |
513 | 513 | return; |
514 | - case FIRMWARE: | |
515 | - checkFirmwareId(new FirmwareId(entityId.getId()), operation); | |
514 | + case OTA_PACKAGE: | |
515 | + checkOtaPackageId(new OtaPackageId(entityId.getId()), operation); | |
516 | 516 | return; |
517 | 517 | default: |
518 | 518 | throw new IllegalArgumentException("Unsupported entity type: " + entityId.getEntityType()); |
... | ... | @@ -769,25 +769,25 @@ public abstract class BaseController { |
769 | 769 | } |
770 | 770 | } |
771 | 771 | |
772 | - Firmware checkFirmwareId(FirmwareId firmwareId, Operation operation) throws ThingsboardException { | |
772 | + OtaPackage checkOtaPackageId(OtaPackageId otaPackageId, Operation operation) throws ThingsboardException { | |
773 | 773 | try { |
774 | - validateId(firmwareId, "Incorrect firmwareId " + firmwareId); | |
775 | - Firmware firmware = firmwareService.findFirmwareById(getCurrentUser().getTenantId(), firmwareId); | |
776 | - checkNotNull(firmware); | |
777 | - accessControlService.checkPermission(getCurrentUser(), Resource.FIRMWARE, operation, firmwareId, firmware); | |
778 | - return firmware; | |
774 | + validateId(otaPackageId, "Incorrect otaPackageId " + otaPackageId); | |
775 | + OtaPackage otaPackage = otaPackageService.findOtaPackageById(getCurrentUser().getTenantId(), otaPackageId); | |
776 | + checkNotNull(otaPackage); | |
777 | + accessControlService.checkPermission(getCurrentUser(), Resource.OTA_PACKAGE, operation, otaPackageId, otaPackage); | |
778 | + return otaPackage; | |
779 | 779 | } catch (Exception e) { |
780 | 780 | throw handleException(e, false); |
781 | 781 | } |
782 | 782 | } |
783 | 783 | |
784 | - FirmwareInfo checkFirmwareInfoId(FirmwareId firmwareId, Operation operation) throws ThingsboardException { | |
784 | + OtaPackageInfo checkOtaPackageInfoId(OtaPackageId otaPackageId, Operation operation) throws ThingsboardException { | |
785 | 785 | try { |
786 | - validateId(firmwareId, "Incorrect firmwareId " + firmwareId); | |
787 | - FirmwareInfo firmwareInfo = firmwareService.findFirmwareInfoById(getCurrentUser().getTenantId(), firmwareId); | |
788 | - checkNotNull(firmwareInfo); | |
789 | - accessControlService.checkPermission(getCurrentUser(), Resource.FIRMWARE, operation, firmwareId, firmwareInfo); | |
790 | - return firmwareInfo; | |
786 | + validateId(otaPackageId, "Incorrect otaPackageId " + otaPackageId); | |
787 | + OtaPackageInfo otaPackageIn = otaPackageService.findOtaPackageInfoById(getCurrentUser().getTenantId(), otaPackageId); | |
788 | + checkNotNull(otaPackageIn); | |
789 | + accessControlService.checkPermission(getCurrentUser(), Resource.OTA_PACKAGE, operation, otaPackageId, otaPackageIn); | |
790 | + return otaPackageIn; | |
791 | 791 | } catch (Exception e) { |
792 | 792 | throw handleException(e, false); |
793 | 793 | } | ... | ... |
... | ... | @@ -53,6 +53,7 @@ import org.thingsboard.server.common.data.id.DeviceId; |
53 | 53 | import org.thingsboard.server.common.data.id.DeviceProfileId; |
54 | 54 | import org.thingsboard.server.common.data.id.EdgeId; |
55 | 55 | import org.thingsboard.server.common.data.id.TenantId; |
56 | +import org.thingsboard.server.common.data.ota.OtaPackageType; | |
56 | 57 | import org.thingsboard.server.common.data.page.PageData; |
57 | 58 | import org.thingsboard.server.common.data.page.PageLink; |
58 | 59 | import org.thingsboard.server.common.data.page.TimePageLink; |
... | ... | @@ -75,6 +76,7 @@ import javax.annotation.Nullable; |
75 | 76 | import java.io.IOException; |
76 | 77 | import java.util.ArrayList; |
77 | 78 | import java.util.List; |
79 | +import java.util.UUID; | |
78 | 80 | import java.util.stream.Collectors; |
79 | 81 | |
80 | 82 | import static org.thingsboard.server.controller.EdgeController.EDGE_ID; |
... | ... | @@ -153,7 +155,7 @@ public class DeviceController extends BaseController { |
153 | 155 | deviceStateService.onDeviceUpdated(savedDevice); |
154 | 156 | } |
155 | 157 | |
156 | - firmwareStateService.update(savedDevice, oldDevice); | |
158 | + otaPackageStateService.update(savedDevice, oldDevice); | |
157 | 159 | |
158 | 160 | return savedDevice; |
159 | 161 | } catch (Exception e) { |
... | ... | @@ -778,4 +780,19 @@ public class DeviceController extends BaseController { |
778 | 780 | throw handleException(e); |
779 | 781 | } |
780 | 782 | } |
783 | + | |
784 | + @PreAuthorize("hasAnyAuthority('TENANT_ADMIN', 'CUSTOMER_USER')") | |
785 | + @RequestMapping(value = "/devices/count/{otaPackageType}", method = RequestMethod.GET) | |
786 | + @ResponseBody | |
787 | + public Long countDevicesByTenantIdAndDeviceProfileIdAndEmptyOtaPackage(@PathVariable("otaPackageType") String otaPackageType, | |
788 | + @RequestParam String deviceProfileId) throws ThingsboardException { | |
789 | + checkParameter("OtaPackageType", otaPackageType); | |
790 | + checkParameter("DeviceProfileId", deviceProfileId); | |
791 | + try { | |
792 | + return deviceService.countDevicesByTenantIdAndDeviceProfileIdAndEmptyOtaPackage( | |
793 | + getCurrentUser().getTenantId(), new DeviceProfileId(UUID.fromString(deviceProfileId)), OtaPackageType.valueOf(otaPackageType)); | |
794 | + } catch (Exception e) { | |
795 | + throw handleException(e); | |
796 | + } | |
797 | + } | |
781 | 798 | } | ... | ... |
... | ... | @@ -168,7 +168,7 @@ public class DeviceProfileController extends BaseController { |
168 | 168 | null, |
169 | 169 | created ? ActionType.ADDED : ActionType.UPDATED, null); |
170 | 170 | |
171 | - firmwareStateService.update(savedDeviceProfile, isFirmwareChanged, isSoftwareChanged); | |
171 | + otaPackageStateService.update(savedDeviceProfile, isFirmwareChanged, isSoftwareChanged); | |
172 | 172 | |
173 | 173 | sendEntityNotificationMsg(getTenantId(), savedDeviceProfile.getId(), |
174 | 174 | deviceProfile.getId() == null ? EdgeEventActionType.ADDED : EdgeEventActionType.UPDATED); | ... | ... |
application/src/main/java/org/thingsboard/server/controller/OtaPackageController.java
renamed from
application/src/main/java/org/thingsboard/server/controller/FirmwareController.java
... | ... | @@ -30,14 +30,14 @@ import org.springframework.web.bind.annotation.ResponseBody; |
30 | 30 | import org.springframework.web.bind.annotation.RestController; |
31 | 31 | import org.springframework.web.multipart.MultipartFile; |
32 | 32 | import org.thingsboard.server.common.data.EntityType; |
33 | -import org.thingsboard.server.common.data.Firmware; | |
34 | -import org.thingsboard.server.common.data.FirmwareInfo; | |
33 | +import org.thingsboard.server.common.data.OtaPackage; | |
34 | +import org.thingsboard.server.common.data.OtaPackageInfo; | |
35 | 35 | import org.thingsboard.server.common.data.audit.ActionType; |
36 | 36 | import org.thingsboard.server.common.data.exception.ThingsboardException; |
37 | -import org.thingsboard.server.common.data.firmware.ChecksumAlgorithm; | |
38 | -import org.thingsboard.server.common.data.firmware.FirmwareType; | |
37 | +import org.thingsboard.server.common.data.ota.ChecksumAlgorithm; | |
38 | +import org.thingsboard.server.common.data.ota.OtaPackageType; | |
39 | 39 | import org.thingsboard.server.common.data.id.DeviceProfileId; |
40 | -import org.thingsboard.server.common.data.id.FirmwareId; | |
40 | +import org.thingsboard.server.common.data.id.OtaPackageId; | |
41 | 41 | import org.thingsboard.server.common.data.page.PageData; |
42 | 42 | import org.thingsboard.server.common.data.page.PageLink; |
43 | 43 | import org.thingsboard.server.queue.util.TbCoreComponent; |
... | ... | @@ -50,26 +50,26 @@ import java.nio.ByteBuffer; |
50 | 50 | @RestController |
51 | 51 | @TbCoreComponent |
52 | 52 | @RequestMapping("/api") |
53 | -public class FirmwareController extends BaseController { | |
53 | +public class OtaPackageController extends BaseController { | |
54 | 54 | |
55 | - public static final String FIRMWARE_ID = "firmwareId"; | |
55 | + public static final String OTA_PACKAGE_ID = "otaPackageId"; | |
56 | 56 | public static final String CHECKSUM_ALGORITHM = "checksumAlgorithm"; |
57 | 57 | |
58 | 58 | @PreAuthorize("hasAnyAuthority( 'TENANT_ADMIN')") |
59 | - @RequestMapping(value = "/firmware/{firmwareId}/download", method = RequestMethod.GET) | |
59 | + @RequestMapping(value = "/otaPackage/{otaPackageId}/download", method = RequestMethod.GET) | |
60 | 60 | @ResponseBody |
61 | - public ResponseEntity<org.springframework.core.io.Resource> downloadFirmware(@PathVariable(FIRMWARE_ID) String strFirmwareId) throws ThingsboardException { | |
62 | - checkParameter(FIRMWARE_ID, strFirmwareId); | |
61 | + public ResponseEntity<org.springframework.core.io.Resource> downloadOtaPackage(@PathVariable(OTA_PACKAGE_ID) String strOtaPackageId) throws ThingsboardException { | |
62 | + checkParameter(OTA_PACKAGE_ID, strOtaPackageId); | |
63 | 63 | try { |
64 | - FirmwareId firmwareId = new FirmwareId(toUUID(strFirmwareId)); | |
65 | - Firmware firmware = checkFirmwareId(firmwareId, Operation.READ); | |
64 | + OtaPackageId otaPackageId = new OtaPackageId(toUUID(strOtaPackageId)); | |
65 | + OtaPackage otaPackage = checkOtaPackageId(otaPackageId, Operation.READ); | |
66 | 66 | |
67 | - ByteArrayResource resource = new ByteArrayResource(firmware.getData().array()); | |
67 | + ByteArrayResource resource = new ByteArrayResource(otaPackage.getData().array()); | |
68 | 68 | return ResponseEntity.ok() |
69 | - .header(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=" + firmware.getFileName()) | |
70 | - .header("x-filename", firmware.getFileName()) | |
69 | + .header(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=" + otaPackage.getFileName()) | |
70 | + .header("x-filename", otaPackage.getFileName()) | |
71 | 71 | .contentLength(resource.contentLength()) |
72 | - .contentType(parseMediaType(firmware.getContentType())) | |
72 | + .contentType(parseMediaType(otaPackage.getContentType())) | |
73 | 73 | .body(resource); |
74 | 74 | } catch (Exception e) { |
75 | 75 | throw handleException(e); |
... | ... | @@ -77,144 +77,144 @@ public class FirmwareController extends BaseController { |
77 | 77 | } |
78 | 78 | |
79 | 79 | @PreAuthorize("hasAnyAuthority('TENANT_ADMIN', 'CUSTOMER_USER')") |
80 | - @RequestMapping(value = "/firmware/info/{firmwareId}", method = RequestMethod.GET) | |
80 | + @RequestMapping(value = "/otaPackage/info/{otaPackageId}", method = RequestMethod.GET) | |
81 | 81 | @ResponseBody |
82 | - public FirmwareInfo getFirmwareInfoById(@PathVariable(FIRMWARE_ID) String strFirmwareId) throws ThingsboardException { | |
83 | - checkParameter(FIRMWARE_ID, strFirmwareId); | |
82 | + public OtaPackageInfo getOtaPackageInfoById(@PathVariable(OTA_PACKAGE_ID) String strOtaPackageId) throws ThingsboardException { | |
83 | + checkParameter(OTA_PACKAGE_ID, strOtaPackageId); | |
84 | 84 | try { |
85 | - FirmwareId firmwareId = new FirmwareId(toUUID(strFirmwareId)); | |
86 | - return checkNotNull(firmwareService.findFirmwareInfoById(getTenantId(), firmwareId)); | |
85 | + OtaPackageId otaPackageId = new OtaPackageId(toUUID(strOtaPackageId)); | |
86 | + return checkNotNull(otaPackageService.findOtaPackageInfoById(getTenantId(), otaPackageId)); | |
87 | 87 | } catch (Exception e) { |
88 | 88 | throw handleException(e); |
89 | 89 | } |
90 | 90 | } |
91 | 91 | |
92 | 92 | @PreAuthorize("hasAnyAuthority('TENANT_ADMIN')") |
93 | - @RequestMapping(value = "/firmware/{firmwareId}", method = RequestMethod.GET) | |
93 | + @RequestMapping(value = "/otaPackage/{otaPackageId}", method = RequestMethod.GET) | |
94 | 94 | @ResponseBody |
95 | - public Firmware getFirmwareById(@PathVariable(FIRMWARE_ID) String strFirmwareId) throws ThingsboardException { | |
96 | - checkParameter(FIRMWARE_ID, strFirmwareId); | |
95 | + public OtaPackage getOtaPackageById(@PathVariable(OTA_PACKAGE_ID) String strOtaPackageId) throws ThingsboardException { | |
96 | + checkParameter(OTA_PACKAGE_ID, strOtaPackageId); | |
97 | 97 | try { |
98 | - FirmwareId firmwareId = new FirmwareId(toUUID(strFirmwareId)); | |
99 | - return checkFirmwareId(firmwareId, Operation.READ); | |
98 | + OtaPackageId otaPackageId = new OtaPackageId(toUUID(strOtaPackageId)); | |
99 | + return checkOtaPackageId(otaPackageId, Operation.READ); | |
100 | 100 | } catch (Exception e) { |
101 | 101 | throw handleException(e); |
102 | 102 | } |
103 | 103 | } |
104 | 104 | |
105 | 105 | @PreAuthorize("hasAnyAuthority('TENANT_ADMIN')") |
106 | - @RequestMapping(value = "/firmware", method = RequestMethod.POST) | |
106 | + @RequestMapping(value = "/otaPackage", method = RequestMethod.POST) | |
107 | 107 | @ResponseBody |
108 | - public FirmwareInfo saveFirmwareInfo(@RequestBody FirmwareInfo firmwareInfo) throws ThingsboardException { | |
109 | - boolean created = firmwareInfo.getId() == null; | |
108 | + public OtaPackageInfo saveOtaPackageInfo(@RequestBody OtaPackageInfo otaPackageInfo) throws ThingsboardException { | |
109 | + boolean created = otaPackageInfo.getId() == null; | |
110 | 110 | try { |
111 | - firmwareInfo.setTenantId(getTenantId()); | |
112 | - checkEntity(firmwareInfo.getId(), firmwareInfo, Resource.FIRMWARE); | |
113 | - FirmwareInfo savedFirmwareInfo = firmwareService.saveFirmwareInfo(firmwareInfo); | |
114 | - logEntityAction(savedFirmwareInfo.getId(), savedFirmwareInfo, | |
111 | + otaPackageInfo.setTenantId(getTenantId()); | |
112 | + checkEntity(otaPackageInfo.getId(), otaPackageInfo, Resource.OTA_PACKAGE); | |
113 | + OtaPackageInfo savedOtaPackageInfo = otaPackageService.saveOtaPackageInfo(otaPackageInfo); | |
114 | + logEntityAction(savedOtaPackageInfo.getId(), savedOtaPackageInfo, | |
115 | 115 | null, created ? ActionType.ADDED : ActionType.UPDATED, null); |
116 | - return savedFirmwareInfo; | |
116 | + return savedOtaPackageInfo; | |
117 | 117 | } catch (Exception e) { |
118 | - logEntityAction(emptyId(EntityType.FIRMWARE), firmwareInfo, | |
118 | + logEntityAction(emptyId(EntityType.OTA_PACKAGE), otaPackageInfo, | |
119 | 119 | null, created ? ActionType.ADDED : ActionType.UPDATED, e); |
120 | 120 | throw handleException(e); |
121 | 121 | } |
122 | 122 | } |
123 | 123 | |
124 | 124 | @PreAuthorize("hasAnyAuthority('TENANT_ADMIN')") |
125 | - @RequestMapping(value = "/firmware/{firmwareId}", method = RequestMethod.POST) | |
125 | + @RequestMapping(value = "/otaPackage/{otaPackageId}", method = RequestMethod.POST) | |
126 | 126 | @ResponseBody |
127 | - public Firmware saveFirmwareData(@PathVariable(FIRMWARE_ID) String strFirmwareId, | |
128 | - @RequestParam(required = false) String checksum, | |
129 | - @RequestParam(CHECKSUM_ALGORITHM) String checksumAlgorithmStr, | |
130 | - @RequestBody MultipartFile file) throws ThingsboardException { | |
131 | - checkParameter(FIRMWARE_ID, strFirmwareId); | |
127 | + public OtaPackage saveOtaPackageData(@PathVariable(OTA_PACKAGE_ID) String strOtaPackageId, | |
128 | + @RequestParam(required = false) String checksum, | |
129 | + @RequestParam(CHECKSUM_ALGORITHM) String checksumAlgorithmStr, | |
130 | + @RequestBody MultipartFile file) throws ThingsboardException { | |
131 | + checkParameter(OTA_PACKAGE_ID, strOtaPackageId); | |
132 | 132 | checkParameter(CHECKSUM_ALGORITHM, checksumAlgorithmStr); |
133 | 133 | try { |
134 | - FirmwareId firmwareId = new FirmwareId(toUUID(strFirmwareId)); | |
135 | - FirmwareInfo info = checkFirmwareInfoId(firmwareId, Operation.READ); | |
136 | - | |
137 | - Firmware firmware = new Firmware(firmwareId); | |
138 | - firmware.setCreatedTime(info.getCreatedTime()); | |
139 | - firmware.setTenantId(getTenantId()); | |
140 | - firmware.setDeviceProfileId(info.getDeviceProfileId()); | |
141 | - firmware.setType(info.getType()); | |
142 | - firmware.setTitle(info.getTitle()); | |
143 | - firmware.setVersion(info.getVersion()); | |
144 | - firmware.setAdditionalInfo(info.getAdditionalInfo()); | |
134 | + OtaPackageId otaPackageId = new OtaPackageId(toUUID(strOtaPackageId)); | |
135 | + OtaPackageInfo info = checkOtaPackageInfoId(otaPackageId, Operation.READ); | |
136 | + | |
137 | + OtaPackage otaPackage = new OtaPackage(otaPackageId); | |
138 | + otaPackage.setCreatedTime(info.getCreatedTime()); | |
139 | + otaPackage.setTenantId(getTenantId()); | |
140 | + otaPackage.setDeviceProfileId(info.getDeviceProfileId()); | |
141 | + otaPackage.setType(info.getType()); | |
142 | + otaPackage.setTitle(info.getTitle()); | |
143 | + otaPackage.setVersion(info.getVersion()); | |
144 | + otaPackage.setAdditionalInfo(info.getAdditionalInfo()); | |
145 | 145 | |
146 | 146 | ChecksumAlgorithm checksumAlgorithm = ChecksumAlgorithm.valueOf(checksumAlgorithmStr.toUpperCase()); |
147 | 147 | |
148 | 148 | byte[] bytes = file.getBytes(); |
149 | 149 | if (StringUtils.isEmpty(checksum)) { |
150 | - checksum = firmwareService.generateChecksum(checksumAlgorithm, ByteBuffer.wrap(bytes)); | |
150 | + checksum = otaPackageService.generateChecksum(checksumAlgorithm, ByteBuffer.wrap(bytes)); | |
151 | 151 | } |
152 | 152 | |
153 | - firmware.setChecksumAlgorithm(checksumAlgorithm); | |
154 | - firmware.setChecksum(checksum); | |
155 | - firmware.setFileName(file.getOriginalFilename()); | |
156 | - firmware.setContentType(file.getContentType()); | |
157 | - firmware.setData(ByteBuffer.wrap(bytes)); | |
158 | - firmware.setDataSize((long) bytes.length); | |
159 | - Firmware savedFirmware = firmwareService.saveFirmware(firmware); | |
160 | - logEntityAction(savedFirmware.getId(), savedFirmware, null, ActionType.UPDATED, null); | |
161 | - return savedFirmware; | |
153 | + otaPackage.setChecksumAlgorithm(checksumAlgorithm); | |
154 | + otaPackage.setChecksum(checksum); | |
155 | + otaPackage.setFileName(file.getOriginalFilename()); | |
156 | + otaPackage.setContentType(file.getContentType()); | |
157 | + otaPackage.setData(ByteBuffer.wrap(bytes)); | |
158 | + otaPackage.setDataSize((long) bytes.length); | |
159 | + OtaPackage savedOtaPackage = otaPackageService.saveOtaPackage(otaPackage); | |
160 | + logEntityAction(savedOtaPackage.getId(), savedOtaPackage, null, ActionType.UPDATED, null); | |
161 | + return savedOtaPackage; | |
162 | 162 | } catch (Exception e) { |
163 | - logEntityAction(emptyId(EntityType.FIRMWARE), null, null, ActionType.UPDATED, e, strFirmwareId); | |
163 | + logEntityAction(emptyId(EntityType.OTA_PACKAGE), null, null, ActionType.UPDATED, e, strOtaPackageId); | |
164 | 164 | throw handleException(e); |
165 | 165 | } |
166 | 166 | } |
167 | 167 | |
168 | 168 | @PreAuthorize("hasAnyAuthority('TENANT_ADMIN', 'CUSTOMER_USER')") |
169 | - @RequestMapping(value = "/firmwares", method = RequestMethod.GET) | |
169 | + @RequestMapping(value = "/otaPackages", method = RequestMethod.GET) | |
170 | 170 | @ResponseBody |
171 | - public PageData<FirmwareInfo> getFirmwares(@RequestParam int pageSize, | |
172 | - @RequestParam int page, | |
173 | - @RequestParam(required = false) String textSearch, | |
174 | - @RequestParam(required = false) String sortProperty, | |
175 | - @RequestParam(required = false) String sortOrder) throws ThingsboardException { | |
171 | + public PageData<OtaPackageInfo> getOtaPackages(@RequestParam int pageSize, | |
172 | + @RequestParam int page, | |
173 | + @RequestParam(required = false) String textSearch, | |
174 | + @RequestParam(required = false) String sortProperty, | |
175 | + @RequestParam(required = false) String sortOrder) throws ThingsboardException { | |
176 | 176 | try { |
177 | 177 | PageLink pageLink = createPageLink(pageSize, page, textSearch, sortProperty, sortOrder); |
178 | - return checkNotNull(firmwareService.findTenantFirmwaresByTenantId(getTenantId(), pageLink)); | |
178 | + return checkNotNull(otaPackageService.findTenantOtaPackagesByTenantId(getTenantId(), pageLink)); | |
179 | 179 | } catch (Exception e) { |
180 | 180 | throw handleException(e); |
181 | 181 | } |
182 | 182 | } |
183 | 183 | |
184 | 184 | @PreAuthorize("hasAnyAuthority('TENANT_ADMIN', 'CUSTOMER_USER')") |
185 | - @RequestMapping(value = "/firmwares/{deviceProfileId}/{type}/{hasData}", method = RequestMethod.GET) | |
185 | + @RequestMapping(value = "/otaPackages/{deviceProfileId}/{type}/{hasData}", method = RequestMethod.GET) | |
186 | 186 | @ResponseBody |
187 | - public PageData<FirmwareInfo> getFirmwares(@PathVariable("deviceProfileId") String strDeviceProfileId, | |
188 | - @PathVariable("type") String strType, | |
189 | - @PathVariable("hasData") boolean hasData, | |
190 | - @RequestParam int pageSize, | |
191 | - @RequestParam int page, | |
192 | - @RequestParam(required = false) String textSearch, | |
193 | - @RequestParam(required = false) String sortProperty, | |
194 | - @RequestParam(required = false) String sortOrder) throws ThingsboardException { | |
187 | + public PageData<OtaPackageInfo> getOtaPackages(@PathVariable("deviceProfileId") String strDeviceProfileId, | |
188 | + @PathVariable("type") String strType, | |
189 | + @PathVariable("hasData") boolean hasData, | |
190 | + @RequestParam int pageSize, | |
191 | + @RequestParam int page, | |
192 | + @RequestParam(required = false) String textSearch, | |
193 | + @RequestParam(required = false) String sortProperty, | |
194 | + @RequestParam(required = false) String sortOrder) throws ThingsboardException { | |
195 | 195 | checkParameter("deviceProfileId", strDeviceProfileId); |
196 | 196 | checkParameter("type", strType); |
197 | 197 | try { |
198 | 198 | PageLink pageLink = createPageLink(pageSize, page, textSearch, sortProperty, sortOrder); |
199 | - return checkNotNull(firmwareService.findTenantFirmwaresByTenantIdAndDeviceProfileIdAndTypeAndHasData(getTenantId(), | |
200 | - new DeviceProfileId(toUUID(strDeviceProfileId)), FirmwareType.valueOf(strType), hasData, pageLink)); | |
199 | + return checkNotNull(otaPackageService.findTenantOtaPackagesByTenantIdAndDeviceProfileIdAndTypeAndHasData(getTenantId(), | |
200 | + new DeviceProfileId(toUUID(strDeviceProfileId)), OtaPackageType.valueOf(strType), hasData, pageLink)); | |
201 | 201 | } catch (Exception e) { |
202 | 202 | throw handleException(e); |
203 | 203 | } |
204 | 204 | } |
205 | 205 | |
206 | 206 | @PreAuthorize("hasAnyAuthority('TENANT_ADMIN')") |
207 | - @RequestMapping(value = "/firmware/{firmwareId}", method = RequestMethod.DELETE) | |
207 | + @RequestMapping(value = "/otaPackage/{otaPackageId}", method = RequestMethod.DELETE) | |
208 | 208 | @ResponseBody |
209 | - public void deleteFirmware(@PathVariable("firmwareId") String strFirmwareId) throws ThingsboardException { | |
210 | - checkParameter(FIRMWARE_ID, strFirmwareId); | |
209 | + public void deleteOtaPackage(@PathVariable("otaPackageId") String strOtaPackageId) throws ThingsboardException { | |
210 | + checkParameter(OTA_PACKAGE_ID, strOtaPackageId); | |
211 | 211 | try { |
212 | - FirmwareId firmwareId = new FirmwareId(toUUID(strFirmwareId)); | |
213 | - FirmwareInfo info = checkFirmwareInfoId(firmwareId, Operation.DELETE); | |
214 | - firmwareService.deleteFirmware(getTenantId(), firmwareId); | |
215 | - logEntityAction(firmwareId, info, null, ActionType.DELETED, null, strFirmwareId); | |
212 | + OtaPackageId otaPackageId = new OtaPackageId(toUUID(strOtaPackageId)); | |
213 | + OtaPackageInfo info = checkOtaPackageInfoId(otaPackageId, Operation.DELETE); | |
214 | + otaPackageService.deleteOtaPackage(getTenantId(), otaPackageId); | |
215 | + logEntityAction(otaPackageId, info, null, ActionType.DELETED, null, strOtaPackageId); | |
216 | 216 | } catch (Exception e) { |
217 | - logEntityAction(emptyId(EntityType.FIRMWARE), null, null, ActionType.DELETED, e, strFirmwareId); | |
217 | + logEntityAction(emptyId(EntityType.OTA_PACKAGE), null, null, ActionType.DELETED, e, strOtaPackageId); | |
218 | 218 | throw handleException(e); |
219 | 219 | } |
220 | 220 | } | ... | ... |
application/src/main/java/org/thingsboard/server/service/ota/DefaultOtaPackageStateService.java
renamed from
application/src/main/java/org/thingsboard/server/service/firmware/DefaultFirmwareStateService.java
... | ... | @@ -13,7 +13,7 @@ |
13 | 13 | * See the License for the specific language governing permissions and |
14 | 14 | * limitations under the License. |
15 | 15 | */ |
16 | -package org.thingsboard.server.service.firmware; | |
16 | +package org.thingsboard.server.service.ota; | |
17 | 17 | |
18 | 18 | import com.google.common.util.concurrent.FutureCallback; |
19 | 19 | import lombok.extern.slf4j.Slf4j; |
... | ... | @@ -23,12 +23,9 @@ import org.thingsboard.rule.engine.api.msg.DeviceAttributesEventNotificationMsg; |
23 | 23 | import org.thingsboard.server.common.data.DataConstants; |
24 | 24 | import org.thingsboard.server.common.data.Device; |
25 | 25 | import org.thingsboard.server.common.data.DeviceProfile; |
26 | -import org.thingsboard.server.common.data.FirmwareInfo; | |
27 | -import org.thingsboard.server.common.data.firmware.FirmwareType; | |
28 | -import org.thingsboard.server.common.data.firmware.FirmwareUpdateStatus; | |
29 | -import org.thingsboard.server.common.data.firmware.FirmwareUtil; | |
26 | +import org.thingsboard.server.common.data.OtaPackageInfo; | |
30 | 27 | import org.thingsboard.server.common.data.id.DeviceId; |
31 | -import org.thingsboard.server.common.data.id.FirmwareId; | |
28 | +import org.thingsboard.server.common.data.id.OtaPackageId; | |
32 | 29 | import org.thingsboard.server.common.data.id.TenantId; |
33 | 30 | import org.thingsboard.server.common.data.kv.AttributeKey; |
34 | 31 | import org.thingsboard.server.common.data.kv.AttributeKvEntry; |
... | ... | @@ -37,13 +34,16 @@ import org.thingsboard.server.common.data.kv.BasicTsKvEntry; |
37 | 34 | import org.thingsboard.server.common.data.kv.LongDataEntry; |
38 | 35 | import org.thingsboard.server.common.data.kv.StringDataEntry; |
39 | 36 | import org.thingsboard.server.common.data.kv.TsKvEntry; |
37 | +import org.thingsboard.server.common.data.ota.OtaPackageType; | |
38 | +import org.thingsboard.server.common.data.ota.OtaPackageUpdateStatus; | |
39 | +import org.thingsboard.server.common.data.ota.OtaPackageUtil; | |
40 | 40 | import org.thingsboard.server.common.data.page.PageData; |
41 | 41 | import org.thingsboard.server.common.data.page.PageLink; |
42 | 42 | import org.thingsboard.server.common.msg.queue.TopicPartitionInfo; |
43 | 43 | import org.thingsboard.server.dao.device.DeviceProfileService; |
44 | 44 | import org.thingsboard.server.dao.device.DeviceService; |
45 | -import org.thingsboard.server.dao.firmware.FirmwareService; | |
46 | -import org.thingsboard.server.gen.transport.TransportProtos.ToFirmwareStateServiceMsg; | |
45 | +import org.thingsboard.server.dao.ota.OtaPackageService; | |
46 | +import org.thingsboard.server.gen.transport.TransportProtos.ToOtaPackageStateServiceMsg; | |
47 | 47 | import org.thingsboard.server.queue.TbQueueProducer; |
48 | 48 | import org.thingsboard.server.queue.common.TbProtoQueueMsg; |
49 | 49 | import org.thingsboard.server.queue.provider.TbCoreQueueFactory; |
... | ... | @@ -58,44 +58,43 @@ import java.util.List; |
58 | 58 | import java.util.Set; |
59 | 59 | import java.util.UUID; |
60 | 60 | import java.util.function.Consumer; |
61 | -import java.util.function.Function; | |
62 | - | |
63 | -import static org.thingsboard.server.common.data.firmware.FirmwareKey.CHECKSUM; | |
64 | -import static org.thingsboard.server.common.data.firmware.FirmwareKey.CHECKSUM_ALGORITHM; | |
65 | -import static org.thingsboard.server.common.data.firmware.FirmwareKey.SIZE; | |
66 | -import static org.thingsboard.server.common.data.firmware.FirmwareKey.STATE; | |
67 | -import static org.thingsboard.server.common.data.firmware.FirmwareKey.TITLE; | |
68 | -import static org.thingsboard.server.common.data.firmware.FirmwareKey.TS; | |
69 | -import static org.thingsboard.server.common.data.firmware.FirmwareKey.VERSION; | |
70 | -import static org.thingsboard.server.common.data.firmware.FirmwareType.FIRMWARE; | |
71 | -import static org.thingsboard.server.common.data.firmware.FirmwareType.SOFTWARE; | |
72 | -import static org.thingsboard.server.common.data.firmware.FirmwareUtil.getAttributeKey; | |
73 | -import static org.thingsboard.server.common.data.firmware.FirmwareUtil.getTargetTelemetryKey; | |
74 | -import static org.thingsboard.server.common.data.firmware.FirmwareUtil.getTelemetryKey; | |
61 | + | |
62 | +import static org.thingsboard.server.common.data.ota.OtaPackageKey.CHECKSUM; | |
63 | +import static org.thingsboard.server.common.data.ota.OtaPackageKey.CHECKSUM_ALGORITHM; | |
64 | +import static org.thingsboard.server.common.data.ota.OtaPackageKey.SIZE; | |
65 | +import static org.thingsboard.server.common.data.ota.OtaPackageKey.STATE; | |
66 | +import static org.thingsboard.server.common.data.ota.OtaPackageKey.TITLE; | |
67 | +import static org.thingsboard.server.common.data.ota.OtaPackageKey.TS; | |
68 | +import static org.thingsboard.server.common.data.ota.OtaPackageKey.VERSION; | |
69 | +import static org.thingsboard.server.common.data.ota.OtaPackageType.FIRMWARE; | |
70 | +import static org.thingsboard.server.common.data.ota.OtaPackageType.SOFTWARE; | |
71 | +import static org.thingsboard.server.common.data.ota.OtaPackageUtil.getAttributeKey; | |
72 | +import static org.thingsboard.server.common.data.ota.OtaPackageUtil.getTargetTelemetryKey; | |
73 | +import static org.thingsboard.server.common.data.ota.OtaPackageUtil.getTelemetryKey; | |
75 | 74 | |
76 | 75 | @Slf4j |
77 | 76 | @Service |
78 | 77 | @TbCoreComponent |
79 | -public class DefaultFirmwareStateService implements FirmwareStateService { | |
78 | +public class DefaultOtaPackageStateService implements OtaPackageStateService { | |
80 | 79 | |
81 | 80 | private final TbClusterService tbClusterService; |
82 | - private final FirmwareService firmwareService; | |
81 | + private final OtaPackageService otaPackageService; | |
83 | 82 | private final DeviceService deviceService; |
84 | 83 | private final DeviceProfileService deviceProfileService; |
85 | 84 | private final RuleEngineTelemetryService telemetryService; |
86 | - private final TbQueueProducer<TbProtoQueueMsg<ToFirmwareStateServiceMsg>> fwStateMsgProducer; | |
85 | + private final TbQueueProducer<TbProtoQueueMsg<ToOtaPackageStateServiceMsg>> otaPackageStateMsgProducer; | |
87 | 86 | |
88 | - public DefaultFirmwareStateService(TbClusterService tbClusterService, FirmwareService firmwareService, | |
89 | - DeviceService deviceService, | |
90 | - DeviceProfileService deviceProfileService, | |
91 | - RuleEngineTelemetryService telemetryService, | |
92 | - TbCoreQueueFactory coreQueueFactory) { | |
87 | + public DefaultOtaPackageStateService(TbClusterService tbClusterService, OtaPackageService otaPackageService, | |
88 | + DeviceService deviceService, | |
89 | + DeviceProfileService deviceProfileService, | |
90 | + RuleEngineTelemetryService telemetryService, | |
91 | + TbCoreQueueFactory coreQueueFactory) { | |
93 | 92 | this.tbClusterService = tbClusterService; |
94 | - this.firmwareService = firmwareService; | |
93 | + this.otaPackageService = otaPackageService; | |
95 | 94 | this.deviceService = deviceService; |
96 | 95 | this.deviceProfileService = deviceProfileService; |
97 | 96 | this.telemetryService = telemetryService; |
98 | - this.fwStateMsgProducer = coreQueueFactory.createToFirmwareStateServiceMsgProducer(); | |
97 | + this.otaPackageStateMsgProducer = coreQueueFactory.createToOtaPackageStateServiceMsgProducer(); | |
99 | 98 | } |
100 | 99 | |
101 | 100 | @Override |
... | ... | @@ -105,14 +104,14 @@ public class DefaultFirmwareStateService implements FirmwareStateService { |
105 | 104 | } |
106 | 105 | |
107 | 106 | private void updateFirmware(Device device, Device oldDevice) { |
108 | - FirmwareId newFirmwareId = device.getFirmwareId(); | |
107 | + OtaPackageId newFirmwareId = device.getFirmwareId(); | |
109 | 108 | if (newFirmwareId == null) { |
110 | 109 | DeviceProfile newDeviceProfile = deviceProfileService.findDeviceProfileById(device.getTenantId(), device.getDeviceProfileId()); |
111 | 110 | newFirmwareId = newDeviceProfile.getFirmwareId(); |
112 | 111 | } |
113 | 112 | if (oldDevice != null) { |
114 | 113 | if (newFirmwareId != null) { |
115 | - FirmwareId oldFirmwareId = oldDevice.getFirmwareId(); | |
114 | + OtaPackageId oldFirmwareId = oldDevice.getFirmwareId(); | |
116 | 115 | if (oldFirmwareId == null) { |
117 | 116 | DeviceProfile oldDeviceProfile = deviceProfileService.findDeviceProfileById(oldDevice.getTenantId(), oldDevice.getDeviceProfileId()); |
118 | 117 | oldFirmwareId = oldDeviceProfile.getFirmwareId(); |
... | ... | @@ -132,14 +131,14 @@ public class DefaultFirmwareStateService implements FirmwareStateService { |
132 | 131 | } |
133 | 132 | |
134 | 133 | private void updateSoftware(Device device, Device oldDevice) { |
135 | - FirmwareId newSoftwareId = device.getSoftwareId(); | |
134 | + OtaPackageId newSoftwareId = device.getSoftwareId(); | |
136 | 135 | if (newSoftwareId == null) { |
137 | 136 | DeviceProfile newDeviceProfile = deviceProfileService.findDeviceProfileById(device.getTenantId(), device.getDeviceProfileId()); |
138 | 137 | newSoftwareId = newDeviceProfile.getSoftwareId(); |
139 | 138 | } |
140 | 139 | if (oldDevice != null) { |
141 | 140 | if (newSoftwareId != null) { |
142 | - FirmwareId oldSoftwareId = oldDevice.getSoftwareId(); | |
141 | + OtaPackageId oldSoftwareId = oldDevice.getSoftwareId(); | |
143 | 142 | if (oldSoftwareId == null) { |
144 | 143 | DeviceProfile oldDeviceProfile = deviceProfileService.findDeviceProfileById(oldDevice.getTenantId(), oldDevice.getDeviceProfileId()); |
145 | 144 | oldSoftwareId = oldDeviceProfile.getSoftwareId(); |
... | ... | @@ -170,33 +169,20 @@ public class DefaultFirmwareStateService implements FirmwareStateService { |
170 | 169 | } |
171 | 170 | } |
172 | 171 | |
173 | - private void update(TenantId tenantId, DeviceProfile deviceProfile, FirmwareType firmwareType) { | |
174 | - Function<PageLink, PageData<Device>> getDevicesFunction; | |
172 | + private void update(TenantId tenantId, DeviceProfile deviceProfile, OtaPackageType otaPackageType) { | |
175 | 173 | Consumer<Device> updateConsumer; |
176 | 174 | |
177 | - switch (firmwareType) { | |
178 | - case FIRMWARE: | |
179 | - getDevicesFunction = pl -> deviceService.findDevicesByTenantIdAndTypeAndEmptyFirmware(tenantId, deviceProfile.getName(), pl); | |
180 | - break; | |
181 | - case SOFTWARE: | |
182 | - getDevicesFunction = pl -> deviceService.findDevicesByTenantIdAndTypeAndEmptySoftware(tenantId, deviceProfile.getName(), pl); | |
183 | - break; | |
184 | - default: | |
185 | - log.warn("Unsupported firmware type: [{}]", firmwareType); | |
186 | - return; | |
187 | - } | |
188 | - | |
189 | 175 | if (deviceProfile.getFirmwareId() != null) { |
190 | 176 | long ts = System.currentTimeMillis(); |
191 | - updateConsumer = d -> send(d.getTenantId(), d.getId(), deviceProfile.getFirmwareId(), ts, firmwareType); | |
177 | + updateConsumer = d -> send(d.getTenantId(), d.getId(), deviceProfile.getFirmwareId(), ts, otaPackageType); | |
192 | 178 | } else { |
193 | - updateConsumer = d -> remove(d, firmwareType); | |
179 | + updateConsumer = d -> remove(d, otaPackageType); | |
194 | 180 | } |
195 | 181 | |
196 | 182 | PageLink pageLink = new PageLink(100); |
197 | 183 | PageData<Device> pageData; |
198 | 184 | do { |
199 | - pageData = getDevicesFunction.apply(pageLink); | |
185 | + pageData = deviceService.findDevicesByTenantIdAndTypeAndEmptyOtaPackage(tenantId, deviceProfile.getId(), otaPackageType, pageLink); | |
200 | 186 | pageData.getData().forEach(updateConsumer); |
201 | 187 | |
202 | 188 | if (pageData.hasNext()) { |
... | ... | @@ -206,60 +192,60 @@ public class DefaultFirmwareStateService implements FirmwareStateService { |
206 | 192 | } |
207 | 193 | |
208 | 194 | @Override |
209 | - public boolean process(ToFirmwareStateServiceMsg msg) { | |
195 | + public boolean process(ToOtaPackageStateServiceMsg msg) { | |
210 | 196 | boolean isSuccess = false; |
211 | - FirmwareId targetFirmwareId = new FirmwareId(new UUID(msg.getFirmwareIdMSB(), msg.getFirmwareIdLSB())); | |
197 | + OtaPackageId targetOtaPackageId = new OtaPackageId(new UUID(msg.getOtaPackageIdMSB(), msg.getOtaPackageIdLSB())); | |
212 | 198 | DeviceId deviceId = new DeviceId(new UUID(msg.getDeviceIdMSB(), msg.getDeviceIdLSB())); |
213 | 199 | TenantId tenantId = new TenantId(new UUID(msg.getTenantIdMSB(), msg.getTenantIdLSB())); |
214 | - FirmwareType firmwareType = FirmwareType.valueOf(msg.getType()); | |
200 | + OtaPackageType firmwareType = OtaPackageType.valueOf(msg.getType()); | |
215 | 201 | long ts = msg.getTs(); |
216 | 202 | |
217 | 203 | Device device = deviceService.findDeviceById(tenantId, deviceId); |
218 | 204 | if (device == null) { |
219 | 205 | log.warn("[{}] [{}] Device was removed during firmware update msg was queued!", tenantId, deviceId); |
220 | 206 | } else { |
221 | - FirmwareId currentFirmwareId = FirmwareUtil.getFirmwareId(device, firmwareType); | |
222 | - if (currentFirmwareId == null) { | |
207 | + OtaPackageId currentOtaPackageId = OtaPackageUtil.getOtaPackageId(device, firmwareType); | |
208 | + if (currentOtaPackageId == null) { | |
223 | 209 | DeviceProfile deviceProfile = deviceProfileService.findDeviceProfileById(tenantId, device.getDeviceProfileId()); |
224 | - currentFirmwareId = FirmwareUtil.getFirmwareId(deviceProfile, firmwareType); | |
210 | + currentOtaPackageId = OtaPackageUtil.getOtaPackageId(deviceProfile, firmwareType); | |
225 | 211 | } |
226 | 212 | |
227 | - if (targetFirmwareId.equals(currentFirmwareId)) { | |
228 | - update(device, firmwareService.findFirmwareInfoById(device.getTenantId(), targetFirmwareId), ts); | |
213 | + if (targetOtaPackageId.equals(currentOtaPackageId)) { | |
214 | + update(device, otaPackageService.findOtaPackageInfoById(device.getTenantId(), targetOtaPackageId), ts); | |
229 | 215 | isSuccess = true; |
230 | 216 | } else { |
231 | - log.warn("[{}] [{}] Can`t update firmware for the device, target firmwareId: [{}], current firmwareId: [{}]!", tenantId, deviceId, targetFirmwareId, currentFirmwareId); | |
217 | + log.warn("[{}] [{}] Can`t update firmware for the device, target firmwareId: [{}], current firmwareId: [{}]!", tenantId, deviceId, targetOtaPackageId, currentOtaPackageId); | |
232 | 218 | } |
233 | 219 | } |
234 | 220 | return isSuccess; |
235 | 221 | } |
236 | 222 | |
237 | - private void send(TenantId tenantId, DeviceId deviceId, FirmwareId firmwareId, long ts, FirmwareType firmwareType) { | |
238 | - ToFirmwareStateServiceMsg msg = ToFirmwareStateServiceMsg.newBuilder() | |
223 | + private void send(TenantId tenantId, DeviceId deviceId, OtaPackageId firmwareId, long ts, OtaPackageType firmwareType) { | |
224 | + ToOtaPackageStateServiceMsg msg = ToOtaPackageStateServiceMsg.newBuilder() | |
239 | 225 | .setTenantIdMSB(tenantId.getId().getMostSignificantBits()) |
240 | 226 | .setTenantIdLSB(tenantId.getId().getLeastSignificantBits()) |
241 | 227 | .setDeviceIdMSB(deviceId.getId().getMostSignificantBits()) |
242 | 228 | .setDeviceIdLSB(deviceId.getId().getLeastSignificantBits()) |
243 | - .setFirmwareIdMSB(firmwareId.getId().getMostSignificantBits()) | |
244 | - .setFirmwareIdLSB(firmwareId.getId().getLeastSignificantBits()) | |
229 | + .setOtaPackageIdMSB(firmwareId.getId().getMostSignificantBits()) | |
230 | + .setOtaPackageIdLSB(firmwareId.getId().getLeastSignificantBits()) | |
245 | 231 | .setType(firmwareType.name()) |
246 | 232 | .setTs(ts) |
247 | 233 | .build(); |
248 | 234 | |
249 | - FirmwareInfo firmware = firmwareService.findFirmwareInfoById(tenantId, firmwareId); | |
235 | + OtaPackageInfo firmware = otaPackageService.findOtaPackageInfoById(tenantId, firmwareId); | |
250 | 236 | if (firmware == null) { |
251 | 237 | log.warn("[{}] Failed to send firmware update because firmware was already deleted", firmwareId); |
252 | 238 | return; |
253 | 239 | } |
254 | 240 | |
255 | - TopicPartitionInfo tpi = new TopicPartitionInfo(fwStateMsgProducer.getDefaultTopic(), null, null, false); | |
256 | - fwStateMsgProducer.send(tpi, new TbProtoQueueMsg<>(UUID.randomUUID(), msg), null); | |
241 | + TopicPartitionInfo tpi = new TopicPartitionInfo(otaPackageStateMsgProducer.getDefaultTopic(), null, null, false); | |
242 | + otaPackageStateMsgProducer.send(tpi, new TbProtoQueueMsg<>(UUID.randomUUID(), msg), null); | |
257 | 243 | |
258 | 244 | List<TsKvEntry> telemetry = new ArrayList<>(); |
259 | 245 | telemetry.add(new BasicTsKvEntry(ts, new StringDataEntry(getTargetTelemetryKey(firmware.getType(), TITLE), firmware.getTitle()))); |
260 | 246 | telemetry.add(new BasicTsKvEntry(ts, new StringDataEntry(getTargetTelemetryKey(firmware.getType(), VERSION), firmware.getVersion()))); |
261 | 247 | telemetry.add(new BasicTsKvEntry(ts, new LongDataEntry(getTargetTelemetryKey(firmware.getType(), TS), ts))); |
262 | - telemetry.add(new BasicTsKvEntry(ts, new StringDataEntry(getTelemetryKey(firmware.getType(), STATE), FirmwareUpdateStatus.QUEUED.name()))); | |
248 | + telemetry.add(new BasicTsKvEntry(ts, new StringDataEntry(getTelemetryKey(firmware.getType(), STATE), OtaPackageUpdateStatus.QUEUED.name()))); | |
263 | 249 | |
264 | 250 | telemetryService.saveAndNotify(tenantId, deviceId, telemetry, new FutureCallback<>() { |
265 | 251 | @Override |
... | ... | @@ -275,11 +261,11 @@ public class DefaultFirmwareStateService implements FirmwareStateService { |
275 | 261 | } |
276 | 262 | |
277 | 263 | |
278 | - private void update(Device device, FirmwareInfo firmware, long ts) { | |
264 | + private void update(Device device, OtaPackageInfo firmware, long ts) { | |
279 | 265 | TenantId tenantId = device.getTenantId(); |
280 | 266 | DeviceId deviceId = device.getId(); |
281 | 267 | |
282 | - BasicTsKvEntry status = new BasicTsKvEntry(System.currentTimeMillis(), new StringDataEntry(getTelemetryKey(firmware.getType(), STATE), FirmwareUpdateStatus.INITIATED.name())); | |
268 | + BasicTsKvEntry status = new BasicTsKvEntry(System.currentTimeMillis(), new StringDataEntry(getTelemetryKey(firmware.getType(), STATE), OtaPackageUpdateStatus.INITIATED.name())); | |
283 | 269 | |
284 | 270 | telemetryService.saveAndNotify(tenantId, deviceId, Collections.singletonList(status), new FutureCallback<>() { |
285 | 271 | @Override |
... | ... | @@ -313,14 +299,14 @@ public class DefaultFirmwareStateService implements FirmwareStateService { |
313 | 299 | }); |
314 | 300 | } |
315 | 301 | |
316 | - private void remove(Device device, FirmwareType firmwareType) { | |
317 | - telemetryService.deleteAndNotify(device.getTenantId(), device.getId(), DataConstants.SHARED_SCOPE, FirmwareUtil.getAttributeKeys(firmwareType), | |
302 | + private void remove(Device device, OtaPackageType firmwareType) { | |
303 | + telemetryService.deleteAndNotify(device.getTenantId(), device.getId(), DataConstants.SHARED_SCOPE, OtaPackageUtil.getAttributeKeys(firmwareType), | |
318 | 304 | new FutureCallback<>() { |
319 | 305 | @Override |
320 | 306 | public void onSuccess(@Nullable Void tmp) { |
321 | 307 | log.trace("[{}] Success remove target firmware attributes!", device.getId()); |
322 | 308 | Set<AttributeKey> keysToNotify = new HashSet<>(); |
323 | - FirmwareUtil.ALL_FW_ATTRIBUTE_KEYS.forEach(key -> keysToNotify.add(new AttributeKey(DataConstants.SHARED_SCOPE, key))); | |
309 | + OtaPackageUtil.ALL_FW_ATTRIBUTE_KEYS.forEach(key -> keysToNotify.add(new AttributeKey(DataConstants.SHARED_SCOPE, key))); | |
324 | 310 | tbClusterService.pushMsgToCore(DeviceAttributesEventNotificationMsg.onDelete(device.getTenantId(), device.getId(), keysToNotify), null); |
325 | 311 | } |
326 | 312 | ... | ... |
application/src/main/java/org/thingsboard/server/service/ota/OtaPackageStateService.java
renamed from
application/src/main/java/org/thingsboard/server/service/firmware/FirmwareStateService.java
... | ... | @@ -13,18 +13,18 @@ |
13 | 13 | * See the License for the specific language governing permissions and |
14 | 14 | * limitations under the License. |
15 | 15 | */ |
16 | -package org.thingsboard.server.service.firmware; | |
16 | +package org.thingsboard.server.service.ota; | |
17 | 17 | |
18 | 18 | import org.thingsboard.server.common.data.Device; |
19 | 19 | import org.thingsboard.server.common.data.DeviceProfile; |
20 | -import org.thingsboard.server.gen.transport.TransportProtos.ToFirmwareStateServiceMsg; | |
20 | +import org.thingsboard.server.gen.transport.TransportProtos.ToOtaPackageStateServiceMsg; | |
21 | 21 | |
22 | -public interface FirmwareStateService { | |
22 | +public interface OtaPackageStateService { | |
23 | 23 | |
24 | 24 | void update(Device device, Device oldDevice); |
25 | 25 | |
26 | 26 | void update(DeviceProfile deviceProfile, boolean isFirmwareChanged, boolean isSoftwareChanged); |
27 | 27 | |
28 | - boolean process(ToFirmwareStateServiceMsg msg); | |
28 | + boolean process(ToOtaPackageStateServiceMsg msg); | |
29 | 29 | |
30 | 30 | } | ... | ... |
... | ... | @@ -50,7 +50,7 @@ import org.thingsboard.server.gen.transport.TransportProtos.TbSubscriptionCloseP |
50 | 50 | import org.thingsboard.server.gen.transport.TransportProtos.TbTimeSeriesUpdateProto; |
51 | 51 | import org.thingsboard.server.gen.transport.TransportProtos.ToCoreMsg; |
52 | 52 | import org.thingsboard.server.gen.transport.TransportProtos.ToCoreNotificationMsg; |
53 | -import org.thingsboard.server.gen.transport.TransportProtos.ToFirmwareStateServiceMsg; | |
53 | +import org.thingsboard.server.gen.transport.TransportProtos.ToOtaPackageStateServiceMsg; | |
54 | 54 | import org.thingsboard.server.gen.transport.TransportProtos.ToUsageStatsServiceMsg; |
55 | 55 | import org.thingsboard.server.gen.transport.TransportProtos.TransportToDeviceActorMsg; |
56 | 56 | import org.thingsboard.server.queue.TbQueueConsumer; |
... | ... | @@ -60,7 +60,7 @@ import org.thingsboard.server.queue.provider.TbCoreQueueFactory; |
60 | 60 | import org.thingsboard.server.queue.util.TbCoreComponent; |
61 | 61 | import org.thingsboard.server.service.apiusage.TbApiUsageStateService; |
62 | 62 | import org.thingsboard.server.service.edge.EdgeNotificationService; |
63 | -import org.thingsboard.server.service.firmware.FirmwareStateService; | |
63 | +import org.thingsboard.server.service.ota.OtaPackageStateService; | |
64 | 64 | import org.thingsboard.server.service.profile.TbDeviceProfileCache; |
65 | 65 | import org.thingsboard.server.service.queue.processing.AbstractConsumerService; |
66 | 66 | import org.thingsboard.server.service.queue.processing.IdMsgPair; |
... | ... | @@ -75,7 +75,6 @@ import org.thingsboard.server.service.transport.msg.TransportToDeviceActorMsgWra |
75 | 75 | |
76 | 76 | import javax.annotation.PostConstruct; |
77 | 77 | import javax.annotation.PreDestroy; |
78 | -import java.util.ArrayList; | |
79 | 78 | import java.util.List; |
80 | 79 | import java.util.Optional; |
81 | 80 | import java.util.UUID; |
... | ... | @@ -101,9 +100,9 @@ public class DefaultTbCoreConsumerService extends AbstractConsumerService<ToCore |
101 | 100 | @Value("${queue.core.stats.enabled:false}") |
102 | 101 | private boolean statsEnabled; |
103 | 102 | |
104 | - @Value("${queue.core.firmware.pack-interval-ms:60000}") | |
103 | + @Value("${queue.core.ota.pack-interval-ms:60000}") | |
105 | 104 | private long firmwarePackInterval; |
106 | - @Value("${queue.core.firmware.pack-size:100}") | |
105 | + @Value("${queue.core.ota.pack-size:100}") | |
107 | 106 | private int firmwarePackSize; |
108 | 107 | |
109 | 108 | private final TbQueueConsumer<TbProtoQueueMsg<ToCoreMsg>> mainConsumer; |
... | ... | @@ -113,10 +112,10 @@ public class DefaultTbCoreConsumerService extends AbstractConsumerService<ToCore |
113 | 112 | private final SubscriptionManagerService subscriptionManagerService; |
114 | 113 | private final TbCoreDeviceRpcService tbCoreDeviceRpcService; |
115 | 114 | private final EdgeNotificationService edgeNotificationService; |
116 | - private final FirmwareStateService firmwareStateService; | |
115 | + private final OtaPackageStateService firmwareStateService; | |
117 | 116 | private final TbCoreConsumerStats stats; |
118 | 117 | protected final TbQueueConsumer<TbProtoQueueMsg<ToUsageStatsServiceMsg>> usageStatsConsumer; |
119 | - private final TbQueueConsumer<TbProtoQueueMsg<ToFirmwareStateServiceMsg>> firmwareStatesConsumer; | |
118 | + private final TbQueueConsumer<TbProtoQueueMsg<ToOtaPackageStateServiceMsg>> firmwareStatesConsumer; | |
120 | 119 | |
121 | 120 | protected volatile ExecutorService usageStatsExecutor; |
122 | 121 | |
... | ... | @@ -135,11 +134,11 @@ public class DefaultTbCoreConsumerService extends AbstractConsumerService<ToCore |
135 | 134 | TbTenantProfileCache tenantProfileCache, |
136 | 135 | TbApiUsageStateService apiUsageStateService, |
137 | 136 | EdgeNotificationService edgeNotificationService, |
138 | - FirmwareStateService firmwareStateService) { | |
137 | + OtaPackageStateService firmwareStateService) { | |
139 | 138 | super(actorContext, encodingService, tenantProfileCache, deviceProfileCache, apiUsageStateService, tbCoreQueueFactory.createToCoreNotificationsMsgConsumer()); |
140 | 139 | this.mainConsumer = tbCoreQueueFactory.createToCoreMsgConsumer(); |
141 | 140 | this.usageStatsConsumer = tbCoreQueueFactory.createToUsageStatsServiceMsgConsumer(); |
142 | - this.firmwareStatesConsumer = tbCoreQueueFactory.createToFirmwareStateServiceMsgConsumer(); | |
141 | + this.firmwareStatesConsumer = tbCoreQueueFactory.createToOtaPackageStateServiceMsgConsumer(); | |
143 | 142 | this.stateService = stateService; |
144 | 143 | this.localSubscriptionService = localSubscriptionService; |
145 | 144 | this.subscriptionManagerService = subscriptionManagerService; |
... | ... | @@ -173,7 +172,7 @@ public class DefaultTbCoreConsumerService extends AbstractConsumerService<ToCore |
173 | 172 | public void onApplicationEvent(ApplicationReadyEvent event) { |
174 | 173 | super.onApplicationEvent(event); |
175 | 174 | launchUsageStatsConsumer(); |
176 | - launchFirmwareUpdateNotificationConsumer(); | |
175 | + launchOtaPackageUpdateNotificationConsumer(); | |
177 | 176 | } |
178 | 177 | |
179 | 178 | @Override |
... | ... | @@ -361,20 +360,20 @@ public class DefaultTbCoreConsumerService extends AbstractConsumerService<ToCore |
361 | 360 | }); |
362 | 361 | } |
363 | 362 | |
364 | - private void launchFirmwareUpdateNotificationConsumer() { | |
363 | + private void launchOtaPackageUpdateNotificationConsumer() { | |
365 | 364 | long maxProcessingTimeoutPerRecord = firmwarePackInterval / firmwarePackSize; |
366 | 365 | firmwareStatesExecutor.submit(() -> { |
367 | 366 | while (!stopped) { |
368 | 367 | try { |
369 | - List<TbProtoQueueMsg<ToFirmwareStateServiceMsg>> msgs = firmwareStatesConsumer.poll(getNotificationPollDuration()); | |
368 | + List<TbProtoQueueMsg<ToOtaPackageStateServiceMsg>> msgs = firmwareStatesConsumer.poll(getNotificationPollDuration()); | |
370 | 369 | if (msgs.isEmpty()) { |
371 | 370 | continue; |
372 | 371 | } |
373 | 372 | long timeToSleep = maxProcessingTimeoutPerRecord; |
374 | - for (TbProtoQueueMsg<ToFirmwareStateServiceMsg> msg : msgs) { | |
373 | + for (TbProtoQueueMsg<ToOtaPackageStateServiceMsg> msg : msgs) { | |
375 | 374 | try { |
376 | 375 | long startTime = System.currentTimeMillis(); |
377 | - boolean isSuccessUpdate = handleFirmwareUpdates(msg); | |
376 | + boolean isSuccessUpdate = handleOtaPackageUpdates(msg); | |
378 | 377 | long endTime = System.currentTimeMillis(); |
379 | 378 | long spentTime = endTime - startTime; |
380 | 379 | timeToSleep = timeToSleep - spentTime; |
... | ... | @@ -402,7 +401,7 @@ public class DefaultTbCoreConsumerService extends AbstractConsumerService<ToCore |
402 | 401 | } |
403 | 402 | } |
404 | 403 | } |
405 | - log.info("TB Firmware States Consumer stopped."); | |
404 | + log.info("TB Ota Package States Consumer stopped."); | |
406 | 405 | }); |
407 | 406 | } |
408 | 407 | |
... | ... | @@ -410,7 +409,7 @@ public class DefaultTbCoreConsumerService extends AbstractConsumerService<ToCore |
410 | 409 | statsService.process(msg, callback); |
411 | 410 | } |
412 | 411 | |
413 | - private boolean handleFirmwareUpdates(TbProtoQueueMsg<ToFirmwareStateServiceMsg> msg) { | |
412 | + private boolean handleOtaPackageUpdates(TbProtoQueueMsg<ToOtaPackageStateServiceMsg> msg) { | |
414 | 413 | return firmwareStateService.process(msg.getValue()); |
415 | 414 | } |
416 | 415 | ... | ... |
... | ... | @@ -30,7 +30,7 @@ import org.thingsboard.server.common.data.Customer; |
30 | 30 | import org.thingsboard.server.common.data.Device; |
31 | 31 | import org.thingsboard.server.common.data.DeviceProfile; |
32 | 32 | import org.thingsboard.server.common.data.EntityView; |
33 | -import org.thingsboard.server.common.data.FirmwareInfo; | |
33 | +import org.thingsboard.server.common.data.OtaPackageInfo; | |
34 | 34 | import org.thingsboard.server.common.data.TbResourceInfo; |
35 | 35 | import org.thingsboard.server.common.data.Tenant; |
36 | 36 | import org.thingsboard.server.common.data.User; |
... | ... | @@ -46,7 +46,7 @@ import org.thingsboard.server.common.data.id.EdgeId; |
46 | 46 | import org.thingsboard.server.common.data.id.EntityId; |
47 | 47 | import org.thingsboard.server.common.data.id.EntityIdFactory; |
48 | 48 | import org.thingsboard.server.common.data.id.EntityViewId; |
49 | -import org.thingsboard.server.common.data.id.FirmwareId; | |
49 | +import org.thingsboard.server.common.data.id.OtaPackageId; | |
50 | 50 | import org.thingsboard.server.common.data.id.RuleChainId; |
51 | 51 | import org.thingsboard.server.common.data.id.RuleNodeId; |
52 | 52 | import org.thingsboard.server.common.data.id.TbResourceId; |
... | ... | @@ -63,7 +63,7 @@ import org.thingsboard.server.dao.device.DeviceService; |
63 | 63 | import org.thingsboard.server.dao.edge.EdgeService; |
64 | 64 | import org.thingsboard.server.dao.entityview.EntityViewService; |
65 | 65 | import org.thingsboard.server.dao.exception.IncorrectParameterException; |
66 | -import org.thingsboard.server.dao.firmware.FirmwareService; | |
66 | +import org.thingsboard.server.dao.ota.OtaPackageService; | |
67 | 67 | import org.thingsboard.server.dao.resource.ResourceService; |
68 | 68 | import org.thingsboard.server.dao.rule.RuleChainService; |
69 | 69 | import org.thingsboard.server.dao.tenant.TenantService; |
... | ... | @@ -135,7 +135,7 @@ public class AccessValidator { |
135 | 135 | protected ResourceService resourceService; |
136 | 136 | |
137 | 137 | @Autowired |
138 | - protected FirmwareService firmwareService; | |
138 | + protected OtaPackageService otaPackageService; | |
139 | 139 | |
140 | 140 | private ExecutorService executor; |
141 | 141 | |
... | ... | @@ -232,8 +232,8 @@ public class AccessValidator { |
232 | 232 | case TB_RESOURCE: |
233 | 233 | validateResource(currentUser, operation, entityId, callback); |
234 | 234 | return; |
235 | - case FIRMWARE: | |
236 | - validateFirmware(currentUser, operation, entityId, callback); | |
235 | + case OTA_PACKAGE: | |
236 | + validateOtaPackage(currentUser, operation, entityId, callback); | |
237 | 237 | return; |
238 | 238 | default: |
239 | 239 | //TODO: add support of other entities |
... | ... | @@ -300,20 +300,20 @@ public class AccessValidator { |
300 | 300 | } |
301 | 301 | } |
302 | 302 | |
303 | - private void validateFirmware(final SecurityUser currentUser, Operation operation, EntityId entityId, FutureCallback<ValidationResult> callback) { | |
303 | + private void validateOtaPackage(final SecurityUser currentUser, Operation operation, EntityId entityId, FutureCallback<ValidationResult> callback) { | |
304 | 304 | if (currentUser.isSystemAdmin()) { |
305 | 305 | callback.onSuccess(ValidationResult.accessDenied(SYSTEM_ADMINISTRATOR_IS_NOT_ALLOWED_TO_PERFORM_THIS_OPERATION)); |
306 | 306 | } else { |
307 | - FirmwareInfo firmware = firmwareService.findFirmwareInfoById(currentUser.getTenantId(), new FirmwareId(entityId.getId())); | |
308 | - if (firmware == null) { | |
309 | - callback.onSuccess(ValidationResult.entityNotFound("Firmware with requested id wasn't found!")); | |
307 | + OtaPackageInfo otaPackage = otaPackageService.findOtaPackageInfoById(currentUser.getTenantId(), new OtaPackageId(entityId.getId())); | |
308 | + if (otaPackage == null) { | |
309 | + callback.onSuccess(ValidationResult.entityNotFound("OtaPackage with requested id wasn't found!")); | |
310 | 310 | } else { |
311 | 311 | try { |
312 | - accessControlService.checkPermission(currentUser, Resource.FIRMWARE, operation, entityId, firmware); | |
312 | + accessControlService.checkPermission(currentUser, Resource.OTA_PACKAGE, operation, entityId, otaPackage); | |
313 | 313 | } catch (ThingsboardException e) { |
314 | 314 | callback.onSuccess(ValidationResult.accessDenied(e.getMessage())); |
315 | 315 | } |
316 | - callback.onSuccess(ValidationResult.ok(firmware)); | |
316 | + callback.onSuccess(ValidationResult.ok(otaPackage)); | |
317 | 317 | } |
318 | 318 | } |
319 | 319 | } | ... | ... |
... | ... | @@ -38,7 +38,7 @@ public enum Resource { |
38 | 38 | DEVICE_PROFILE(EntityType.DEVICE_PROFILE), |
39 | 39 | API_USAGE_STATE(EntityType.API_USAGE_STATE), |
40 | 40 | TB_RESOURCE(EntityType.TB_RESOURCE), |
41 | - FIRMWARE(EntityType.FIRMWARE), | |
41 | + OTA_PACKAGE(EntityType.OTA_PACKAGE), | |
42 | 42 | EDGE(EntityType.EDGE); |
43 | 43 | |
44 | 44 | private final EntityType entityType; | ... | ... |
... | ... | @@ -42,7 +42,7 @@ public class TenantAdminPermissions extends AbstractPermissions { |
42 | 42 | put(Resource.DEVICE_PROFILE, tenantEntityPermissionChecker); |
43 | 43 | put(Resource.API_USAGE_STATE, tenantEntityPermissionChecker); |
44 | 44 | put(Resource.TB_RESOURCE, tbResourcePermissionChecker); |
45 | - put(Resource.FIRMWARE, tenantEntityPermissionChecker); | |
45 | + put(Resource.OTA_PACKAGE, tenantEntityPermissionChecker); | |
46 | 46 | put(Resource.EDGE, tenantEntityPermissionChecker); |
47 | 47 | } |
48 | 48 | ... | ... |
... | ... | @@ -26,27 +26,27 @@ import lombok.extern.slf4j.Slf4j; |
26 | 26 | import org.springframework.stereotype.Service; |
27 | 27 | import org.springframework.util.StringUtils; |
28 | 28 | import org.thingsboard.common.util.JacksonUtil; |
29 | -import org.thingsboard.server.cache.firmware.FirmwareDataCache; | |
29 | +import org.thingsboard.server.cache.ota.OtaPackageDataCache; | |
30 | 30 | import org.thingsboard.server.common.data.ApiUsageState; |
31 | 31 | import org.thingsboard.server.common.data.DataConstants; |
32 | 32 | import org.thingsboard.server.common.data.Device; |
33 | 33 | import org.thingsboard.server.common.data.DeviceProfile; |
34 | 34 | import org.thingsboard.server.common.data.DeviceTransportType; |
35 | 35 | import org.thingsboard.server.common.data.EntityType; |
36 | -import org.thingsboard.server.common.data.Firmware; | |
37 | -import org.thingsboard.server.common.data.FirmwareInfo; | |
36 | +import org.thingsboard.server.common.data.OtaPackage; | |
37 | +import org.thingsboard.server.common.data.OtaPackageInfo; | |
38 | 38 | import org.thingsboard.server.common.data.ResourceType; |
39 | 39 | import org.thingsboard.server.common.data.TbResource; |
40 | 40 | import org.thingsboard.server.common.data.TenantProfile; |
41 | 41 | import org.thingsboard.server.common.data.device.credentials.BasicMqttCredentials; |
42 | 42 | import org.thingsboard.server.common.data.device.credentials.ProvisionDeviceCredentialsData; |
43 | 43 | import org.thingsboard.server.common.data.device.profile.ProvisionDeviceProfileCredentials; |
44 | -import org.thingsboard.server.common.data.firmware.FirmwareType; | |
45 | -import org.thingsboard.server.common.data.firmware.FirmwareUtil; | |
44 | +import org.thingsboard.server.common.data.ota.OtaPackageType; | |
45 | +import org.thingsboard.server.common.data.ota.OtaPackageUtil; | |
46 | 46 | import org.thingsboard.server.common.data.id.CustomerId; |
47 | 47 | import org.thingsboard.server.common.data.id.DeviceId; |
48 | 48 | import org.thingsboard.server.common.data.id.DeviceProfileId; |
49 | -import org.thingsboard.server.common.data.id.FirmwareId; | |
49 | +import org.thingsboard.server.common.data.id.OtaPackageId; | |
50 | 50 | import org.thingsboard.server.common.data.id.TenantId; |
51 | 51 | import org.thingsboard.server.common.data.page.PageData; |
52 | 52 | import org.thingsboard.server.common.data.page.PageLink; |
... | ... | @@ -64,7 +64,7 @@ import org.thingsboard.server.dao.device.DeviceService; |
64 | 64 | import org.thingsboard.server.dao.device.provision.ProvisionFailedException; |
65 | 65 | import org.thingsboard.server.dao.device.provision.ProvisionRequest; |
66 | 66 | import org.thingsboard.server.dao.device.provision.ProvisionResponse; |
67 | -import org.thingsboard.server.dao.firmware.FirmwareService; | |
67 | +import org.thingsboard.server.dao.ota.OtaPackageService; | |
68 | 68 | import org.thingsboard.server.dao.relation.RelationService; |
69 | 69 | import org.thingsboard.server.dao.tenant.TbTenantProfileCache; |
70 | 70 | import org.thingsboard.server.gen.transport.TransportProtos; |
... | ... | @@ -124,8 +124,8 @@ public class DefaultTransportApiService implements TransportApiService { |
124 | 124 | private final DataDecodingEncodingService dataDecodingEncodingService; |
125 | 125 | private final DeviceProvisionService deviceProvisionService; |
126 | 126 | private final TbResourceService resourceService; |
127 | - private final FirmwareService firmwareService; | |
128 | - private final FirmwareDataCache firmwareDataCache; | |
127 | + private final OtaPackageService otaPackageService; | |
128 | + private final OtaPackageDataCache otaPackageDataCache; | |
129 | 129 | |
130 | 130 | private final ConcurrentMap<String, ReentrantLock> deviceCreationLocks = new ConcurrentHashMap<>(); |
131 | 131 | |
... | ... | @@ -134,7 +134,7 @@ public class DefaultTransportApiService implements TransportApiService { |
134 | 134 | RelationService relationService, DeviceCredentialsService deviceCredentialsService, |
135 | 135 | DeviceStateService deviceStateService, DbCallbackExecutorService dbCallbackExecutorService, |
136 | 136 | TbClusterService tbClusterService, DataDecodingEncodingService dataDecodingEncodingService, |
137 | - DeviceProvisionService deviceProvisionService, TbResourceService resourceService, FirmwareService firmwareService, FirmwareDataCache firmwareDataCache) { | |
137 | + DeviceProvisionService deviceProvisionService, TbResourceService resourceService, OtaPackageService otaPackageService, OtaPackageDataCache otaPackageDataCache) { | |
138 | 138 | this.deviceProfileCache = deviceProfileCache; |
139 | 139 | this.tenantProfileCache = tenantProfileCache; |
140 | 140 | this.apiUsageStateService = apiUsageStateService; |
... | ... | @@ -147,8 +147,8 @@ public class DefaultTransportApiService implements TransportApiService { |
147 | 147 | this.dataDecodingEncodingService = dataDecodingEncodingService; |
148 | 148 | this.deviceProvisionService = deviceProvisionService; |
149 | 149 | this.resourceService = resourceService; |
150 | - this.firmwareService = firmwareService; | |
151 | - this.firmwareDataCache = firmwareDataCache; | |
150 | + this.otaPackageService = otaPackageService; | |
151 | + this.otaPackageDataCache = otaPackageDataCache; | |
152 | 152 | } |
153 | 153 | |
154 | 154 | @Override |
... | ... | @@ -184,8 +184,8 @@ public class DefaultTransportApiService implements TransportApiService { |
184 | 184 | result = handle(transportApiRequestMsg.getDeviceRequestMsg()); |
185 | 185 | } else if (transportApiRequestMsg.hasDeviceCredentialsRequestMsg()) { |
186 | 186 | result = handle(transportApiRequestMsg.getDeviceCredentialsRequestMsg()); |
187 | - } else if (transportApiRequestMsg.hasFirmwareRequestMsg()) { | |
188 | - result = handle(transportApiRequestMsg.getFirmwareRequestMsg()); | |
187 | + } else if (transportApiRequestMsg.hasOtaPackageRequestMsg()) { | |
188 | + result = handle(transportApiRequestMsg.getOtaPackageRequestMsg()); | |
189 | 189 | } |
190 | 190 | |
191 | 191 | return Futures.transform(Optional.ofNullable(result).orElseGet(this::getEmptyTransportApiResponseFuture), |
... | ... | @@ -511,50 +511,50 @@ public class DefaultTransportApiService implements TransportApiService { |
511 | 511 | } |
512 | 512 | } |
513 | 513 | |
514 | - private ListenableFuture<TransportApiResponseMsg> handle(TransportProtos.GetFirmwareRequestMsg requestMsg) { | |
514 | + private ListenableFuture<TransportApiResponseMsg> handle(TransportProtos.GetOtaPackageRequestMsg requestMsg) { | |
515 | 515 | TenantId tenantId = new TenantId(new UUID(requestMsg.getTenantIdMSB(), requestMsg.getTenantIdLSB())); |
516 | 516 | DeviceId deviceId = new DeviceId(new UUID(requestMsg.getDeviceIdMSB(), requestMsg.getDeviceIdLSB())); |
517 | - FirmwareType firmwareType = FirmwareType.valueOf(requestMsg.getType()); | |
517 | + OtaPackageType otaPackageType = OtaPackageType.valueOf(requestMsg.getType()); | |
518 | 518 | Device device = deviceService.findDeviceById(tenantId, deviceId); |
519 | 519 | |
520 | 520 | if (device == null) { |
521 | 521 | return getEmptyTransportApiResponseFuture(); |
522 | 522 | } |
523 | 523 | |
524 | - FirmwareId firmwareId = FirmwareUtil.getFirmwareId(device, firmwareType); | |
525 | - if (firmwareId == null) { | |
524 | + OtaPackageId otaPackageId = OtaPackageUtil.getOtaPackageId(device, otaPackageType); | |
525 | + if (otaPackageId == null) { | |
526 | 526 | DeviceProfile deviceProfile = deviceProfileCache.find(device.getDeviceProfileId()); |
527 | - firmwareId = FirmwareUtil.getFirmwareId(deviceProfile, firmwareType); | |
527 | + otaPackageId = OtaPackageUtil.getOtaPackageId(deviceProfile, otaPackageType); | |
528 | 528 | } |
529 | 529 | |
530 | - TransportProtos.GetFirmwareResponseMsg.Builder builder = TransportProtos.GetFirmwareResponseMsg.newBuilder(); | |
530 | + TransportProtos.GetOtaPackageResponseMsg.Builder builder = TransportProtos.GetOtaPackageResponseMsg.newBuilder(); | |
531 | 531 | |
532 | - if (firmwareId == null) { | |
532 | + if (otaPackageId == null) { | |
533 | 533 | builder.setResponseStatus(TransportProtos.ResponseStatus.NOT_FOUND); |
534 | 534 | } else { |
535 | - FirmwareInfo firmwareInfo = firmwareService.findFirmwareInfoById(tenantId, firmwareId); | |
535 | + OtaPackageInfo otaPackageInfo = otaPackageService.findOtaPackageInfoById(tenantId, otaPackageId); | |
536 | 536 | |
537 | - if (firmwareInfo == null) { | |
537 | + if (otaPackageInfo == null) { | |
538 | 538 | builder.setResponseStatus(TransportProtos.ResponseStatus.NOT_FOUND); |
539 | 539 | } else { |
540 | 540 | builder.setResponseStatus(TransportProtos.ResponseStatus.SUCCESS); |
541 | - builder.setFirmwareIdMSB(firmwareId.getId().getMostSignificantBits()); | |
542 | - builder.setFirmwareIdLSB(firmwareId.getId().getLeastSignificantBits()); | |
543 | - builder.setType(firmwareInfo.getType().name()); | |
544 | - builder.setTitle(firmwareInfo.getTitle()); | |
545 | - builder.setVersion(firmwareInfo.getVersion()); | |
546 | - builder.setFileName(firmwareInfo.getFileName()); | |
547 | - builder.setContentType(firmwareInfo.getContentType()); | |
548 | - if (!firmwareDataCache.has(firmwareId.toString())) { | |
549 | - Firmware firmware = firmwareService.findFirmwareById(tenantId, firmwareId); | |
550 | - firmwareDataCache.put(firmwareId.toString(), firmware.getData().array()); | |
541 | + builder.setOtaPackageIdMSB(otaPackageId.getId().getMostSignificantBits()); | |
542 | + builder.setOtaPackageIdLSB(otaPackageId.getId().getLeastSignificantBits()); | |
543 | + builder.setType(otaPackageInfo.getType().name()); | |
544 | + builder.setTitle(otaPackageInfo.getTitle()); | |
545 | + builder.setVersion(otaPackageInfo.getVersion()); | |
546 | + builder.setFileName(otaPackageInfo.getFileName()); | |
547 | + builder.setContentType(otaPackageInfo.getContentType()); | |
548 | + if (!otaPackageDataCache.has(otaPackageId.toString())) { | |
549 | + OtaPackage otaPackage = otaPackageService.findOtaPackageById(tenantId, otaPackageId); | |
550 | + otaPackageDataCache.put(otaPackageId.toString(), otaPackage.getData().array()); | |
551 | 551 | } |
552 | 552 | } |
553 | 553 | } |
554 | 554 | |
555 | 555 | return Futures.immediateFuture( |
556 | 556 | TransportApiResponseMsg.newBuilder() |
557 | - .setFirmwareResponseMsg(builder.build()) | |
557 | + .setOtaPackageResponseMsg(builder.build()) | |
558 | 558 | .build()); |
559 | 559 | } |
560 | 560 | ... | ... |
... | ... | @@ -371,7 +371,10 @@ caffeine: |
371 | 371 | tokensOutdatageTime: |
372 | 372 | timeToLiveInMinutes: 20000 |
373 | 373 | maxSize: 10000 |
374 | - firmwares: | |
374 | + otaPackages: | |
375 | + timeToLiveInMinutes: 60 | |
376 | + maxSize: 10 | |
377 | + otaPackagesData: | |
375 | 378 | timeToLiveInMinutes: 60 |
376 | 379 | maxSize: 10 |
377 | 380 | edges: |
... | ... | @@ -497,7 +500,7 @@ audit-log: |
497 | 500 | "device_profile": "${AUDIT_LOG_MASK_DEVICE_PROFILE:W}" |
498 | 501 | "edge": "${AUDIT_LOG_MASK_EDGE:W}" |
499 | 502 | "tb_resource": "${AUDIT_LOG_MASK_RESOURCE:W}" |
500 | - "firmware": "${AUDIT_LOG_MASK_FIRMWARE:W}" | |
503 | + "ota_package": "${AUDIT_LOG_MASK_OTA_PACKAGE:W}" | |
501 | 504 | sink: |
502 | 505 | # Type of external sink. possible options: none, elasticsearch |
503 | 506 | type: "${AUDIT_LOG_SINK_TYPE:none}" |
... | ... | @@ -749,7 +752,7 @@ queue: |
749 | 752 | sasl.config: "${TB_QUEUE_KAFKA_CONFLUENT_SASL_JAAS_CONFIG:org.apache.kafka.common.security.plain.PlainLoginModule required username=\"CLUSTER_API_KEY\" password=\"CLUSTER_API_SECRET\";}" |
750 | 753 | security.protocol: "${TB_QUEUE_KAFKA_CONFLUENT_SECURITY_PROTOCOL:SASL_SSL}" |
751 | 754 | consumer-properties-per-topic: |
752 | - tb_firmware: | |
755 | + tb_ota_package: | |
753 | 756 | - key: max.poll.records |
754 | 757 | value: 10 |
755 | 758 | other: |
... | ... | @@ -759,7 +762,7 @@ queue: |
759 | 762 | transport-api: "${TB_QUEUE_KAFKA_TA_TOPIC_PROPERTIES:retention.ms:604800000;segment.bytes:26214400;retention.bytes:1048576000;partitions:1;min.insync.replicas:1}" |
760 | 763 | notifications: "${TB_QUEUE_KAFKA_NOTIFICATIONS_TOPIC_PROPERTIES:retention.ms:604800000;segment.bytes:26214400;retention.bytes:1048576000;partitions:1;min.insync.replicas:1}" |
761 | 764 | js-executor: "${TB_QUEUE_KAFKA_JE_TOPIC_PROPERTIES:retention.ms:604800000;segment.bytes:26214400;retention.bytes:104857600;partitions:100;min.insync.replicas:1}" |
762 | - fw-updates: "${TB_QUEUE_KAFKA_FW_TOPIC_PROPERTIES:retention.ms:604800000;segment.bytes:26214400;retention.bytes:1048576000;partitions:10;min.insync.replicas:1}" | |
765 | + ota-updates: "${TB_QUEUE_KAFKA_OTA_TOPIC_PROPERTIES:retention.ms:604800000;segment.bytes:26214400;retention.bytes:1048576000;partitions:10;min.insync.replicas:1}" | |
763 | 766 | consumer-stats: |
764 | 767 | enabled: "${TB_QUEUE_KAFKA_CONSUMER_STATS_ENABLED:true}" |
765 | 768 | print-interval-ms: "${TB_QUEUE_KAFKA_CONSUMER_STATS_MIN_PRINT_INTERVAL_MS:60000}" |
... | ... | @@ -830,10 +833,10 @@ queue: |
830 | 833 | poll-interval: "${TB_QUEUE_CORE_POLL_INTERVAL_MS:25}" |
831 | 834 | partitions: "${TB_QUEUE_CORE_PARTITIONS:10}" |
832 | 835 | pack-processing-timeout: "${TB_QUEUE_CORE_PACK_PROCESSING_TIMEOUT_MS:2000}" |
833 | - firmware: | |
834 | - topic: "${TB_QUEUE_CORE_FW_TOPIC:tb_firmware}" | |
835 | - pack-interval-ms: "${TB_QUEUE_CORE_FW_PACK_INTERVAL_MS:60000}" | |
836 | - pack-size: "${TB_QUEUE_CORE_FW_PACK_SIZE:100}" | |
836 | + ota: | |
837 | + topic: "${TB_QUEUE_CORE_OTA_TOPIC:tb_ota_package}" | |
838 | + pack-interval-ms: "${TB_QUEUE_CORE_OTA_PACK_INTERVAL_MS:60000}" | |
839 | + pack-size: "${TB_QUEUE_CORE_OTA_PACK_SIZE:100}" | |
837 | 840 | usage-stats-topic: "${TB_QUEUE_US_TOPIC:tb_usage_stats}" |
838 | 841 | stats: |
839 | 842 | enabled: "${TB_QUEUE_CORE_STATS_ENABLED:true}" | ... | ... |
application/src/test/java/org/thingsboard/server/controller/BaseOtaPackageControllerTest.java
renamed from
application/src/test/java/org/thingsboard/server/controller/BaseFirmwareControllerTest.java
... | ... | @@ -25,11 +25,10 @@ import org.springframework.test.web.servlet.request.MockMultipartHttpServletRequ |
25 | 25 | import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; |
26 | 26 | import org.thingsboard.common.util.JacksonUtil; |
27 | 27 | import org.thingsboard.server.common.data.DeviceProfile; |
28 | -import org.thingsboard.server.common.data.Firmware; | |
29 | -import org.thingsboard.server.common.data.FirmwareInfo; | |
28 | +import org.thingsboard.server.common.data.OtaPackage; | |
29 | +import org.thingsboard.server.common.data.OtaPackageInfo; | |
30 | 30 | import org.thingsboard.server.common.data.Tenant; |
31 | 31 | import org.thingsboard.server.common.data.User; |
32 | -import org.thingsboard.server.common.data.firmware.FirmwareType; | |
33 | 32 | import org.thingsboard.server.common.data.id.DeviceProfileId; |
34 | 33 | import org.thingsboard.server.common.data.page.PageData; |
35 | 34 | import org.thingsboard.server.common.data.page.PageLink; |
... | ... | @@ -41,11 +40,11 @@ import java.util.Collections; |
41 | 40 | import java.util.List; |
42 | 41 | |
43 | 42 | import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status; |
44 | -import static org.thingsboard.server.common.data.firmware.FirmwareType.FIRMWARE; | |
43 | +import static org.thingsboard.server.common.data.ota.OtaPackageType.FIRMWARE; | |
45 | 44 | |
46 | -public abstract class BaseFirmwareControllerTest extends AbstractControllerTest { | |
45 | +public abstract class BaseOtaPackageControllerTest extends AbstractControllerTest { | |
47 | 46 | |
48 | - private IdComparator<FirmwareInfo> idComparator = new IdComparator<>(); | |
47 | + private IdComparator<OtaPackageInfo> idComparator = new IdComparator<>(); | |
49 | 48 | |
50 | 49 | public static final String TITLE = "My firmware"; |
51 | 50 | private static final String FILE_NAME = "filename.txt"; |
... | ... | @@ -93,13 +92,13 @@ public abstract class BaseFirmwareControllerTest extends AbstractControllerTest |
93 | 92 | |
94 | 93 | @Test |
95 | 94 | public void testSaveFirmware() throws Exception { |
96 | - FirmwareInfo firmwareInfo = new FirmwareInfo(); | |
95 | + OtaPackageInfo firmwareInfo = new OtaPackageInfo(); | |
97 | 96 | firmwareInfo.setDeviceProfileId(deviceProfileId); |
98 | 97 | firmwareInfo.setType(FIRMWARE); |
99 | 98 | firmwareInfo.setTitle(TITLE); |
100 | 99 | firmwareInfo.setVersion(VERSION); |
101 | 100 | |
102 | - FirmwareInfo savedFirmwareInfo = save(firmwareInfo); | |
101 | + OtaPackageInfo savedFirmwareInfo = save(firmwareInfo); | |
103 | 102 | |
104 | 103 | Assert.assertNotNull(savedFirmwareInfo); |
105 | 104 | Assert.assertNotNull(savedFirmwareInfo.getId()); |
... | ... | @@ -112,19 +111,19 @@ public abstract class BaseFirmwareControllerTest extends AbstractControllerTest |
112 | 111 | |
113 | 112 | save(savedFirmwareInfo); |
114 | 113 | |
115 | - FirmwareInfo foundFirmwareInfo = doGet("/api/firmware/info/" + savedFirmwareInfo.getId().getId().toString(), FirmwareInfo.class); | |
114 | + OtaPackageInfo foundFirmwareInfo = doGet("/api/otaPackage/info/" + savedFirmwareInfo.getId().getId().toString(), OtaPackageInfo.class); | |
116 | 115 | Assert.assertEquals(foundFirmwareInfo.getTitle(), savedFirmwareInfo.getTitle()); |
117 | 116 | } |
118 | 117 | |
119 | 118 | @Test |
120 | 119 | public void testSaveFirmwareData() throws Exception { |
121 | - FirmwareInfo firmwareInfo = new FirmwareInfo(); | |
120 | + OtaPackageInfo firmwareInfo = new OtaPackageInfo(); | |
122 | 121 | firmwareInfo.setDeviceProfileId(deviceProfileId); |
123 | 122 | firmwareInfo.setType(FIRMWARE); |
124 | 123 | firmwareInfo.setTitle(TITLE); |
125 | 124 | firmwareInfo.setVersion(VERSION); |
126 | 125 | |
127 | - FirmwareInfo savedFirmwareInfo = save(firmwareInfo); | |
126 | + OtaPackageInfo savedFirmwareInfo = save(firmwareInfo); | |
128 | 127 | |
129 | 128 | Assert.assertNotNull(savedFirmwareInfo); |
130 | 129 | Assert.assertNotNull(savedFirmwareInfo.getId()); |
... | ... | @@ -137,12 +136,12 @@ public abstract class BaseFirmwareControllerTest extends AbstractControllerTest |
137 | 136 | |
138 | 137 | save(savedFirmwareInfo); |
139 | 138 | |
140 | - FirmwareInfo foundFirmwareInfo = doGet("/api/firmware/info/" + savedFirmwareInfo.getId().getId().toString(), FirmwareInfo.class); | |
139 | + OtaPackageInfo foundFirmwareInfo = doGet("/api/otaPackage/info/" + savedFirmwareInfo.getId().getId().toString(), OtaPackageInfo.class); | |
141 | 140 | Assert.assertEquals(foundFirmwareInfo.getTitle(), savedFirmwareInfo.getTitle()); |
142 | 141 | |
143 | 142 | MockMultipartFile testData = new MockMultipartFile("file", FILE_NAME, CONTENT_TYPE, DATA.array()); |
144 | 143 | |
145 | - Firmware savedFirmware = savaData("/api/firmware/" + savedFirmwareInfo.getId().getId().toString() + "?checksum={checksum}&checksumAlgorithm={checksumAlgorithm}", testData, CHECKSUM, CHECKSUM_ALGORITHM); | |
144 | + OtaPackage savedFirmware = savaData("/api/otaPackage/" + savedFirmwareInfo.getId().getId().toString() + "?checksum={checksum}&checksumAlgorithm={checksumAlgorithm}", testData, CHECKSUM, CHECKSUM_ALGORITHM); | |
146 | 145 | |
147 | 146 | Assert.assertEquals(FILE_NAME, savedFirmware.getFileName()); |
148 | 147 | Assert.assertEquals(CONTENT_TYPE, savedFirmware.getContentType()); |
... | ... | @@ -150,97 +149,97 @@ public abstract class BaseFirmwareControllerTest extends AbstractControllerTest |
150 | 149 | |
151 | 150 | @Test |
152 | 151 | public void testUpdateFirmwareFromDifferentTenant() throws Exception { |
153 | - FirmwareInfo firmwareInfo = new FirmwareInfo(); | |
152 | + OtaPackageInfo firmwareInfo = new OtaPackageInfo(); | |
154 | 153 | firmwareInfo.setDeviceProfileId(deviceProfileId); |
155 | 154 | firmwareInfo.setType(FIRMWARE); |
156 | 155 | firmwareInfo.setTitle(TITLE); |
157 | 156 | firmwareInfo.setVersion(VERSION); |
158 | 157 | |
159 | - FirmwareInfo savedFirmwareInfo = save(firmwareInfo); | |
158 | + OtaPackageInfo savedFirmwareInfo = save(firmwareInfo); | |
160 | 159 | |
161 | 160 | loginDifferentTenant(); |
162 | - doPost("/api/firmware", savedFirmwareInfo, FirmwareInfo.class, status().isForbidden()); | |
161 | + doPost("/api/otaPackage", savedFirmwareInfo, OtaPackageInfo.class, status().isForbidden()); | |
163 | 162 | deleteDifferentTenant(); |
164 | 163 | } |
165 | 164 | |
166 | 165 | @Test |
167 | 166 | public void testFindFirmwareInfoById() throws Exception { |
168 | - FirmwareInfo firmwareInfo = new FirmwareInfo(); | |
167 | + OtaPackageInfo firmwareInfo = new OtaPackageInfo(); | |
169 | 168 | firmwareInfo.setDeviceProfileId(deviceProfileId); |
170 | 169 | firmwareInfo.setType(FIRMWARE); |
171 | 170 | firmwareInfo.setTitle(TITLE); |
172 | 171 | firmwareInfo.setVersion(VERSION); |
173 | 172 | |
174 | - FirmwareInfo savedFirmwareInfo = save(firmwareInfo); | |
173 | + OtaPackageInfo savedFirmwareInfo = save(firmwareInfo); | |
175 | 174 | |
176 | - FirmwareInfo foundFirmware = doGet("/api/firmware/info/" + savedFirmwareInfo.getId().getId().toString(), FirmwareInfo.class); | |
175 | + OtaPackageInfo foundFirmware = doGet("/api/otaPackage/info/" + savedFirmwareInfo.getId().getId().toString(), OtaPackageInfo.class); | |
177 | 176 | Assert.assertNotNull(foundFirmware); |
178 | 177 | Assert.assertEquals(savedFirmwareInfo, foundFirmware); |
179 | 178 | } |
180 | 179 | |
181 | 180 | @Test |
182 | 181 | public void testFindFirmwareById() throws Exception { |
183 | - FirmwareInfo firmwareInfo = new FirmwareInfo(); | |
182 | + OtaPackageInfo firmwareInfo = new OtaPackageInfo(); | |
184 | 183 | firmwareInfo.setDeviceProfileId(deviceProfileId); |
185 | 184 | firmwareInfo.setType(FIRMWARE); |
186 | 185 | firmwareInfo.setTitle(TITLE); |
187 | 186 | firmwareInfo.setVersion(VERSION); |
188 | 187 | |
189 | - FirmwareInfo savedFirmwareInfo = save(firmwareInfo); | |
188 | + OtaPackageInfo savedFirmwareInfo = save(firmwareInfo); | |
190 | 189 | |
191 | 190 | MockMultipartFile testData = new MockMultipartFile("file", FILE_NAME, CONTENT_TYPE, DATA.array()); |
192 | 191 | |
193 | - Firmware savedFirmware = savaData("/api/firmware/" + savedFirmwareInfo.getId().getId().toString() + "?checksum={checksum}&checksumAlgorithm={checksumAlgorithm}", testData, CHECKSUM, CHECKSUM_ALGORITHM); | |
192 | + OtaPackage savedFirmware = savaData("/api/otaPackage/" + savedFirmwareInfo.getId().getId().toString() + "?checksum={checksum}&checksumAlgorithm={checksumAlgorithm}", testData, CHECKSUM, CHECKSUM_ALGORITHM); | |
194 | 193 | |
195 | - Firmware foundFirmware = doGet("/api/firmware/" + savedFirmwareInfo.getId().getId().toString(), Firmware.class); | |
194 | + OtaPackage foundFirmware = doGet("/api/otaPackage/" + savedFirmwareInfo.getId().getId().toString(), OtaPackage.class); | |
196 | 195 | Assert.assertNotNull(foundFirmware); |
197 | 196 | Assert.assertEquals(savedFirmware, foundFirmware); |
198 | 197 | } |
199 | 198 | |
200 | 199 | @Test |
201 | 200 | public void testDeleteFirmware() throws Exception { |
202 | - FirmwareInfo firmwareInfo = new FirmwareInfo(); | |
201 | + OtaPackageInfo firmwareInfo = new OtaPackageInfo(); | |
203 | 202 | firmwareInfo.setDeviceProfileId(deviceProfileId); |
204 | 203 | firmwareInfo.setType(FIRMWARE); |
205 | 204 | firmwareInfo.setTitle(TITLE); |
206 | 205 | firmwareInfo.setVersion(VERSION); |
207 | 206 | |
208 | - FirmwareInfo savedFirmwareInfo = save(firmwareInfo); | |
207 | + OtaPackageInfo savedFirmwareInfo = save(firmwareInfo); | |
209 | 208 | |
210 | - doDelete("/api/firmware/" + savedFirmwareInfo.getId().getId().toString()) | |
209 | + doDelete("/api/otaPackage/" + savedFirmwareInfo.getId().getId().toString()) | |
211 | 210 | .andExpect(status().isOk()); |
212 | 211 | |
213 | - doGet("/api/firmware/info/" + savedFirmwareInfo.getId().getId().toString()) | |
212 | + doGet("/api/otaPackage/info/" + savedFirmwareInfo.getId().getId().toString()) | |
214 | 213 | .andExpect(status().isNotFound()); |
215 | 214 | } |
216 | 215 | |
217 | 216 | @Test |
218 | 217 | public void testFindTenantFirmwares() throws Exception { |
219 | - List<FirmwareInfo> firmwares = new ArrayList<>(); | |
218 | + List<OtaPackageInfo> otaPackages = new ArrayList<>(); | |
220 | 219 | for (int i = 0; i < 165; i++) { |
221 | - FirmwareInfo firmwareInfo = new FirmwareInfo(); | |
220 | + OtaPackageInfo firmwareInfo = new OtaPackageInfo(); | |
222 | 221 | firmwareInfo.setDeviceProfileId(deviceProfileId); |
223 | 222 | firmwareInfo.setType(FIRMWARE); |
224 | 223 | firmwareInfo.setTitle(TITLE); |
225 | 224 | firmwareInfo.setVersion(VERSION + i); |
226 | 225 | |
227 | - FirmwareInfo savedFirmwareInfo = save(firmwareInfo); | |
226 | + OtaPackageInfo savedFirmwareInfo = save(firmwareInfo); | |
228 | 227 | |
229 | 228 | if (i > 100) { |
230 | 229 | MockMultipartFile testData = new MockMultipartFile("file", FILE_NAME, CONTENT_TYPE, DATA.array()); |
231 | 230 | |
232 | - Firmware savedFirmware = savaData("/api/firmware/" + savedFirmwareInfo.getId().getId().toString() + "?checksum={checksum}&checksumAlgorithm={checksumAlgorithm}", testData, CHECKSUM, CHECKSUM_ALGORITHM); | |
233 | - firmwares.add(new FirmwareInfo(savedFirmware)); | |
231 | + OtaPackage savedFirmware = savaData("/api/otaPackage/" + savedFirmwareInfo.getId().getId().toString() + "?checksum={checksum}&checksumAlgorithm={checksumAlgorithm}", testData, CHECKSUM, CHECKSUM_ALGORITHM); | |
232 | + otaPackages.add(new OtaPackageInfo(savedFirmware)); | |
234 | 233 | } else { |
235 | - firmwares.add(savedFirmwareInfo); | |
234 | + otaPackages.add(savedFirmwareInfo); | |
236 | 235 | } |
237 | 236 | } |
238 | 237 | |
239 | - List<FirmwareInfo> loadedFirmwares = new ArrayList<>(); | |
238 | + List<OtaPackageInfo> loadedFirmwares = new ArrayList<>(); | |
240 | 239 | PageLink pageLink = new PageLink(24); |
241 | - PageData<FirmwareInfo> pageData; | |
240 | + PageData<OtaPackageInfo> pageData; | |
242 | 241 | do { |
243 | - pageData = doGetTypedWithPageLink("/api/firmwares?", | |
242 | + pageData = doGetTypedWithPageLink("/api/otaPackages?", | |
244 | 243 | new TypeReference<>() { |
245 | 244 | }, pageLink); |
246 | 245 | loadedFirmwares.addAll(pageData.getData()); |
... | ... | @@ -249,41 +248,41 @@ public abstract class BaseFirmwareControllerTest extends AbstractControllerTest |
249 | 248 | } |
250 | 249 | } while (pageData.hasNext()); |
251 | 250 | |
252 | - Collections.sort(firmwares, idComparator); | |
251 | + Collections.sort(otaPackages, idComparator); | |
253 | 252 | Collections.sort(loadedFirmwares, idComparator); |
254 | 253 | |
255 | - Assert.assertEquals(firmwares, loadedFirmwares); | |
254 | + Assert.assertEquals(otaPackages, loadedFirmwares); | |
256 | 255 | } |
257 | 256 | |
258 | 257 | @Test |
259 | 258 | public void testFindTenantFirmwaresByHasData() throws Exception { |
260 | - List<FirmwareInfo> firmwaresWithData = new ArrayList<>(); | |
261 | - List<FirmwareInfo> firmwaresWithoutData = new ArrayList<>(); | |
259 | + List<OtaPackageInfo> otaPackagesWithData = new ArrayList<>(); | |
260 | + List<OtaPackageInfo> otaPackagesWithoutData = new ArrayList<>(); | |
262 | 261 | |
263 | 262 | for (int i = 0; i < 165; i++) { |
264 | - FirmwareInfo firmwareInfo = new FirmwareInfo(); | |
263 | + OtaPackageInfo firmwareInfo = new OtaPackageInfo(); | |
265 | 264 | firmwareInfo.setDeviceProfileId(deviceProfileId); |
266 | 265 | firmwareInfo.setType(FIRMWARE); |
267 | 266 | firmwareInfo.setTitle(TITLE); |
268 | 267 | firmwareInfo.setVersion(VERSION + i); |
269 | 268 | |
270 | - FirmwareInfo savedFirmwareInfo = save(firmwareInfo); | |
269 | + OtaPackageInfo savedFirmwareInfo = save(firmwareInfo); | |
271 | 270 | |
272 | 271 | if (i > 100) { |
273 | 272 | MockMultipartFile testData = new MockMultipartFile("file", FILE_NAME, CONTENT_TYPE, DATA.array()); |
274 | 273 | |
275 | - Firmware savedFirmware = savaData("/api/firmware/" + savedFirmwareInfo.getId().getId().toString() + "?checksum={checksum}&checksumAlgorithm={checksumAlgorithm}", testData, CHECKSUM, CHECKSUM_ALGORITHM); | |
276 | - firmwaresWithData.add(new FirmwareInfo(savedFirmware)); | |
274 | + OtaPackage savedFirmware = savaData("/api/otaPackage/" + savedFirmwareInfo.getId().getId().toString() + "?checksum={checksum}&checksumAlgorithm={checksumAlgorithm}", testData, CHECKSUM, CHECKSUM_ALGORITHM); | |
275 | + otaPackagesWithData.add(new OtaPackageInfo(savedFirmware)); | |
277 | 276 | } else { |
278 | - firmwaresWithoutData.add(savedFirmwareInfo); | |
277 | + otaPackagesWithoutData.add(savedFirmwareInfo); | |
279 | 278 | } |
280 | 279 | } |
281 | 280 | |
282 | - List<FirmwareInfo> loadedFirmwaresWithData = new ArrayList<>(); | |
281 | + List<OtaPackageInfo> loadedFirmwaresWithData = new ArrayList<>(); | |
283 | 282 | PageLink pageLink = new PageLink(24); |
284 | - PageData<FirmwareInfo> pageData; | |
283 | + PageData<OtaPackageInfo> pageData; | |
285 | 284 | do { |
286 | - pageData = doGetTypedWithPageLink("/api/firmwares/" + deviceProfileId.toString() + "/FIRMWARE/true?", | |
285 | + pageData = doGetTypedWithPageLink("/api/otaPackages/" + deviceProfileId.toString() + "/FIRMWARE/true?", | |
287 | 286 | new TypeReference<>() { |
288 | 287 | }, pageLink); |
289 | 288 | loadedFirmwaresWithData.addAll(pageData.getData()); |
... | ... | @@ -292,10 +291,10 @@ public abstract class BaseFirmwareControllerTest extends AbstractControllerTest |
292 | 291 | } |
293 | 292 | } while (pageData.hasNext()); |
294 | 293 | |
295 | - List<FirmwareInfo> loadedFirmwaresWithoutData = new ArrayList<>(); | |
294 | + List<OtaPackageInfo> loadedFirmwaresWithoutData = new ArrayList<>(); | |
296 | 295 | pageLink = new PageLink(24); |
297 | 296 | do { |
298 | - pageData = doGetTypedWithPageLink("/api/firmwares/" + deviceProfileId.toString() + "/FIRMWARE/false?", | |
297 | + pageData = doGetTypedWithPageLink("/api/otaPackages/" + deviceProfileId.toString() + "/FIRMWARE/false?", | |
299 | 298 | new TypeReference<>() { |
300 | 299 | }, pageLink); |
301 | 300 | loadedFirmwaresWithoutData.addAll(pageData.getData()); |
... | ... | @@ -304,25 +303,25 @@ public abstract class BaseFirmwareControllerTest extends AbstractControllerTest |
304 | 303 | } |
305 | 304 | } while (pageData.hasNext()); |
306 | 305 | |
307 | - Collections.sort(firmwaresWithData, idComparator); | |
308 | - Collections.sort(firmwaresWithoutData, idComparator); | |
306 | + Collections.sort(otaPackagesWithData, idComparator); | |
307 | + Collections.sort(otaPackagesWithoutData, idComparator); | |
309 | 308 | Collections.sort(loadedFirmwaresWithData, idComparator); |
310 | 309 | Collections.sort(loadedFirmwaresWithoutData, idComparator); |
311 | 310 | |
312 | - Assert.assertEquals(firmwaresWithData, loadedFirmwaresWithData); | |
313 | - Assert.assertEquals(firmwaresWithoutData, loadedFirmwaresWithoutData); | |
311 | + Assert.assertEquals(otaPackagesWithData, loadedFirmwaresWithData); | |
312 | + Assert.assertEquals(otaPackagesWithoutData, loadedFirmwaresWithoutData); | |
314 | 313 | } |
315 | 314 | |
316 | 315 | |
317 | - private FirmwareInfo save(FirmwareInfo firmwareInfo) throws Exception { | |
318 | - return doPost("/api/firmware", firmwareInfo, FirmwareInfo.class); | |
316 | + private OtaPackageInfo save(OtaPackageInfo firmwareInfo) throws Exception { | |
317 | + return doPost("/api/otaPackage", firmwareInfo, OtaPackageInfo.class); | |
319 | 318 | } |
320 | 319 | |
321 | - protected Firmware savaData(String urlTemplate, MockMultipartFile content, String... params) throws Exception { | |
320 | + protected OtaPackage savaData(String urlTemplate, MockMultipartFile content, String... params) throws Exception { | |
322 | 321 | MockMultipartHttpServletRequestBuilder postRequest = MockMvcRequestBuilders.multipart(urlTemplate, params); |
323 | 322 | postRequest.file(content); |
324 | 323 | setJwtToken(postRequest); |
325 | - return readResponse(mockMvc.perform(postRequest).andExpect(status().isOk()), Firmware.class); | |
324 | + return readResponse(mockMvc.perform(postRequest).andExpect(status().isOk()), OtaPackage.class); | |
326 | 325 | } |
327 | 326 | |
328 | 327 | } | ... | ... |
application/src/test/java/org/thingsboard/server/controller/sql/OtaPackageControllerSqlTest.java
renamed from
application/src/test/java/org/thingsboard/server/controller/sql/FirmwareControllerSqlTest.java
... | ... | @@ -15,9 +15,9 @@ |
15 | 15 | */ |
16 | 16 | package org.thingsboard.server.controller.sql; |
17 | 17 | |
18 | -import org.thingsboard.server.controller.BaseFirmwareControllerTest; | |
18 | +import org.thingsboard.server.controller.BaseOtaPackageControllerTest; | |
19 | 19 | import org.thingsboard.server.dao.service.DaoSqlTest; |
20 | 20 | |
21 | 21 | @DaoSqlTest |
22 | -public class FirmwareControllerSqlTest extends BaseFirmwareControllerTest { | |
22 | +public class OtaPackageControllerSqlTest extends BaseOtaPackageControllerTest { | |
23 | 23 | } | ... | ... |
common/cache/src/main/java/org/thingsboard/server/cache/ota/CaffeineOtaPackageCache.java
renamed from
common/cache/src/main/java/org/thingsboard/server/cache/firmware/CaffeineFirmwareCache.java
... | ... | @@ -13,19 +13,20 @@ |
13 | 13 | * See the License for the specific language governing permissions and |
14 | 14 | * limitations under the License. |
15 | 15 | */ |
16 | -package org.thingsboard.server.cache.firmware; | |
16 | +package org.thingsboard.server.cache.ota; | |
17 | 17 | |
18 | 18 | import lombok.RequiredArgsConstructor; |
19 | 19 | import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; |
20 | 20 | import org.springframework.cache.CacheManager; |
21 | 21 | import org.springframework.stereotype.Service; |
22 | 22 | |
23 | -import static org.thingsboard.server.common.data.CacheConstants.FIRMWARE_CACHE; | |
23 | +import static org.thingsboard.server.common.data.CacheConstants.OTA_PACKAGE_CACHE; | |
24 | +import static org.thingsboard.server.common.data.CacheConstants.OTA_PACKAGE_DATA_CACHE; | |
24 | 25 | |
25 | 26 | @Service |
26 | 27 | @ConditionalOnProperty(prefix = "cache", value = "type", havingValue = "caffeine", matchIfMissing = true) |
27 | 28 | @RequiredArgsConstructor |
28 | -public class CaffeineFirmwareCache implements FirmwareDataCache { | |
29 | +public class CaffeineOtaPackageCache implements OtaPackageDataCache { | |
29 | 30 | |
30 | 31 | private final CacheManager cacheManager; |
31 | 32 | |
... | ... | @@ -36,7 +37,7 @@ public class CaffeineFirmwareCache implements FirmwareDataCache { |
36 | 37 | |
37 | 38 | @Override |
38 | 39 | public byte[] get(String key, int chunkSize, int chunk) { |
39 | - byte[] data = cacheManager.getCache(FIRMWARE_CACHE).get(key, byte[].class); | |
40 | + byte[] data = cacheManager.getCache(OTA_PACKAGE_DATA_CACHE).get(key, byte[].class); | |
40 | 41 | |
41 | 42 | if (chunkSize < 1) { |
42 | 43 | return data; |
... | ... | @@ -58,11 +59,11 @@ public class CaffeineFirmwareCache implements FirmwareDataCache { |
58 | 59 | |
59 | 60 | @Override |
60 | 61 | public void put(String key, byte[] value) { |
61 | - cacheManager.getCache(FIRMWARE_CACHE).putIfAbsent(key, value); | |
62 | + cacheManager.getCache(OTA_PACKAGE_DATA_CACHE).putIfAbsent(key, value); | |
62 | 63 | } |
63 | 64 | |
64 | 65 | @Override |
65 | 66 | public void evict(String key) { |
66 | - cacheManager.getCache(FIRMWARE_CACHE).evict(key); | |
67 | + cacheManager.getCache(OTA_PACKAGE_DATA_CACHE).evict(key); | |
67 | 68 | } |
68 | 69 | } | ... | ... |
common/cache/src/main/java/org/thingsboard/server/cache/ota/OtaPackageDataCache.java
renamed from
common/cache/src/main/java/org/thingsboard/server/cache/firmware/FirmwareDataCache.java
... | ... | @@ -13,9 +13,9 @@ |
13 | 13 | * See the License for the specific language governing permissions and |
14 | 14 | * limitations under the License. |
15 | 15 | */ |
16 | -package org.thingsboard.server.cache.firmware; | |
16 | +package org.thingsboard.server.cache.ota; | |
17 | 17 | |
18 | -public interface FirmwareDataCache { | |
18 | +public interface OtaPackageDataCache { | |
19 | 19 | |
20 | 20 | byte[] get(String key); |
21 | 21 | |
... | ... | @@ -25,8 +25,8 @@ public interface FirmwareDataCache { |
25 | 25 | |
26 | 26 | void evict(String key); |
27 | 27 | |
28 | - default boolean has(String firmwareId) { | |
29 | - byte[] data = get(firmwareId, 1, 0); | |
28 | + default boolean has(String otaPackageId) { | |
29 | + byte[] data = get(otaPackageId, 1, 0); | |
30 | 30 | return data != null && data.length > 0; |
31 | 31 | } |
32 | 32 | } | ... | ... |
common/cache/src/main/java/org/thingsboard/server/cache/ota/RedisOtaPackageDataCache.java
renamed from
common/cache/src/main/java/org/thingsboard/server/cache/firmware/RedisFirmwareDataCache.java
... | ... | @@ -13,7 +13,7 @@ |
13 | 13 | * See the License for the specific language governing permissions and |
14 | 14 | * limitations under the License. |
15 | 15 | */ |
16 | -package org.thingsboard.server.cache.firmware; | |
16 | +package org.thingsboard.server.cache.ota; | |
17 | 17 | |
18 | 18 | import lombok.RequiredArgsConstructor; |
19 | 19 | import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; |
... | ... | @@ -21,12 +21,13 @@ import org.springframework.data.redis.connection.RedisConnection; |
21 | 21 | import org.springframework.data.redis.connection.RedisConnectionFactory; |
22 | 22 | import org.springframework.stereotype.Service; |
23 | 23 | |
24 | -import static org.thingsboard.server.common.data.CacheConstants.FIRMWARE_CACHE; | |
24 | +import static org.thingsboard.server.common.data.CacheConstants.OTA_PACKAGE_CACHE; | |
25 | +import static org.thingsboard.server.common.data.CacheConstants.OTA_PACKAGE_DATA_CACHE; | |
25 | 26 | |
26 | 27 | @Service |
27 | 28 | @ConditionalOnProperty(prefix = "cache", value = "type", havingValue = "redis") |
28 | 29 | @RequiredArgsConstructor |
29 | -public class RedisFirmwareDataCache implements FirmwareDataCache { | |
30 | +public class RedisOtaPackageDataCache implements OtaPackageDataCache { | |
30 | 31 | |
31 | 32 | private final RedisConnectionFactory redisConnectionFactory; |
32 | 33 | |
... | ... | @@ -39,30 +40,30 @@ public class RedisFirmwareDataCache implements FirmwareDataCache { |
39 | 40 | public byte[] get(String key, int chunkSize, int chunk) { |
40 | 41 | try (RedisConnection connection = redisConnectionFactory.getConnection()) { |
41 | 42 | if (chunkSize == 0) { |
42 | - return connection.get(toFirmwareCacheKey(key)); | |
43 | + return connection.get(toOtaPackageCacheKey(key)); | |
43 | 44 | } |
44 | 45 | |
45 | 46 | int startIndex = chunkSize * chunk; |
46 | 47 | int endIndex = startIndex + chunkSize - 1; |
47 | - return connection.getRange(toFirmwareCacheKey(key), startIndex, endIndex); | |
48 | + return connection.getRange(toOtaPackageCacheKey(key), startIndex, endIndex); | |
48 | 49 | } |
49 | 50 | } |
50 | 51 | |
51 | 52 | @Override |
52 | 53 | public void put(String key, byte[] value) { |
53 | 54 | try (RedisConnection connection = redisConnectionFactory.getConnection()) { |
54 | - connection.set(toFirmwareCacheKey(key), value); | |
55 | + connection.set(toOtaPackageCacheKey(key), value); | |
55 | 56 | } |
56 | 57 | } |
57 | 58 | |
58 | 59 | @Override |
59 | 60 | public void evict(String key) { |
60 | 61 | try (RedisConnection connection = redisConnectionFactory.getConnection()) { |
61 | - connection.del(toFirmwareCacheKey(key)); | |
62 | + connection.del(toOtaPackageCacheKey(key)); | |
62 | 63 | } |
63 | 64 | } |
64 | 65 | |
65 | - private byte[] toFirmwareCacheKey(String key) { | |
66 | - return String.format("%s::%s", FIRMWARE_CACHE, key).getBytes(); | |
66 | + private byte[] toOtaPackageCacheKey(String key) { | |
67 | + return String.format("%s::%s", OTA_PACKAGE_DATA_CACHE, key).getBytes(); | |
67 | 68 | } |
68 | 69 | } | ... | ... |
... | ... | @@ -27,6 +27,7 @@ import org.thingsboard.server.common.data.id.DeviceId; |
27 | 27 | import org.thingsboard.server.common.data.id.DeviceProfileId; |
28 | 28 | import org.thingsboard.server.common.data.id.EdgeId; |
29 | 29 | import org.thingsboard.server.common.data.id.TenantId; |
30 | +import org.thingsboard.server.common.data.ota.OtaPackageType; | |
30 | 31 | import org.thingsboard.server.common.data.page.PageData; |
31 | 32 | import org.thingsboard.server.common.data.page.PageLink; |
32 | 33 | import org.thingsboard.server.common.data.security.DeviceCredentials; |
... | ... | @@ -63,9 +64,9 @@ public interface DeviceService { |
63 | 64 | |
64 | 65 | PageData<Device> findDevicesByTenantIdAndType(TenantId tenantId, String type, PageLink pageLink); |
65 | 66 | |
66 | - PageData<Device> findDevicesByTenantIdAndTypeAndEmptyFirmware(TenantId tenantId, String type, PageLink pageLink); | |
67 | + PageData<Device> findDevicesByTenantIdAndTypeAndEmptyOtaPackage(TenantId tenantId, DeviceProfileId deviceProfileId, OtaPackageType type, PageLink pageLink); | |
67 | 68 | |
68 | - PageData<Device> findDevicesByTenantIdAndTypeAndEmptySoftware(TenantId tenantId, String type, PageLink pageLink); | |
69 | + Long countDevicesByTenantIdAndDeviceProfileIdAndEmptyOtaPackage(TenantId tenantId, DeviceProfileId deviceProfileId, OtaPackageType otaPackageType); | |
69 | 70 | |
70 | 71 | PageData<DeviceInfo> findDeviceInfosByTenantIdAndType(TenantId tenantId, String type, PageLink pageLink); |
71 | 72 | ... | ... |
common/dao-api/src/main/java/org/thingsboard/server/dao/ota/OtaPackageService.java
renamed from
common/dao-api/src/main/java/org/thingsboard/server/dao/firmware/FirmwareService.java
... | ... | @@ -13,40 +13,40 @@ |
13 | 13 | * See the License for the specific language governing permissions and |
14 | 14 | * limitations under the License. |
15 | 15 | */ |
16 | -package org.thingsboard.server.dao.firmware; | |
16 | +package org.thingsboard.server.dao.ota; | |
17 | 17 | |
18 | 18 | import com.google.common.util.concurrent.ListenableFuture; |
19 | -import org.thingsboard.server.common.data.Firmware; | |
20 | -import org.thingsboard.server.common.data.FirmwareInfo; | |
21 | -import org.thingsboard.server.common.data.firmware.ChecksumAlgorithm; | |
22 | -import org.thingsboard.server.common.data.firmware.FirmwareType; | |
19 | +import org.thingsboard.server.common.data.OtaPackage; | |
20 | +import org.thingsboard.server.common.data.OtaPackageInfo; | |
21 | +import org.thingsboard.server.common.data.ota.ChecksumAlgorithm; | |
22 | +import org.thingsboard.server.common.data.ota.OtaPackageType; | |
23 | 23 | import org.thingsboard.server.common.data.id.DeviceProfileId; |
24 | -import org.thingsboard.server.common.data.id.FirmwareId; | |
24 | +import org.thingsboard.server.common.data.id.OtaPackageId; | |
25 | 25 | import org.thingsboard.server.common.data.id.TenantId; |
26 | 26 | import org.thingsboard.server.common.data.page.PageData; |
27 | 27 | import org.thingsboard.server.common.data.page.PageLink; |
28 | 28 | |
29 | 29 | import java.nio.ByteBuffer; |
30 | 30 | |
31 | -public interface FirmwareService { | |
31 | +public interface OtaPackageService { | |
32 | 32 | |
33 | - FirmwareInfo saveFirmwareInfo(FirmwareInfo firmwareInfo); | |
33 | + OtaPackageInfo saveOtaPackageInfo(OtaPackageInfo otaPackageInfo); | |
34 | 34 | |
35 | - Firmware saveFirmware(Firmware firmware); | |
35 | + OtaPackage saveOtaPackage(OtaPackage otaPackage); | |
36 | 36 | |
37 | 37 | String generateChecksum(ChecksumAlgorithm checksumAlgorithm, ByteBuffer data); |
38 | 38 | |
39 | - Firmware findFirmwareById(TenantId tenantId, FirmwareId firmwareId); | |
39 | + OtaPackage findOtaPackageById(TenantId tenantId, OtaPackageId otaPackageId); | |
40 | 40 | |
41 | - FirmwareInfo findFirmwareInfoById(TenantId tenantId, FirmwareId firmwareId); | |
41 | + OtaPackageInfo findOtaPackageInfoById(TenantId tenantId, OtaPackageId otaPackageId); | |
42 | 42 | |
43 | - ListenableFuture<FirmwareInfo> findFirmwareInfoByIdAsync(TenantId tenantId, FirmwareId firmwareId); | |
43 | + ListenableFuture<OtaPackageInfo> findOtaPackageInfoByIdAsync(TenantId tenantId, OtaPackageId otaPackageId); | |
44 | 44 | |
45 | - PageData<FirmwareInfo> findTenantFirmwaresByTenantId(TenantId tenantId, PageLink pageLink); | |
45 | + PageData<OtaPackageInfo> findTenantOtaPackagesByTenantId(TenantId tenantId, PageLink pageLink); | |
46 | 46 | |
47 | - PageData<FirmwareInfo> findTenantFirmwaresByTenantIdAndDeviceProfileIdAndTypeAndHasData(TenantId tenantId, DeviceProfileId deviceProfileId, FirmwareType firmwareType, boolean hasData, PageLink pageLink); | |
47 | + PageData<OtaPackageInfo> findTenantOtaPackagesByTenantIdAndDeviceProfileIdAndTypeAndHasData(TenantId tenantId, DeviceProfileId deviceProfileId, OtaPackageType otaPackageType, boolean hasData, PageLink pageLink); | |
48 | 48 | |
49 | - void deleteFirmware(TenantId tenantId, FirmwareId firmwareId); | |
49 | + void deleteOtaPackage(TenantId tenantId, OtaPackageId otaPackageId); | |
50 | 50 | |
51 | - void deleteFirmwaresByTenantId(TenantId tenantId); | |
51 | + void deleteOtaPackagesByTenantId(TenantId tenantId); | |
52 | 52 | } | ... | ... |
... | ... | @@ -29,5 +29,6 @@ public class CacheConstants { |
29 | 29 | public static final String DEVICE_PROFILE_CACHE = "deviceProfiles"; |
30 | 30 | public static final String ATTRIBUTES_CACHE = "attributes"; |
31 | 31 | public static final String TOKEN_OUTDATAGE_TIME_CACHE = "tokensOutdatageTime"; |
32 | - public static final String FIRMWARE_CACHE = "firmwares"; | |
32 | + public static final String OTA_PACKAGE_CACHE = "otaPackages"; | |
33 | + public static final String OTA_PACKAGE_DATA_CACHE = "otaPackagesData"; | |
33 | 34 | } | ... | ... |
... | ... | @@ -23,7 +23,7 @@ import org.thingsboard.server.common.data.device.data.DeviceData; |
23 | 23 | import org.thingsboard.server.common.data.id.CustomerId; |
24 | 24 | import org.thingsboard.server.common.data.id.DeviceId; |
25 | 25 | import org.thingsboard.server.common.data.id.DeviceProfileId; |
26 | -import org.thingsboard.server.common.data.id.FirmwareId; | |
26 | +import org.thingsboard.server.common.data.id.OtaPackageId; | |
27 | 27 | import org.thingsboard.server.common.data.id.TenantId; |
28 | 28 | import org.thingsboard.server.common.data.validation.NoXss; |
29 | 29 | |
... | ... | @@ -32,7 +32,7 @@ import java.io.IOException; |
32 | 32 | |
33 | 33 | @EqualsAndHashCode(callSuper = true) |
34 | 34 | @Slf4j |
35 | -public class Device extends SearchTextBasedWithAdditionalInfo<DeviceId> implements HasName, HasTenantId, HasCustomerId, HasFirmware { | |
35 | +public class Device extends SearchTextBasedWithAdditionalInfo<DeviceId> implements HasName, HasTenantId, HasCustomerId, HasOtaPackage { | |
36 | 36 | |
37 | 37 | private static final long serialVersionUID = 2807343040519543363L; |
38 | 38 | |
... | ... | @@ -49,8 +49,8 @@ public class Device extends SearchTextBasedWithAdditionalInfo<DeviceId> implemen |
49 | 49 | @JsonIgnore |
50 | 50 | private byte[] deviceDataBytes; |
51 | 51 | |
52 | - private FirmwareId firmwareId; | |
53 | - private FirmwareId softwareId; | |
52 | + private OtaPackageId firmwareId; | |
53 | + private OtaPackageId softwareId; | |
54 | 54 | |
55 | 55 | public Device() { |
56 | 56 | super(); |
... | ... | @@ -167,19 +167,19 @@ public class Device extends SearchTextBasedWithAdditionalInfo<DeviceId> implemen |
167 | 167 | return getName(); |
168 | 168 | } |
169 | 169 | |
170 | - public FirmwareId getFirmwareId() { | |
170 | + public OtaPackageId getFirmwareId() { | |
171 | 171 | return firmwareId; |
172 | 172 | } |
173 | 173 | |
174 | - public void setFirmwareId(FirmwareId firmwareId) { | |
174 | + public void setFirmwareId(OtaPackageId firmwareId) { | |
175 | 175 | this.firmwareId = firmwareId; |
176 | 176 | } |
177 | 177 | |
178 | - public FirmwareId getSoftwareId() { | |
178 | + public OtaPackageId getSoftwareId() { | |
179 | 179 | return softwareId; |
180 | 180 | } |
181 | 181 | |
182 | - public void setSoftwareId(FirmwareId softwareId) { | |
182 | + public void setSoftwareId(OtaPackageId softwareId) { | |
183 | 183 | this.softwareId = softwareId; |
184 | 184 | } |
185 | 185 | ... | ... |
... | ... | @@ -23,7 +23,7 @@ import lombok.extern.slf4j.Slf4j; |
23 | 23 | import org.thingsboard.server.common.data.device.profile.DeviceProfileData; |
24 | 24 | import org.thingsboard.server.common.data.id.DashboardId; |
25 | 25 | import org.thingsboard.server.common.data.id.DeviceProfileId; |
26 | -import org.thingsboard.server.common.data.id.FirmwareId; | |
26 | +import org.thingsboard.server.common.data.id.OtaPackageId; | |
27 | 27 | import org.thingsboard.server.common.data.id.RuleChainId; |
28 | 28 | import org.thingsboard.server.common.data.id.TenantId; |
29 | 29 | import org.thingsboard.server.common.data.validation.NoXss; |
... | ... | @@ -37,7 +37,7 @@ import static org.thingsboard.server.common.data.SearchTextBasedWithAdditionalIn |
37 | 37 | @Data |
38 | 38 | @EqualsAndHashCode(callSuper = true) |
39 | 39 | @Slf4j |
40 | -public class DeviceProfile extends SearchTextBased<DeviceProfileId> implements HasName, HasTenantId, HasFirmware { | |
40 | +public class DeviceProfile extends SearchTextBased<DeviceProfileId> implements HasName, HasTenantId, HasOtaPackage { | |
41 | 41 | |
42 | 42 | private TenantId tenantId; |
43 | 43 | @NoXss |
... | ... | @@ -60,9 +60,9 @@ public class DeviceProfile extends SearchTextBased<DeviceProfileId> implements H |
60 | 60 | @NoXss |
61 | 61 | private String provisionDeviceKey; |
62 | 62 | |
63 | - private FirmwareId firmwareId; | |
63 | + private OtaPackageId firmwareId; | |
64 | 64 | |
65 | - private FirmwareId softwareId; | |
65 | + private OtaPackageId softwareId; | |
66 | 66 | |
67 | 67 | public DeviceProfile() { |
68 | 68 | super(); | ... | ... |
... | ... | @@ -19,5 +19,5 @@ package org.thingsboard.server.common.data; |
19 | 19 | * @author Andrew Shvayka |
20 | 20 | */ |
21 | 21 | public enum EntityType { |
22 | - TENANT, CUSTOMER, USER, DASHBOARD, ASSET, DEVICE, ALARM, RULE_CHAIN, RULE_NODE, ENTITY_VIEW, WIDGETS_BUNDLE, WIDGET_TYPE, TENANT_PROFILE, DEVICE_PROFILE, API_USAGE_STATE, TB_RESOURCE, FIRMWARE, EDGE; | |
22 | + TENANT, CUSTOMER, USER, DASHBOARD, ASSET, DEVICE, ALARM, RULE_CHAIN, RULE_NODE, ENTITY_VIEW, WIDGETS_BUNDLE, WIDGET_TYPE, TENANT_PROFILE, DEVICE_PROFILE, API_USAGE_STATE, TB_RESOURCE, OTA_PACKAGE, EDGE; | |
23 | 23 | } | ... | ... |
common/data/src/main/java/org/thingsboard/server/common/data/HasOtaPackage.java
renamed from
common/data/src/main/java/org/thingsboard/server/common/data/HasFirmware.java
... | ... | @@ -15,11 +15,11 @@ |
15 | 15 | */ |
16 | 16 | package org.thingsboard.server.common.data; |
17 | 17 | |
18 | -import org.thingsboard.server.common.data.id.FirmwareId; | |
18 | +import org.thingsboard.server.common.data.id.OtaPackageId; | |
19 | 19 | |
20 | -public interface HasFirmware { | |
20 | +public interface HasOtaPackage { | |
21 | 21 | |
22 | - FirmwareId getFirmwareId(); | |
22 | + OtaPackageId getFirmwareId(); | |
23 | 23 | |
24 | - FirmwareId getSoftwareId(); | |
24 | + OtaPackageId getSoftwareId(); | |
25 | 25 | } | ... | ... |
common/data/src/main/java/org/thingsboard/server/common/data/OtaPackage.java
renamed from
common/data/src/main/java/org/thingsboard/server/common/data/Firmware.java
... | ... | @@ -17,27 +17,27 @@ package org.thingsboard.server.common.data; |
17 | 17 | |
18 | 18 | import lombok.Data; |
19 | 19 | import lombok.EqualsAndHashCode; |
20 | -import org.thingsboard.server.common.data.id.FirmwareId; | |
20 | +import org.thingsboard.server.common.data.id.OtaPackageId; | |
21 | 21 | |
22 | 22 | import java.nio.ByteBuffer; |
23 | 23 | |
24 | 24 | @Data |
25 | 25 | @EqualsAndHashCode(callSuper = true) |
26 | -public class Firmware extends FirmwareInfo { | |
26 | +public class OtaPackage extends OtaPackageInfo { | |
27 | 27 | |
28 | 28 | private static final long serialVersionUID = 3091601761339422546L; |
29 | 29 | |
30 | 30 | private transient ByteBuffer data; |
31 | 31 | |
32 | - public Firmware() { | |
32 | + public OtaPackage() { | |
33 | 33 | super(); |
34 | 34 | } |
35 | 35 | |
36 | - public Firmware(FirmwareId id) { | |
36 | + public OtaPackage(OtaPackageId id) { | |
37 | 37 | super(id); |
38 | 38 | } |
39 | 39 | |
40 | - public Firmware(Firmware firmware) { | |
40 | + public OtaPackage(OtaPackage firmware) { | |
41 | 41 | super(firmware); |
42 | 42 | this.data = firmware.getData(); |
43 | 43 | } | ... | ... |
common/data/src/main/java/org/thingsboard/server/common/data/OtaPackageInfo.java
renamed from
common/data/src/main/java/org/thingsboard/server/common/data/FirmwareInfo.java
... | ... | @@ -19,22 +19,22 @@ import com.fasterxml.jackson.annotation.JsonIgnore; |
19 | 19 | import lombok.Data; |
20 | 20 | import lombok.EqualsAndHashCode; |
21 | 21 | import lombok.extern.slf4j.Slf4j; |
22 | -import org.thingsboard.server.common.data.firmware.ChecksumAlgorithm; | |
23 | -import org.thingsboard.server.common.data.firmware.FirmwareType; | |
22 | +import org.thingsboard.server.common.data.ota.ChecksumAlgorithm; | |
23 | +import org.thingsboard.server.common.data.ota.OtaPackageType; | |
24 | 24 | import org.thingsboard.server.common.data.id.DeviceProfileId; |
25 | -import org.thingsboard.server.common.data.id.FirmwareId; | |
25 | +import org.thingsboard.server.common.data.id.OtaPackageId; | |
26 | 26 | import org.thingsboard.server.common.data.id.TenantId; |
27 | 27 | |
28 | 28 | @Slf4j |
29 | 29 | @Data |
30 | 30 | @EqualsAndHashCode(callSuper = true) |
31 | -public class FirmwareInfo extends SearchTextBasedWithAdditionalInfo<FirmwareId> implements HasName, HasTenantId { | |
31 | +public class OtaPackageInfo extends SearchTextBasedWithAdditionalInfo<OtaPackageId> implements HasName, HasTenantId { | |
32 | 32 | |
33 | 33 | private static final long serialVersionUID = 3168391583570815419L; |
34 | 34 | |
35 | 35 | private TenantId tenantId; |
36 | 36 | private DeviceProfileId deviceProfileId; |
37 | - private FirmwareType type; | |
37 | + private OtaPackageType type; | |
38 | 38 | private String title; |
39 | 39 | private String version; |
40 | 40 | private boolean hasData; |
... | ... | @@ -45,27 +45,27 @@ public class FirmwareInfo extends SearchTextBasedWithAdditionalInfo<FirmwareId> |
45 | 45 | private Long dataSize; |
46 | 46 | |
47 | 47 | |
48 | - public FirmwareInfo() { | |
48 | + public OtaPackageInfo() { | |
49 | 49 | super(); |
50 | 50 | } |
51 | 51 | |
52 | - public FirmwareInfo(FirmwareId id) { | |
52 | + public OtaPackageInfo(OtaPackageId id) { | |
53 | 53 | super(id); |
54 | 54 | } |
55 | 55 | |
56 | - public FirmwareInfo(FirmwareInfo firmwareInfo) { | |
57 | - super(firmwareInfo); | |
58 | - this.tenantId = firmwareInfo.getTenantId(); | |
59 | - this.deviceProfileId = firmwareInfo.getDeviceProfileId(); | |
60 | - this.type = firmwareInfo.getType(); | |
61 | - this.title = firmwareInfo.getTitle(); | |
62 | - this.version = firmwareInfo.getVersion(); | |
63 | - this.hasData = firmwareInfo.isHasData(); | |
64 | - this.fileName = firmwareInfo.getFileName(); | |
65 | - this.contentType = firmwareInfo.getContentType(); | |
66 | - this.checksumAlgorithm = firmwareInfo.getChecksumAlgorithm(); | |
67 | - this.checksum = firmwareInfo.getChecksum(); | |
68 | - this.dataSize = firmwareInfo.getDataSize(); | |
56 | + public OtaPackageInfo(OtaPackageInfo otaPackageInfo) { | |
57 | + super(otaPackageInfo); | |
58 | + this.tenantId = otaPackageInfo.getTenantId(); | |
59 | + this.deviceProfileId = otaPackageInfo.getDeviceProfileId(); | |
60 | + this.type = otaPackageInfo.getType(); | |
61 | + this.title = otaPackageInfo.getTitle(); | |
62 | + this.version = otaPackageInfo.getVersion(); | |
63 | + this.hasData = otaPackageInfo.isHasData(); | |
64 | + this.fileName = otaPackageInfo.getFileName(); | |
65 | + this.contentType = otaPackageInfo.getContentType(); | |
66 | + this.checksumAlgorithm = otaPackageInfo.getChecksumAlgorithm(); | |
67 | + this.checksum = otaPackageInfo.getChecksum(); | |
68 | + this.dataSize = otaPackageInfo.getDataSize(); | |
69 | 69 | } |
70 | 70 | |
71 | 71 | @Override | ... | ... |
... | ... | @@ -71,8 +71,8 @@ public class EntityIdFactory { |
71 | 71 | return new ApiUsageStateId(uuid); |
72 | 72 | case TB_RESOURCE: |
73 | 73 | return new TbResourceId(uuid); |
74 | - case FIRMWARE: | |
75 | - return new FirmwareId(uuid); | |
74 | + case OTA_PACKAGE: | |
75 | + return new OtaPackageId(uuid); | |
76 | 76 | case EDGE: |
77 | 77 | return new EdgeId(uuid); |
78 | 78 | } | ... | ... |
common/data/src/main/java/org/thingsboard/server/common/data/id/OtaPackageId.java
renamed from
common/data/src/main/java/org/thingsboard/server/common/data/id/FirmwareId.java
... | ... | @@ -22,23 +22,23 @@ import org.thingsboard.server.common.data.EntityType; |
22 | 22 | |
23 | 23 | import java.util.UUID; |
24 | 24 | |
25 | -public class FirmwareId extends UUIDBased implements EntityId { | |
25 | +public class OtaPackageId extends UUIDBased implements EntityId { | |
26 | 26 | |
27 | 27 | private static final long serialVersionUID = 1L; |
28 | 28 | |
29 | 29 | @JsonCreator |
30 | - public FirmwareId(@JsonProperty("id") UUID id) { | |
30 | + public OtaPackageId(@JsonProperty("id") UUID id) { | |
31 | 31 | super(id); |
32 | 32 | } |
33 | 33 | |
34 | - public static FirmwareId fromString(String firmwareId) { | |
35 | - return new FirmwareId(UUID.fromString(firmwareId)); | |
34 | + public static OtaPackageId fromString(String firmwareId) { | |
35 | + return new OtaPackageId(UUID.fromString(firmwareId)); | |
36 | 36 | } |
37 | 37 | |
38 | 38 | @JsonIgnore |
39 | 39 | @Override |
40 | 40 | public EntityType getEntityType() { |
41 | - return EntityType.FIRMWARE; | |
41 | + return EntityType.OTA_PACKAGE; | |
42 | 42 | } |
43 | 43 | |
44 | 44 | } | ... | ... |
common/data/src/main/java/org/thingsboard/server/common/data/ota/ChecksumAlgorithm.java
renamed from
common/data/src/main/java/org/thingsboard/server/common/data/firmware/ChecksumAlgorithm.java
... | ... | @@ -13,7 +13,7 @@ |
13 | 13 | * See the License for the specific language governing permissions and |
14 | 14 | * limitations under the License. |
15 | 15 | */ |
16 | -package org.thingsboard.server.common.data.firmware; | |
16 | +package org.thingsboard.server.common.data.ota; | |
17 | 17 | |
18 | 18 | public enum ChecksumAlgorithm { |
19 | 19 | MD5, | ... | ... |
common/data/src/main/java/org/thingsboard/server/common/data/ota/OtaPackageKey.java
renamed from
common/data/src/main/java/org/thingsboard/server/common/data/firmware/FirmwareKey.java
... | ... | @@ -13,18 +13,18 @@ |
13 | 13 | * See the License for the specific language governing permissions and |
14 | 14 | * limitations under the License. |
15 | 15 | */ |
16 | -package org.thingsboard.server.common.data.firmware; | |
16 | +package org.thingsboard.server.common.data.ota; | |
17 | 17 | |
18 | 18 | import lombok.Getter; |
19 | 19 | |
20 | -public enum FirmwareKey { | |
20 | +public enum OtaPackageKey { | |
21 | 21 | |
22 | 22 | TITLE("title"), VERSION("version"), TS("ts"), STATE("state"), SIZE("size"), CHECKSUM("checksum"), CHECKSUM_ALGORITHM("checksum_algorithm"); |
23 | 23 | |
24 | 24 | @Getter |
25 | 25 | private final String value; |
26 | 26 | |
27 | - FirmwareKey(String value) { | |
27 | + OtaPackageKey(String value) { | |
28 | 28 | this.value = value; |
29 | 29 | } |
30 | 30 | } | ... | ... |
common/data/src/main/java/org/thingsboard/server/common/data/ota/OtaPackageType.java
renamed from
common/data/src/main/java/org/thingsboard/server/common/data/firmware/FirmwareType.java
... | ... | @@ -13,18 +13,18 @@ |
13 | 13 | * See the License for the specific language governing permissions and |
14 | 14 | * limitations under the License. |
15 | 15 | */ |
16 | -package org.thingsboard.server.common.data.firmware; | |
16 | +package org.thingsboard.server.common.data.ota; | |
17 | 17 | |
18 | 18 | import lombok.Getter; |
19 | 19 | |
20 | -public enum FirmwareType { | |
20 | +public enum OtaPackageType { | |
21 | 21 | |
22 | 22 | FIRMWARE("fw"), SOFTWARE("sw"); |
23 | 23 | |
24 | 24 | @Getter |
25 | 25 | private final String keyPrefix; |
26 | 26 | |
27 | - FirmwareType(String keyPrefix) { | |
27 | + OtaPackageType(String keyPrefix) { | |
28 | 28 | this.keyPrefix = keyPrefix; |
29 | 29 | } |
30 | 30 | } | ... | ... |
common/data/src/main/java/org/thingsboard/server/common/data/ota/OtaPackageUpdateStatus.java
renamed from
common/data/src/main/java/org/thingsboard/server/common/data/firmware/FirmwareUpdateStatus.java
... | ... | @@ -13,8 +13,8 @@ |
13 | 13 | * See the License for the specific language governing permissions and |
14 | 14 | * limitations under the License. |
15 | 15 | */ |
16 | -package org.thingsboard.server.common.data.firmware; | |
16 | +package org.thingsboard.server.common.data.ota; | |
17 | 17 | |
18 | -public enum FirmwareUpdateStatus { | |
18 | +public enum OtaPackageUpdateStatus { | |
19 | 19 | QUEUED, INITIATED, DOWNLOADING, DOWNLOADED, VERIFIED, UPDATING, UPDATED, FAILED |
20 | 20 | } | ... | ... |
common/data/src/main/java/org/thingsboard/server/common/data/ota/OtaPackageUtil.java
renamed from
common/data/src/main/java/org/thingsboard/server/common/data/firmware/FirmwareUtil.java
... | ... | @@ -13,21 +13,19 @@ |
13 | 13 | * See the License for the specific language governing permissions and |
14 | 14 | * limitations under the License. |
15 | 15 | */ |
16 | -package org.thingsboard.server.common.data.firmware; | |
16 | +package org.thingsboard.server.common.data.ota; | |
17 | 17 | |
18 | 18 | import lombok.extern.slf4j.Slf4j; |
19 | -import org.thingsboard.server.common.data.HasFirmware; | |
20 | -import org.thingsboard.server.common.data.id.FirmwareId; | |
19 | +import org.thingsboard.server.common.data.HasOtaPackage; | |
20 | +import org.thingsboard.server.common.data.id.OtaPackageId; | |
21 | 21 | |
22 | 22 | import java.util.ArrayList; |
23 | 23 | import java.util.Collections; |
24 | 24 | import java.util.List; |
25 | - | |
26 | -import static org.thingsboard.server.common.data.firmware.FirmwareType.FIRMWARE; | |
27 | -import static org.thingsboard.server.common.data.firmware.FirmwareType.SOFTWARE; | |
25 | +import java.util.function.Supplier; | |
28 | 26 | |
29 | 27 | @Slf4j |
30 | -public class FirmwareUtil { | |
28 | +public class OtaPackageUtil { | |
31 | 29 | |
32 | 30 | public static final List<String> ALL_FW_ATTRIBUTE_KEYS; |
33 | 31 | |
... | ... | @@ -35,19 +33,19 @@ public class FirmwareUtil { |
35 | 33 | |
36 | 34 | static { |
37 | 35 | ALL_FW_ATTRIBUTE_KEYS = new ArrayList<>(); |
38 | - for (FirmwareKey key : FirmwareKey.values()) { | |
39 | - ALL_FW_ATTRIBUTE_KEYS.add(getAttributeKey(FIRMWARE, key)); | |
36 | + for (OtaPackageKey key : OtaPackageKey.values()) { | |
37 | + ALL_FW_ATTRIBUTE_KEYS.add(getAttributeKey(OtaPackageType.FIRMWARE, key)); | |
40 | 38 | |
41 | 39 | } |
42 | 40 | |
43 | 41 | ALL_SW_ATTRIBUTE_KEYS = new ArrayList<>(); |
44 | - for (FirmwareKey key : FirmwareKey.values()) { | |
45 | - ALL_SW_ATTRIBUTE_KEYS.add(getAttributeKey(SOFTWARE, key)); | |
42 | + for (OtaPackageKey key : OtaPackageKey.values()) { | |
43 | + ALL_SW_ATTRIBUTE_KEYS.add(getAttributeKey(OtaPackageType.SOFTWARE, key)); | |
46 | 44 | |
47 | 45 | } |
48 | 46 | } |
49 | 47 | |
50 | - public static List<String> getAttributeKeys(FirmwareType firmwareType) { | |
48 | + public static List<String> getAttributeKeys(OtaPackageType firmwareType) { | |
51 | 49 | switch (firmwareType) { |
52 | 50 | case FIRMWARE: |
53 | 51 | return ALL_FW_ATTRIBUTE_KEYS; |
... | ... | @@ -57,35 +55,46 @@ public class FirmwareUtil { |
57 | 55 | return Collections.emptyList(); |
58 | 56 | } |
59 | 57 | |
60 | - public static String getAttributeKey(FirmwareType type, FirmwareKey key) { | |
58 | + public static String getAttributeKey(OtaPackageType type, OtaPackageKey key) { | |
61 | 59 | return type.getKeyPrefix() + "_" + key.getValue(); |
62 | 60 | } |
63 | 61 | |
64 | - public static String getTargetTelemetryKey(FirmwareType type, FirmwareKey key) { | |
62 | + public static String getTargetTelemetryKey(OtaPackageType type, OtaPackageKey key) { | |
65 | 63 | return getTelemetryKey("target_", type, key); |
66 | 64 | } |
67 | 65 | |
68 | - public static String getCurrentTelemetryKey(FirmwareType type, FirmwareKey key) { | |
66 | + public static String getCurrentTelemetryKey(OtaPackageType type, OtaPackageKey key) { | |
69 | 67 | return getTelemetryKey("current_", type, key); |
70 | 68 | } |
71 | 69 | |
72 | - private static String getTelemetryKey(String prefix, FirmwareType type, FirmwareKey key) { | |
70 | + private static String getTelemetryKey(String prefix, OtaPackageType type, OtaPackageKey key) { | |
73 | 71 | return prefix + type.getKeyPrefix() + "_" + key.getValue(); |
74 | 72 | } |
75 | 73 | |
76 | - public static String getTelemetryKey(FirmwareType type, FirmwareKey key) { | |
74 | + public static String getTelemetryKey(OtaPackageType type, OtaPackageKey key) { | |
77 | 75 | return type.getKeyPrefix() + "_" + key.getValue(); |
78 | 76 | } |
79 | 77 | |
80 | - public static FirmwareId getFirmwareId(HasFirmware entity, FirmwareType firmwareType) { | |
81 | - switch (firmwareType) { | |
78 | + public static OtaPackageId getOtaPackageId(HasOtaPackage entity, OtaPackageType type) { | |
79 | + switch (type) { | |
82 | 80 | case FIRMWARE: |
83 | 81 | return entity.getFirmwareId(); |
84 | 82 | case SOFTWARE: |
85 | 83 | return entity.getSoftwareId(); |
86 | 84 | default: |
87 | - log.warn("Unsupported firmware type: [{}]", firmwareType); | |
85 | + log.warn("Unsupported ota package type: [{}]", type); | |
88 | 86 | return null; |
89 | 87 | } |
90 | 88 | } |
89 | + | |
90 | + public static <T> T getByOtaPackageType(Supplier<T> firmwareSupplier, Supplier<T> softwareSupplier, OtaPackageType type) { | |
91 | + switch (type) { | |
92 | + case FIRMWARE: | |
93 | + return firmwareSupplier.get(); | |
94 | + case SOFTWARE: | |
95 | + return softwareSupplier.get(); | |
96 | + default: | |
97 | + throw new RuntimeException("Unsupported OtaPackage type: " + type); | |
98 | + } | |
99 | + } | |
91 | 100 | } | ... | ... |
... | ... | @@ -38,7 +38,7 @@ public class TbKafkaTopicConfigs { |
38 | 38 | private String notificationsProperties; |
39 | 39 | @Value("${queue.kafka.topic-properties.js-executor}") |
40 | 40 | private String jsExecutorProperties; |
41 | - @Value("${queue.kafka.topic-properties.fw-updates:}") | |
41 | + @Value("${queue.kafka.topic-properties.ota-updates:}") | |
42 | 42 | private String fwUpdatesProperties; |
43 | 43 | |
44 | 44 | @Getter | ... | ... |
... | ... | @@ -187,14 +187,14 @@ public class AwsSqsMonolithQueueFactory implements TbCoreQueueFactory, TbRuleEng |
187 | 187 | } |
188 | 188 | |
189 | 189 | @Override |
190 | - public TbQueueConsumer<TbProtoQueueMsg<ToFirmwareStateServiceMsg>> createToFirmwareStateServiceMsgConsumer() { | |
191 | - return new TbAwsSqsConsumerTemplate<>(transportApiAdmin, sqsSettings, coreSettings.getFirmwareTopic(), | |
192 | - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToFirmwareStateServiceMsg.parseFrom(msg.getData()), msg.getHeaders())); | |
190 | + public TbQueueConsumer<TbProtoQueueMsg<ToOtaPackageStateServiceMsg>> createToOtaPackageStateServiceMsgConsumer() { | |
191 | + return new TbAwsSqsConsumerTemplate<>(transportApiAdmin, sqsSettings, coreSettings.getOtaPackageTopic(), | |
192 | + msg -> new TbProtoQueueMsg<>(msg.getKey(), ToOtaPackageStateServiceMsg.parseFrom(msg.getData()), msg.getHeaders())); | |
193 | 193 | } |
194 | 194 | |
195 | 195 | @Override |
196 | - public TbQueueProducer<TbProtoQueueMsg<ToFirmwareStateServiceMsg>> createToFirmwareStateServiceMsgProducer() { | |
197 | - return new TbAwsSqsProducerTemplate<>(coreAdmin, sqsSettings, coreSettings.getFirmwareTopic()); | |
196 | + public TbQueueProducer<TbProtoQueueMsg<ToOtaPackageStateServiceMsg>> createToOtaPackageStateServiceMsgProducer() { | |
197 | + return new TbAwsSqsProducerTemplate<>(coreAdmin, sqsSettings, coreSettings.getOtaPackageTopic()); | |
198 | 198 | } |
199 | 199 | |
200 | 200 | @PreDestroy | ... | ... |
... | ... | @@ -23,7 +23,7 @@ import org.thingsboard.server.common.msg.queue.ServiceType; |
23 | 23 | import org.thingsboard.server.gen.js.JsInvokeProtos; |
24 | 24 | import org.thingsboard.server.gen.transport.TransportProtos.ToCoreMsg; |
25 | 25 | import org.thingsboard.server.gen.transport.TransportProtos.ToCoreNotificationMsg; |
26 | -import org.thingsboard.server.gen.transport.TransportProtos.ToFirmwareStateServiceMsg; | |
26 | +import org.thingsboard.server.gen.transport.TransportProtos.ToOtaPackageStateServiceMsg; | |
27 | 27 | import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineMsg; |
28 | 28 | import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineNotificationMsg; |
29 | 29 | import org.thingsboard.server.gen.transport.TransportProtos.ToTransportMsg; |
... | ... | @@ -177,14 +177,14 @@ public class AwsSqsTbCoreQueueFactory implements TbCoreQueueFactory { |
177 | 177 | } |
178 | 178 | |
179 | 179 | @Override |
180 | - public TbQueueConsumer<TbProtoQueueMsg<ToFirmwareStateServiceMsg>> createToFirmwareStateServiceMsgConsumer() { | |
181 | - return new TbAwsSqsConsumerTemplate<>(transportApiAdmin, sqsSettings, coreSettings.getFirmwareTopic(), | |
182 | - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToFirmwareStateServiceMsg.parseFrom(msg.getData()), msg.getHeaders())); | |
180 | + public TbQueueConsumer<TbProtoQueueMsg<ToOtaPackageStateServiceMsg>> createToOtaPackageStateServiceMsgConsumer() { | |
181 | + return new TbAwsSqsConsumerTemplate<>(transportApiAdmin, sqsSettings, coreSettings.getOtaPackageTopic(), | |
182 | + msg -> new TbProtoQueueMsg<>(msg.getKey(), ToOtaPackageStateServiceMsg.parseFrom(msg.getData()), msg.getHeaders())); | |
183 | 183 | } |
184 | 184 | |
185 | 185 | @Override |
186 | - public TbQueueProducer<TbProtoQueueMsg<ToFirmwareStateServiceMsg>> createToFirmwareStateServiceMsgProducer() { | |
187 | - return new TbAwsSqsProducerTemplate<>(coreAdmin, sqsSettings, coreSettings.getFirmwareTopic()); | |
186 | + public TbQueueProducer<TbProtoQueueMsg<ToOtaPackageStateServiceMsg>> createToOtaPackageStateServiceMsgProducer() { | |
187 | + return new TbAwsSqsProducerTemplate<>(coreAdmin, sqsSettings, coreSettings.getOtaPackageTopic()); | |
188 | 188 | } |
189 | 189 | |
190 | 190 | @PreDestroy | ... | ... |
... | ... | @@ -131,13 +131,13 @@ public class InMemoryMonolithQueueFactory implements TbCoreQueueFactory, TbRuleE |
131 | 131 | } |
132 | 132 | |
133 | 133 | @Override |
134 | - public TbQueueConsumer<TbProtoQueueMsg<TransportProtos.ToFirmwareStateServiceMsg>> createToFirmwareStateServiceMsgConsumer() { | |
135 | - return new InMemoryTbQueueConsumer<>(coreSettings.getFirmwareTopic()); | |
134 | + public TbQueueConsumer<TbProtoQueueMsg<TransportProtos.ToOtaPackageStateServiceMsg>> createToOtaPackageStateServiceMsgConsumer() { | |
135 | + return new InMemoryTbQueueConsumer<>(coreSettings.getOtaPackageTopic()); | |
136 | 136 | } |
137 | 137 | |
138 | 138 | @Override |
139 | - public TbQueueProducer<TbProtoQueueMsg<TransportProtos.ToFirmwareStateServiceMsg>> createToFirmwareStateServiceMsgProducer() { | |
140 | - return new InMemoryTbQueueProducer<>(coreSettings.getFirmwareTopic()); | |
139 | + public TbQueueProducer<TbProtoQueueMsg<TransportProtos.ToOtaPackageStateServiceMsg>> createToOtaPackageStateServiceMsgProducer() { | |
140 | + return new InMemoryTbQueueProducer<>(coreSettings.getOtaPackageTopic()); | |
141 | 141 | } |
142 | 142 | |
143 | 143 | @Override | ... | ... |
... | ... | @@ -23,7 +23,7 @@ import org.thingsboard.server.common.msg.queue.ServiceType; |
23 | 23 | import org.thingsboard.server.gen.js.JsInvokeProtos; |
24 | 24 | import org.thingsboard.server.gen.transport.TransportProtos.ToCoreMsg; |
25 | 25 | import org.thingsboard.server.gen.transport.TransportProtos.ToCoreNotificationMsg; |
26 | -import org.thingsboard.server.gen.transport.TransportProtos.ToFirmwareStateServiceMsg; | |
26 | +import org.thingsboard.server.gen.transport.TransportProtos.ToOtaPackageStateServiceMsg; | |
27 | 27 | import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineMsg; |
28 | 28 | import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineNotificationMsg; |
29 | 29 | import org.thingsboard.server.gen.transport.TransportProtos.ToTransportMsg; |
... | ... | @@ -277,24 +277,24 @@ public class KafkaMonolithQueueFactory implements TbCoreQueueFactory, TbRuleEngi |
277 | 277 | } |
278 | 278 | |
279 | 279 | @Override |
280 | - public TbQueueConsumer<TbProtoQueueMsg<ToFirmwareStateServiceMsg>> createToFirmwareStateServiceMsgConsumer() { | |
281 | - TbKafkaConsumerTemplate.TbKafkaConsumerTemplateBuilder<TbProtoQueueMsg<ToFirmwareStateServiceMsg>> consumerBuilder = TbKafkaConsumerTemplate.builder(); | |
280 | + public TbQueueConsumer<TbProtoQueueMsg<ToOtaPackageStateServiceMsg>> createToOtaPackageStateServiceMsgConsumer() { | |
281 | + TbKafkaConsumerTemplate.TbKafkaConsumerTemplateBuilder<TbProtoQueueMsg<ToOtaPackageStateServiceMsg>> consumerBuilder = TbKafkaConsumerTemplate.builder(); | |
282 | 282 | consumerBuilder.settings(kafkaSettings); |
283 | - consumerBuilder.topic(coreSettings.getFirmwareTopic()); | |
284 | - consumerBuilder.clientId("monolith-fw-consumer-" + serviceInfoProvider.getServiceId()); | |
285 | - consumerBuilder.groupId("monolith-fw-consumer"); | |
286 | - consumerBuilder.decoder(msg -> new TbProtoQueueMsg<>(msg.getKey(), ToFirmwareStateServiceMsg.parseFrom(msg.getData()), msg.getHeaders())); | |
283 | + consumerBuilder.topic(coreSettings.getOtaPackageTopic()); | |
284 | + consumerBuilder.clientId("monolith-ota-consumer-" + serviceInfoProvider.getServiceId()); | |
285 | + consumerBuilder.groupId("monolith-ota-consumer"); | |
286 | + consumerBuilder.decoder(msg -> new TbProtoQueueMsg<>(msg.getKey(), ToOtaPackageStateServiceMsg.parseFrom(msg.getData()), msg.getHeaders())); | |
287 | 287 | consumerBuilder.admin(fwUpdatesAdmin); |
288 | 288 | consumerBuilder.statsService(consumerStatsService); |
289 | 289 | return consumerBuilder.build(); |
290 | 290 | } |
291 | 291 | |
292 | 292 | @Override |
293 | - public TbQueueProducer<TbProtoQueueMsg<ToFirmwareStateServiceMsg>> createToFirmwareStateServiceMsgProducer() { | |
294 | - TbKafkaProducerTemplate.TbKafkaProducerTemplateBuilder<TbProtoQueueMsg<ToFirmwareStateServiceMsg>> requestBuilder = TbKafkaProducerTemplate.builder(); | |
293 | + public TbQueueProducer<TbProtoQueueMsg<ToOtaPackageStateServiceMsg>> createToOtaPackageStateServiceMsgProducer() { | |
294 | + TbKafkaProducerTemplate.TbKafkaProducerTemplateBuilder<TbProtoQueueMsg<ToOtaPackageStateServiceMsg>> requestBuilder = TbKafkaProducerTemplate.builder(); | |
295 | 295 | requestBuilder.settings(kafkaSettings); |
296 | - requestBuilder.clientId("monolith-fw-producer-" + serviceInfoProvider.getServiceId()); | |
297 | - requestBuilder.defaultTopic(coreSettings.getFirmwareTopic()); | |
296 | + requestBuilder.clientId("monolith-ota-producer-" + serviceInfoProvider.getServiceId()); | |
297 | + requestBuilder.defaultTopic(coreSettings.getOtaPackageTopic()); | |
298 | 298 | requestBuilder.admin(fwUpdatesAdmin); |
299 | 299 | return requestBuilder.build(); |
300 | 300 | } | ... | ... |
... | ... | @@ -23,7 +23,7 @@ import org.thingsboard.server.common.msg.queue.ServiceType; |
23 | 23 | import org.thingsboard.server.gen.js.JsInvokeProtos; |
24 | 24 | import org.thingsboard.server.gen.transport.TransportProtos.ToCoreMsg; |
25 | 25 | import org.thingsboard.server.gen.transport.TransportProtos.ToCoreNotificationMsg; |
26 | -import org.thingsboard.server.gen.transport.TransportProtos.ToFirmwareStateServiceMsg; | |
26 | +import org.thingsboard.server.gen.transport.TransportProtos.ToOtaPackageStateServiceMsg; | |
27 | 27 | import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineMsg; |
28 | 28 | import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineNotificationMsg; |
29 | 29 | import org.thingsboard.server.gen.transport.TransportProtos.ToTransportMsg; |
... | ... | @@ -245,24 +245,24 @@ public class KafkaTbCoreQueueFactory implements TbCoreQueueFactory { |
245 | 245 | } |
246 | 246 | |
247 | 247 | @Override |
248 | - public TbQueueConsumer<TbProtoQueueMsg<ToFirmwareStateServiceMsg>> createToFirmwareStateServiceMsgConsumer() { | |
249 | - TbKafkaConsumerTemplate.TbKafkaConsumerTemplateBuilder<TbProtoQueueMsg<ToFirmwareStateServiceMsg>> consumerBuilder = TbKafkaConsumerTemplate.builder(); | |
248 | + public TbQueueConsumer<TbProtoQueueMsg<ToOtaPackageStateServiceMsg>> createToOtaPackageStateServiceMsgConsumer() { | |
249 | + TbKafkaConsumerTemplate.TbKafkaConsumerTemplateBuilder<TbProtoQueueMsg<ToOtaPackageStateServiceMsg>> consumerBuilder = TbKafkaConsumerTemplate.builder(); | |
250 | 250 | consumerBuilder.settings(kafkaSettings); |
251 | - consumerBuilder.topic(coreSettings.getFirmwareTopic()); | |
252 | - consumerBuilder.clientId("tb-core-fw-consumer-" + serviceInfoProvider.getServiceId()); | |
253 | - consumerBuilder.groupId("tb-core-fw-consumer"); | |
254 | - consumerBuilder.decoder(msg -> new TbProtoQueueMsg<>(msg.getKey(), ToFirmwareStateServiceMsg.parseFrom(msg.getData()), msg.getHeaders())); | |
251 | + consumerBuilder.topic(coreSettings.getOtaPackageTopic()); | |
252 | + consumerBuilder.clientId("tb-core-ota-consumer-" + serviceInfoProvider.getServiceId()); | |
253 | + consumerBuilder.groupId("tb-core-ota-consumer"); | |
254 | + consumerBuilder.decoder(msg -> new TbProtoQueueMsg<>(msg.getKey(), ToOtaPackageStateServiceMsg.parseFrom(msg.getData()), msg.getHeaders())); | |
255 | 255 | consumerBuilder.admin(fwUpdatesAdmin); |
256 | 256 | consumerBuilder.statsService(consumerStatsService); |
257 | 257 | return consumerBuilder.build(); |
258 | 258 | } |
259 | 259 | |
260 | 260 | @Override |
261 | - public TbQueueProducer<TbProtoQueueMsg<ToFirmwareStateServiceMsg>> createToFirmwareStateServiceMsgProducer() { | |
262 | - TbKafkaProducerTemplate.TbKafkaProducerTemplateBuilder<TbProtoQueueMsg<ToFirmwareStateServiceMsg>> requestBuilder = TbKafkaProducerTemplate.builder(); | |
261 | + public TbQueueProducer<TbProtoQueueMsg<ToOtaPackageStateServiceMsg>> createToOtaPackageStateServiceMsgProducer() { | |
262 | + TbKafkaProducerTemplate.TbKafkaProducerTemplateBuilder<TbProtoQueueMsg<ToOtaPackageStateServiceMsg>> requestBuilder = TbKafkaProducerTemplate.builder(); | |
263 | 263 | requestBuilder.settings(kafkaSettings); |
264 | - requestBuilder.clientId("tb-core-fw-producer-" + serviceInfoProvider.getServiceId()); | |
265 | - requestBuilder.defaultTopic(coreSettings.getFirmwareTopic()); | |
264 | + requestBuilder.clientId("tb-core-ota-producer-" + serviceInfoProvider.getServiceId()); | |
265 | + requestBuilder.defaultTopic(coreSettings.getOtaPackageTopic()); | |
266 | 266 | requestBuilder.admin(fwUpdatesAdmin); |
267 | 267 | return requestBuilder.build(); |
268 | 268 | } | ... | ... |
... | ... | @@ -22,9 +22,9 @@ import org.springframework.stereotype.Component; |
22 | 22 | import org.thingsboard.server.common.msg.queue.ServiceType; |
23 | 23 | import org.thingsboard.server.gen.js.JsInvokeProtos.RemoteJsRequest; |
24 | 24 | import org.thingsboard.server.gen.js.JsInvokeProtos.RemoteJsResponse; |
25 | -import org.thingsboard.server.gen.transport.TransportProtos.*; | |
26 | 25 | import org.thingsboard.server.gen.transport.TransportProtos.ToCoreMsg; |
27 | 26 | import org.thingsboard.server.gen.transport.TransportProtos.ToCoreNotificationMsg; |
27 | +import org.thingsboard.server.gen.transport.TransportProtos.ToOtaPackageStateServiceMsg; | |
28 | 28 | import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineMsg; |
29 | 29 | import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineNotificationMsg; |
30 | 30 | import org.thingsboard.server.gen.transport.TransportProtos.ToTransportMsg; |
... | ... | @@ -192,14 +192,14 @@ public class PubSubMonolithQueueFactory implements TbCoreQueueFactory, TbRuleEng |
192 | 192 | } |
193 | 193 | |
194 | 194 | @Override |
195 | - public TbQueueConsumer<TbProtoQueueMsg<ToFirmwareStateServiceMsg>> createToFirmwareStateServiceMsgConsumer() { | |
196 | - return new TbPubSubConsumerTemplate<>(coreAdmin, pubSubSettings, coreSettings.getFirmwareTopic(), | |
197 | - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToFirmwareStateServiceMsg.parseFrom(msg.getData()), msg.getHeaders())); | |
195 | + public TbQueueConsumer<TbProtoQueueMsg<ToOtaPackageStateServiceMsg>> createToOtaPackageStateServiceMsgConsumer() { | |
196 | + return new TbPubSubConsumerTemplate<>(coreAdmin, pubSubSettings, coreSettings.getOtaPackageTopic(), | |
197 | + msg -> new TbProtoQueueMsg<>(msg.getKey(), ToOtaPackageStateServiceMsg.parseFrom(msg.getData()), msg.getHeaders())); | |
198 | 198 | } |
199 | 199 | |
200 | 200 | @Override |
201 | - public TbQueueProducer<TbProtoQueueMsg<ToFirmwareStateServiceMsg>> createToFirmwareStateServiceMsgProducer() { | |
202 | - return new TbPubSubProducerTemplate<>(coreAdmin, pubSubSettings, coreSettings.getFirmwareTopic()); | |
201 | + public TbQueueProducer<TbProtoQueueMsg<ToOtaPackageStateServiceMsg>> createToOtaPackageStateServiceMsgProducer() { | |
202 | + return new TbPubSubProducerTemplate<>(coreAdmin, pubSubSettings, coreSettings.getOtaPackageTopic()); | |
203 | 203 | } |
204 | 204 | |
205 | 205 | @Override | ... | ... |
... | ... | @@ -23,7 +23,7 @@ import org.thingsboard.server.common.msg.queue.ServiceType; |
23 | 23 | import org.thingsboard.server.gen.js.JsInvokeProtos; |
24 | 24 | import org.thingsboard.server.gen.transport.TransportProtos.ToCoreMsg; |
25 | 25 | import org.thingsboard.server.gen.transport.TransportProtos.ToCoreNotificationMsg; |
26 | -import org.thingsboard.server.gen.transport.TransportProtos.ToFirmwareStateServiceMsg; | |
26 | +import org.thingsboard.server.gen.transport.TransportProtos.ToOtaPackageStateServiceMsg; | |
27 | 27 | import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineMsg; |
28 | 28 | import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineNotificationMsg; |
29 | 29 | import org.thingsboard.server.gen.transport.TransportProtos.ToTransportMsg; |
... | ... | @@ -166,14 +166,14 @@ public class PubSubTbCoreQueueFactory implements TbCoreQueueFactory { |
166 | 166 | } |
167 | 167 | |
168 | 168 | @Override |
169 | - public TbQueueConsumer<TbProtoQueueMsg<ToFirmwareStateServiceMsg>> createToFirmwareStateServiceMsgConsumer() { | |
170 | - return new TbPubSubConsumerTemplate<>(coreAdmin, pubSubSettings, coreSettings.getFirmwareTopic(), | |
171 | - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToFirmwareStateServiceMsg.parseFrom(msg.getData()), msg.getHeaders())); | |
169 | + public TbQueueConsumer<TbProtoQueueMsg<ToOtaPackageStateServiceMsg>> createToOtaPackageStateServiceMsgConsumer() { | |
170 | + return new TbPubSubConsumerTemplate<>(coreAdmin, pubSubSettings, coreSettings.getOtaPackageTopic(), | |
171 | + msg -> new TbProtoQueueMsg<>(msg.getKey(), ToOtaPackageStateServiceMsg.parseFrom(msg.getData()), msg.getHeaders())); | |
172 | 172 | } |
173 | 173 | |
174 | 174 | @Override |
175 | - public TbQueueProducer<TbProtoQueueMsg<ToFirmwareStateServiceMsg>> createToFirmwareStateServiceMsgProducer() { | |
176 | - return new TbPubSubProducerTemplate<>(coreAdmin, pubSubSettings, coreSettings.getFirmwareTopic()); | |
175 | + public TbQueueProducer<TbProtoQueueMsg<ToOtaPackageStateServiceMsg>> createToOtaPackageStateServiceMsgProducer() { | |
176 | + return new TbPubSubProducerTemplate<>(coreAdmin, pubSubSettings, coreSettings.getOtaPackageTopic()); | |
177 | 177 | } |
178 | 178 | |
179 | 179 | @Override | ... | ... |
... | ... | @@ -24,7 +24,7 @@ import org.thingsboard.server.gen.js.JsInvokeProtos.RemoteJsRequest; |
24 | 24 | import org.thingsboard.server.gen.js.JsInvokeProtos.RemoteJsResponse; |
25 | 25 | import org.thingsboard.server.gen.transport.TransportProtos.ToCoreMsg; |
26 | 26 | import org.thingsboard.server.gen.transport.TransportProtos.ToCoreNotificationMsg; |
27 | -import org.thingsboard.server.gen.transport.TransportProtos.ToFirmwareStateServiceMsg; | |
27 | +import org.thingsboard.server.gen.transport.TransportProtos.ToOtaPackageStateServiceMsg; | |
28 | 28 | import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineMsg; |
29 | 29 | import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineNotificationMsg; |
30 | 30 | import org.thingsboard.server.gen.transport.TransportProtos.ToTransportMsg; |
... | ... | @@ -190,14 +190,14 @@ public class RabbitMqMonolithQueueFactory implements TbCoreQueueFactory, TbRuleE |
190 | 190 | } |
191 | 191 | |
192 | 192 | @Override |
193 | - public TbQueueConsumer<TbProtoQueueMsg<ToFirmwareStateServiceMsg>> createToFirmwareStateServiceMsgConsumer() { | |
194 | - return new TbRabbitMqConsumerTemplate<>(coreAdmin, rabbitMqSettings, coreSettings.getFirmwareTopic(), | |
195 | - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToFirmwareStateServiceMsg.parseFrom(msg.getData()), msg.getHeaders())); | |
193 | + public TbQueueConsumer<TbProtoQueueMsg<ToOtaPackageStateServiceMsg>> createToOtaPackageStateServiceMsgConsumer() { | |
194 | + return new TbRabbitMqConsumerTemplate<>(coreAdmin, rabbitMqSettings, coreSettings.getOtaPackageTopic(), | |
195 | + msg -> new TbProtoQueueMsg<>(msg.getKey(), ToOtaPackageStateServiceMsg.parseFrom(msg.getData()), msg.getHeaders())); | |
196 | 196 | } |
197 | 197 | |
198 | 198 | @Override |
199 | - public TbQueueProducer<TbProtoQueueMsg<ToFirmwareStateServiceMsg>> createToFirmwareStateServiceMsgProducer() { | |
200 | - return new TbRabbitMqProducerTemplate<>(coreAdmin, rabbitMqSettings, coreSettings.getFirmwareTopic()); | |
199 | + public TbQueueProducer<TbProtoQueueMsg<ToOtaPackageStateServiceMsg>> createToOtaPackageStateServiceMsgProducer() { | |
200 | + return new TbRabbitMqProducerTemplate<>(coreAdmin, rabbitMqSettings, coreSettings.getOtaPackageTopic()); | |
201 | 201 | } |
202 | 202 | |
203 | 203 | @Override | ... | ... |
... | ... | @@ -23,7 +23,7 @@ import org.thingsboard.server.common.msg.queue.ServiceType; |
23 | 23 | import org.thingsboard.server.gen.js.JsInvokeProtos; |
24 | 24 | import org.thingsboard.server.gen.transport.TransportProtos.ToCoreMsg; |
25 | 25 | import org.thingsboard.server.gen.transport.TransportProtos.ToCoreNotificationMsg; |
26 | -import org.thingsboard.server.gen.transport.TransportProtos.ToFirmwareStateServiceMsg; | |
26 | +import org.thingsboard.server.gen.transport.TransportProtos.ToOtaPackageStateServiceMsg; | |
27 | 27 | import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineMsg; |
28 | 28 | import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineNotificationMsg; |
29 | 29 | import org.thingsboard.server.gen.transport.TransportProtos.ToTransportMsg; |
... | ... | @@ -172,14 +172,14 @@ public class RabbitMqTbCoreQueueFactory implements TbCoreQueueFactory { |
172 | 172 | } |
173 | 173 | |
174 | 174 | @Override |
175 | - public TbQueueConsumer<TbProtoQueueMsg<ToFirmwareStateServiceMsg>> createToFirmwareStateServiceMsgConsumer() { | |
176 | - return new TbRabbitMqConsumerTemplate<>(coreAdmin, rabbitMqSettings, coreSettings.getFirmwareTopic(), | |
177 | - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToFirmwareStateServiceMsg.parseFrom(msg.getData()), msg.getHeaders())); | |
175 | + public TbQueueConsumer<TbProtoQueueMsg<ToOtaPackageStateServiceMsg>> createToOtaPackageStateServiceMsgConsumer() { | |
176 | + return new TbRabbitMqConsumerTemplate<>(coreAdmin, rabbitMqSettings, coreSettings.getOtaPackageTopic(), | |
177 | + msg -> new TbProtoQueueMsg<>(msg.getKey(), ToOtaPackageStateServiceMsg.parseFrom(msg.getData()), msg.getHeaders())); | |
178 | 178 | } |
179 | 179 | |
180 | 180 | @Override |
181 | - public TbQueueProducer<TbProtoQueueMsg<ToFirmwareStateServiceMsg>> createToFirmwareStateServiceMsgProducer() { | |
182 | - return new TbRabbitMqProducerTemplate<>(coreAdmin, rabbitMqSettings, coreSettings.getFirmwareTopic()); | |
181 | + public TbQueueProducer<TbProtoQueueMsg<ToOtaPackageStateServiceMsg>> createToOtaPackageStateServiceMsgProducer() { | |
182 | + return new TbRabbitMqProducerTemplate<>(coreAdmin, rabbitMqSettings, coreSettings.getOtaPackageTopic()); | |
183 | 183 | } |
184 | 184 | |
185 | 185 | @Override | ... | ... |
common/queue/src/main/java/org/thingsboard/server/queue/provider/ServiceBusMonolithQueueFactory.java
... | ... | @@ -23,7 +23,7 @@ import org.thingsboard.server.common.msg.queue.ServiceType; |
23 | 23 | import org.thingsboard.server.gen.js.JsInvokeProtos; |
24 | 24 | import org.thingsboard.server.gen.transport.TransportProtos.ToCoreMsg; |
25 | 25 | import org.thingsboard.server.gen.transport.TransportProtos.ToCoreNotificationMsg; |
26 | -import org.thingsboard.server.gen.transport.TransportProtos.ToFirmwareStateServiceMsg; | |
26 | +import org.thingsboard.server.gen.transport.TransportProtos.ToOtaPackageStateServiceMsg; | |
27 | 27 | import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineMsg; |
28 | 28 | import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineNotificationMsg; |
29 | 29 | import org.thingsboard.server.gen.transport.TransportProtos.ToTransportMsg; |
... | ... | @@ -189,14 +189,14 @@ public class ServiceBusMonolithQueueFactory implements TbCoreQueueFactory, TbRul |
189 | 189 | } |
190 | 190 | |
191 | 191 | @Override |
192 | - public TbQueueConsumer<TbProtoQueueMsg<ToFirmwareStateServiceMsg>> createToFirmwareStateServiceMsgConsumer() { | |
193 | - return new TbServiceBusConsumerTemplate<>(coreAdmin, serviceBusSettings, coreSettings.getFirmwareTopic(), | |
194 | - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToFirmwareStateServiceMsg.parseFrom(msg.getData()), msg.getHeaders())); | |
192 | + public TbQueueConsumer<TbProtoQueueMsg<ToOtaPackageStateServiceMsg>> createToOtaPackageStateServiceMsgConsumer() { | |
193 | + return new TbServiceBusConsumerTemplate<>(coreAdmin, serviceBusSettings, coreSettings.getOtaPackageTopic(), | |
194 | + msg -> new TbProtoQueueMsg<>(msg.getKey(), ToOtaPackageStateServiceMsg.parseFrom(msg.getData()), msg.getHeaders())); | |
195 | 195 | } |
196 | 196 | |
197 | 197 | @Override |
198 | - public TbQueueProducer<TbProtoQueueMsg<ToFirmwareStateServiceMsg>> createToFirmwareStateServiceMsgProducer() { | |
199 | - return new TbServiceBusProducerTemplate<>(coreAdmin, serviceBusSettings, coreSettings.getFirmwareTopic()); | |
198 | + public TbQueueProducer<TbProtoQueueMsg<ToOtaPackageStateServiceMsg>> createToOtaPackageStateServiceMsgProducer() { | |
199 | + return new TbServiceBusProducerTemplate<>(coreAdmin, serviceBusSettings, coreSettings.getOtaPackageTopic()); | |
200 | 200 | } |
201 | 201 | |
202 | 202 | @Override | ... | ... |
... | ... | @@ -23,7 +23,7 @@ import org.thingsboard.server.common.msg.queue.ServiceType; |
23 | 23 | import org.thingsboard.server.gen.js.JsInvokeProtos; |
24 | 24 | import org.thingsboard.server.gen.transport.TransportProtos.ToCoreMsg; |
25 | 25 | import org.thingsboard.server.gen.transport.TransportProtos.ToCoreNotificationMsg; |
26 | -import org.thingsboard.server.gen.transport.TransportProtos.ToFirmwareStateServiceMsg; | |
26 | +import org.thingsboard.server.gen.transport.TransportProtos.ToOtaPackageStateServiceMsg; | |
27 | 27 | import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineMsg; |
28 | 28 | import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineNotificationMsg; |
29 | 29 | import org.thingsboard.server.gen.transport.TransportProtos.ToTransportMsg; |
... | ... | @@ -172,14 +172,14 @@ public class ServiceBusTbCoreQueueFactory implements TbCoreQueueFactory { |
172 | 172 | } |
173 | 173 | |
174 | 174 | @Override |
175 | - public TbQueueConsumer<TbProtoQueueMsg<ToFirmwareStateServiceMsg>> createToFirmwareStateServiceMsgConsumer() { | |
176 | - return new TbServiceBusConsumerTemplate<>(coreAdmin, serviceBusSettings, coreSettings.getFirmwareTopic(), | |
177 | - msg -> new TbProtoQueueMsg<>(msg.getKey(), ToFirmwareStateServiceMsg.parseFrom(msg.getData()), msg.getHeaders())); | |
175 | + public TbQueueConsumer<TbProtoQueueMsg<ToOtaPackageStateServiceMsg>> createToOtaPackageStateServiceMsgConsumer() { | |
176 | + return new TbServiceBusConsumerTemplate<>(coreAdmin, serviceBusSettings, coreSettings.getOtaPackageTopic(), | |
177 | + msg -> new TbProtoQueueMsg<>(msg.getKey(), ToOtaPackageStateServiceMsg.parseFrom(msg.getData()), msg.getHeaders())); | |
178 | 178 | } |
179 | 179 | |
180 | 180 | @Override |
181 | - public TbQueueProducer<TbProtoQueueMsg<ToFirmwareStateServiceMsg>> createToFirmwareStateServiceMsgProducer() { | |
182 | - return new TbServiceBusProducerTemplate<>(coreAdmin, serviceBusSettings, coreSettings.getFirmwareTopic()); | |
181 | + public TbQueueProducer<TbProtoQueueMsg<ToOtaPackageStateServiceMsg>> createToOtaPackageStateServiceMsgProducer() { | |
182 | + return new TbServiceBusProducerTemplate<>(coreAdmin, serviceBusSettings, coreSettings.getOtaPackageTopic()); | |
183 | 183 | } |
184 | 184 | |
185 | 185 | @Override | ... | ... |
... | ... | @@ -16,7 +16,7 @@ |
16 | 16 | package org.thingsboard.server.queue.provider; |
17 | 17 | |
18 | 18 | import org.thingsboard.server.gen.js.JsInvokeProtos; |
19 | -import org.thingsboard.server.gen.transport.TransportProtos.ToFirmwareStateServiceMsg; | |
19 | +import org.thingsboard.server.gen.transport.TransportProtos.ToOtaPackageStateServiceMsg; | |
20 | 20 | import org.thingsboard.server.gen.transport.TransportProtos.ToCoreMsg; |
21 | 21 | import org.thingsboard.server.gen.transport.TransportProtos.ToCoreNotificationMsg; |
22 | 22 | import org.thingsboard.server.gen.transport.TransportProtos.ToRuleEngineMsg; |
... | ... | @@ -91,14 +91,14 @@ public interface TbCoreQueueFactory extends TbUsageStatsClientQueueFactory { |
91 | 91 | * |
92 | 92 | * @return |
93 | 93 | */ |
94 | - TbQueueConsumer<TbProtoQueueMsg<ToFirmwareStateServiceMsg>> createToFirmwareStateServiceMsgConsumer(); | |
94 | + TbQueueConsumer<TbProtoQueueMsg<ToOtaPackageStateServiceMsg>> createToOtaPackageStateServiceMsgConsumer(); | |
95 | 95 | |
96 | 96 | /** |
97 | 97 | * Used to consume messages about firmware update notifications by TB Core Service |
98 | 98 | * |
99 | 99 | * @return |
100 | 100 | */ |
101 | - TbQueueProducer<TbProtoQueueMsg<ToFirmwareStateServiceMsg>> createToFirmwareStateServiceMsgProducer(); | |
101 | + TbQueueProducer<TbProtoQueueMsg<ToOtaPackageStateServiceMsg>> createToOtaPackageStateServiceMsgProducer(); | |
102 | 102 | |
103 | 103 | /** |
104 | 104 | * Used to consume high priority messages by TB Core Service | ... | ... |
... | ... | @@ -15,7 +15,6 @@ |
15 | 15 | */ |
16 | 16 | package org.thingsboard.server.queue.provider; |
17 | 17 | |
18 | -import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; | |
19 | 18 | import org.springframework.stereotype.Service; |
20 | 19 | import org.thingsboard.server.gen.transport.TransportProtos.ToCoreMsg; |
21 | 20 | import org.thingsboard.server.gen.transport.TransportProtos.ToCoreNotificationMsg; |
... | ... | @@ -25,11 +24,12 @@ import org.thingsboard.server.gen.transport.TransportProtos.ToTransportMsg; |
25 | 24 | import org.thingsboard.server.gen.transport.TransportProtos.ToUsageStatsServiceMsg; |
26 | 25 | import org.thingsboard.server.queue.TbQueueProducer; |
27 | 26 | import org.thingsboard.server.queue.common.TbProtoQueueMsg; |
27 | +import org.thingsboard.server.queue.util.TbCoreComponent; | |
28 | 28 | |
29 | 29 | import javax.annotation.PostConstruct; |
30 | 30 | |
31 | 31 | @Service |
32 | -@ConditionalOnExpression("'${service.type:null}'=='monolith' || '${service.type:null}'=='tb-core'") | |
32 | +@TbCoreComponent | |
33 | 33 | public class TbCoreQueueProducerProvider implements TbQueueProducerProvider { |
34 | 34 | |
35 | 35 | private final TbCoreQueueFactory tbQueueProvider; | ... | ... |
... | ... | @@ -26,8 +26,8 @@ public class TbQueueCoreSettings { |
26 | 26 | @Value("${queue.core.topic}") |
27 | 27 | private String topic; |
28 | 28 | |
29 | - @Value("${queue.core.firmware.topic:tb_firmware}") | |
30 | - private String firmwareTopic; | |
29 | + @Value("${queue.core.ota.topic:tb_ota_package}") | |
30 | + private String otaPackageTopic; | |
31 | 31 | |
32 | 32 | @Value("${queue.core.usage-stats-topic:tb_usage_stats}") |
33 | 33 | private String usageStatsTopic; | ... | ... |
... | ... | @@ -388,7 +388,7 @@ enum ResponseStatus { |
388 | 388 | FAILURE = 3; |
389 | 389 | } |
390 | 390 | |
391 | -message GetFirmwareRequestMsg { | |
391 | +message GetOtaPackageRequestMsg { | |
392 | 392 | int64 deviceIdMSB = 1; |
393 | 393 | int64 deviceIdLSB = 2; |
394 | 394 | int64 tenantIdMSB = 3; |
... | ... | @@ -396,10 +396,10 @@ message GetFirmwareRequestMsg { |
396 | 396 | string type = 5; |
397 | 397 | } |
398 | 398 | |
399 | -message GetFirmwareResponseMsg { | |
399 | +message GetOtaPackageResponseMsg { | |
400 | 400 | ResponseStatus responseStatus = 1; |
401 | - int64 firmwareIdMSB = 2; | |
402 | - int64 firmwareIdLSB = 3; | |
401 | + int64 otaPackageIdMSB = 2; | |
402 | + int64 otaPackageIdLSB = 3; | |
403 | 403 | string type = 4; |
404 | 404 | string title = 5; |
405 | 405 | string version = 6; |
... | ... | @@ -627,7 +627,7 @@ message TransportApiRequestMsg { |
627 | 627 | ProvisionDeviceRequestMsg provisionDeviceRequestMsg = 7; |
628 | 628 | ValidateDeviceLwM2MCredentialsRequestMsg validateDeviceLwM2MCredentialsRequestMsg = 8; |
629 | 629 | GetResourceRequestMsg resourceRequestMsg = 9; |
630 | - GetFirmwareRequestMsg firmwareRequestMsg = 10; | |
630 | + GetOtaPackageRequestMsg otaPackageRequestMsg = 10; | |
631 | 631 | GetSnmpDevicesRequestMsg snmpDevicesRequestMsg = 11; |
632 | 632 | GetDeviceRequestMsg deviceRequestMsg = 12; |
633 | 633 | GetDeviceCredentialsRequestMsg deviceCredentialsRequestMsg = 13; |
... | ... | @@ -642,7 +642,7 @@ message TransportApiResponseMsg { |
642 | 642 | GetSnmpDevicesResponseMsg snmpDevicesResponseMsg = 5; |
643 | 643 | LwM2MResponseMsg lwM2MResponseMsg = 6; |
644 | 644 | GetResourceResponseMsg resourceResponseMsg = 7; |
645 | - GetFirmwareResponseMsg firmwareResponseMsg = 8; | |
645 | + GetOtaPackageResponseMsg otaPackageResponseMsg = 8; | |
646 | 646 | GetDeviceResponseMsg deviceResponseMsg = 9; |
647 | 647 | GetDeviceCredentialsResponseMsg deviceCredentialsResponseMsg = 10; |
648 | 648 | } |
... | ... | @@ -710,13 +710,13 @@ message ToUsageStatsServiceMsg { |
710 | 710 | int64 customerIdLSB = 7; |
711 | 711 | } |
712 | 712 | |
713 | -message ToFirmwareStateServiceMsg { | |
713 | +message ToOtaPackageStateServiceMsg { | |
714 | 714 | int64 ts = 1; |
715 | 715 | int64 tenantIdMSB = 2; |
716 | 716 | int64 tenantIdLSB = 3; |
717 | 717 | int64 deviceIdMSB = 4; |
718 | 718 | int64 deviceIdLSB = 5; |
719 | - int64 firmwareIdMSB = 6; | |
720 | - int64 firmwareIdLSB = 7; | |
719 | + int64 otaPackageIdMSB = 6; | |
720 | + int64 otaPackageIdLSB = 7; | |
721 | 721 | string type = 8; |
722 | 722 | } | ... | ... |
common/transport/coap/src/main/java/org/thingsboard/server/transport/coap/CoapTransportResource.java
... | ... | @@ -44,7 +44,7 @@ import org.thingsboard.server.common.data.device.profile.DeviceProfileTransportC |
44 | 44 | import org.thingsboard.server.common.data.device.profile.JsonTransportPayloadConfiguration; |
45 | 45 | import org.thingsboard.server.common.data.device.profile.ProtoTransportPayloadConfiguration; |
46 | 46 | import org.thingsboard.server.common.data.device.profile.TransportPayloadTypeConfiguration; |
47 | -import org.thingsboard.server.common.data.firmware.FirmwareType; | |
47 | +import org.thingsboard.server.common.data.ota.OtaPackageType; | |
48 | 48 | import org.thingsboard.server.common.data.security.DeviceTokenCredentials; |
49 | 49 | import org.thingsboard.server.common.msg.session.FeatureType; |
50 | 50 | import org.thingsboard.server.common.msg.session.SessionMsgType; |
... | ... | @@ -350,10 +350,10 @@ public class CoapTransportResource extends AbstractCoapTransportResource { |
350 | 350 | new CoapNoOpCallback(exchange)); |
351 | 351 | break; |
352 | 352 | case GET_FIRMWARE_REQUEST: |
353 | - getFirmwareCallback(sessionInfo, exchange, FirmwareType.FIRMWARE); | |
353 | + getOtaPackageCallback(sessionInfo, exchange, OtaPackageType.FIRMWARE); | |
354 | 354 | break; |
355 | 355 | case GET_SOFTWARE_REQUEST: |
356 | - getFirmwareCallback(sessionInfo, exchange, FirmwareType.SOFTWARE); | |
356 | + getOtaPackageCallback(sessionInfo, exchange, OtaPackageType.SOFTWARE); | |
357 | 357 | break; |
358 | 358 | } |
359 | 359 | } catch (AdaptorException e) { |
... | ... | @@ -366,14 +366,14 @@ public class CoapTransportResource extends AbstractCoapTransportResource { |
366 | 366 | return new UUID(sessionInfoProto.getSessionIdMSB(), sessionInfoProto.getSessionIdLSB()); |
367 | 367 | } |
368 | 368 | |
369 | - private void getFirmwareCallback(TransportProtos.SessionInfoProto sessionInfo, CoapExchange exchange, FirmwareType firmwareType) { | |
370 | - TransportProtos.GetFirmwareRequestMsg requestMsg = TransportProtos.GetFirmwareRequestMsg.newBuilder() | |
369 | + private void getOtaPackageCallback(TransportProtos.SessionInfoProto sessionInfo, CoapExchange exchange, OtaPackageType firmwareType) { | |
370 | + TransportProtos.GetOtaPackageRequestMsg requestMsg = TransportProtos.GetOtaPackageRequestMsg.newBuilder() | |
371 | 371 | .setTenantIdMSB(sessionInfo.getTenantIdMSB()) |
372 | 372 | .setTenantIdLSB(sessionInfo.getTenantIdLSB()) |
373 | 373 | .setDeviceIdMSB(sessionInfo.getDeviceIdMSB()) |
374 | 374 | .setDeviceIdLSB(sessionInfo.getDeviceIdLSB()) |
375 | 375 | .setType(firmwareType.name()).build(); |
376 | - transportContext.getTransportService().process(sessionInfo, requestMsg, new FirmwareCallback(exchange)); | |
376 | + transportContext.getTransportService().process(sessionInfo, requestMsg, new OtaPackageCallback(exchange)); | |
377 | 377 | } |
378 | 378 | |
379 | 379 | private TransportProtos.SessionInfoProto lookupAsyncSessionInfo(String token) { |
... | ... | @@ -470,25 +470,25 @@ public class CoapTransportResource extends AbstractCoapTransportResource { |
470 | 470 | } |
471 | 471 | } |
472 | 472 | |
473 | - private class FirmwareCallback implements TransportServiceCallback<TransportProtos.GetFirmwareResponseMsg> { | |
473 | + private class OtaPackageCallback implements TransportServiceCallback<TransportProtos.GetOtaPackageResponseMsg> { | |
474 | 474 | private final CoapExchange exchange; |
475 | 475 | |
476 | - FirmwareCallback(CoapExchange exchange) { | |
476 | + OtaPackageCallback(CoapExchange exchange) { | |
477 | 477 | this.exchange = exchange; |
478 | 478 | } |
479 | 479 | |
480 | 480 | @Override |
481 | - public void onSuccess(TransportProtos.GetFirmwareResponseMsg msg) { | |
481 | + public void onSuccess(TransportProtos.GetOtaPackageResponseMsg msg) { | |
482 | 482 | String title = exchange.getQueryParameter("title"); |
483 | 483 | String version = exchange.getQueryParameter("version"); |
484 | 484 | if (msg.getResponseStatus().equals(TransportProtos.ResponseStatus.SUCCESS)) { |
485 | 485 | if (msg.getTitle().equals(title) && msg.getVersion().equals(version)) { |
486 | - String firmwareId = new UUID(msg.getFirmwareIdMSB(), msg.getFirmwareIdLSB()).toString(); | |
486 | + String firmwareId = new UUID(msg.getOtaPackageIdMSB(), msg.getOtaPackageIdLSB()).toString(); | |
487 | 487 | String strChunkSize = exchange.getQueryParameter("size"); |
488 | 488 | String strChunk = exchange.getQueryParameter("chunk"); |
489 | 489 | int chunkSize = StringUtils.isEmpty(strChunkSize) ? 0 : Integer.parseInt(strChunkSize); |
490 | 490 | int chunk = StringUtils.isEmpty(strChunk) ? 0 : Integer.parseInt(strChunk); |
491 | - exchange.respond(CoAP.ResponseCode.CONTENT, transportContext.getFirmwareDataCache().get(firmwareId, chunkSize, chunk)); | |
491 | + exchange.respond(CoAP.ResponseCode.CONTENT, transportContext.getOtaPackageDataCache().get(firmwareId, chunkSize, chunk)); | |
492 | 492 | } else { |
493 | 493 | exchange.respond(CoAP.ResponseCode.BAD_REQUEST); |
494 | 494 | } | ... | ... |
... | ... | @@ -34,7 +34,7 @@ import org.springframework.web.bind.annotation.RequestParam; |
34 | 34 | import org.springframework.web.bind.annotation.RestController; |
35 | 35 | import org.springframework.web.context.request.async.DeferredResult; |
36 | 36 | import org.thingsboard.server.common.data.DeviceTransportType; |
37 | -import org.thingsboard.server.common.data.firmware.FirmwareType; | |
37 | +import org.thingsboard.server.common.data.ota.OtaPackageType; | |
38 | 38 | import org.thingsboard.server.common.data.TbTransportService; |
39 | 39 | import org.thingsboard.server.common.data.id.DeviceId; |
40 | 40 | import org.thingsboard.server.common.transport.SessionMsgListener; |
... | ... | @@ -213,7 +213,7 @@ public class DeviceApiController implements TbTransportService { |
213 | 213 | @RequestParam(value = "version") String version, |
214 | 214 | @RequestParam(value = "size", required = false, defaultValue = "0") int size, |
215 | 215 | @RequestParam(value = "chunk", required = false, defaultValue = "0") int chunk) { |
216 | - return getFirmwareCallback(deviceToken, title, version, size, chunk, FirmwareType.FIRMWARE); | |
216 | + return getOtaPackageCallback(deviceToken, title, version, size, chunk, OtaPackageType.FIRMWARE); | |
217 | 217 | } |
218 | 218 | |
219 | 219 | @RequestMapping(value = "/{deviceToken}/software", method = RequestMethod.GET) |
... | ... | @@ -222,7 +222,7 @@ public class DeviceApiController implements TbTransportService { |
222 | 222 | @RequestParam(value = "version") String version, |
223 | 223 | @RequestParam(value = "size", required = false, defaultValue = "0") int size, |
224 | 224 | @RequestParam(value = "chunk", required = false, defaultValue = "0") int chunk) { |
225 | - return getFirmwareCallback(deviceToken, title, version, size, chunk, FirmwareType.SOFTWARE); | |
225 | + return getOtaPackageCallback(deviceToken, title, version, size, chunk, OtaPackageType.SOFTWARE); | |
226 | 226 | } |
227 | 227 | |
228 | 228 | @RequestMapping(value = "/provision", method = RequestMethod.POST) |
... | ... | @@ -233,17 +233,17 @@ public class DeviceApiController implements TbTransportService { |
233 | 233 | return responseWriter; |
234 | 234 | } |
235 | 235 | |
236 | - private DeferredResult<ResponseEntity> getFirmwareCallback(String deviceToken, String title, String version, int size, int chunk, FirmwareType firmwareType) { | |
236 | + private DeferredResult<ResponseEntity> getOtaPackageCallback(String deviceToken, String title, String version, int size, int chunk, OtaPackageType firmwareType) { | |
237 | 237 | DeferredResult<ResponseEntity> responseWriter = new DeferredResult<>(); |
238 | 238 | transportContext.getTransportService().process(DeviceTransportType.DEFAULT, ValidateDeviceTokenRequestMsg.newBuilder().setToken(deviceToken).build(), |
239 | 239 | new DeviceAuthCallback(transportContext, responseWriter, sessionInfo -> { |
240 | - TransportProtos.GetFirmwareRequestMsg requestMsg = TransportProtos.GetFirmwareRequestMsg.newBuilder() | |
240 | + TransportProtos.GetOtaPackageRequestMsg requestMsg = TransportProtos.GetOtaPackageRequestMsg.newBuilder() | |
241 | 241 | .setTenantIdMSB(sessionInfo.getTenantIdMSB()) |
242 | 242 | .setTenantIdLSB(sessionInfo.getTenantIdLSB()) |
243 | 243 | .setDeviceIdMSB(sessionInfo.getDeviceIdMSB()) |
244 | 244 | .setDeviceIdLSB(sessionInfo.getDeviceIdLSB()) |
245 | 245 | .setType(firmwareType.name()).build(); |
246 | - transportContext.getTransportService().process(sessionInfo, requestMsg, new GetFirmwareCallback(responseWriter, title, version, size, chunk)); | |
246 | + transportContext.getTransportService().process(sessionInfo, requestMsg, new GetOtaPackageCallback(responseWriter, title, version, size, chunk)); | |
247 | 247 | })); |
248 | 248 | return responseWriter; |
249 | 249 | } |
... | ... | @@ -294,14 +294,14 @@ public class DeviceApiController implements TbTransportService { |
294 | 294 | } |
295 | 295 | } |
296 | 296 | |
297 | - private class GetFirmwareCallback implements TransportServiceCallback<TransportProtos.GetFirmwareResponseMsg> { | |
297 | + private class GetOtaPackageCallback implements TransportServiceCallback<TransportProtos.GetOtaPackageResponseMsg> { | |
298 | 298 | private final DeferredResult<ResponseEntity> responseWriter; |
299 | 299 | private final String title; |
300 | 300 | private final String version; |
301 | 301 | private final int chuckSize; |
302 | 302 | private final int chuck; |
303 | 303 | |
304 | - GetFirmwareCallback(DeferredResult<ResponseEntity> responseWriter, String title, String version, int chuckSize, int chuck) { | |
304 | + GetOtaPackageCallback(DeferredResult<ResponseEntity> responseWriter, String title, String version, int chuckSize, int chuck) { | |
305 | 305 | this.responseWriter = responseWriter; |
306 | 306 | this.title = title; |
307 | 307 | this.version = version; |
... | ... | @@ -310,17 +310,17 @@ public class DeviceApiController implements TbTransportService { |
310 | 310 | } |
311 | 311 | |
312 | 312 | @Override |
313 | - public void onSuccess(TransportProtos.GetFirmwareResponseMsg firmwareResponseMsg) { | |
314 | - if (!TransportProtos.ResponseStatus.SUCCESS.equals(firmwareResponseMsg.getResponseStatus())) { | |
313 | + public void onSuccess(TransportProtos.GetOtaPackageResponseMsg otaPackageResponseMsg) { | |
314 | + if (!TransportProtos.ResponseStatus.SUCCESS.equals(otaPackageResponseMsg.getResponseStatus())) { | |
315 | 315 | responseWriter.setResult(new ResponseEntity<>(HttpStatus.NOT_FOUND)); |
316 | - } else if (title.equals(firmwareResponseMsg.getTitle()) && version.equals(firmwareResponseMsg.getVersion())) { | |
317 | - String firmwareId = new UUID(firmwareResponseMsg.getFirmwareIdMSB(), firmwareResponseMsg.getFirmwareIdLSB()).toString(); | |
318 | - ByteArrayResource resource = new ByteArrayResource(transportContext.getFirmwareDataCache().get(firmwareId, chuckSize, chuck)); | |
316 | + } else if (title.equals(otaPackageResponseMsg.getTitle()) && version.equals(otaPackageResponseMsg.getVersion())) { | |
317 | + String otaPackageId = new UUID(otaPackageResponseMsg.getOtaPackageIdMSB(), otaPackageResponseMsg.getOtaPackageIdLSB()).toString(); | |
318 | + ByteArrayResource resource = new ByteArrayResource(transportContext.getOtaPackageDataCache().get(otaPackageId, chuckSize, chuck)); | |
319 | 319 | ResponseEntity<ByteArrayResource> response = ResponseEntity.ok() |
320 | - .header(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=" + firmwareResponseMsg.getFileName()) | |
321 | - .header("x-filename", firmwareResponseMsg.getFileName()) | |
320 | + .header(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=" + otaPackageResponseMsg.getFileName()) | |
321 | + .header("x-filename", otaPackageResponseMsg.getFileName()) | |
322 | 322 | .contentLength(resource.contentLength()) |
323 | - .contentType(parseMediaType(firmwareResponseMsg.getContentType())) | |
323 | + .contentType(parseMediaType(otaPackageResponseMsg.getContentType())) | |
324 | 324 | .body(resource); |
325 | 325 | responseWriter.setResult(response); |
326 | 326 | } else { | ... | ... |
... | ... | @@ -39,13 +39,13 @@ import org.springframework.context.annotation.Lazy; |
39 | 39 | import org.springframework.stereotype.Service; |
40 | 40 | import org.thingsboard.common.util.JacksonUtil; |
41 | 41 | import org.thingsboard.common.util.ThingsBoardExecutors; |
42 | -import org.thingsboard.server.cache.firmware.FirmwareDataCache; | |
42 | +import org.thingsboard.server.cache.ota.OtaPackageDataCache; | |
43 | 43 | import org.thingsboard.server.common.data.Device; |
44 | 44 | import org.thingsboard.server.common.data.DeviceProfile; |
45 | -import org.thingsboard.server.common.data.firmware.FirmwareKey; | |
46 | -import org.thingsboard.server.common.data.firmware.FirmwareType; | |
47 | -import org.thingsboard.server.common.data.firmware.FirmwareUtil; | |
48 | -import org.thingsboard.server.common.data.id.FirmwareId; | |
45 | +import org.thingsboard.server.common.data.ota.OtaPackageKey; | |
46 | +import org.thingsboard.server.common.data.ota.OtaPackageType; | |
47 | +import org.thingsboard.server.common.data.ota.OtaPackageUtil; | |
48 | +import org.thingsboard.server.common.data.id.OtaPackageId; | |
49 | 49 | import org.thingsboard.server.common.transport.TransportService; |
50 | 50 | import org.thingsboard.server.common.transport.TransportServiceCallback; |
51 | 51 | import org.thingsboard.server.common.transport.adaptor.AdaptorException; |
... | ... | @@ -87,8 +87,8 @@ import java.util.stream.Collectors; |
87 | 87 | |
88 | 88 | import static org.eclipse.californium.core.coap.CoAP.ResponseCode.BAD_REQUEST; |
89 | 89 | import static org.eclipse.leshan.core.attributes.Attribute.OBJECT_VERSION; |
90 | -import static org.thingsboard.server.common.data.firmware.FirmwareUpdateStatus.DOWNLOADED; | |
91 | -import static org.thingsboard.server.common.data.firmware.FirmwareUpdateStatus.UPDATING; | |
90 | +import static org.thingsboard.server.common.data.ota.OtaPackageUpdateStatus.DOWNLOADED; | |
91 | +import static org.thingsboard.server.common.data.ota.OtaPackageUpdateStatus.UPDATING; | |
92 | 92 | import static org.thingsboard.server.common.data.lwm2m.LwM2mConstants.LWM2M_SEPARATOR_PATH; |
93 | 93 | import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportServerHelper.getValueFromKvProto; |
94 | 94 | import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportUtil.CLIENT_NOT_AUTHORIZED; |
... | ... | @@ -132,7 +132,7 @@ public class DefaultLwM2MTransportMsgHandler implements LwM2mTransportMsgHandler |
132 | 132 | private final TransportService transportService; |
133 | 133 | private final LwM2mTransportContext context; |
134 | 134 | public final LwM2MTransportServerConfig config; |
135 | - public final FirmwareDataCache firmwareDataCache; | |
135 | + public final OtaPackageDataCache otaPackageDataCache; | |
136 | 136 | public final LwM2mTransportServerHelper helper; |
137 | 137 | private final LwM2MJsonAdaptor adaptor; |
138 | 138 | private final TbLwM2MDtlsSessionStore sessionStore; |
... | ... | @@ -143,14 +143,14 @@ public class DefaultLwM2MTransportMsgHandler implements LwM2mTransportMsgHandler |
143 | 143 | public DefaultLwM2MTransportMsgHandler(TransportService transportService, LwM2MTransportServerConfig config, LwM2mTransportServerHelper helper, |
144 | 144 | LwM2mClientContext clientContext, |
145 | 145 | @Lazy LwM2mTransportRequest lwM2mTransportRequest, |
146 | - FirmwareDataCache firmwareDataCache, | |
146 | + OtaPackageDataCache otaPackageDataCache, | |
147 | 147 | LwM2mTransportContext context, LwM2MJsonAdaptor adaptor, TbLwM2MDtlsSessionStore sessionStore) { |
148 | 148 | this.transportService = transportService; |
149 | 149 | this.config = config; |
150 | 150 | this.helper = helper; |
151 | 151 | this.clientContext = clientContext; |
152 | 152 | this.lwM2mTransportRequest = lwM2mTransportRequest; |
153 | - this.firmwareDataCache = firmwareDataCache; | |
153 | + this.otaPackageDataCache = otaPackageDataCache; | |
154 | 154 | this.context = context; |
155 | 155 | this.adaptor = adaptor; |
156 | 156 | this.rpcSubscriptions = new ConcurrentHashMap<>(); |
... | ... | @@ -196,8 +196,8 @@ public class DefaultLwM2MTransportMsgHandler implements LwM2mTransportMsgHandler |
196 | 196 | .setSubscribeToRPC(TransportProtos.SubscribeToRPCMsg.newBuilder().build()) |
197 | 197 | .build(); |
198 | 198 | transportService.process(msg, null); |
199 | - this.getInfoFirmwareUpdate(lwM2MClient); | |
200 | - this.getInfoSoftwareUpdate(lwM2MClient); | |
199 | + this.getInfoFirmwareUpdate(lwM2MClient, null); | |
200 | + this.getInfoSoftwareUpdate(lwM2MClient, null); | |
201 | 201 | this.initLwM2mFromClientValue(registration, lwM2MClient); |
202 | 202 | this.sendLogsToThingsboard(LOG_LW2M_INFO + ": Client create after Registration", registration.getId()); |
203 | 203 | } else { |
... | ... | @@ -247,7 +247,6 @@ public class DefaultLwM2MTransportMsgHandler implements LwM2mTransportMsgHandler |
247 | 247 | * @param observations - !!! Warn: if have not finishing unReg, then this operation will be finished on next Client`s connect |
248 | 248 | */ |
249 | 249 | public void unReg(Registration registration, Collection<Observation> observations) { |
250 | - log.error("Client unRegistration -> test", new RuntimeException()); | |
251 | 250 | unRegistrationExecutor.submit(() -> { |
252 | 251 | try { |
253 | 252 | this.sendLogsToThingsboard(LOG_LW2M_INFO + ": Client unRegistration", registration.getId()); |
... | ... | @@ -286,7 +285,7 @@ public class DefaultLwM2MTransportMsgHandler implements LwM2mTransportMsgHandler |
286 | 285 | @Override |
287 | 286 | public void setCancelObservationsAll(Registration registration) { |
288 | 287 | if (registration != null) { |
289 | - lwM2mTransportRequest.sendAllRequest(registration, null, OBSERVE_CANCEL_ALL, | |
288 | + this.lwM2mTransportRequest.sendAllRequest(registration, null, OBSERVE_CANCEL_ALL, | |
290 | 289 | null, null, this.config.getTimeout(), null); |
291 | 290 | } |
292 | 291 | } |
... | ... | @@ -335,7 +334,7 @@ public class DefaultLwM2MTransportMsgHandler implements LwM2mTransportMsgHandler |
335 | 334 | READ, pathIdVer, value); |
336 | 335 | this.sendLogsToThingsboard(msg, registration.getId()); |
337 | 336 | rpcRequest.setValueMsg(String.format("%s", value)); |
338 | - this.sentRpcRequest(rpcRequest, response.getCode().getName(), (String) value, LOG_LW2M_VALUE); | |
337 | + this.sentRpcResponse(rpcRequest, response.getCode().getName(), (String) value, LOG_LW2M_VALUE); | |
339 | 338 | } |
340 | 339 | |
341 | 340 | /** |
... | ... | @@ -352,21 +351,22 @@ public class DefaultLwM2MTransportMsgHandler implements LwM2mTransportMsgHandler |
352 | 351 | @Override |
353 | 352 | public void onAttributeUpdate(AttributeUpdateNotificationMsg msg, TransportProtos.SessionInfoProto sessionInfo) { |
354 | 353 | LwM2mClient lwM2MClient = clientContext.getClient(sessionInfo); |
355 | - if (msg.getSharedUpdatedCount() > 0) { | |
354 | + if (msg.getSharedUpdatedCount() > 0 && lwM2MClient != null) { | |
355 | + log.warn ("2) OnAttributeUpdate, SharedUpdatedList() [{}]", msg.getSharedUpdatedList()); | |
356 | 356 | msg.getSharedUpdatedList().forEach(tsKvProto -> { |
357 | 357 | String pathName = tsKvProto.getKv().getKey(); |
358 | 358 | String pathIdVer = this.getPresentPathIntoProfile(sessionInfo, pathName); |
359 | 359 | Object valueNew = getValueFromKvProto(tsKvProto.getKv()); |
360 | - if ((FirmwareUtil.getAttributeKey(FirmwareType.FIRMWARE, FirmwareKey.VERSION).equals(pathName) | |
360 | + if ((OtaPackageUtil.getAttributeKey(OtaPackageType.FIRMWARE, OtaPackageKey.VERSION).equals(pathName) | |
361 | 361 | && (!valueNew.equals(lwM2MClient.getFwUpdate().getCurrentVersion()))) |
362 | - || (FirmwareUtil.getAttributeKey(FirmwareType.FIRMWARE, FirmwareKey.TITLE).equals(pathName) | |
362 | + || (OtaPackageUtil.getAttributeKey(OtaPackageType.FIRMWARE, OtaPackageKey.TITLE).equals(pathName) | |
363 | 363 | && (!valueNew.equals(lwM2MClient.getFwUpdate().getCurrentTitle())))) { |
364 | - this.getInfoFirmwareUpdate(lwM2MClient); | |
365 | - } else if ((FirmwareUtil.getAttributeKey(FirmwareType.SOFTWARE, FirmwareKey.VERSION).equals(pathName) | |
364 | + this.getInfoFirmwareUpdate(lwM2MClient, null); | |
365 | + } else if ((OtaPackageUtil.getAttributeKey(OtaPackageType.SOFTWARE, OtaPackageKey.VERSION).equals(pathName) | |
366 | 366 | && (!valueNew.equals(lwM2MClient.getSwUpdate().getCurrentVersion()))) |
367 | - || (FirmwareUtil.getAttributeKey(FirmwareType.SOFTWARE, FirmwareKey.TITLE).equals(pathName) | |
367 | + || (OtaPackageUtil.getAttributeKey(OtaPackageType.SOFTWARE, OtaPackageKey.TITLE).equals(pathName) | |
368 | 368 | && (!valueNew.equals(lwM2MClient.getSwUpdate().getCurrentTitle())))) { |
369 | - this.getInfoSoftwareUpdate(lwM2MClient); | |
369 | + this.getInfoSoftwareUpdate(lwM2MClient, null); | |
370 | 370 | } |
371 | 371 | if (pathIdVer != null) { |
372 | 372 | ResourceModel resourceModel = lwM2MClient.getResourceModel(pathIdVer, this.config |
... | ... | @@ -387,16 +387,19 @@ public class DefaultLwM2MTransportMsgHandler implements LwM2mTransportMsgHandler |
387 | 387 | } |
388 | 388 | |
389 | 389 | }); |
390 | - } else if (msg.getSharedDeletedCount() > 0) { | |
390 | + } else if (msg.getSharedDeletedCount() > 0 && lwM2MClient != null) { | |
391 | 391 | msg.getSharedUpdatedList().forEach(tsKvProto -> { |
392 | 392 | String pathName = tsKvProto.getKv().getKey(); |
393 | 393 | Object valueNew = getValueFromKvProto(tsKvProto.getKv()); |
394 | - if (FirmwareUtil.getAttributeKey(FirmwareType.FIRMWARE, FirmwareKey.VERSION).equals(pathName) && !valueNew.equals(lwM2MClient.getFwUpdate().getCurrentVersion())) { | |
394 | + if (OtaPackageUtil.getAttributeKey(OtaPackageType.FIRMWARE, OtaPackageKey.VERSION).equals(pathName) && !valueNew.equals(lwM2MClient.getFwUpdate().getCurrentVersion())) { | |
395 | 395 | lwM2MClient.getFwUpdate().setCurrentVersion((String) valueNew); |
396 | 396 | } |
397 | 397 | }); |
398 | 398 | log.info("[{}] delete [{}] onAttributeUpdate", msg.getSharedDeletedList(), sessionInfo); |
399 | 399 | } |
400 | + else if (lwM2MClient == null) { | |
401 | + log.error ("OnAttributeUpdate, lwM2MClient is null"); | |
402 | + } | |
400 | 403 | } |
401 | 404 | |
402 | 405 | /** |
... | ... | @@ -443,6 +446,7 @@ public class DefaultLwM2MTransportMsgHandler implements LwM2mTransportMsgHandler |
443 | 446 | public void onToDeviceRpcRequest(TransportProtos.ToDeviceRpcRequestMsg toDeviceRpcRequestMsg, SessionInfoProto sessionInfo) { |
444 | 447 | // #1 |
445 | 448 | this.checkRpcRequestTimeout(); |
449 | + log.warn ("4) toDeviceRpcRequestMsg: [{}], sessionUUID: [{}]", toDeviceRpcRequestMsg, new UUID(sessionInfo.getSessionIdMSB(), sessionInfo.getSessionIdLSB())); | |
446 | 450 | String bodyParams = StringUtils.trimToNull(toDeviceRpcRequestMsg.getParams()) != null ? toDeviceRpcRequestMsg.getParams() : "null"; |
447 | 451 | LwM2mTypeOper lwM2mTypeOper = setValidTypeOper(toDeviceRpcRequestMsg.getMethodName()); |
448 | 452 | UUID requestUUID = new UUID(toDeviceRpcRequestMsg.getRequestIdMSB(), toDeviceRpcRequestMsg.getRequestIdLSB()); |
... | ... | @@ -479,7 +483,7 @@ public class DefaultLwM2MTransportMsgHandler implements LwM2mTransportMsgHandler |
479 | 483 | rpcSubscriptionsToRemove.forEach(rpcSubscriptions::remove); |
480 | 484 | } |
481 | 485 | |
482 | - public void sentRpcRequest(Lwm2mClientRpcRequest rpcRequest, String requestCode, String msg, String typeMsg) { | |
486 | + public void sentRpcResponse(Lwm2mClientRpcRequest rpcRequest, String requestCode, String msg, String typeMsg) { | |
483 | 487 | rpcRequest.setResponseCode(requestCode); |
484 | 488 | if (LOG_LW2M_ERROR.equals(typeMsg)) { |
485 | 489 | rpcRequest.setInfoMsg(null); |
... | ... | @@ -502,6 +506,7 @@ public class DefaultLwM2MTransportMsgHandler implements LwM2mTransportMsgHandler |
502 | 506 | |
503 | 507 | @Override |
504 | 508 | public void onToDeviceRpcResponse(TransportProtos.ToDeviceRpcResponseMsg toDeviceResponse, SessionInfoProto sessionInfo) { |
509 | + log.warn ("5) onToDeviceRpcResponse: [{}], sessionUUID: [{}]", toDeviceResponse, new UUID(sessionInfo.getSessionIdMSB(), sessionInfo.getSessionIdLSB())); | |
505 | 510 | transportService.process(sessionInfo, toDeviceResponse, null); |
506 | 511 | } |
507 | 512 | |
... | ... | @@ -882,10 +887,16 @@ public class DefaultLwM2MTransportMsgHandler implements LwM2mTransportMsgHandler |
882 | 887 | */ |
883 | 888 | private Object getResourceValueFormatKv(LwM2mClient lwM2MClient, String pathIdVer) { |
884 | 889 | LwM2mResource resourceValue = this.getResourceValueFromLwM2MClient(lwM2MClient, pathIdVer); |
885 | - ResourceModel.Type currentType = resourceValue.getType(); | |
886 | - ResourceModel.Type expectedType = this.helper.getResourceModelTypeEqualsKvProtoValueType(currentType, pathIdVer); | |
887 | - return this.converter.convertValue(resourceValue.getValue(), currentType, expectedType, | |
888 | - new LwM2mPath(convertPathFromIdVerToObjectId(pathIdVer))); | |
890 | + if (resourceValue != null) { | |
891 | + ResourceModel.Type currentType = resourceValue.getType(); | |
892 | + ResourceModel.Type expectedType = this.helper.getResourceModelTypeEqualsKvProtoValueType(currentType, pathIdVer); | |
893 | + return this.converter.convertValue(resourceValue.getValue(), currentType, expectedType, | |
894 | + new LwM2mPath(convertPathFromIdVerToObjectId(pathIdVer))); | |
895 | + } | |
896 | + | |
897 | + else { | |
898 | + return null; | |
899 | + } | |
889 | 900 | } |
890 | 901 | |
891 | 902 | /** |
... | ... | @@ -1246,22 +1257,28 @@ public class DefaultLwM2MTransportMsgHandler implements LwM2mTransportMsgHandler |
1246 | 1257 | */ |
1247 | 1258 | public void updateAttributeFromThingsboard(List<TransportProtos.TsKvProto> tsKvProtos, TransportProtos.SessionInfoProto sessionInfo) { |
1248 | 1259 | LwM2mClient lwM2MClient = clientContext.getClient(sessionInfo); |
1249 | - tsKvProtos.forEach(tsKvProto -> { | |
1250 | - String pathIdVer = this.getPresentPathIntoProfile(sessionInfo, tsKvProto.getKv().getKey()); | |
1251 | - if (pathIdVer != null) { | |
1252 | - // #1.1 | |
1253 | - if (lwM2MClient.getDelayedRequests().containsKey(pathIdVer) && tsKvProto.getTs() > lwM2MClient.getDelayedRequests().get(pathIdVer).getTs()) { | |
1254 | - lwM2MClient.getDelayedRequests().put(pathIdVer, tsKvProto); | |
1255 | - } else if (!lwM2MClient.getDelayedRequests().containsKey(pathIdVer)) { | |
1256 | - lwM2MClient.getDelayedRequests().put(pathIdVer, tsKvProto); | |
1260 | + if (lwM2MClient != null) { | |
1261 | + log.warn("1) UpdateAttributeFromThingsboard, tsKvProtos [{}]", tsKvProtos); | |
1262 | + tsKvProtos.forEach(tsKvProto -> { | |
1263 | + String pathIdVer = this.getPresentPathIntoProfile(sessionInfo, tsKvProto.getKv().getKey()); | |
1264 | + if (pathIdVer != null) { | |
1265 | + // #1.1 | |
1266 | + if (lwM2MClient.getDelayedRequests().containsKey(pathIdVer) && tsKvProto.getTs() > lwM2MClient.getDelayedRequests().get(pathIdVer).getTs()) { | |
1267 | + lwM2MClient.getDelayedRequests().put(pathIdVer, tsKvProto); | |
1268 | + } else if (!lwM2MClient.getDelayedRequests().containsKey(pathIdVer)) { | |
1269 | + lwM2MClient.getDelayedRequests().put(pathIdVer, tsKvProto); | |
1270 | + } | |
1257 | 1271 | } |
1258 | - } | |
1259 | - }); | |
1260 | - // #2.1 | |
1261 | - lwM2MClient.getDelayedRequests().forEach((pathIdVer, tsKvProto) -> { | |
1262 | - this.updateResourcesValueToClient(lwM2MClient, this.getResourceValueFormatKv(lwM2MClient, pathIdVer), | |
1263 | - getValueFromKvProto(tsKvProto.getKv()), pathIdVer); | |
1264 | - }); | |
1272 | + }); | |
1273 | + // #2.1 | |
1274 | + lwM2MClient.getDelayedRequests().forEach((pathIdVer, tsKvProto) -> { | |
1275 | + this.updateResourcesValueToClient(lwM2MClient, this.getResourceValueFormatKv(lwM2MClient, pathIdVer), | |
1276 | + getValueFromKvProto(tsKvProto.getKv()), pathIdVer); | |
1277 | + }); | |
1278 | + } | |
1279 | + else { | |
1280 | + log.error("UpdateAttributeFromThingsboard, lwM2MClient is null"); | |
1281 | + } | |
1265 | 1282 | } |
1266 | 1283 | |
1267 | 1284 | /** |
... | ... | @@ -1340,22 +1357,30 @@ public class DefaultLwM2MTransportMsgHandler implements LwM2mTransportMsgHandler |
1340 | 1357 | } |
1341 | 1358 | } |
1342 | 1359 | |
1343 | - public void getInfoFirmwareUpdate(LwM2mClient lwM2MClient) { | |
1360 | + public void getInfoFirmwareUpdate(LwM2mClient lwM2MClient, Lwm2mClientRpcRequest rpcRequest) { | |
1344 | 1361 | if (lwM2MClient.getRegistration().getSupportedVersion(FW_ID) != null) { |
1345 | 1362 | SessionInfoProto sessionInfo = this.getSessionInfoOrCloseSession(lwM2MClient); |
1346 | 1363 | if (sessionInfo != null) { |
1347 | - transportService.process(sessionInfo, createFirmwareRequestMsg(sessionInfo, FirmwareType.FIRMWARE.name()), | |
1364 | + DefaultLwM2MTransportMsgHandler handler = this; | |
1365 | + this.transportService.process(sessionInfo, createOtaPackageRequestMsg(sessionInfo, OtaPackageType.FIRMWARE.name()), | |
1348 | 1366 | new TransportServiceCallback<>() { |
1349 | 1367 | @Override |
1350 | - public void onSuccess(TransportProtos.GetFirmwareResponseMsg response) { | |
1368 | + public void onSuccess(TransportProtos.GetOtaPackageResponseMsg response) { | |
1351 | 1369 | if (TransportProtos.ResponseStatus.SUCCESS.equals(response.getResponseStatus()) |
1352 | - && response.getType().equals(FirmwareType.FIRMWARE.name())) { | |
1370 | + && response.getType().equals(OtaPackageType.FIRMWARE.name())) { | |
1371 | + log.warn ("7) firmware start with ver: [{}]", response.getVersion()); | |
1372 | + lwM2MClient.getFwUpdate().setRpcRequest(rpcRequest); | |
1353 | 1373 | lwM2MClient.getFwUpdate().setCurrentVersion(response.getVersion()); |
1354 | 1374 | lwM2MClient.getFwUpdate().setCurrentTitle(response.getTitle()); |
1355 | - lwM2MClient.getFwUpdate().setCurrentId(new FirmwareId(new UUID(response.getFirmwareIdMSB(), response.getFirmwareIdLSB())).getId()); | |
1356 | - lwM2MClient.getFwUpdate().sendReadObserveInfo(lwM2mTransportRequest); | |
1375 | + lwM2MClient.getFwUpdate().setCurrentId(new OtaPackageId(new UUID(response.getOtaPackageIdMSB(), response.getOtaPackageIdLSB())).getId()); | |
1376 | + if (rpcRequest == null) { | |
1377 | + lwM2MClient.getFwUpdate().sendReadObserveInfo(lwM2mTransportRequest); | |
1378 | + } | |
1379 | + else { | |
1380 | + lwM2MClient.getFwUpdate().writeFwSwWare(handler, lwM2mTransportRequest); | |
1381 | + } | |
1357 | 1382 | } else { |
1358 | - log.trace("Firmware [{}] [{}]", lwM2MClient.getDeviceName(), response.getResponseStatus().toString()); | |
1383 | + log.trace("OtaPackage [{}] [{}]", lwM2MClient.getDeviceName(), response.getResponseStatus().toString()); | |
1359 | 1384 | } |
1360 | 1385 | } |
1361 | 1386 | |
... | ... | @@ -1368,21 +1393,28 @@ public class DefaultLwM2MTransportMsgHandler implements LwM2mTransportMsgHandler |
1368 | 1393 | } |
1369 | 1394 | } |
1370 | 1395 | |
1371 | - public void getInfoSoftwareUpdate(LwM2mClient lwM2MClient) { | |
1396 | + public void getInfoSoftwareUpdate(LwM2mClient lwM2MClient, Lwm2mClientRpcRequest rpcRequest) { | |
1372 | 1397 | if (lwM2MClient.getRegistration().getSupportedVersion(SW_ID) != null) { |
1373 | 1398 | SessionInfoProto sessionInfo = this.getSessionInfoOrCloseSession(lwM2MClient); |
1374 | 1399 | if (sessionInfo != null) { |
1375 | - DefaultLwM2MTransportMsgHandler serviceImpl = this; | |
1376 | - transportService.process(sessionInfo, createFirmwareRequestMsg(sessionInfo, FirmwareType.SOFTWARE.name()), | |
1400 | + DefaultLwM2MTransportMsgHandler handler = this; | |
1401 | + transportService.process(sessionInfo, createOtaPackageRequestMsg(sessionInfo, OtaPackageType.SOFTWARE.name()), | |
1377 | 1402 | new TransportServiceCallback<>() { |
1378 | 1403 | @Override |
1379 | - public void onSuccess(TransportProtos.GetFirmwareResponseMsg response) { | |
1404 | + public void onSuccess(TransportProtos.GetOtaPackageResponseMsg response) { | |
1380 | 1405 | if (TransportProtos.ResponseStatus.SUCCESS.equals(response.getResponseStatus()) |
1381 | - && response.getType().equals(FirmwareType.SOFTWARE.name())) { | |
1406 | + && response.getType().equals(OtaPackageType.SOFTWARE.name())) { | |
1407 | + lwM2MClient.getSwUpdate().setRpcRequest(rpcRequest); | |
1382 | 1408 | lwM2MClient.getSwUpdate().setCurrentVersion(response.getVersion()); |
1383 | 1409 | lwM2MClient.getSwUpdate().setCurrentTitle(response.getTitle()); |
1384 | - lwM2MClient.getSwUpdate().setCurrentId(new FirmwareId(new UUID(response.getFirmwareIdMSB(), response.getFirmwareIdLSB())).getId()); | |
1410 | + lwM2MClient.getSwUpdate().setCurrentId(new OtaPackageId(new UUID(response.getOtaPackageIdMSB(), response.getOtaPackageIdLSB())).getId()); | |
1385 | 1411 | lwM2MClient.getSwUpdate().sendReadObserveInfo(lwM2mTransportRequest); |
1412 | + if (rpcRequest == null) { | |
1413 | + lwM2MClient.getSwUpdate().sendReadObserveInfo(lwM2mTransportRequest); | |
1414 | + } | |
1415 | + else { | |
1416 | + lwM2MClient.getSwUpdate().writeFwSwWare(handler, lwM2mTransportRequest); | |
1417 | + } | |
1386 | 1418 | } else { |
1387 | 1419 | log.trace("Software [{}] [{}]", lwM2MClient.getDeviceName(), response.getResponseStatus().toString()); |
1388 | 1420 | } |
... | ... | @@ -1397,8 +1429,8 @@ public class DefaultLwM2MTransportMsgHandler implements LwM2mTransportMsgHandler |
1397 | 1429 | } |
1398 | 1430 | } |
1399 | 1431 | |
1400 | - private TransportProtos.GetFirmwareRequestMsg createFirmwareRequestMsg(SessionInfoProto sessionInfo, String nameFwSW) { | |
1401 | - return TransportProtos.GetFirmwareRequestMsg.newBuilder() | |
1432 | + private TransportProtos.GetOtaPackageRequestMsg createOtaPackageRequestMsg(SessionInfoProto sessionInfo, String nameFwSW) { | |
1433 | + return TransportProtos.GetOtaPackageRequestMsg.newBuilder() | |
1402 | 1434 | .setDeviceIdMSB(sessionInfo.getDeviceIdMSB()) |
1403 | 1435 | .setDeviceIdLSB(sessionInfo.getDeviceIdLSB()) |
1404 | 1436 | .setTenantIdMSB(sessionInfo.getTenantIdMSB()) | ... | ... |
... | ... | @@ -71,8 +71,8 @@ import java.util.stream.Collectors; |
71 | 71 | import static org.eclipse.californium.core.coap.CoAP.ResponseCode.CONTENT; |
72 | 72 | import static org.eclipse.leshan.core.ResponseCode.BAD_REQUEST; |
73 | 73 | import static org.eclipse.leshan.core.ResponseCode.NOT_FOUND; |
74 | -import static org.thingsboard.server.common.data.firmware.FirmwareUpdateStatus.DOWNLOADED; | |
75 | -import static org.thingsboard.server.common.data.firmware.FirmwareUpdateStatus.FAILED; | |
74 | +import static org.thingsboard.server.common.data.ota.OtaPackageUpdateStatus.DOWNLOADED; | |
75 | +import static org.thingsboard.server.common.data.ota.OtaPackageUpdateStatus.FAILED; | |
76 | 76 | import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportServerHelper.getContentFormatByResourceModelType; |
77 | 77 | import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportUtil.DEFAULT_TIMEOUT; |
78 | 78 | import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportUtil.FW_PACKAGE_ID; |
... | ... | @@ -82,10 +82,8 @@ import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportUtil.L |
82 | 82 | import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportUtil.LOG_LW2M_VALUE; |
83 | 83 | import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportUtil.LwM2mTypeOper; |
84 | 84 | import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportUtil.LwM2mTypeOper.DISCOVER; |
85 | -import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportUtil.LwM2mTypeOper.DISCOVER_ALL; | |
86 | 85 | import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportUtil.LwM2mTypeOper.EXECUTE; |
87 | 86 | import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportUtil.LwM2mTypeOper.OBSERVE_CANCEL; |
88 | -import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportUtil.LwM2mTypeOper.OBSERVE_CANCEL_ALL; | |
89 | 87 | import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportUtil.LwM2mTypeOper.OBSERVE_READ_ALL; |
90 | 88 | import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportUtil.LwM2mTypeOper.WRITE_ATTRIBUTES; |
91 | 89 | import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportUtil.LwM2mTypeOper.WRITE_REPLACE; |
... | ... | @@ -134,7 +132,7 @@ public class LwM2mTransportRequest { |
134 | 132 | ContentFormat contentFormat = contentFormatName != null ? ContentFormat.fromName(contentFormatName.toUpperCase()) : ContentFormat.DEFAULT; |
135 | 133 | LwM2mClient lwM2MClient = this.lwM2mClientContext.getOrRegister(registration); |
136 | 134 | LwM2mPath resultIds = target != null ? new LwM2mPath(target) : null; |
137 | - if (!OBSERVE_READ_ALL.name().equals(typeOper.name()) && resultIds != null && registration != null && resultIds.getObjectId() >= 0 && lwM2MClient != null) { | |
135 | + if (!OBSERVE_CANCEL.name().equals(typeOper.name()) && resultIds != null && registration != null && resultIds.getObjectId() >= 0 && lwM2MClient != null) { | |
138 | 136 | if (lwM2MClient.isValidObjectVersion(targetIdVer)) { |
139 | 137 | timeoutInMs = timeoutInMs > 0 ? timeoutInMs : DEFAULT_TIMEOUT; |
140 | 138 | DownlinkRequest request = createRequest(registration, lwM2MClient, typeOper, contentFormat, target, |
... | ... | @@ -153,47 +151,66 @@ public class LwM2mTransportRequest { |
153 | 151 | } else if (WRITE_UPDATE.name().equals(typeOper.name())) { |
154 | 152 | if (lwm2mClientRpcRequest != null) { |
155 | 153 | String errorMsg = String.format("Path %s params is not valid", targetIdVer); |
156 | - handler.sentRpcRequest(lwm2mClientRpcRequest, BAD_REQUEST.getName(), errorMsg, LOG_LW2M_ERROR); | |
154 | + handler.sentRpcResponse(lwm2mClientRpcRequest, BAD_REQUEST.getName(), errorMsg, LOG_LW2M_ERROR); | |
157 | 155 | } |
158 | 156 | } else if (WRITE_REPLACE.name().equals(typeOper.name()) || EXECUTE.name().equals(typeOper.name())) { |
159 | 157 | if (lwm2mClientRpcRequest != null) { |
160 | 158 | String errorMsg = String.format("Path %s object model is absent", targetIdVer); |
161 | - handler.sentRpcRequest(lwm2mClientRpcRequest, BAD_REQUEST.getName(), errorMsg, LOG_LW2M_ERROR); | |
159 | + handler.sentRpcResponse(lwm2mClientRpcRequest, BAD_REQUEST.getName(), errorMsg, LOG_LW2M_ERROR); | |
162 | 160 | } |
163 | 161 | } else if (!OBSERVE_CANCEL.name().equals(typeOper.name())) { |
164 | 162 | log.error("[{}], [{}] - [{}] error SendRequest", registration.getEndpoint(), typeOper.name(), targetIdVer); |
165 | 163 | if (lwm2mClientRpcRequest != null) { |
166 | 164 | ResourceModel resourceModel = lwM2MClient.getResourceModel(targetIdVer, this.config.getModelProvider()); |
167 | 165 | String errorMsg = resourceModel == null ? String.format("Path %s not found in object version", targetIdVer) : "SendRequest - null"; |
168 | - this.handler.sentRpcRequest(lwm2mClientRpcRequest, NOT_FOUND.getName(), errorMsg, LOG_LW2M_ERROR); | |
166 | + this.handler.sentRpcResponse(lwm2mClientRpcRequest, NOT_FOUND.getName(), errorMsg, LOG_LW2M_ERROR); | |
169 | 167 | } |
170 | 168 | } |
171 | 169 | } else if (lwm2mClientRpcRequest != null) { |
172 | 170 | String errorMsg = String.format("Path %s not found in object version", targetIdVer); |
173 | - this.handler.sentRpcRequest(lwm2mClientRpcRequest, NOT_FOUND.getName(), errorMsg, LOG_LW2M_ERROR); | |
171 | + this.handler.sentRpcResponse(lwm2mClientRpcRequest, NOT_FOUND.getName(), errorMsg, LOG_LW2M_ERROR); | |
174 | 172 | } |
175 | - } else if (OBSERVE_READ_ALL.name().equals(typeOper.name()) || DISCOVER_ALL.name().equals(typeOper.name())) { | |
176 | - Set<String> paths; | |
177 | - if (OBSERVE_READ_ALL.name().equals(typeOper.name())) { | |
178 | - Set<Observation> observations = context.getServer().getObservationService().getObservations(registration); | |
179 | - paths = observations.stream().map(observation -> observation.getPath().toString()).collect(Collectors.toUnmodifiableSet()); | |
180 | - } else { | |
181 | - assert registration != null; | |
182 | - Link[] objectLinks = registration.getSortedObjectLinks(); | |
183 | - paths = Arrays.stream(objectLinks).map(Link::toString).collect(Collectors.toUnmodifiableSet()); | |
184 | - } | |
185 | - String msg = String.format("%s: type operation %s paths - %s", LOG_LW2M_INFO, | |
186 | - typeOper.name(), paths); | |
187 | - this.handler.sendLogsToThingsboard(msg, registration.getId()); | |
188 | - if (lwm2mClientRpcRequest != null) { | |
189 | - String valueMsg = String.format("Paths - %s", paths); | |
190 | - this.handler.sentRpcRequest(lwm2mClientRpcRequest, CONTENT.name(), valueMsg, LOG_LW2M_VALUE); | |
173 | + } else { | |
174 | + switch (typeOper) { | |
175 | + case OBSERVE_READ_ALL: | |
176 | + case DISCOVER_ALL: | |
177 | + Set<String> paths; | |
178 | + if (OBSERVE_READ_ALL.name().equals(typeOper.name())) { | |
179 | + Set<Observation> observations = context.getServer().getObservationService().getObservations(registration); | |
180 | + paths = observations.stream().map(observation -> observation.getPath().toString()).collect(Collectors.toUnmodifiableSet()); | |
181 | + } else { | |
182 | + assert registration != null; | |
183 | + Link[] objectLinks = registration.getSortedObjectLinks(); | |
184 | + paths = Arrays.stream(objectLinks).map(Link::toString).collect(Collectors.toUnmodifiableSet()); | |
185 | + } | |
186 | + String msg = String.format("%s: type operation %s paths - %s", LOG_LW2M_INFO, | |
187 | + typeOper.name(), paths); | |
188 | + this.handler.sendLogsToThingsboard(msg, registration.getId()); | |
189 | + if (lwm2mClientRpcRequest != null) { | |
190 | + String valueMsg = String.format("Paths - %s", paths); | |
191 | + this.handler.sentRpcResponse(lwm2mClientRpcRequest, CONTENT.name(), valueMsg, LOG_LW2M_VALUE); | |
192 | + } | |
193 | + break; | |
194 | + case OBSERVE_CANCEL: | |
195 | + case OBSERVE_CANCEL_ALL: | |
196 | + int observeCancelCnt = 0; | |
197 | + String observeCancelMsg = null; | |
198 | + if (OBSERVE_CANCEL.name().equals(typeOper)) { | |
199 | + observeCancelCnt = context.getServer().getObservationService().cancelObservations(registration, target); | |
200 | + observeCancelMsg = String.format("%s: type operation %s paths: %s count: %d", LOG_LW2M_INFO, | |
201 | + OBSERVE_CANCEL.name(), target, observeCancelCnt); | |
202 | + } else { | |
203 | + observeCancelCnt = context.getServer().getObservationService().cancelObservations(registration); | |
204 | + observeCancelMsg = String.format("%s: type operation %s paths: All count: %d", LOG_LW2M_INFO, | |
205 | + OBSERVE_CANCEL.name(), observeCancelCnt); | |
206 | + } | |
207 | + this.afterObserveCancel(registration, observeCancelCnt, observeCancelMsg, lwm2mClientRpcRequest); | |
208 | + break; | |
209 | + // lwm2mClientRpcRequest != null | |
210 | + case FW_UPDATE: | |
211 | + this.handler.getInfoFirmwareUpdate(lwM2MClient, lwm2mClientRpcRequest); | |
212 | + break; | |
191 | 213 | } |
192 | - } else if (OBSERVE_CANCEL_ALL.name().equals(typeOper.name())) { | |
193 | - int observeCancelCnt = context.getServer().getObservationService().cancelObservations(registration); | |
194 | - String observeCancelMsgAll = String.format("%s: type operation %s paths: All count: %d", LOG_LW2M_INFO, | |
195 | - OBSERVE_CANCEL.name(), observeCancelCnt); | |
196 | - this.afterObserveCancel(registration, observeCancelCnt, observeCancelMsgAll, lwm2mClientRpcRequest); | |
197 | 214 | } |
198 | 215 | } catch (Exception e) { |
199 | 216 | String msg = String.format("%s: type operation %s %s", LOG_LW2M_ERROR, |
... | ... | @@ -201,7 +218,7 @@ public class LwM2mTransportRequest { |
201 | 218 | handler.sendLogsToThingsboard(msg, registration.getId()); |
202 | 219 | if (lwm2mClientRpcRequest != null) { |
203 | 220 | String errorMsg = String.format("Path %s type operation %s %s", targetIdVer, typeOper.name(), e.getMessage()); |
204 | - handler.sentRpcRequest(lwm2mClientRpcRequest, NOT_FOUND.getName(), errorMsg, LOG_LW2M_ERROR); | |
221 | + handler.sentRpcResponse(lwm2mClientRpcRequest, NOT_FOUND.getName(), errorMsg, LOG_LW2M_ERROR); | |
205 | 222 | } |
206 | 223 | } |
207 | 224 | } |
... | ... | @@ -234,17 +251,6 @@ public class LwM2mTransportRequest { |
234 | 251 | request = new ObserveRequest(contentFormat, resultIds.getObjectId()); |
235 | 252 | } |
236 | 253 | break; |
237 | - case OBSERVE_CANCEL: | |
238 | - /* | |
239 | - lwM2MTransportRequest.sendAllRequest(lwServer, registration, path, POST_TYPE_OPER_OBSERVE_CANCEL, null, null, null, null, context.getTimeout()); | |
240 | - At server side this will not remove the observation from the observation store, to do it you need to use | |
241 | - {@code ObservationService#cancelObservation()} | |
242 | - */ | |
243 | - int observeCancelCnt = context.getServer().getObservationService().cancelObservations(registration, target); | |
244 | - String observeCancelMsg = String.format("%s: type operation %s paths: %s count: %d", LOG_LW2M_INFO, | |
245 | - OBSERVE_CANCEL.name(), target, observeCancelCnt); | |
246 | - this.afterObserveCancel(registration, observeCancelCnt, observeCancelMsg, rpcRequest); | |
247 | - break; | |
248 | 254 | case EXECUTE: |
249 | 255 | ResourceModel resourceModelExecute = lwM2MClient.getResourceModel(targetIdVer, this.config.getModelProvider()); |
250 | 256 | if (resourceModelExecute != null) { |
... | ... | @@ -343,7 +349,7 @@ public class LwM2mTransportRequest { |
343 | 349 | } |
344 | 350 | /** Not Found */ |
345 | 351 | if (rpcRequest != null) { |
346 | - handler.sentRpcRequest(rpcRequest, response.getCode().getName(), response.getErrorMessage(), LOG_LW2M_ERROR); | |
352 | + handler.sentRpcResponse(rpcRequest, response.getCode().getName(), response.getErrorMessage(), LOG_LW2M_ERROR); | |
347 | 353 | } |
348 | 354 | /** Not Found |
349 | 355 | set setClient_fw_info... = empty |
... | ... | @@ -385,7 +391,7 @@ public class LwM2mTransportRequest { |
385 | 391 | handler.sendLogsToThingsboard(msg, registration.getId()); |
386 | 392 | log.error("[{}] [{}] - [{}] error SendRequest", request.getClass().getName().toString(), request.getPath().toString(), e.toString()); |
387 | 393 | if (rpcRequest != null) { |
388 | - handler.sentRpcRequest(rpcRequest, CoAP.CodeClass.ERROR_RESPONSE.name(), e.getMessage(), LOG_LW2M_ERROR); | |
394 | + handler.sentRpcResponse(rpcRequest, CoAP.CodeClass.ERROR_RESPONSE.name(), e.getMessage(), LOG_LW2M_ERROR); | |
389 | 395 | } |
390 | 396 | }); |
391 | 397 | } |
... | ... | @@ -431,7 +437,7 @@ public class LwM2mTransportRequest { |
431 | 437 | log.error("Path: [{}] type: [{}] value: [{}] errorMsg: [{}]]", patn, type, value, e.toString()); |
432 | 438 | if (rpcRequest != null) { |
433 | 439 | String errorMsg = String.format("NumberFormatException: Resource path - %s type - %s value - %s", patn, type, value); |
434 | - handler.sentRpcRequest(rpcRequest, BAD_REQUEST.getName(), errorMsg, LOG_LW2M_ERROR); | |
440 | + handler.sentRpcResponse(rpcRequest, BAD_REQUEST.getName(), errorMsg, LOG_LW2M_ERROR); | |
435 | 441 | } |
436 | 442 | return null; |
437 | 443 | } |
... | ... | @@ -462,44 +468,48 @@ public class LwM2mTransportRequest { |
462 | 468 | if (response instanceof ReadResponse) { |
463 | 469 | handler.onUpdateValueAfterReadResponse(registration, pathIdVer, (ReadResponse) response, rpcRequest); |
464 | 470 | } else if (response instanceof DeleteResponse) { |
465 | - log.warn("[{}] Path [{}] DeleteResponse 5_Send", pathIdVer, response); | |
471 | + log.warn("11) [{}] Path [{}] DeleteResponse", pathIdVer, response); | |
472 | + if (rpcRequest != null) { | |
473 | + rpcRequest.setInfoMsg(null); | |
474 | + handler.sentRpcResponse(rpcRequest, response.getCode().getName(), null, null); | |
475 | + } | |
466 | 476 | } else if (response instanceof DiscoverResponse) { |
467 | - String discoverValue = Link.serialize(((DiscoverResponse)response).getObjectLinks()); | |
477 | + String discoverValue = Link.serialize(((DiscoverResponse) response).getObjectLinks()); | |
468 | 478 | msgLog = String.format("%s: type operation: %s path: %s value: %s", |
469 | 479 | LOG_LW2M_INFO, DISCOVER.name(), request.getPath().toString(), discoverValue); |
470 | 480 | handler.sendLogsToThingsboard(msgLog, registration.getId()); |
471 | 481 | log.warn("DiscoverResponse: [{}]", (DiscoverResponse) response); |
472 | 482 | if (rpcRequest != null) { |
473 | - handler.sentRpcRequest(rpcRequest, response.getCode().getName(), discoverValue, LOG_LW2M_VALUE); | |
483 | + handler.sentRpcResponse(rpcRequest, response.getCode().getName(), discoverValue, LOG_LW2M_VALUE); | |
474 | 484 | } |
475 | 485 | } else if (response instanceof ExecuteResponse) { |
476 | - log.warn("[{}] Path [{}] ExecuteResponse 7_Send", pathIdVer, response); | |
486 | + msgLog = String.format("%s: type operation: %s path: %s", | |
487 | + LOG_LW2M_INFO, EXECUTE.name(), request.getPath().toString()); | |
488 | + log.warn("9) [{}] ", msgLog); | |
489 | + handler.sendLogsToThingsboard(msgLog, registration.getId()); | |
490 | + if (rpcRequest != null) { | |
491 | + msgLog = String.format("Start %s path: %S. Preparation finished: %s", EXECUTE.name(), path, rpcRequest.getInfoMsg()); | |
492 | + rpcRequest.setInfoMsg(msgLog); | |
493 | + handler.sentRpcResponse(rpcRequest, response.getCode().getName(), path, LOG_LW2M_INFO); | |
494 | + } | |
495 | + | |
477 | 496 | } else if (response instanceof WriteAttributesResponse) { |
478 | 497 | msgLog = String.format("%s: type operation: %s path: %s value: %s", |
479 | 498 | LOG_LW2M_INFO, WRITE_ATTRIBUTES.name(), request.getPath().toString(), ((WriteAttributesRequest) request).getAttributes().toString()); |
480 | 499 | handler.sendLogsToThingsboard(msgLog, registration.getId()); |
481 | - log.warn("[{}] Path [{}] WriteAttributesResponse 8_Send", pathIdVer, response); | |
500 | + log.warn("12) [{}] Path [{}] WriteAttributesResponse", pathIdVer, response); | |
482 | 501 | if (rpcRequest != null) { |
483 | - handler.sentRpcRequest(rpcRequest, response.getCode().getName(), response.toString(), LOG_LW2M_VALUE); | |
502 | + handler.sentRpcResponse(rpcRequest, response.getCode().getName(), response.toString(), LOG_LW2M_VALUE); | |
484 | 503 | } |
485 | 504 | } else if (response instanceof WriteResponse) { |
486 | - log.warn("[{}] Path [{}] WriteResponse 9_Send", pathIdVer, response); | |
487 | - this.infoWriteResponse(registration, response, request); | |
505 | + msgLog = String.format("Type operation: Write path: %s", pathIdVer); | |
506 | + log.warn("10) [{}] response: [{}]", msgLog, response); | |
507 | + this.infoWriteResponse(registration, response, request, rpcRequest); | |
488 | 508 | handler.onWriteResponseOk(registration, pathIdVer, (WriteRequest) request); |
489 | 509 | } |
490 | - if (rpcRequest != null) { | |
491 | - if (response instanceof ExecuteResponse | |
492 | - || response instanceof WriteAttributesResponse | |
493 | - || response instanceof DeleteResponse) { | |
494 | - rpcRequest.setInfoMsg(null); | |
495 | - handler.sentRpcRequest(rpcRequest, response.getCode().getName(), null, null); | |
496 | - } else if (response instanceof WriteResponse) { | |
497 | - handler.sentRpcRequest(rpcRequest, response.getCode().getName(), null, LOG_LW2M_INFO); | |
498 | - } | |
499 | - } | |
500 | 510 | } |
501 | 511 | |
502 | - private void infoWriteResponse(Registration registration, LwM2mResponse response, DownlinkRequest request) { | |
512 | + private void infoWriteResponse(Registration registration, LwM2mResponse response, DownlinkRequest request, Lwm2mClientRpcRequest rpcRequest) { | |
503 | 513 | try { |
504 | 514 | LwM2mNode node = ((WriteRequest) request).getNode(); |
505 | 515 | String msg = null; |
... | ... | @@ -517,12 +527,12 @@ public class LwM2mTransportRequest { |
517 | 527 | if (singleResource.getType() == ResourceModel.Type.STRING) { |
518 | 528 | valueLength = ((String) singleResource.getValue()).length(); |
519 | 529 | value = ((String) singleResource.getValue()) |
520 | - .substring(Math.min(valueLength, config.getLogMaxLength())); | |
530 | + .substring(Math.min(valueLength, config.getLogMaxLength())).trim(); | |
521 | 531 | |
522 | 532 | } else { |
523 | 533 | valueLength = ((byte[]) singleResource.getValue()).length; |
524 | 534 | value = new String(Arrays.copyOf(((byte[]) singleResource.getValue()), |
525 | - Math.min(valueLength, config.getLogMaxLength()))); | |
535 | + Math.min(valueLength, config.getLogMaxLength()))).trim(); | |
526 | 536 | } |
527 | 537 | value = valueLength > config.getLogMaxLength() ? value + "..." : value; |
528 | 538 | msg = String.format("%s: Update finished successfully: Lwm2m code - %d Resource path: %s length: %s value: %s", |
... | ... | @@ -538,6 +548,12 @@ public class LwM2mTransportRequest { |
538 | 548 | handler.sendLogsToThingsboard(msg, registration.getId()); |
539 | 549 | if (request.getPath().toString().equals(FW_PACKAGE_ID) || request.getPath().toString().equals(SW_PACKAGE_ID)) { |
540 | 550 | this.afterWriteSuccessFwSwUpdate(registration, request); |
551 | + if (rpcRequest != null) { | |
552 | + rpcRequest.setInfoMsg(msg); | |
553 | + } | |
554 | + } | |
555 | + else if (rpcRequest != null) { | |
556 | + handler.sentRpcResponse(rpcRequest, response.getCode().getName(), msg, LOG_LW2M_INFO); | |
541 | 557 | } |
542 | 558 | } |
543 | 559 | } catch (Exception e) { |
... | ... | @@ -558,7 +574,7 @@ public class LwM2mTransportRequest { |
558 | 574 | } |
559 | 575 | if (request.getPath().toString().equals(SW_PACKAGE_ID) && lwM2MClient.getSwUpdate() != null) { |
560 | 576 | lwM2MClient.getSwUpdate().setStateUpdate(DOWNLOADED.name()); |
561 | - lwM2MClient.getSwUpdate().sendLogs(this.handler,WRITE_REPLACE.name(), LOG_LW2M_INFO, null); | |
577 | + lwM2MClient.getSwUpdate().sendLogs(this.handler, WRITE_REPLACE.name(), LOG_LW2M_INFO, null); | |
562 | 578 | } |
563 | 579 | } |
564 | 580 | |
... | ... | @@ -592,7 +608,7 @@ public class LwM2mTransportRequest { |
592 | 608 | log.warn("[{}]", observeCancelMsg); |
593 | 609 | if (rpcRequest != null) { |
594 | 610 | rpcRequest.setInfoMsg(String.format("Count: %d", observeCancelCnt)); |
595 | - handler.sentRpcRequest(rpcRequest, CONTENT.name(), null, LOG_LW2M_INFO); | |
611 | + handler.sentRpcResponse(rpcRequest, CONTENT.name(), null, LOG_LW2M_INFO); | |
596 | 612 | } |
597 | 613 | } |
598 | 614 | } | ... | ... |
... | ... | @@ -53,6 +53,8 @@ import java.io.ByteArrayInputStream; |
53 | 53 | import java.io.IOException; |
54 | 54 | import java.util.ArrayList; |
55 | 55 | import java.util.List; |
56 | +import java.util.concurrent.TimeUnit; | |
57 | +import java.util.concurrent.atomic.AtomicInteger; | |
56 | 58 | |
57 | 59 | import static org.thingsboard.server.gen.transport.TransportProtos.KeyValueType.BOOLEAN_V; |
58 | 60 | |
... | ... | @@ -64,6 +66,13 @@ public class LwM2mTransportServerHelper { |
64 | 66 | |
65 | 67 | private final LwM2mTransportContext context; |
66 | 68 | private final LwM2MJsonAdaptor adaptor; |
69 | + private final AtomicInteger atomicTs = new AtomicInteger(0); | |
70 | + | |
71 | + | |
72 | + public long getTS() { | |
73 | + int addTs = atomicTs.getAndIncrement() >= 1000 ? atomicTs.getAndSet(0) : atomicTs.get(); | |
74 | + return TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis()) * 1000L + addTs; | |
75 | + } | |
67 | 76 | |
68 | 77 | /** |
69 | 78 | * send to Thingsboard Attribute || Telemetry |
... | ... | @@ -96,7 +105,7 @@ public class LwM2mTransportServerHelper { |
96 | 105 | public void sendParametersOnThingsboardTelemetry(List<TransportProtos.KeyValueProto> result, SessionInfoProto sessionInfo) { |
97 | 106 | PostTelemetryMsg.Builder request = PostTelemetryMsg.newBuilder(); |
98 | 107 | TransportProtos.TsKvListProto.Builder builder = TransportProtos.TsKvListProto.newBuilder(); |
99 | - builder.setTs(System.currentTimeMillis()); | |
108 | + builder.setTs(this.getTS()); | |
100 | 109 | builder.addAllKv(result); |
101 | 110 | request.addTsKvList(builder.build()); |
102 | 111 | PostTelemetryMsg postTelemetryMsg = request.build(); | ... | ... |
... | ... | @@ -43,10 +43,10 @@ import org.eclipse.leshan.server.registration.Registration; |
43 | 43 | import org.nustaq.serialization.FSTConfiguration; |
44 | 44 | import org.thingsboard.server.common.data.DeviceProfile; |
45 | 45 | import org.thingsboard.server.common.data.device.profile.Lwm2mDeviceProfileTransportConfiguration; |
46 | -import org.thingsboard.server.common.data.firmware.FirmwareKey; | |
47 | -import org.thingsboard.server.common.data.firmware.FirmwareType; | |
48 | -import org.thingsboard.server.common.data.firmware.FirmwareUpdateStatus; | |
49 | -import org.thingsboard.server.common.data.firmware.FirmwareUtil; | |
46 | +import org.thingsboard.server.common.data.ota.OtaPackageKey; | |
47 | +import org.thingsboard.server.common.data.ota.OtaPackageType; | |
48 | +import org.thingsboard.server.common.data.ota.OtaPackageUpdateStatus; | |
49 | +import org.thingsboard.server.common.data.ota.OtaPackageUtil; | |
50 | 50 | import org.thingsboard.server.common.data.id.TenantId; |
51 | 51 | import org.thingsboard.server.common.transport.TransportServiceCallback; |
52 | 52 | import org.thingsboard.server.transport.lwm2m.server.client.LwM2mClient; |
... | ... | @@ -77,12 +77,12 @@ import static org.eclipse.leshan.core.model.ResourceModel.Type.OBJLNK; |
77 | 77 | import static org.eclipse.leshan.core.model.ResourceModel.Type.OPAQUE; |
78 | 78 | import static org.eclipse.leshan.core.model.ResourceModel.Type.STRING; |
79 | 79 | import static org.eclipse.leshan.core.model.ResourceModel.Type.TIME; |
80 | -import static org.thingsboard.server.common.data.firmware.FirmwareUpdateStatus.DOWNLOADED; | |
81 | -import static org.thingsboard.server.common.data.firmware.FirmwareUpdateStatus.DOWNLOADING; | |
82 | -import static org.thingsboard.server.common.data.firmware.FirmwareUpdateStatus.FAILED; | |
83 | -import static org.thingsboard.server.common.data.firmware.FirmwareUpdateStatus.UPDATED; | |
84 | -import static org.thingsboard.server.common.data.firmware.FirmwareUpdateStatus.UPDATING; | |
85 | -import static org.thingsboard.server.common.data.firmware.FirmwareUpdateStatus.VERIFIED; | |
80 | +import static org.thingsboard.server.common.data.ota.OtaPackageUpdateStatus.DOWNLOADED; | |
81 | +import static org.thingsboard.server.common.data.ota.OtaPackageUpdateStatus.DOWNLOADING; | |
82 | +import static org.thingsboard.server.common.data.ota.OtaPackageUpdateStatus.FAILED; | |
83 | +import static org.thingsboard.server.common.data.ota.OtaPackageUpdateStatus.UPDATED; | |
84 | +import static org.thingsboard.server.common.data.ota.OtaPackageUpdateStatus.UPDATING; | |
85 | +import static org.thingsboard.server.common.data.ota.OtaPackageUpdateStatus.VERIFIED; | |
86 | 86 | import static org.thingsboard.server.common.data.lwm2m.LwM2mConstants.LWM2M_SEPARATOR_KEY; |
87 | 87 | import static org.thingsboard.server.common.data.lwm2m.LwM2mConstants.LWM2M_SEPARATOR_PATH; |
88 | 88 | |
... | ... | @@ -139,7 +139,7 @@ public class LwM2mTransportUtil { |
139 | 139 | public static final String ERROR_KEY = "error"; |
140 | 140 | public static final String METHOD_KEY = "methodName"; |
141 | 141 | |
142 | - // FirmWare | |
142 | + // Firmware | |
143 | 143 | public static final String FW_UPDATE = "Firmware update"; |
144 | 144 | public static final Integer FW_ID = 5; |
145 | 145 | // Package W |
... | ... | @@ -155,7 +155,7 @@ public class LwM2mTransportUtil { |
155 | 155 | // Update E |
156 | 156 | public static final String FW_UPDATE_ID = "/5/0/2"; |
157 | 157 | |
158 | - // SoftWare | |
158 | + // Software | |
159 | 159 | public static final String SW_UPDATE = "Software update"; |
160 | 160 | public static final Integer SW_ID = 9; |
161 | 161 | // Package W |
... | ... | @@ -229,11 +229,12 @@ public class LwM2mTransportUtil { |
229 | 229 | */ |
230 | 230 | WRITE_UPDATE(9, "WriteUpdate"), |
231 | 231 | WRITE_ATTRIBUTES(10, "WriteAttributes"), |
232 | - DELETE(11, "Delete"); | |
232 | + DELETE(11, "Delete"), | |
233 | 233 | |
234 | 234 | // only for RPC |
235 | + FW_UPDATE(12,"FirmwareUpdate"); | |
235 | 236 | // FW_READ_INFO(12, "FirmwareReadInfo"), |
236 | -// FW_UPDATE(13, "FirmwareUpdate"), | |
237 | + | |
237 | 238 | // SW_READ_INFO(15, "SoftwareReadInfo"), |
238 | 239 | // SW_UPDATE(16, "SoftwareUpdate"), |
239 | 240 | // SW_UNINSTALL(18, "SoftwareUninstall"); |
... | ... | @@ -354,7 +355,7 @@ public class LwM2mTransportUtil { |
354 | 355 | * FirmwareUpdateStatus { |
355 | 356 | * DOWNLOADING, DOWNLOADED, VERIFIED, UPDATING, UPDATED, FAILED |
356 | 357 | */ |
357 | - public static FirmwareUpdateStatus EqualsFwSateToFirmwareUpdateStatus(StateFw stateFw, UpdateResultFw updateResultFw) { | |
358 | + public static OtaPackageUpdateStatus EqualsFwSateToFirmwareUpdateStatus(StateFw stateFw, UpdateResultFw updateResultFw) { | |
358 | 359 | switch (updateResultFw) { |
359 | 360 | case INITIAL: |
360 | 361 | switch (stateFw) { |
... | ... | @@ -500,7 +501,7 @@ public class LwM2mTransportUtil { |
500 | 501 | * FirmwareUpdateStatus { |
501 | 502 | * DOWNLOADING, DOWNLOADED, VERIFIED, UPDATING, UPDATED, FAILED |
502 | 503 | */ |
503 | - public static FirmwareUpdateStatus EqualsSwSateToFirmwareUpdateStatus(UpdateStateSw updateStateSw, UpdateResultSw updateResultSw) { | |
504 | + public static OtaPackageUpdateStatus EqualsSwSateToFirmwareUpdateStatus(UpdateStateSw updateStateSw, UpdateResultSw updateResultSw) { | |
504 | 505 | switch (updateResultSw) { |
505 | 506 | case INITIAL: |
506 | 507 | switch (updateStateSw) { |
... | ... | @@ -932,15 +933,15 @@ public class LwM2mTransportUtil { |
932 | 933 | } |
933 | 934 | |
934 | 935 | public static boolean isFwSwWords (String pathName) { |
935 | - return FirmwareUtil.getAttributeKey(FirmwareType.FIRMWARE, FirmwareKey.VERSION).equals(pathName) | |
936 | - || FirmwareUtil.getAttributeKey(FirmwareType.FIRMWARE, FirmwareKey.TITLE).equals(pathName) | |
937 | - || FirmwareUtil.getAttributeKey(FirmwareType.FIRMWARE, FirmwareKey.CHECKSUM).equals(pathName) | |
938 | - || FirmwareUtil.getAttributeKey(FirmwareType.FIRMWARE, FirmwareKey.CHECKSUM_ALGORITHM).equals(pathName) | |
939 | - || FirmwareUtil.getAttributeKey(FirmwareType.FIRMWARE, FirmwareKey.SIZE).equals(pathName) | |
940 | - || FirmwareUtil.getAttributeKey(FirmwareType.SOFTWARE, FirmwareKey.VERSION).equals(pathName) | |
941 | - || FirmwareUtil.getAttributeKey(FirmwareType.SOFTWARE, FirmwareKey.TITLE).equals(pathName) | |
942 | - || FirmwareUtil.getAttributeKey(FirmwareType.SOFTWARE, FirmwareKey.CHECKSUM).equals(pathName) | |
943 | - || FirmwareUtil.getAttributeKey(FirmwareType.SOFTWARE, FirmwareKey.CHECKSUM_ALGORITHM).equals(pathName) | |
944 | - || FirmwareUtil.getAttributeKey(FirmwareType.SOFTWARE, FirmwareKey.SIZE).equals(pathName); | |
936 | + return OtaPackageUtil.getAttributeKey(OtaPackageType.FIRMWARE, OtaPackageKey.VERSION).equals(pathName) | |
937 | + || OtaPackageUtil.getAttributeKey(OtaPackageType.FIRMWARE, OtaPackageKey.TITLE).equals(pathName) | |
938 | + || OtaPackageUtil.getAttributeKey(OtaPackageType.FIRMWARE, OtaPackageKey.CHECKSUM).equals(pathName) | |
939 | + || OtaPackageUtil.getAttributeKey(OtaPackageType.FIRMWARE, OtaPackageKey.CHECKSUM_ALGORITHM).equals(pathName) | |
940 | + || OtaPackageUtil.getAttributeKey(OtaPackageType.FIRMWARE, OtaPackageKey.SIZE).equals(pathName) | |
941 | + || OtaPackageUtil.getAttributeKey(OtaPackageType.SOFTWARE, OtaPackageKey.VERSION).equals(pathName) | |
942 | + || OtaPackageUtil.getAttributeKey(OtaPackageType.SOFTWARE, OtaPackageKey.TITLE).equals(pathName) | |
943 | + || OtaPackageUtil.getAttributeKey(OtaPackageType.SOFTWARE, OtaPackageKey.CHECKSUM).equals(pathName) | |
944 | + || OtaPackageUtil.getAttributeKey(OtaPackageType.SOFTWARE, OtaPackageKey.CHECKSUM_ALGORITHM).equals(pathName) | |
945 | + || OtaPackageUtil.getAttributeKey(OtaPackageType.SOFTWARE, OtaPackageKey.SIZE).equals(pathName); | |
945 | 946 | } |
946 | 947 | } | ... | ... |
... | ... | @@ -31,7 +31,7 @@ import org.eclipse.leshan.server.registration.Registration; |
31 | 31 | import org.eclipse.leshan.server.security.SecurityInfo; |
32 | 32 | import org.thingsboard.server.common.data.Device; |
33 | 33 | import org.thingsboard.server.common.data.DeviceProfile; |
34 | -import org.thingsboard.server.common.data.firmware.FirmwareType; | |
34 | +import org.thingsboard.server.common.data.ota.OtaPackageType; | |
35 | 35 | import org.thingsboard.server.common.transport.auth.ValidateDeviceCredentialsResponse; |
36 | 36 | import org.thingsboard.server.gen.transport.TransportProtos.SessionInfoProto; |
37 | 37 | import org.thingsboard.server.gen.transport.TransportProtos.TsKvProto; |
... | ... | @@ -120,8 +120,8 @@ public class LwM2mClient implements Cloneable { |
120 | 120 | this.init = false; |
121 | 121 | this.queuedRequests = new ConcurrentLinkedQueue<>(); |
122 | 122 | |
123 | - this.fwUpdate = new LwM2mFwSwUpdate(this, FirmwareType.FIRMWARE); | |
124 | - this.swUpdate = new LwM2mFwSwUpdate(this, FirmwareType.SOFTWARE); | |
123 | + this.fwUpdate = new LwM2mFwSwUpdate(this, OtaPackageType.FIRMWARE); | |
124 | + this.swUpdate = new LwM2mFwSwUpdate(this, OtaPackageType.SOFTWARE); | |
125 | 125 | if (this.credentials != null && this.credentials.hasDeviceInfo()) { |
126 | 126 | this.session = createSession(nodeId, sessionId, credentials); |
127 | 127 | this.deviceId = new UUID(session.getDeviceIdMSB(), session.getDeviceIdLSB()); | ... | ... |
... | ... | @@ -83,11 +83,17 @@ public class LwM2mClientContextImpl implements LwM2mClientContext { |
83 | 83 | |
84 | 84 | @Override |
85 | 85 | public LwM2mClient getClient(TransportProtos.SessionInfoProto sessionInfo) { |
86 | - return lwM2mClientsByEndpoint.values().stream().filter(c -> | |
86 | + LwM2mClient lwM2mClient = lwM2mClientsByEndpoint.values().stream().filter(c -> | |
87 | 87 | (new UUID(sessionInfo.getSessionIdMSB(), sessionInfo.getSessionIdLSB())) |
88 | 88 | .equals((new UUID(c.getSession().getSessionIdMSB(), c.getSession().getSessionIdLSB()))) |
89 | 89 | |
90 | 90 | ).findAny().get(); |
91 | + if (lwM2mClient == null) { | |
92 | + log.warn("Device TimeOut? lwM2mClient is null."); | |
93 | + log.warn("SessionInfo input [{}], lwM2mClientsByEndpoint size: [{}]", sessionInfo, lwM2mClientsByEndpoint.values().size()); | |
94 | + log.error("", new RuntimeException()); | |
95 | + } | |
96 | + return lwM2mClient; | |
91 | 97 | } |
92 | 98 | |
93 | 99 | @Override | ... | ... |
... | ... | @@ -20,8 +20,8 @@ import lombok.Setter; |
20 | 20 | import lombok.extern.slf4j.Slf4j; |
21 | 21 | import org.apache.commons.lang3.StringUtils; |
22 | 22 | import org.eclipse.leshan.core.request.ContentFormat; |
23 | -import org.thingsboard.server.common.data.firmware.FirmwareType; | |
24 | -import org.thingsboard.server.common.data.firmware.FirmwareUpdateStatus; | |
23 | +import org.thingsboard.server.common.data.ota.OtaPackageType; | |
24 | +import org.thingsboard.server.common.data.ota.OtaPackageUpdateStatus; | |
25 | 25 | import org.thingsboard.server.gen.transport.TransportProtos; |
26 | 26 | import org.thingsboard.server.transport.lwm2m.server.DefaultLwM2MTransportMsgHandler; |
27 | 27 | import org.thingsboard.server.transport.lwm2m.server.LwM2mTransportRequest; |
... | ... | @@ -32,11 +32,12 @@ import java.util.List; |
32 | 32 | import java.util.UUID; |
33 | 33 | import java.util.concurrent.CopyOnWriteArrayList; |
34 | 34 | |
35 | -import static org.thingsboard.server.common.data.firmware.FirmwareKey.STATE; | |
36 | -import static org.thingsboard.server.common.data.firmware.FirmwareType.FIRMWARE; | |
37 | -import static org.thingsboard.server.common.data.firmware.FirmwareType.SOFTWARE; | |
38 | -import static org.thingsboard.server.common.data.firmware.FirmwareUpdateStatus.UPDATING; | |
39 | -import static org.thingsboard.server.common.data.firmware.FirmwareUtil.getAttributeKey; | |
35 | +import static org.thingsboard.server.common.data.ota.OtaPackageKey.STATE; | |
36 | +import static org.thingsboard.server.common.data.ota.OtaPackageType.FIRMWARE; | |
37 | +import static org.thingsboard.server.common.data.ota.OtaPackageType.SOFTWARE; | |
38 | +import static org.thingsboard.server.common.data.ota.OtaPackageUpdateStatus.UPDATING; | |
39 | +import static org.thingsboard.server.common.data.ota.OtaPackageUtil.getAttributeKey; | |
40 | +import static org.eclipse.californium.core.coap.CoAP.ResponseCode.CONTENT; | |
40 | 41 | import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportUtil.FW_NAME_ID; |
41 | 42 | import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportUtil.FW_PACKAGE_ID; |
42 | 43 | import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportUtil.FW_RESULT_ID; |
... | ... | @@ -97,14 +98,17 @@ public class LwM2mFwSwUpdate { |
97 | 98 | @Getter |
98 | 99 | @Setter |
99 | 100 | private volatile boolean infoFwSwUpdate = false; |
100 | - private final FirmwareType type; | |
101 | + private final OtaPackageType type; | |
101 | 102 | @Getter |
102 | 103 | LwM2mClient lwM2MClient; |
103 | 104 | @Getter |
104 | 105 | @Setter |
105 | 106 | private final List<String> pendingInfoRequestsStart; |
107 | + @Getter | |
108 | + @Setter | |
109 | + private volatile Lwm2mClientRpcRequest rpcRequest; | |
106 | 110 | |
107 | - public LwM2mFwSwUpdate(LwM2mClient lwM2MClient, FirmwareType type) { | |
111 | + public LwM2mFwSwUpdate(LwM2mClient lwM2MClient, OtaPackageType type) { | |
108 | 112 | this.lwM2MClient = lwM2MClient; |
109 | 113 | this.pendingInfoRequestsStart = new CopyOnWriteArrayList<>(); |
110 | 114 | this.type = type; |
... | ... | @@ -139,7 +143,7 @@ public class LwM2mFwSwUpdate { |
139 | 143 | } |
140 | 144 | if (this.pendingInfoRequestsStart.size() == 0) { |
141 | 145 | this.infoFwSwUpdate = false; |
142 | - if (!FirmwareUpdateStatus.DOWNLOADING.name().equals(this.stateUpdate)) { | |
146 | + if (!OtaPackageUpdateStatus.DOWNLOADING.name().equals(this.stateUpdate)) { | |
143 | 147 | boolean conditionalStart = this.type.equals(FIRMWARE) ? this.conditionalFwUpdateStart() : |
144 | 148 | this.conditionalSwUpdateStart(); |
145 | 149 | if (conditionalStart) { |
... | ... | @@ -153,16 +157,30 @@ public class LwM2mFwSwUpdate { |
153 | 157 | * Send FsSw to Lwm2mClient: |
154 | 158 | * before operation Write: fw_state = DOWNLOADING |
155 | 159 | */ |
156 | - private void writeFwSwWare(DefaultLwM2MTransportMsgHandler handler, LwM2mTransportRequest request) { | |
157 | - this.stateUpdate = FirmwareUpdateStatus.DOWNLOADING.name(); | |
158 | -// this.observeStateUpdate(); | |
159 | - this.sendLogs(handler, WRITE_REPLACE.name(), LOG_LW2M_INFO, null); | |
160 | - int chunkSize = 0; | |
161 | - int chunk = 0; | |
162 | - byte[] firmwareChunk = handler.firmwareDataCache.get(this.currentId.toString(), chunkSize, chunk); | |
163 | - String targetIdVer = convertPathFromObjectIdToIdVer(this.pathPackageId, this.lwM2MClient.getRegistration()); | |
164 | - request.sendAllRequest(lwM2MClient.getRegistration(), targetIdVer, WRITE_REPLACE, ContentFormat.OPAQUE.getName(), | |
165 | - firmwareChunk, handler.config.getTimeout(), null); | |
160 | + public void writeFwSwWare(DefaultLwM2MTransportMsgHandler handler, LwM2mTransportRequest request) { | |
161 | + if (this.currentId != null) { | |
162 | + this.stateUpdate = OtaPackageUpdateStatus.DOWNLOADING.name(); | |
163 | + this.sendLogs(handler, WRITE_REPLACE.name(), LOG_LW2M_INFO, null); | |
164 | + int chunkSize = 0; | |
165 | + int chunk = 0; | |
166 | + byte[] firmwareChunk = handler.otaPackageDataCache.get(this.currentId.toString(), chunkSize, chunk); | |
167 | + String targetIdVer = convertPathFromObjectIdToIdVer(this.pathPackageId, this.lwM2MClient.getRegistration()); | |
168 | + String fwMsg = String.format("%s: Start type operation %s paths: %s", LOG_LW2M_INFO, | |
169 | + LwM2mTransportUtil.LwM2mTypeOper.FW_UPDATE.name(), FW_PACKAGE_ID); | |
170 | + handler.sendLogsToThingsboard(fwMsg, lwM2MClient.getRegistration().getId()); | |
171 | + log.warn("8) Start firmware Update. Send save to: [{}] ver: [{}] path: [{}]", this.lwM2MClient.getDeviceName(), this.currentVersion, targetIdVer); | |
172 | + request.sendAllRequest(this.lwM2MClient.getRegistration(), targetIdVer, WRITE_REPLACE, ContentFormat.OPAQUE.getName(), | |
173 | + firmwareChunk, handler.config.getTimeout(), this.rpcRequest); | |
174 | + } | |
175 | + else { | |
176 | + String msgError = "FirmWareId is null."; | |
177 | + log.warn("6) [{}]", msgError); | |
178 | + if (this.rpcRequest != null) { | |
179 | + handler.sentRpcResponse(this.rpcRequest, CONTENT.name(), msgError, LOG_LW2M_ERROR); | |
180 | + } | |
181 | + log.error (msgError); | |
182 | + this.sendLogs(handler, WRITE_REPLACE.name(), LOG_LW2M_ERROR, msgError); | |
183 | + } | |
166 | 184 | } |
167 | 185 | |
168 | 186 | public void sendLogs(DefaultLwM2MTransportMsgHandler handler, String typeOper, String typeInfo, String msgError) { |
... | ... | @@ -185,7 +203,7 @@ public class LwM2mFwSwUpdate { |
185 | 203 | this.setStateUpdate(UPDATING.name()); |
186 | 204 | this.sendLogs(handler, EXECUTE.name(), LOG_LW2M_INFO, null); |
187 | 205 | request.sendAllRequest(this.lwM2MClient.getRegistration(), this.pathInstallId, EXECUTE, ContentFormat.TLV.getName(), |
188 | - null, 0, null); | |
206 | + null, 0, this.rpcRequest); | |
189 | 207 | } |
190 | 208 | |
191 | 209 | /** |
... | ... | @@ -287,10 +305,10 @@ public class LwM2mFwSwUpdate { |
287 | 305 | LwM2mTransportUtil.UpdateResultSw.fromUpdateResultSwByCode(updateResult.intValue()).type; |
288 | 306 | String key = splitCamelCaseString((String) this.lwM2MClient.getResourceNameByRezId(null, this.pathResultId)); |
289 | 307 | if (success) { |
290 | - this.stateUpdate = FirmwareUpdateStatus.UPDATED.name(); | |
308 | + this.stateUpdate = OtaPackageUpdateStatus.UPDATED.name(); | |
291 | 309 | this.sendLogs(handler, EXECUTE.name(), LOG_LW2M_INFO, null); |
292 | 310 | } else { |
293 | - this.stateUpdate = FirmwareUpdateStatus.FAILED.name(); | |
311 | + this.stateUpdate = OtaPackageUpdateStatus.FAILED.name(); | |
294 | 312 | this.sendLogs(handler, EXECUTE.name(), LOG_LW2M_ERROR, value); |
295 | 313 | } |
296 | 314 | handler.helper.sendParametersOnThingsboardTelemetry( |
... | ... | @@ -347,7 +365,7 @@ public class LwM2mFwSwUpdate { |
347 | 365 | this.pathResultId, this.lwM2MClient.getRegistration())); |
348 | 366 | this.pendingInfoRequestsStart.forEach(pathIdVer -> { |
349 | 367 | request.sendAllRequest(this.lwM2MClient.getRegistration(), pathIdVer, OBSERVE, ContentFormat.TLV.getName(), |
350 | - null, 0, null); | |
368 | + null, 0, this.rpcRequest); | |
351 | 369 | }); |
352 | 370 | |
353 | 371 | } | ... | ... |
... | ... | @@ -39,6 +39,7 @@ import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportUtil.K |
39 | 39 | import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportUtil.LwM2mTypeOper; |
40 | 40 | import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportUtil.LwM2mTypeOper.DISCOVER_ALL; |
41 | 41 | import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportUtil.LwM2mTypeOper.EXECUTE; |
42 | +import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportUtil.LwM2mTypeOper.FW_UPDATE; | |
42 | 43 | import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportUtil.LwM2mTypeOper.OBSERVE_CANCEL; |
43 | 44 | import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportUtil.LwM2mTypeOper.OBSERVE_READ_ALL; |
44 | 45 | import static org.thingsboard.server.transport.lwm2m.server.LwM2mTransportUtil.LwM2mTypeOper.WRITE_ATTRIBUTES; |
... | ... | @@ -140,7 +141,8 @@ public class Lwm2mClientRpcRequest { |
140 | 141 | if (this.getTargetIdVer() == null |
141 | 142 | && !(OBSERVE_READ_ALL == this.getTypeOper() |
142 | 143 | || DISCOVER_ALL == this.getTypeOper() |
143 | - || OBSERVE_CANCEL == this.getTypeOper())) { | |
144 | + || OBSERVE_CANCEL == this.getTypeOper() | |
145 | + || FW_UPDATE == this.getTypeOper())) { | |
144 | 146 | this.setErrorMsg(TARGET_ID_VER_KEY + " and " + |
145 | 147 | KEY_NAME_KEY + " is null or bad format"); |
146 | 148 | } | ... | ... |
... | ... | @@ -337,23 +337,24 @@ public class TbLwM2mRedisRegistrationStore implements CaliforniumRegistrationSto |
337 | 337 | } |
338 | 338 | } |
339 | 339 | |
340 | + //TODO: JedisCluster didn't implement Transaction, maybe should use some advanced key creation strategies | |
340 | 341 | private void removeAddrIndex(RedisConnection connection, Registration registration) { |
341 | 342 | // Watch the key to remove. |
342 | 343 | byte[] regAddrKey = toRegAddrKey(registration.getSocketAddress()); |
343 | - connection.watch(regAddrKey); | |
344 | +// connection.watch(regAddrKey); | |
344 | 345 | |
345 | 346 | byte[] epFromAddr = connection.get(regAddrKey); |
346 | 347 | // Delete the key if needed. |
347 | 348 | if (Arrays.equals(epFromAddr, registration.getEndpoint().getBytes(UTF_8))) { |
348 | 349 | // Try to delete the key |
349 | - connection.multi(); | |
350 | +// connection.multi(); | |
350 | 351 | connection.del(regAddrKey); |
351 | - connection.exec(); | |
352 | +// connection.exec(); | |
352 | 353 | // if transaction failed this is not an issue as the socket address is probably reused and we don't neeed to |
353 | 354 | // delete it anymore. |
354 | 355 | } else { |
355 | 356 | // the key must not be deleted. |
356 | - connection.unwatch(); | |
357 | +// connection.unwatch(); | |
357 | 358 | } |
358 | 359 | } |
359 | 360 | ... | ... |
... | ... | @@ -43,6 +43,9 @@ public class LwM2mValueConverterImpl implements LwM2mValueConverter { |
43 | 43 | @Override |
44 | 44 | public Object convertValue(Object value, Type currentType, Type expectedType, LwM2mPath resourcePath) |
45 | 45 | throws CodecException { |
46 | + if (value == null) { | |
47 | + return null; | |
48 | + } | |
46 | 49 | if (expectedType == null) { |
47 | 50 | /** unknown resource, trusted value */ |
48 | 51 | return value; | ... | ... |
... | ... | @@ -47,8 +47,8 @@ import org.thingsboard.server.common.data.DeviceProfile; |
47 | 47 | import org.thingsboard.server.common.data.DeviceTransportType; |
48 | 48 | import org.thingsboard.server.common.data.TransportPayloadType; |
49 | 49 | import org.thingsboard.server.common.data.device.profile.MqttTopics; |
50 | -import org.thingsboard.server.common.data.firmware.FirmwareType; | |
51 | -import org.thingsboard.server.common.data.id.FirmwareId; | |
50 | +import org.thingsboard.server.common.data.ota.OtaPackageType; | |
51 | +import org.thingsboard.server.common.data.id.OtaPackageId; | |
52 | 52 | import org.thingsboard.server.common.msg.EncryptionUtil; |
53 | 53 | import org.thingsboard.server.common.msg.tools.TbRateLimitsException; |
54 | 54 | import org.thingsboard.server.common.transport.SessionMsgListener; |
... | ... | @@ -126,8 +126,8 @@ public class MqttTransportHandler extends ChannelInboundHandlerAdapter implement |
126 | 126 | private volatile InetSocketAddress address; |
127 | 127 | private volatile GatewaySessionHandler gatewaySessionHandler; |
128 | 128 | |
129 | - private final ConcurrentHashMap<String, String> fwSessions; | |
130 | - private final ConcurrentHashMap<String, Integer> fwChunkSizes; | |
129 | + private final ConcurrentHashMap<String, String> otaPackSessions; | |
130 | + private final ConcurrentHashMap<String, Integer> chunkSizes; | |
131 | 131 | |
132 | 132 | MqttTransportHandler(MqttTransportContext context, SslHandler sslHandler) { |
133 | 133 | this.sessionId = UUID.randomUUID(); |
... | ... | @@ -137,8 +137,8 @@ public class MqttTransportHandler extends ChannelInboundHandlerAdapter implement |
137 | 137 | this.sslHandler = sslHandler; |
138 | 138 | this.mqttQoSMap = new ConcurrentHashMap<>(); |
139 | 139 | this.deviceSessionCtx = new DeviceSessionCtx(sessionId, mqttQoSMap, context); |
140 | - this.fwSessions = new ConcurrentHashMap<>(); | |
141 | - this.fwChunkSizes = new ConcurrentHashMap<>(); | |
140 | + this.otaPackSessions = new ConcurrentHashMap<>(); | |
141 | + this.chunkSizes = new ConcurrentHashMap<>(); | |
142 | 142 | } |
143 | 143 | |
144 | 144 | @Override |
... | ... | @@ -320,9 +320,9 @@ public class MqttTransportHandler extends ChannelInboundHandlerAdapter implement |
320 | 320 | TransportProtos.ClaimDeviceMsg claimDeviceMsg = payloadAdaptor.convertToClaimDevice(deviceSessionCtx, mqttMsg); |
321 | 321 | transportService.process(deviceSessionCtx.getSessionInfo(), claimDeviceMsg, getPubAckCallback(ctx, msgId, claimDeviceMsg)); |
322 | 322 | } else if ((fwMatcher = FW_REQUEST_PATTERN.matcher(topicName)).find()) { |
323 | - getFirmwareCallback(ctx, mqttMsg, msgId, fwMatcher, FirmwareType.FIRMWARE); | |
323 | + getOtaPackageCallback(ctx, mqttMsg, msgId, fwMatcher, OtaPackageType.FIRMWARE); | |
324 | 324 | } else if ((fwMatcher = SW_REQUEST_PATTERN.matcher(topicName)).find()) { |
325 | - getFirmwareCallback(ctx, mqttMsg, msgId, fwMatcher, FirmwareType.SOFTWARE); | |
325 | + getOtaPackageCallback(ctx, mqttMsg, msgId, fwMatcher, OtaPackageType.SOFTWARE); | |
326 | 326 | } else { |
327 | 327 | transportService.reportActivity(deviceSessionCtx.getSessionInfo()); |
328 | 328 | ack(ctx, msgId); |
... | ... | @@ -334,38 +334,38 @@ public class MqttTransportHandler extends ChannelInboundHandlerAdapter implement |
334 | 334 | } |
335 | 335 | } |
336 | 336 | |
337 | - private void getFirmwareCallback(ChannelHandlerContext ctx, MqttPublishMessage mqttMsg, int msgId, Matcher fwMatcher, FirmwareType type) { | |
337 | + private void getOtaPackageCallback(ChannelHandlerContext ctx, MqttPublishMessage mqttMsg, int msgId, Matcher fwMatcher, OtaPackageType type) { | |
338 | 338 | String payload = mqttMsg.content().toString(UTF8); |
339 | 339 | int chunkSize = StringUtils.isNotEmpty(payload) ? Integer.parseInt(payload) : 0; |
340 | 340 | String requestId = fwMatcher.group("requestId"); |
341 | 341 | int chunk = Integer.parseInt(fwMatcher.group("chunk")); |
342 | 342 | |
343 | 343 | if (chunkSize > 0) { |
344 | - this.fwChunkSizes.put(requestId, chunkSize); | |
344 | + this.chunkSizes.put(requestId, chunkSize); | |
345 | 345 | } else { |
346 | - chunkSize = fwChunkSizes.getOrDefault(requestId, 0); | |
346 | + chunkSize = chunkSizes.getOrDefault(requestId, 0); | |
347 | 347 | } |
348 | 348 | |
349 | 349 | if (chunkSize > context.getMaxPayloadSize()) { |
350 | - sendFirmwareError(ctx, PAYLOAD_TOO_LARGE); | |
350 | + sendOtaPackageError(ctx, PAYLOAD_TOO_LARGE); | |
351 | 351 | return; |
352 | 352 | } |
353 | 353 | |
354 | - String firmwareId = fwSessions.get(requestId); | |
354 | + String otaPackageId = otaPackSessions.get(requestId); | |
355 | 355 | |
356 | - if (firmwareId != null) { | |
357 | - sendFirmware(ctx, mqttMsg.variableHeader().packetId(), firmwareId, requestId, chunkSize, chunk, type); | |
356 | + if (otaPackageId != null) { | |
357 | + sendOtaPackage(ctx, mqttMsg.variableHeader().packetId(), otaPackageId, requestId, chunkSize, chunk, type); | |
358 | 358 | } else { |
359 | 359 | TransportProtos.SessionInfoProto sessionInfo = deviceSessionCtx.getSessionInfo(); |
360 | - TransportProtos.GetFirmwareRequestMsg getFirmwareRequestMsg = TransportProtos.GetFirmwareRequestMsg.newBuilder() | |
360 | + TransportProtos.GetOtaPackageRequestMsg getOtaPackageRequestMsg = TransportProtos.GetOtaPackageRequestMsg.newBuilder() | |
361 | 361 | .setDeviceIdMSB(sessionInfo.getDeviceIdMSB()) |
362 | 362 | .setDeviceIdLSB(sessionInfo.getDeviceIdLSB()) |
363 | 363 | .setTenantIdMSB(sessionInfo.getTenantIdMSB()) |
364 | 364 | .setTenantIdLSB(sessionInfo.getTenantIdLSB()) |
365 | 365 | .setType(type.name()) |
366 | 366 | .build(); |
367 | - transportService.process(deviceSessionCtx.getSessionInfo(), getFirmwareRequestMsg, | |
368 | - new FirmwareCallback(ctx, msgId, getFirmwareRequestMsg, requestId, chunkSize, chunk)); | |
367 | + transportService.process(deviceSessionCtx.getSessionInfo(), getOtaPackageRequestMsg, | |
368 | + new OtaPackageCallback(ctx, msgId, getOtaPackageRequestMsg, requestId, chunkSize, chunk)); | |
369 | 369 | } |
370 | 370 | } |
371 | 371 | |
... | ... | @@ -425,15 +425,15 @@ public class MqttTransportHandler extends ChannelInboundHandlerAdapter implement |
425 | 425 | } |
426 | 426 | } |
427 | 427 | |
428 | - private class FirmwareCallback implements TransportServiceCallback<TransportProtos.GetFirmwareResponseMsg> { | |
428 | + private class OtaPackageCallback implements TransportServiceCallback<TransportProtos.GetOtaPackageResponseMsg> { | |
429 | 429 | private final ChannelHandlerContext ctx; |
430 | 430 | private final int msgId; |
431 | - private final TransportProtos.GetFirmwareRequestMsg msg; | |
431 | + private final TransportProtos.GetOtaPackageRequestMsg msg; | |
432 | 432 | private final String requestId; |
433 | 433 | private final int chunkSize; |
434 | 434 | private final int chunk; |
435 | 435 | |
436 | - FirmwareCallback(ChannelHandlerContext ctx, int msgId, TransportProtos.GetFirmwareRequestMsg msg, String requestId, int chunkSize, int chunk) { | |
436 | + OtaPackageCallback(ChannelHandlerContext ctx, int msgId, TransportProtos.GetOtaPackageRequestMsg msg, String requestId, int chunkSize, int chunk) { | |
437 | 437 | this.ctx = ctx; |
438 | 438 | this.msgId = msgId; |
439 | 439 | this.msg = msg; |
... | ... | @@ -443,13 +443,13 @@ public class MqttTransportHandler extends ChannelInboundHandlerAdapter implement |
443 | 443 | } |
444 | 444 | |
445 | 445 | @Override |
446 | - public void onSuccess(TransportProtos.GetFirmwareResponseMsg response) { | |
446 | + public void onSuccess(TransportProtos.GetOtaPackageResponseMsg response) { | |
447 | 447 | if (TransportProtos.ResponseStatus.SUCCESS.equals(response.getResponseStatus())) { |
448 | - FirmwareId firmwareId = new FirmwareId(new UUID(response.getFirmwareIdMSB(), response.getFirmwareIdLSB())); | |
449 | - fwSessions.put(requestId, firmwareId.toString()); | |
450 | - sendFirmware(ctx, msgId, firmwareId.toString(), requestId, chunkSize, chunk, FirmwareType.valueOf(response.getType())); | |
448 | + OtaPackageId firmwareId = new OtaPackageId(new UUID(response.getOtaPackageIdMSB(), response.getOtaPackageIdLSB())); | |
449 | + otaPackSessions.put(requestId, firmwareId.toString()); | |
450 | + sendOtaPackage(ctx, msgId, firmwareId.toString(), requestId, chunkSize, chunk, OtaPackageType.valueOf(response.getType())); | |
451 | 451 | } else { |
452 | - sendFirmwareError(ctx, response.getResponseStatus().toString()); | |
452 | + sendOtaPackageError(ctx, response.getResponseStatus().toString()); | |
453 | 453 | } |
454 | 454 | } |
455 | 455 | |
... | ... | @@ -460,11 +460,11 @@ public class MqttTransportHandler extends ChannelInboundHandlerAdapter implement |
460 | 460 | } |
461 | 461 | } |
462 | 462 | |
463 | - private void sendFirmware(ChannelHandlerContext ctx, int msgId, String firmwareId, String requestId, int chunkSize, int chunk, FirmwareType type) { | |
463 | + private void sendOtaPackage(ChannelHandlerContext ctx, int msgId, String firmwareId, String requestId, int chunkSize, int chunk, OtaPackageType type) { | |
464 | 464 | log.trace("[{}] Send firmware [{}] to device!", sessionId, firmwareId); |
465 | 465 | ack(ctx, msgId); |
466 | 466 | try { |
467 | - byte[] firmwareChunk = context.getFirmwareDataCache().get(firmwareId, chunkSize, chunk); | |
467 | + byte[] firmwareChunk = context.getOtaPackageDataCache().get(firmwareId, chunkSize, chunk); | |
468 | 468 | deviceSessionCtx.getPayloadAdaptor() |
469 | 469 | .convertToPublish(deviceSessionCtx, firmwareChunk, requestId, chunk, type) |
470 | 470 | .ifPresent(deviceSessionCtx.getChannel()::writeAndFlush); |
... | ... | @@ -473,7 +473,7 @@ public class MqttTransportHandler extends ChannelInboundHandlerAdapter implement |
473 | 473 | } |
474 | 474 | } |
475 | 475 | |
476 | - private void sendFirmwareError(ChannelHandlerContext ctx, String error) { | |
476 | + private void sendOtaPackageError(ChannelHandlerContext ctx, String error) { | |
477 | 477 | log.warn("[{}] {}", sessionId, error); |
478 | 478 | deviceSessionCtx.getChannel().writeAndFlush(deviceSessionCtx |
479 | 479 | .getPayloadAdaptor() | ... | ... |
... | ... | @@ -30,7 +30,7 @@ import lombok.extern.slf4j.Slf4j; |
30 | 30 | import org.springframework.stereotype.Component; |
31 | 31 | import org.springframework.util.StringUtils; |
32 | 32 | import org.thingsboard.server.common.data.device.profile.MqttTopics; |
33 | -import org.thingsboard.server.common.data.firmware.FirmwareType; | |
33 | +import org.thingsboard.server.common.data.ota.OtaPackageType; | |
34 | 34 | import org.thingsboard.server.common.transport.adaptor.AdaptorException; |
35 | 35 | import org.thingsboard.server.common.transport.adaptor.JsonConverter; |
36 | 36 | import org.thingsboard.server.gen.transport.TransportProtos; |
... | ... | @@ -155,7 +155,7 @@ public class JsonMqttAdaptor implements MqttTransportAdaptor { |
155 | 155 | } |
156 | 156 | |
157 | 157 | @Override |
158 | - public Optional<MqttMessage> convertToPublish(MqttDeviceAwareSessionContext ctx, byte[] firmwareChunk, String requestId, int chunk, FirmwareType firmwareType) { | |
158 | + public Optional<MqttMessage> convertToPublish(MqttDeviceAwareSessionContext ctx, byte[] firmwareChunk, String requestId, int chunk, OtaPackageType firmwareType) { | |
159 | 159 | return Optional.of(createMqttPublishMsg(ctx, String.format(DEVICE_SOFTWARE_FIRMWARE_RESPONSES_TOPIC_FORMAT, firmwareType.getKeyPrefix(), requestId, chunk), firmwareChunk)); |
160 | 160 | } |
161 | 161 | ... | ... |
... | ... | @@ -23,7 +23,7 @@ import io.netty.handler.codec.mqtt.MqttMessage; |
23 | 23 | import io.netty.handler.codec.mqtt.MqttMessageType; |
24 | 24 | import io.netty.handler.codec.mqtt.MqttPublishMessage; |
25 | 25 | import io.netty.handler.codec.mqtt.MqttPublishVariableHeader; |
26 | -import org.thingsboard.server.common.data.firmware.FirmwareType; | |
26 | +import org.thingsboard.server.common.data.ota.OtaPackageType; | |
27 | 27 | import org.thingsboard.server.common.transport.adaptor.AdaptorException; |
28 | 28 | import org.thingsboard.server.gen.transport.TransportProtos.AttributeUpdateNotificationMsg; |
29 | 29 | import org.thingsboard.server.gen.transport.TransportProtos.ClaimDeviceMsg; |
... | ... | @@ -78,7 +78,7 @@ public interface MqttTransportAdaptor { |
78 | 78 | |
79 | 79 | Optional<MqttMessage> convertToPublish(MqttDeviceAwareSessionContext ctx, ProvisionDeviceResponseMsg provisionResponse) throws AdaptorException; |
80 | 80 | |
81 | - Optional<MqttMessage> convertToPublish(MqttDeviceAwareSessionContext ctx, byte[] firmwareChunk, String requestId, int chunk, FirmwareType firmwareType) throws AdaptorException; | |
81 | + Optional<MqttMessage> convertToPublish(MqttDeviceAwareSessionContext ctx, byte[] firmwareChunk, String requestId, int chunk, OtaPackageType firmwareType) throws AdaptorException; | |
82 | 82 | |
83 | 83 | default MqttPublishMessage createMqttPublishMsg(MqttDeviceAwareSessionContext ctx, String topic, byte[] payloadInBytes) { |
84 | 84 | MqttFixedHeader mqttFixedHeader = | ... | ... |
... | ... | @@ -28,7 +28,7 @@ import lombok.extern.slf4j.Slf4j; |
28 | 28 | import org.springframework.stereotype.Component; |
29 | 29 | import org.springframework.util.StringUtils; |
30 | 30 | import org.thingsboard.server.common.data.device.profile.MqttTopics; |
31 | -import org.thingsboard.server.common.data.firmware.FirmwareType; | |
31 | +import org.thingsboard.server.common.data.ota.OtaPackageType; | |
32 | 32 | import org.thingsboard.server.common.transport.adaptor.AdaptorException; |
33 | 33 | import org.thingsboard.server.common.transport.adaptor.JsonConverter; |
34 | 34 | import org.thingsboard.server.common.transport.adaptor.ProtoConverter; |
... | ... | @@ -168,7 +168,7 @@ public class ProtoMqttAdaptor implements MqttTransportAdaptor { |
168 | 168 | } |
169 | 169 | |
170 | 170 | @Override |
171 | - public Optional<MqttMessage> convertToPublish(MqttDeviceAwareSessionContext ctx, byte[] firmwareChunk, String requestId, int chunk, FirmwareType firmwareType) throws AdaptorException { | |
171 | + public Optional<MqttMessage> convertToPublish(MqttDeviceAwareSessionContext ctx, byte[] firmwareChunk, String requestId, int chunk, OtaPackageType firmwareType) throws AdaptorException { | |
172 | 172 | return Optional.of(createMqttPublishMsg(ctx, String.format(DEVICE_SOFTWARE_FIRMWARE_RESPONSES_TOPIC_FORMAT, firmwareType.getKeyPrefix(), requestId, chunk), firmwareChunk)); |
173 | 173 | } |
174 | 174 | ... | ... |
... | ... | @@ -21,14 +21,13 @@ import lombok.Getter; |
21 | 21 | import lombok.extern.slf4j.Slf4j; |
22 | 22 | import org.springframework.beans.factory.annotation.Autowired; |
23 | 23 | import org.thingsboard.common.util.ThingsBoardExecutors; |
24 | -import org.thingsboard.server.cache.firmware.FirmwareDataCache; | |
24 | +import org.thingsboard.server.cache.ota.OtaPackageDataCache; | |
25 | 25 | import org.thingsboard.server.queue.discovery.TbServiceInfoProvider; |
26 | 26 | import org.thingsboard.server.queue.scheduler.SchedulerComponent; |
27 | 27 | |
28 | 28 | import javax.annotation.PostConstruct; |
29 | 29 | import javax.annotation.PreDestroy; |
30 | 30 | import java.util.concurrent.ExecutorService; |
31 | -import java.util.concurrent.Executors; | |
32 | 31 | |
33 | 32 | /** |
34 | 33 | * Created by ashvayka on 15.10.18. |
... | ... | @@ -53,7 +52,7 @@ public abstract class TransportContext { |
53 | 52 | |
54 | 53 | @Getter |
55 | 54 | @Autowired |
56 | - private FirmwareDataCache firmwareDataCache; | |
55 | + private OtaPackageDataCache otaPackageDataCache; | |
57 | 56 | |
58 | 57 | @Autowired |
59 | 58 | private TransportResourceCache transportResourceCache; | ... | ... |
... | ... | @@ -29,8 +29,8 @@ import org.thingsboard.server.gen.transport.TransportProtos.GetDeviceRequestMsg; |
29 | 29 | import org.thingsboard.server.gen.transport.TransportProtos.GetDeviceResponseMsg; |
30 | 30 | import org.thingsboard.server.gen.transport.TransportProtos.GetEntityProfileRequestMsg; |
31 | 31 | import org.thingsboard.server.gen.transport.TransportProtos.GetEntityProfileResponseMsg; |
32 | -import org.thingsboard.server.gen.transport.TransportProtos.GetFirmwareRequestMsg; | |
33 | -import org.thingsboard.server.gen.transport.TransportProtos.GetFirmwareResponseMsg; | |
32 | +import org.thingsboard.server.gen.transport.TransportProtos.GetOtaPackageRequestMsg; | |
33 | +import org.thingsboard.server.gen.transport.TransportProtos.GetOtaPackageResponseMsg; | |
34 | 34 | import org.thingsboard.server.gen.transport.TransportProtos.GetOrCreateDeviceFromGatewayRequestMsg; |
35 | 35 | import org.thingsboard.server.gen.transport.TransportProtos.GetResourceRequestMsg; |
36 | 36 | import org.thingsboard.server.gen.transport.TransportProtos.GetResourceResponseMsg; |
... | ... | @@ -115,7 +115,7 @@ public interface TransportService { |
115 | 115 | |
116 | 116 | void process(TransportToDeviceActorMsg msg, TransportServiceCallback<Void> callback); |
117 | 117 | |
118 | - void process(SessionInfoProto sessionInfoProto, GetFirmwareRequestMsg msg, TransportServiceCallback<GetFirmwareResponseMsg> callback); | |
118 | + void process(SessionInfoProto sessionInfoProto, GetOtaPackageRequestMsg msg, TransportServiceCallback<GetOtaPackageResponseMsg> callback); | |
119 | 119 | |
120 | 120 | SessionMetaData registerAsyncSession(SessionInfoProto sessionInfo, SessionMsgListener listener); |
121 | 121 | ... | ... |
... | ... | @@ -614,13 +614,13 @@ public class DefaultTransportService implements TransportService { |
614 | 614 | } |
615 | 615 | |
616 | 616 | @Override |
617 | - public void process(TransportProtos.SessionInfoProto sessionInfo, TransportProtos.GetFirmwareRequestMsg msg, TransportServiceCallback<TransportProtos.GetFirmwareResponseMsg> callback) { | |
617 | + public void process(TransportProtos.SessionInfoProto sessionInfo, TransportProtos.GetOtaPackageRequestMsg msg, TransportServiceCallback<TransportProtos.GetOtaPackageResponseMsg> callback) { | |
618 | 618 | if (checkLimits(sessionInfo, msg, callback)) { |
619 | 619 | TbProtoQueueMsg<TransportProtos.TransportApiRequestMsg> protoMsg = |
620 | - new TbProtoQueueMsg<>(UUID.randomUUID(), TransportProtos.TransportApiRequestMsg.newBuilder().setFirmwareRequestMsg(msg).build()); | |
620 | + new TbProtoQueueMsg<>(UUID.randomUUID(), TransportProtos.TransportApiRequestMsg.newBuilder().setOtaPackageRequestMsg(msg).build()); | |
621 | 621 | |
622 | 622 | AsyncCallbackTemplate.withCallback(transportApiRequestTemplate.send(protoMsg), response -> { |
623 | - callback.onSuccess(response.getValue().getFirmwareResponseMsg()); | |
623 | + callback.onSuccess(response.getValue().getOtaPackageResponseMsg()); | |
624 | 624 | }, callback::onError, transportCallbackExecutor); |
625 | 625 | } |
626 | 626 | } | ... | ... |
... | ... | @@ -21,6 +21,7 @@ import org.thingsboard.server.common.data.DeviceInfo; |
21 | 21 | import org.thingsboard.server.common.data.DeviceTransportType; |
22 | 22 | import org.thingsboard.server.common.data.EntitySubtype; |
23 | 23 | import org.thingsboard.server.common.data.id.TenantId; |
24 | +import org.thingsboard.server.common.data.ota.OtaPackageType; | |
24 | 25 | import org.thingsboard.server.common.data.page.PageData; |
25 | 26 | import org.thingsboard.server.common.data.page.PageLink; |
26 | 27 | import org.thingsboard.server.dao.Dao; |
... | ... | @@ -81,9 +82,12 @@ public interface DeviceDao extends Dao<Device>, TenantEntityDao { |
81 | 82 | */ |
82 | 83 | PageData<Device> findDevicesByTenantIdAndType(UUID tenantId, String type, PageLink pageLink); |
83 | 84 | |
84 | - PageData<Device> findDevicesByTenantIdAndTypeAndEmptyFirmware(UUID tenantId, String type, PageLink pageLink); | |
85 | + PageData<Device> findDevicesByTenantIdAndTypeAndEmptyOtaPackage(UUID tenantId, | |
86 | + UUID deviceProfileId, | |
87 | + OtaPackageType type, | |
88 | + PageLink pageLink); | |
85 | 89 | |
86 | - PageData<Device> findDevicesByTenantIdAndTypeAndEmptySoftware(UUID tenantId, String type, PageLink pageLink); | |
90 | + Long countDevicesByTenantIdAndDeviceProfileIdAndEmptyOtaPackage(UUID tenantId, UUID deviceProfileId, OtaPackageType otaPackageType); | |
87 | 91 | |
88 | 92 | /** |
89 | 93 | * Find device infos by tenantId, type and page link. | ... | ... |
... | ... | @@ -43,7 +43,7 @@ import org.thingsboard.server.common.data.DeviceProfileInfo; |
43 | 43 | import org.thingsboard.server.common.data.DeviceProfileProvisionType; |
44 | 44 | import org.thingsboard.server.common.data.DeviceProfileType; |
45 | 45 | import org.thingsboard.server.common.data.DeviceTransportType; |
46 | -import org.thingsboard.server.common.data.Firmware; | |
46 | +import org.thingsboard.server.common.data.OtaPackage; | |
47 | 47 | import org.thingsboard.server.common.data.Tenant; |
48 | 48 | import org.thingsboard.server.common.data.device.profile.CoapDeviceProfileTransportConfiguration; |
49 | 49 | import org.thingsboard.server.common.data.device.profile.CoapDeviceTypeConfiguration; |
... | ... | @@ -57,7 +57,7 @@ import org.thingsboard.server.common.data.device.profile.DisabledDeviceProfilePr |
57 | 57 | import org.thingsboard.server.common.data.device.profile.MqttDeviceProfileTransportConfiguration; |
58 | 58 | import org.thingsboard.server.common.data.device.profile.ProtoTransportPayloadConfiguration; |
59 | 59 | import org.thingsboard.server.common.data.device.profile.TransportPayloadTypeConfiguration; |
60 | -import org.thingsboard.server.common.data.firmware.FirmwareType; | |
60 | +import org.thingsboard.server.common.data.ota.OtaPackageType; | |
61 | 61 | import org.thingsboard.server.common.data.id.DeviceProfileId; |
62 | 62 | import org.thingsboard.server.common.data.id.TenantId; |
63 | 63 | import org.thingsboard.server.common.data.page.PageData; |
... | ... | @@ -66,7 +66,7 @@ import org.thingsboard.server.common.data.rule.RuleChain; |
66 | 66 | import org.thingsboard.server.dao.dashboard.DashboardService; |
67 | 67 | import org.thingsboard.server.dao.entity.AbstractEntityService; |
68 | 68 | import org.thingsboard.server.dao.exception.DataValidationException; |
69 | -import org.thingsboard.server.dao.firmware.FirmwareService; | |
69 | +import org.thingsboard.server.dao.ota.OtaPackageService; | |
70 | 70 | import org.thingsboard.server.dao.rule.RuleChainService; |
71 | 71 | import org.thingsboard.server.dao.service.DataValidator; |
72 | 72 | import org.thingsboard.server.dao.service.PaginatedRemover; |
... | ... | @@ -119,7 +119,7 @@ public class DeviceProfileServiceImpl extends AbstractEntityService implements D |
119 | 119 | private CacheManager cacheManager; |
120 | 120 | |
121 | 121 | @Autowired |
122 | - private FirmwareService firmwareService; | |
122 | + private OtaPackageService otaPackageService; | |
123 | 123 | |
124 | 124 | @Autowired |
125 | 125 | private RuleChainService ruleChainService; |
... | ... | @@ -427,11 +427,11 @@ public class DeviceProfileServiceImpl extends AbstractEntityService implements D |
427 | 427 | } |
428 | 428 | |
429 | 429 | if (deviceProfile.getFirmwareId() != null) { |
430 | - Firmware firmware = firmwareService.findFirmwareById(tenantId, deviceProfile.getFirmwareId()); | |
430 | + OtaPackage firmware = otaPackageService.findOtaPackageById(tenantId, deviceProfile.getFirmwareId()); | |
431 | 431 | if (firmware == null) { |
432 | 432 | throw new DataValidationException("Can't assign non-existent firmware!"); |
433 | 433 | } |
434 | - if (!firmware.getType().equals(FirmwareType.FIRMWARE)) { | |
434 | + if (!firmware.getType().equals(OtaPackageType.FIRMWARE)) { | |
435 | 435 | throw new DataValidationException("Can't assign firmware with type: " + firmware.getType()); |
436 | 436 | } |
437 | 437 | if (firmware.getData() == null) { |
... | ... | @@ -443,11 +443,11 @@ public class DeviceProfileServiceImpl extends AbstractEntityService implements D |
443 | 443 | } |
444 | 444 | |
445 | 445 | if (deviceProfile.getSoftwareId() != null) { |
446 | - Firmware software = firmwareService.findFirmwareById(tenantId, deviceProfile.getSoftwareId()); | |
446 | + OtaPackage software = otaPackageService.findOtaPackageById(tenantId, deviceProfile.getSoftwareId()); | |
447 | 447 | if (software == null) { |
448 | 448 | throw new DataValidationException("Can't assign non-existent software!"); |
449 | 449 | } |
450 | - if (!software.getType().equals(FirmwareType.SOFTWARE)) { | |
450 | + if (!software.getType().equals(OtaPackageType.SOFTWARE)) { | |
451 | 451 | throw new DataValidationException("Can't assign software with type: " + software.getType()); |
452 | 452 | } |
453 | 453 | if (software.getData() == null) { | ... | ... |
... | ... | @@ -41,7 +41,7 @@ import org.thingsboard.server.common.data.DeviceTransportType; |
41 | 41 | import org.thingsboard.server.common.data.EntitySubtype; |
42 | 42 | import org.thingsboard.server.common.data.EntityType; |
43 | 43 | import org.thingsboard.server.common.data.EntityView; |
44 | -import org.thingsboard.server.common.data.Firmware; | |
44 | +import org.thingsboard.server.common.data.OtaPackage; | |
45 | 45 | import org.thingsboard.server.common.data.Tenant; |
46 | 46 | import org.thingsboard.server.common.data.device.DeviceSearchQuery; |
47 | 47 | import org.thingsboard.server.common.data.device.credentials.BasicMqttCredentials; |
... | ... | @@ -54,13 +54,13 @@ import org.thingsboard.server.common.data.device.data.Lwm2mDeviceTransportConfig |
54 | 54 | import org.thingsboard.server.common.data.device.data.MqttDeviceTransportConfiguration; |
55 | 55 | import org.thingsboard.server.common.data.device.data.SnmpDeviceTransportConfiguration; |
56 | 56 | import org.thingsboard.server.common.data.edge.Edge; |
57 | -import org.thingsboard.server.common.data.firmware.FirmwareType; | |
58 | 57 | import org.thingsboard.server.common.data.id.CustomerId; |
59 | 58 | import org.thingsboard.server.common.data.id.DeviceId; |
60 | 59 | import org.thingsboard.server.common.data.id.DeviceProfileId; |
61 | 60 | import org.thingsboard.server.common.data.id.EdgeId; |
62 | 61 | import org.thingsboard.server.common.data.id.EntityId; |
63 | 62 | import org.thingsboard.server.common.data.id.TenantId; |
63 | +import org.thingsboard.server.common.data.ota.OtaPackageType; | |
64 | 64 | import org.thingsboard.server.common.data.page.PageData; |
65 | 65 | import org.thingsboard.server.common.data.page.PageLink; |
66 | 66 | import org.thingsboard.server.common.data.relation.EntityRelation; |
... | ... | @@ -76,7 +76,7 @@ import org.thingsboard.server.dao.device.provision.ProvisionResponseStatus; |
76 | 76 | import org.thingsboard.server.dao.entity.AbstractEntityService; |
77 | 77 | import org.thingsboard.server.dao.event.EventService; |
78 | 78 | import org.thingsboard.server.dao.exception.DataValidationException; |
79 | -import org.thingsboard.server.dao.firmware.FirmwareService; | |
79 | +import org.thingsboard.server.dao.ota.OtaPackageService; | |
80 | 80 | import org.thingsboard.server.dao.service.DataValidator; |
81 | 81 | import org.thingsboard.server.dao.service.PaginatedRemover; |
82 | 82 | import org.thingsboard.server.dao.tenant.TbTenantProfileCache; |
... | ... | @@ -138,7 +138,7 @@ public class DeviceServiceImpl extends AbstractEntityService implements DeviceSe |
138 | 138 | private TbTenantProfileCache tenantProfileCache; |
139 | 139 | |
140 | 140 | @Autowired |
141 | - private FirmwareService firmwareService; | |
141 | + private OtaPackageService otaPackageService; | |
142 | 142 | |
143 | 143 | @Override |
144 | 144 | public DeviceInfo findDeviceInfoById(TenantId tenantId, DeviceId deviceId) { |
... | ... | @@ -201,14 +201,12 @@ public class DeviceServiceImpl extends AbstractEntityService implements DeviceSe |
201 | 201 | deviceCredentials.setDeviceId(savedDevice.getId()); |
202 | 202 | if (device.getId() == null) { |
203 | 203 | deviceCredentialsService.createDeviceCredentials(savedDevice.getTenantId(), deviceCredentials); |
204 | - } | |
205 | - else { | |
204 | + } else { | |
206 | 205 | DeviceCredentials foundDeviceCredentials = deviceCredentialsService.findDeviceCredentialsByDeviceId(device.getTenantId(), savedDevice.getId()); |
207 | 206 | if (foundDeviceCredentials == null) { |
208 | 207 | deviceCredentialsService.createDeviceCredentials(savedDevice.getTenantId(), deviceCredentials); |
209 | - } | |
210 | - else { | |
211 | - deviceCredentialsService.updateDeviceCredentials(device.getTenantId(), deviceCredentials); | |
208 | + } else { | |
209 | + deviceCredentialsService.updateDeviceCredentials(device.getTenantId(), deviceCredentials); | |
212 | 210 | } |
213 | 211 | } |
214 | 212 | return savedDevice; |
... | ... | @@ -364,21 +362,24 @@ public class DeviceServiceImpl extends AbstractEntityService implements DeviceSe |
364 | 362 | } |
365 | 363 | |
366 | 364 | @Override |
367 | - public PageData<Device> findDevicesByTenantIdAndTypeAndEmptyFirmware(TenantId tenantId, String type, PageLink pageLink) { | |
368 | - log.trace("Executing findDevicesByTenantIdAndTypeAndEmptyFirmware, tenantId [{}], type [{}], pageLink [{}]", tenantId, type, pageLink); | |
365 | + public PageData<Device> findDevicesByTenantIdAndTypeAndEmptyOtaPackage(TenantId tenantId, | |
366 | + DeviceProfileId deviceProfileId, | |
367 | + OtaPackageType type, | |
368 | + PageLink pageLink) { | |
369 | + log.trace("Executing findDevicesByTenantIdAndTypeAndEmptyOtaPackage, tenantId [{}], deviceProfileId [{}], type [{}], pageLink [{}]", | |
370 | + tenantId, deviceProfileId, type, pageLink); | |
369 | 371 | validateId(tenantId, INCORRECT_TENANT_ID + tenantId); |
370 | - validateString(type, "Incorrect type " + type); | |
372 | + validateId(tenantId, INCORRECT_DEVICE_PROFILE_ID + deviceProfileId); | |
371 | 373 | validatePageLink(pageLink); |
372 | - return deviceDao.findDevicesByTenantIdAndTypeAndEmptyFirmware(tenantId.getId(), type, pageLink); | |
374 | + return deviceDao.findDevicesByTenantIdAndTypeAndEmptyOtaPackage(tenantId.getId(), deviceProfileId.getId(), type, pageLink); | |
373 | 375 | } |
374 | 376 | |
375 | 377 | @Override |
376 | - public PageData<Device> findDevicesByTenantIdAndTypeAndEmptySoftware(TenantId tenantId, String type, PageLink pageLink) { | |
377 | - log.trace("Executing findDevicesByTenantIdAndTypeAndEmptySoftware, tenantId [{}], type [{}], pageLink [{}]", tenantId, type, pageLink); | |
378 | + public Long countDevicesByTenantIdAndDeviceProfileIdAndEmptyOtaPackage(TenantId tenantId, DeviceProfileId deviceProfileId, OtaPackageType type) { | |
379 | + log.trace("Executing countDevicesByTenantIdAndDeviceProfileIdAndEmptyOtaPackage, tenantId [{}], deviceProfileId [{}], type [{}]", tenantId, deviceProfileId, type); | |
378 | 380 | validateId(tenantId, INCORRECT_TENANT_ID + tenantId); |
379 | - validateString(type, "Incorrect type " + type); | |
380 | - validatePageLink(pageLink); | |
381 | - return deviceDao.findDevicesByTenantIdAndTypeAndEmptySoftware(tenantId.getId(), type, pageLink); | |
381 | + validateId(tenantId, INCORRECT_DEVICE_PROFILE_ID + deviceProfileId); | |
382 | + return deviceDao.countDevicesByTenantIdAndDeviceProfileIdAndEmptyOtaPackage(tenantId.getId(), deviceProfileId.getId(), type); | |
382 | 383 | } |
383 | 384 | |
384 | 385 | @Override |
... | ... | @@ -708,11 +709,11 @@ public class DeviceServiceImpl extends AbstractEntityService implements DeviceSe |
708 | 709 | .ifPresent(DeviceTransportConfiguration::validate); |
709 | 710 | |
710 | 711 | if (device.getFirmwareId() != null) { |
711 | - Firmware firmware = firmwareService.findFirmwareById(tenantId, device.getFirmwareId()); | |
712 | + OtaPackage firmware = otaPackageService.findOtaPackageById(tenantId, device.getFirmwareId()); | |
712 | 713 | if (firmware == null) { |
713 | 714 | throw new DataValidationException("Can't assign non-existent firmware!"); |
714 | 715 | } |
715 | - if (!firmware.getType().equals(FirmwareType.FIRMWARE)) { | |
716 | + if (!firmware.getType().equals(OtaPackageType.FIRMWARE)) { | |
716 | 717 | throw new DataValidationException("Can't assign firmware with type: " + firmware.getType()); |
717 | 718 | } |
718 | 719 | if (firmware.getData() == null) { |
... | ... | @@ -724,11 +725,11 @@ public class DeviceServiceImpl extends AbstractEntityService implements DeviceSe |
724 | 725 | } |
725 | 726 | |
726 | 727 | if (device.getSoftwareId() != null) { |
727 | - Firmware software = firmwareService.findFirmwareById(tenantId, device.getSoftwareId()); | |
728 | + OtaPackage software = otaPackageService.findOtaPackageById(tenantId, device.getSoftwareId()); | |
728 | 729 | if (software == null) { |
729 | 730 | throw new DataValidationException("Can't assign non-existent software!"); |
730 | 731 | } |
731 | - if (!software.getType().equals(FirmwareType.SOFTWARE)) { | |
732 | + if (!software.getType().equals(OtaPackageType.SOFTWARE)) { | |
732 | 733 | throw new DataValidationException("Can't assign software with type: " + software.getType()); |
733 | 734 | } |
734 | 735 | if (software.getData() == null) { | ... | ... |
... | ... | @@ -32,7 +32,7 @@ import org.thingsboard.server.common.data.id.DeviceId; |
32 | 32 | import org.thingsboard.server.common.data.id.EdgeId; |
33 | 33 | import org.thingsboard.server.common.data.id.EntityId; |
34 | 34 | import org.thingsboard.server.common.data.id.EntityViewId; |
35 | -import org.thingsboard.server.common.data.id.FirmwareId; | |
35 | +import org.thingsboard.server.common.data.id.OtaPackageId; | |
36 | 36 | import org.thingsboard.server.common.data.id.RuleChainId; |
37 | 37 | import org.thingsboard.server.common.data.id.TbResourceId; |
38 | 38 | import org.thingsboard.server.common.data.id.TenantId; |
... | ... | @@ -49,7 +49,7 @@ import org.thingsboard.server.dao.dashboard.DashboardService; |
49 | 49 | import org.thingsboard.server.dao.device.DeviceService; |
50 | 50 | import org.thingsboard.server.dao.entityview.EntityViewService; |
51 | 51 | import org.thingsboard.server.dao.exception.IncorrectParameterException; |
52 | -import org.thingsboard.server.dao.firmware.FirmwareService; | |
52 | +import org.thingsboard.server.dao.ota.OtaPackageService; | |
53 | 53 | import org.thingsboard.server.dao.resource.ResourceService; |
54 | 54 | import org.thingsboard.server.dao.rule.RuleChainService; |
55 | 55 | import org.thingsboard.server.dao.tenant.TenantService; |
... | ... | @@ -102,7 +102,7 @@ public class BaseEntityService extends AbstractEntityService implements EntitySe |
102 | 102 | private ResourceService resourceService; |
103 | 103 | |
104 | 104 | @Autowired |
105 | - private FirmwareService firmwareService; | |
105 | + private OtaPackageService otaPackageService; | |
106 | 106 | |
107 | 107 | @Override |
108 | 108 | public void deleteEntityRelations(TenantId tenantId, EntityId entityId) { |
... | ... | @@ -167,8 +167,8 @@ public class BaseEntityService extends AbstractEntityService implements EntitySe |
167 | 167 | case TB_RESOURCE: |
168 | 168 | hasName = resourceService.findResourceInfoByIdAsync(tenantId, new TbResourceId(entityId.getId())); |
169 | 169 | break; |
170 | - case FIRMWARE: | |
171 | - hasName = firmwareService.findFirmwareInfoByIdAsync(tenantId, new FirmwareId(entityId.getId())); | |
170 | + case OTA_PACKAGE: | |
171 | + hasName = otaPackageService.findOtaPackageInfoByIdAsync(tenantId, new OtaPackageId(entityId.getId())); | |
172 | 172 | break; |
173 | 173 | default: |
174 | 174 | throw new IllegalStateException("Not Implemented!"); |
... | ... | @@ -192,7 +192,7 @@ public class BaseEntityService extends AbstractEntityService implements EntitySe |
192 | 192 | case DEVICE_PROFILE: |
193 | 193 | case API_USAGE_STATE: |
194 | 194 | case TB_RESOURCE: |
195 | - case FIRMWARE: | |
195 | + case OTA_PACKAGE: | |
196 | 196 | break; |
197 | 197 | case CUSTOMER: |
198 | 198 | hasCustomerId = () -> new CustomerId(entityId.getId()); | ... | ... |
... | ... | @@ -479,22 +479,21 @@ public class ModelConstants { |
479 | 479 | public static final String RESOURCE_DATA_COLUMN = "data"; |
480 | 480 | |
481 | 481 | /** |
482 | - * Firmware constants. | |
483 | - */ | |
484 | - public static final String FIRMWARE_TABLE_NAME = "firmware"; | |
485 | - public static final String FIRMWARE_TENANT_ID_COLUMN = TENANT_ID_COLUMN; | |
486 | - public static final String FIRMWARE_DEVICE_PROFILE_ID_COLUMN = "device_profile_id"; | |
487 | - public static final String FIRMWARE_TYPE_COLUMN = "type"; | |
488 | - public static final String FIRMWARE_TITLE_COLUMN = TITLE_PROPERTY; | |
489 | - public static final String FIRMWARE_VERSION_COLUMN = "version"; | |
490 | - public static final String FIRMWARE_FILE_NAME_COLUMN = "file_name"; | |
491 | - public static final String FIRMWARE_CONTENT_TYPE_COLUMN = "content_type"; | |
492 | - public static final String FIRMWARE_CHECKSUM_ALGORITHM_COLUMN = "checksum_algorithm"; | |
493 | - public static final String FIRMWARE_CHECKSUM_COLUMN = "checksum"; | |
494 | - public static final String FIRMWARE_DATA_COLUMN = "data"; | |
495 | - public static final String FIRMWARE_DATA_SIZE_COLUMN = "data_size"; | |
496 | - public static final String FIRMWARE_ADDITIONAL_INFO_COLUMN = ADDITIONAL_INFO_PROPERTY; | |
497 | - public static final String FIRMWARE_HAS_DATA_PROPERTY = "has_data"; | |
482 | + * Ota Package constants. | |
483 | + */ | |
484 | + public static final String OTA_PACKAGE_TABLE_NAME = "ota_package"; | |
485 | + public static final String OTA_PACKAGE_TENANT_ID_COLUMN = TENANT_ID_COLUMN; | |
486 | + public static final String OTA_PACKAGE_DEVICE_PROFILE_ID_COLUMN = "device_profile_id"; | |
487 | + public static final String OTA_PACKAGE_TYPE_COLUMN = "type"; | |
488 | + public static final String OTA_PACKAGE_TILE_COLUMN = TITLE_PROPERTY; | |
489 | + public static final String OTA_PACKAGE_VERSION_COLUMN = "version"; | |
490 | + public static final String OTA_PACKAGE_FILE_NAME_COLUMN = "file_name"; | |
491 | + public static final String OTA_PACKAGE_CONTENT_TYPE_COLUMN = "content_type"; | |
492 | + public static final String OTA_PACKAGE_CHECKSUM_ALGORITHM_COLUMN = "checksum_algorithm"; | |
493 | + public static final String OTA_PACKAGE_CHECKSUM_COLUMN = "checksum"; | |
494 | + public static final String OTA_PACKAGE_DATA_COLUMN = "data"; | |
495 | + public static final String OTA_PACKAGE_DATA_SIZE_COLUMN = "data_size"; | |
496 | + public static final String OTA_PACKAGE_ADDITIONAL_INFO_COLUMN = ADDITIONAL_INFO_PROPERTY; | |
498 | 497 | |
499 | 498 | /** |
500 | 499 | * Edge constants. | ... | ... |
... | ... | @@ -28,7 +28,7 @@ import org.thingsboard.server.common.data.device.data.DeviceData; |
28 | 28 | import org.thingsboard.server.common.data.id.CustomerId; |
29 | 29 | import org.thingsboard.server.common.data.id.DeviceId; |
30 | 30 | import org.thingsboard.server.common.data.id.DeviceProfileId; |
31 | -import org.thingsboard.server.common.data.id.FirmwareId; | |
31 | +import org.thingsboard.server.common.data.id.OtaPackageId; | |
32 | 32 | import org.thingsboard.server.common.data.id.TenantId; |
33 | 33 | import org.thingsboard.server.dao.model.BaseSqlEntity; |
34 | 34 | import org.thingsboard.server.dao.model.ModelConstants; |
... | ... | @@ -154,10 +154,10 @@ public abstract class AbstractDeviceEntity<T extends Device> extends BaseSqlEnti |
154 | 154 | device.setDeviceProfileId(new DeviceProfileId(deviceProfileId)); |
155 | 155 | } |
156 | 156 | if (firmwareId != null) { |
157 | - device.setFirmwareId(new FirmwareId(firmwareId)); | |
157 | + device.setFirmwareId(new OtaPackageId(firmwareId)); | |
158 | 158 | } |
159 | 159 | if (softwareId != null) { |
160 | - device.setSoftwareId(new FirmwareId(softwareId)); | |
160 | + device.setSoftwareId(new OtaPackageId(softwareId)); | |
161 | 161 | } |
162 | 162 | device.setDeviceData(JacksonUtil.convertValue(deviceData, DeviceData.class)); |
163 | 163 | device.setName(name); | ... | ... |
... | ... | @@ -29,7 +29,7 @@ import org.thingsboard.server.common.data.DeviceTransportType; |
29 | 29 | import org.thingsboard.server.common.data.device.profile.DeviceProfileData; |
30 | 30 | import org.thingsboard.server.common.data.id.DashboardId; |
31 | 31 | import org.thingsboard.server.common.data.id.DeviceProfileId; |
32 | -import org.thingsboard.server.common.data.id.FirmwareId; | |
32 | +import org.thingsboard.server.common.data.id.OtaPackageId; | |
33 | 33 | import org.thingsboard.server.common.data.id.RuleChainId; |
34 | 34 | import org.thingsboard.server.common.data.id.TenantId; |
35 | 35 | import org.thingsboard.server.dao.model.BaseSqlEntity; |
... | ... | @@ -178,11 +178,11 @@ public final class DeviceProfileEntity extends BaseSqlEntity<DeviceProfile> impl |
178 | 178 | deviceProfile.setProvisionDeviceKey(provisionDeviceKey); |
179 | 179 | |
180 | 180 | if (firmwareId != null) { |
181 | - deviceProfile.setFirmwareId(new FirmwareId(firmwareId)); | |
181 | + deviceProfile.setFirmwareId(new OtaPackageId(firmwareId)); | |
182 | 182 | } |
183 | 183 | |
184 | 184 | if (softwareId != null) { |
185 | - deviceProfile.setSoftwareId(new FirmwareId(softwareId)); | |
185 | + deviceProfile.setSoftwareId(new OtaPackageId(softwareId)); | |
186 | 186 | } |
187 | 187 | |
188 | 188 | return deviceProfile; | ... | ... |
dao/src/main/java/org/thingsboard/server/dao/model/sql/OtaPackageEntity.java
renamed from
dao/src/main/java/org/thingsboard/server/dao/model/sql/FirmwareEntity.java
... | ... | @@ -20,11 +20,11 @@ import lombok.Data; |
20 | 20 | import lombok.EqualsAndHashCode; |
21 | 21 | import org.hibernate.annotations.Type; |
22 | 22 | import org.hibernate.annotations.TypeDef; |
23 | -import org.thingsboard.server.common.data.Firmware; | |
24 | -import org.thingsboard.server.common.data.firmware.ChecksumAlgorithm; | |
25 | -import org.thingsboard.server.common.data.firmware.FirmwareType; | |
23 | +import org.thingsboard.server.common.data.OtaPackage; | |
24 | +import org.thingsboard.server.common.data.ota.ChecksumAlgorithm; | |
25 | +import org.thingsboard.server.common.data.ota.OtaPackageType; | |
26 | 26 | import org.thingsboard.server.common.data.id.DeviceProfileId; |
27 | -import org.thingsboard.server.common.data.id.FirmwareId; | |
27 | +import org.thingsboard.server.common.data.id.OtaPackageId; | |
28 | 28 | import org.thingsboard.server.common.data.id.TenantId; |
29 | 29 | import org.thingsboard.server.dao.model.BaseSqlEntity; |
30 | 30 | import org.thingsboard.server.dao.model.ModelConstants; |
... | ... | @@ -40,75 +40,75 @@ import javax.persistence.Table; |
40 | 40 | import java.nio.ByteBuffer; |
41 | 41 | import java.util.UUID; |
42 | 42 | |
43 | -import static org.thingsboard.server.dao.model.ModelConstants.FIRMWARE_CHECKSUM_ALGORITHM_COLUMN; | |
44 | -import static org.thingsboard.server.dao.model.ModelConstants.FIRMWARE_CHECKSUM_COLUMN; | |
45 | -import static org.thingsboard.server.dao.model.ModelConstants.FIRMWARE_CONTENT_TYPE_COLUMN; | |
46 | -import static org.thingsboard.server.dao.model.ModelConstants.FIRMWARE_DATA_COLUMN; | |
47 | -import static org.thingsboard.server.dao.model.ModelConstants.FIRMWARE_DATA_SIZE_COLUMN; | |
48 | -import static org.thingsboard.server.dao.model.ModelConstants.FIRMWARE_DEVICE_PROFILE_ID_COLUMN; | |
49 | -import static org.thingsboard.server.dao.model.ModelConstants.FIRMWARE_FILE_NAME_COLUMN; | |
50 | -import static org.thingsboard.server.dao.model.ModelConstants.FIRMWARE_TABLE_NAME; | |
51 | -import static org.thingsboard.server.dao.model.ModelConstants.FIRMWARE_TENANT_ID_COLUMN; | |
52 | -import static org.thingsboard.server.dao.model.ModelConstants.FIRMWARE_TITLE_COLUMN; | |
53 | -import static org.thingsboard.server.dao.model.ModelConstants.FIRMWARE_TYPE_COLUMN; | |
54 | -import static org.thingsboard.server.dao.model.ModelConstants.FIRMWARE_VERSION_COLUMN; | |
43 | +import static org.thingsboard.server.dao.model.ModelConstants.OTA_PACKAGE_CHECKSUM_ALGORITHM_COLUMN; | |
44 | +import static org.thingsboard.server.dao.model.ModelConstants.OTA_PACKAGE_CHECKSUM_COLUMN; | |
45 | +import static org.thingsboard.server.dao.model.ModelConstants.OTA_PACKAGE_CONTENT_TYPE_COLUMN; | |
46 | +import static org.thingsboard.server.dao.model.ModelConstants.OTA_PACKAGE_DATA_COLUMN; | |
47 | +import static org.thingsboard.server.dao.model.ModelConstants.OTA_PACKAGE_DATA_SIZE_COLUMN; | |
48 | +import static org.thingsboard.server.dao.model.ModelConstants.OTA_PACKAGE_DEVICE_PROFILE_ID_COLUMN; | |
49 | +import static org.thingsboard.server.dao.model.ModelConstants.OTA_PACKAGE_FILE_NAME_COLUMN; | |
50 | +import static org.thingsboard.server.dao.model.ModelConstants.OTA_PACKAGE_TABLE_NAME; | |
51 | +import static org.thingsboard.server.dao.model.ModelConstants.OTA_PACKAGE_TENANT_ID_COLUMN; | |
52 | +import static org.thingsboard.server.dao.model.ModelConstants.OTA_PACKAGE_TILE_COLUMN; | |
53 | +import static org.thingsboard.server.dao.model.ModelConstants.OTA_PACKAGE_TYPE_COLUMN; | |
54 | +import static org.thingsboard.server.dao.model.ModelConstants.OTA_PACKAGE_VERSION_COLUMN; | |
55 | 55 | import static org.thingsboard.server.dao.model.ModelConstants.SEARCH_TEXT_PROPERTY; |
56 | 56 | |
57 | 57 | @Data |
58 | 58 | @EqualsAndHashCode(callSuper = true) |
59 | 59 | @Entity |
60 | 60 | @TypeDef(name = "json", typeClass = JsonStringType.class) |
61 | -@Table(name = FIRMWARE_TABLE_NAME) | |
62 | -public class FirmwareEntity extends BaseSqlEntity<Firmware> implements SearchTextEntity<Firmware> { | |
61 | +@Table(name = OTA_PACKAGE_TABLE_NAME) | |
62 | +public class OtaPackageEntity extends BaseSqlEntity<OtaPackage> implements SearchTextEntity<OtaPackage> { | |
63 | 63 | |
64 | - @Column(name = FIRMWARE_TENANT_ID_COLUMN) | |
64 | + @Column(name = OTA_PACKAGE_TENANT_ID_COLUMN) | |
65 | 65 | private UUID tenantId; |
66 | 66 | |
67 | - @Column(name = FIRMWARE_DEVICE_PROFILE_ID_COLUMN) | |
67 | + @Column(name = OTA_PACKAGE_DEVICE_PROFILE_ID_COLUMN) | |
68 | 68 | private UUID deviceProfileId; |
69 | 69 | |
70 | 70 | @Enumerated(EnumType.STRING) |
71 | - @Column(name = FIRMWARE_TYPE_COLUMN) | |
72 | - private FirmwareType type; | |
71 | + @Column(name = OTA_PACKAGE_TYPE_COLUMN) | |
72 | + private OtaPackageType type; | |
73 | 73 | |
74 | - @Column(name = FIRMWARE_TITLE_COLUMN) | |
74 | + @Column(name = OTA_PACKAGE_TILE_COLUMN) | |
75 | 75 | private String title; |
76 | 76 | |
77 | - @Column(name = FIRMWARE_VERSION_COLUMN) | |
77 | + @Column(name = OTA_PACKAGE_VERSION_COLUMN) | |
78 | 78 | private String version; |
79 | 79 | |
80 | - @Column(name = FIRMWARE_FILE_NAME_COLUMN) | |
80 | + @Column(name = OTA_PACKAGE_FILE_NAME_COLUMN) | |
81 | 81 | private String fileName; |
82 | 82 | |
83 | - @Column(name = FIRMWARE_CONTENT_TYPE_COLUMN) | |
83 | + @Column(name = OTA_PACKAGE_CONTENT_TYPE_COLUMN) | |
84 | 84 | private String contentType; |
85 | 85 | |
86 | 86 | @Enumerated(EnumType.STRING) |
87 | - @Column(name = FIRMWARE_CHECKSUM_ALGORITHM_COLUMN) | |
87 | + @Column(name = OTA_PACKAGE_CHECKSUM_ALGORITHM_COLUMN) | |
88 | 88 | private ChecksumAlgorithm checksumAlgorithm; |
89 | 89 | |
90 | - @Column(name = FIRMWARE_CHECKSUM_COLUMN) | |
90 | + @Column(name = OTA_PACKAGE_CHECKSUM_COLUMN) | |
91 | 91 | private String checksum; |
92 | 92 | |
93 | 93 | @Lob |
94 | - @Column(name = FIRMWARE_DATA_COLUMN, columnDefinition = "BINARY") | |
94 | + @Column(name = OTA_PACKAGE_DATA_COLUMN, columnDefinition = "BINARY") | |
95 | 95 | private byte[] data; |
96 | 96 | |
97 | - @Column(name = FIRMWARE_DATA_SIZE_COLUMN) | |
97 | + @Column(name = OTA_PACKAGE_DATA_SIZE_COLUMN) | |
98 | 98 | private Long dataSize; |
99 | 99 | |
100 | 100 | @Type(type = "json") |
101 | - @Column(name = ModelConstants.FIRMWARE_ADDITIONAL_INFO_COLUMN) | |
101 | + @Column(name = ModelConstants.OTA_PACKAGE_ADDITIONAL_INFO_COLUMN) | |
102 | 102 | private JsonNode additionalInfo; |
103 | 103 | |
104 | 104 | @Column(name = SEARCH_TEXT_PROPERTY) |
105 | 105 | private String searchText; |
106 | 106 | |
107 | - public FirmwareEntity() { | |
107 | + public OtaPackageEntity() { | |
108 | 108 | super(); |
109 | 109 | } |
110 | 110 | |
111 | - public FirmwareEntity(Firmware firmware) { | |
111 | + public OtaPackageEntity(OtaPackage firmware) { | |
112 | 112 | this.createdTime = firmware.getCreatedTime(); |
113 | 113 | this.setUuid(firmware.getUuidId()); |
114 | 114 | this.tenantId = firmware.getTenantId().getId(); |
... | ... | @@ -138,8 +138,8 @@ public class FirmwareEntity extends BaseSqlEntity<Firmware> implements SearchTex |
138 | 138 | } |
139 | 139 | |
140 | 140 | @Override |
141 | - public Firmware toData() { | |
142 | - Firmware firmware = new Firmware(new FirmwareId(id)); | |
141 | + public OtaPackage toData() { | |
142 | + OtaPackage firmware = new OtaPackage(new OtaPackageId(id)); | |
143 | 143 | firmware.setCreatedTime(createdTime); |
144 | 144 | firmware.setTenantId(new TenantId(tenantId)); |
145 | 145 | if (deviceProfileId != null) { | ... | ... |
dao/src/main/java/org/thingsboard/server/dao/model/sql/OtaPackageInfoEntity.java
renamed from
dao/src/main/java/org/thingsboard/server/dao/model/sql/FirmwareInfoEntity.java
... | ... | @@ -21,11 +21,11 @@ import lombok.EqualsAndHashCode; |
21 | 21 | import org.hibernate.annotations.Type; |
22 | 22 | import org.hibernate.annotations.TypeDef; |
23 | 23 | import org.thingsboard.common.util.JacksonUtil; |
24 | -import org.thingsboard.server.common.data.FirmwareInfo; | |
25 | -import org.thingsboard.server.common.data.firmware.ChecksumAlgorithm; | |
26 | -import org.thingsboard.server.common.data.firmware.FirmwareType; | |
24 | +import org.thingsboard.server.common.data.OtaPackageInfo; | |
25 | +import org.thingsboard.server.common.data.ota.ChecksumAlgorithm; | |
26 | +import org.thingsboard.server.common.data.ota.OtaPackageType; | |
27 | 27 | import org.thingsboard.server.common.data.id.DeviceProfileId; |
28 | -import org.thingsboard.server.common.data.id.FirmwareId; | |
28 | +import org.thingsboard.server.common.data.id.OtaPackageId; | |
29 | 29 | import org.thingsboard.server.common.data.id.TenantId; |
30 | 30 | import org.thingsboard.server.dao.model.BaseSqlEntity; |
31 | 31 | import org.thingsboard.server.dao.model.ModelConstants; |
... | ... | @@ -40,60 +40,60 @@ import javax.persistence.Table; |
40 | 40 | import javax.persistence.Transient; |
41 | 41 | import java.util.UUID; |
42 | 42 | |
43 | -import static org.thingsboard.server.dao.model.ModelConstants.FIRMWARE_CHECKSUM_ALGORITHM_COLUMN; | |
44 | -import static org.thingsboard.server.dao.model.ModelConstants.FIRMWARE_CHECKSUM_COLUMN; | |
45 | -import static org.thingsboard.server.dao.model.ModelConstants.FIRMWARE_CONTENT_TYPE_COLUMN; | |
46 | -import static org.thingsboard.server.dao.model.ModelConstants.FIRMWARE_DATA_SIZE_COLUMN; | |
47 | -import static org.thingsboard.server.dao.model.ModelConstants.FIRMWARE_DEVICE_PROFILE_ID_COLUMN; | |
48 | -import static org.thingsboard.server.dao.model.ModelConstants.FIRMWARE_FILE_NAME_COLUMN; | |
49 | -import static org.thingsboard.server.dao.model.ModelConstants.FIRMWARE_TABLE_NAME; | |
50 | -import static org.thingsboard.server.dao.model.ModelConstants.FIRMWARE_TENANT_ID_COLUMN; | |
51 | -import static org.thingsboard.server.dao.model.ModelConstants.FIRMWARE_TITLE_COLUMN; | |
52 | -import static org.thingsboard.server.dao.model.ModelConstants.FIRMWARE_TYPE_COLUMN; | |
53 | -import static org.thingsboard.server.dao.model.ModelConstants.FIRMWARE_VERSION_COLUMN; | |
43 | +import static org.thingsboard.server.dao.model.ModelConstants.OTA_PACKAGE_CHECKSUM_ALGORITHM_COLUMN; | |
44 | +import static org.thingsboard.server.dao.model.ModelConstants.OTA_PACKAGE_CHECKSUM_COLUMN; | |
45 | +import static org.thingsboard.server.dao.model.ModelConstants.OTA_PACKAGE_CONTENT_TYPE_COLUMN; | |
46 | +import static org.thingsboard.server.dao.model.ModelConstants.OTA_PACKAGE_DATA_SIZE_COLUMN; | |
47 | +import static org.thingsboard.server.dao.model.ModelConstants.OTA_PACKAGE_DEVICE_PROFILE_ID_COLUMN; | |
48 | +import static org.thingsboard.server.dao.model.ModelConstants.OTA_PACKAGE_FILE_NAME_COLUMN; | |
49 | +import static org.thingsboard.server.dao.model.ModelConstants.OTA_PACKAGE_TABLE_NAME; | |
50 | +import static org.thingsboard.server.dao.model.ModelConstants.OTA_PACKAGE_TENANT_ID_COLUMN; | |
51 | +import static org.thingsboard.server.dao.model.ModelConstants.OTA_PACKAGE_TILE_COLUMN; | |
52 | +import static org.thingsboard.server.dao.model.ModelConstants.OTA_PACKAGE_TYPE_COLUMN; | |
53 | +import static org.thingsboard.server.dao.model.ModelConstants.OTA_PACKAGE_VERSION_COLUMN; | |
54 | 54 | import static org.thingsboard.server.dao.model.ModelConstants.SEARCH_TEXT_PROPERTY; |
55 | 55 | |
56 | 56 | @Data |
57 | 57 | @EqualsAndHashCode(callSuper = true) |
58 | 58 | @Entity |
59 | 59 | @TypeDef(name = "json", typeClass = JsonStringType.class) |
60 | -@Table(name = FIRMWARE_TABLE_NAME) | |
61 | -public class FirmwareInfoEntity extends BaseSqlEntity<FirmwareInfo> implements SearchTextEntity<FirmwareInfo> { | |
60 | +@Table(name = OTA_PACKAGE_TABLE_NAME) | |
61 | +public class OtaPackageInfoEntity extends BaseSqlEntity<OtaPackageInfo> implements SearchTextEntity<OtaPackageInfo> { | |
62 | 62 | |
63 | - @Column(name = FIRMWARE_TENANT_ID_COLUMN) | |
63 | + @Column(name = OTA_PACKAGE_TENANT_ID_COLUMN) | |
64 | 64 | private UUID tenantId; |
65 | 65 | |
66 | - @Column(name = FIRMWARE_DEVICE_PROFILE_ID_COLUMN) | |
66 | + @Column(name = OTA_PACKAGE_DEVICE_PROFILE_ID_COLUMN) | |
67 | 67 | private UUID deviceProfileId; |
68 | 68 | |
69 | 69 | @Enumerated(EnumType.STRING) |
70 | - @Column(name = FIRMWARE_TYPE_COLUMN) | |
71 | - private FirmwareType type; | |
70 | + @Column(name = OTA_PACKAGE_TYPE_COLUMN) | |
71 | + private OtaPackageType type; | |
72 | 72 | |
73 | - @Column(name = FIRMWARE_TITLE_COLUMN) | |
73 | + @Column(name = OTA_PACKAGE_TILE_COLUMN) | |
74 | 74 | private String title; |
75 | 75 | |
76 | - @Column(name = FIRMWARE_VERSION_COLUMN) | |
76 | + @Column(name = OTA_PACKAGE_VERSION_COLUMN) | |
77 | 77 | private String version; |
78 | 78 | |
79 | - @Column(name = FIRMWARE_FILE_NAME_COLUMN) | |
79 | + @Column(name = OTA_PACKAGE_FILE_NAME_COLUMN) | |
80 | 80 | private String fileName; |
81 | 81 | |
82 | - @Column(name = FIRMWARE_CONTENT_TYPE_COLUMN) | |
82 | + @Column(name = OTA_PACKAGE_CONTENT_TYPE_COLUMN) | |
83 | 83 | private String contentType; |
84 | 84 | |
85 | 85 | @Enumerated(EnumType.STRING) |
86 | - @Column(name = FIRMWARE_CHECKSUM_ALGORITHM_COLUMN) | |
86 | + @Column(name = OTA_PACKAGE_CHECKSUM_ALGORITHM_COLUMN) | |
87 | 87 | private ChecksumAlgorithm checksumAlgorithm; |
88 | 88 | |
89 | - @Column(name = FIRMWARE_CHECKSUM_COLUMN) | |
89 | + @Column(name = OTA_PACKAGE_CHECKSUM_COLUMN) | |
90 | 90 | private String checksum; |
91 | 91 | |
92 | - @Column(name = FIRMWARE_DATA_SIZE_COLUMN) | |
92 | + @Column(name = OTA_PACKAGE_DATA_SIZE_COLUMN) | |
93 | 93 | private Long dataSize; |
94 | 94 | |
95 | 95 | @Type(type = "json") |
96 | - @Column(name = ModelConstants.FIRMWARE_ADDITIONAL_INFO_COLUMN) | |
96 | + @Column(name = ModelConstants.OTA_PACKAGE_ADDITIONAL_INFO_COLUMN) | |
97 | 97 | private JsonNode additionalInfo; |
98 | 98 | |
99 | 99 | @Column(name = SEARCH_TEXT_PROPERTY) |
... | ... | @@ -102,11 +102,11 @@ public class FirmwareInfoEntity extends BaseSqlEntity<FirmwareInfo> implements S |
102 | 102 | @Transient |
103 | 103 | private boolean hasData; |
104 | 104 | |
105 | - public FirmwareInfoEntity() { | |
105 | + public OtaPackageInfoEntity() { | |
106 | 106 | super(); |
107 | 107 | } |
108 | 108 | |
109 | - public FirmwareInfoEntity(FirmwareInfo firmware) { | |
109 | + public OtaPackageInfoEntity(OtaPackageInfo firmware) { | |
110 | 110 | this.createdTime = firmware.getCreatedTime(); |
111 | 111 | this.setUuid(firmware.getUuidId()); |
112 | 112 | this.tenantId = firmware.getTenantId().getId(); |
... | ... | @@ -124,9 +124,9 @@ public class FirmwareInfoEntity extends BaseSqlEntity<FirmwareInfo> implements S |
124 | 124 | this.additionalInfo = firmware.getAdditionalInfo(); |
125 | 125 | } |
126 | 126 | |
127 | - public FirmwareInfoEntity(UUID id, long createdTime, UUID tenantId, UUID deviceProfileId, FirmwareType type, String title, String version, | |
128 | - String fileName, String contentType, ChecksumAlgorithm checksumAlgorithm, String checksum, Long dataSize, | |
129 | - Object additionalInfo, boolean hasData) { | |
127 | + public OtaPackageInfoEntity(UUID id, long createdTime, UUID tenantId, UUID deviceProfileId, OtaPackageType type, String title, String version, | |
128 | + String fileName, String contentType, ChecksumAlgorithm checksumAlgorithm, String checksum, Long dataSize, | |
129 | + Object additionalInfo, boolean hasData) { | |
130 | 130 | this.id = id; |
131 | 131 | this.createdTime = createdTime; |
132 | 132 | this.tenantId = tenantId; |
... | ... | @@ -154,8 +154,8 @@ public class FirmwareInfoEntity extends BaseSqlEntity<FirmwareInfo> implements S |
154 | 154 | } |
155 | 155 | |
156 | 156 | @Override |
157 | - public FirmwareInfo toData() { | |
158 | - FirmwareInfo firmware = new FirmwareInfo(new FirmwareId(id)); | |
157 | + public OtaPackageInfo toData() { | |
158 | + OtaPackageInfo firmware = new OtaPackageInfo(new OtaPackageId(id)); | |
159 | 159 | firmware.setCreatedTime(createdTime); |
160 | 160 | firmware.setTenantId(new TenantId(tenantId)); |
161 | 161 | if (deviceProfileId != null) { | ... | ... |