From 94f294aebfe1c3d821516feb57c88f603d9ee217 Mon Sep 17 00:00:00 2001 From: Igor Kulikov Date: Fri, 27 Dec 2024 15:32:17 +0200 Subject: [PATCH] Fix load of JS Module extensions during installation or upgrade. --- .../entitiy/dashboard/DashboardSyncService.java | 5 +++-- .../server/service/install/InstallScripts.java | 10 +++++----- .../server/dao/resource/ResourceService.java | 3 ++- .../server/dao/resource/BaseResourceService.java | 3 ++- 4 files changed, 12 insertions(+), 9 deletions(-) diff --git a/application/src/main/java/org/thingsboard/server/service/entitiy/dashboard/DashboardSyncService.java b/application/src/main/java/org/thingsboard/server/service/entitiy/dashboard/DashboardSyncService.java index b56ae8d46f..21eec71388 100644 --- a/application/src/main/java/org/thingsboard/server/service/entitiy/dashboard/DashboardSyncService.java +++ b/application/src/main/java/org/thingsboard/server/service/entitiy/dashboard/DashboardSyncService.java @@ -20,6 +20,7 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.stereotype.Service; +import org.thingsboard.server.common.data.ResourceSubType; import org.thingsboard.server.common.data.ResourceType; import org.thingsboard.server.common.data.id.TenantId; import org.thingsboard.server.common.msg.queue.ServiceType; @@ -74,7 +75,7 @@ public class DashboardSyncService { List resources = listFiles("resources"); for (RepoFile resourceFile : resources) { byte[] data = getFileContent(resourceFile.path()); - resourceService.createOrUpdateSystemResource(ResourceType.JS_MODULE, resourceFile.name(), data); + resourceService.createOrUpdateSystemResource(ResourceType.JS_MODULE, ResourceSubType.EXTENSION, resourceFile.name(), data); } List images = listFiles("images"); for (RepoFile imageFile : images) { @@ -89,7 +90,7 @@ public class DashboardSyncService { widgetsBundleService.updateSystemWidgets(widgetsBundles, widgetTypes); RepoFile dashboardFile = listFiles("dashboards").get(0); - resourceService.createOrUpdateSystemResource(ResourceType.DASHBOARD, GATEWAYS_DASHBOARD_KEY, getFileContent(dashboardFile.path())); + resourceService.createOrUpdateSystemResource(ResourceType.DASHBOARD, null, GATEWAYS_DASHBOARD_KEY, getFileContent(dashboardFile.path())); log.info("Gateways dashboard sync completed"); } diff --git a/application/src/main/java/org/thingsboard/server/service/install/InstallScripts.java b/application/src/main/java/org/thingsboard/server/service/install/InstallScripts.java index e93b4717a3..4d355a0797 100644 --- a/application/src/main/java/org/thingsboard/server/service/install/InstallScripts.java +++ b/application/src/main/java/org/thingsboard/server/service/install/InstallScripts.java @@ -416,9 +416,9 @@ public class InstallScripts { } Path resourcesDir = Path.of(getDataDir(), RESOURCES_DIR); - loadSystemResources(resourcesDir.resolve("images"), ResourceType.IMAGE); - loadSystemResources(resourcesDir.resolve("js_modules"), ResourceType.JS_MODULE); - loadSystemResources(resourcesDir.resolve("dashboards"), ResourceType.DASHBOARD); + loadSystemResources(resourcesDir.resolve("images"), ResourceType.IMAGE, null); + loadSystemResources(resourcesDir.resolve("js_modules"), ResourceType.JS_MODULE, ResourceSubType.EXTENSION); + loadSystemResources(resourcesDir.resolve("dashboards"), ResourceType.DASHBOARD, null); } public void loadDashboards(TenantId tenantId, CustomerId customerId) { @@ -514,7 +514,7 @@ public class InstallScripts { resourcesUpdater.updateWidgetsResources(); } - private void loadSystemResources(Path dir, ResourceType resourceType) { + private void loadSystemResources(Path dir, ResourceType resourceType, ResourceSubType resourceSubType) { listDir(dir).forEach(resourceFile -> { String resourceKey = resourceFile.getFileName().toString(); try { @@ -522,7 +522,7 @@ public class InstallScripts { if (resourceType == ResourceType.IMAGE) { imageService.createOrUpdateSystemImage(resourceKey, data); } else { - resourceService.createOrUpdateSystemResource(resourceType, resourceKey, data); + resourceService.createOrUpdateSystemResource(resourceType, resourceSubType, resourceKey, data); } } catch (Exception e) { throw new RuntimeException("Unable to load system resource " + resourceFile, e); diff --git a/common/dao-api/src/main/java/org/thingsboard/server/dao/resource/ResourceService.java b/common/dao-api/src/main/java/org/thingsboard/server/dao/resource/ResourceService.java index f7f4b1ce4b..94398a11d3 100644 --- a/common/dao-api/src/main/java/org/thingsboard/server/dao/resource/ResourceService.java +++ b/common/dao-api/src/main/java/org/thingsboard/server/dao/resource/ResourceService.java @@ -18,6 +18,7 @@ package org.thingsboard.server.dao.resource; import com.google.common.util.concurrent.ListenableFuture; import org.thingsboard.server.common.data.Dashboard; import org.thingsboard.server.common.data.ResourceExportData; +import org.thingsboard.server.common.data.ResourceSubType; import org.thingsboard.server.common.data.ResourceType; import org.thingsboard.server.common.data.TbResource; import org.thingsboard.server.common.data.TbResourceInfo; @@ -88,6 +89,6 @@ public interface ResourceService extends EntityDaoService { Collection getUsedResources(TenantId tenantId, WidgetTypeDetails widgetTypeDetails); - TbResource createOrUpdateSystemResource(ResourceType resourceType, String resourceKey, byte[] data); + TbResource createOrUpdateSystemResource(ResourceType resourceType, ResourceSubType resourceSubType, String resourceKey, byte[] data); } diff --git a/dao/src/main/java/org/thingsboard/server/dao/resource/BaseResourceService.java b/dao/src/main/java/org/thingsboard/server/dao/resource/BaseResourceService.java index 9395aae6c7..79c7dc7a84 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/resource/BaseResourceService.java +++ b/dao/src/main/java/org/thingsboard/server/dao/resource/BaseResourceService.java @@ -597,7 +597,7 @@ public class BaseResourceService extends AbstractCachedEntityService