fixed widget-bundle import and added widget type VC support
This commit is contained in:
parent
f3e89f7dff
commit
4e42a3efe2
@ -0,0 +1,51 @@
|
||||
/**
|
||||
* Copyright © 2016-2023 The Thingsboard Authors
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.thingsboard.server.service.sync.ie.exporting.impl;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.thingsboard.server.common.data.EntityType;
|
||||
import org.thingsboard.server.common.data.id.WidgetTypeId;
|
||||
import org.thingsboard.server.common.data.sync.ie.WidgetTypeExportData;
|
||||
import org.thingsboard.server.common.data.widget.WidgetTypeDetails;
|
||||
import org.thingsboard.server.queue.util.TbCoreComponent;
|
||||
import org.thingsboard.server.service.sync.vc.data.EntitiesExportCtx;
|
||||
|
||||
import java.util.Set;
|
||||
|
||||
@Service
|
||||
@TbCoreComponent
|
||||
@RequiredArgsConstructor
|
||||
public class WidgetTypeExportService extends BaseEntityExportService<WidgetTypeId, WidgetTypeDetails, WidgetTypeExportData> {
|
||||
|
||||
@Override
|
||||
protected void setRelatedEntities(EntitiesExportCtx<?> ctx, WidgetTypeDetails widgetsBundle, WidgetTypeExportData exportData) {
|
||||
if (widgetsBundle.getTenantId() == null || widgetsBundle.getTenantId().isNullUid()) {
|
||||
throw new IllegalArgumentException("Export of system Widget Type is not allowed");
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected WidgetTypeExportData newExportData() {
|
||||
return new WidgetTypeExportData();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<EntityType> getSupportedEntityTypes() {
|
||||
return Set.of(EntityType.WIDGET_TYPE);
|
||||
}
|
||||
|
||||
}
|
||||
@ -42,8 +42,8 @@ public class WidgetsBundleExportService extends BaseEntityExportService<WidgetsB
|
||||
throw new IllegalArgumentException("Export of system Widget Bundles is not allowed");
|
||||
}
|
||||
|
||||
List<String> widgets = widgetTypeService.findWidgetFqnsByWidgetsBundleId(ctx.getTenantId(), widgetsBundle.getId());
|
||||
exportData.setWidgets(widgets);
|
||||
List<String> fqns = widgetTypeService.findWidgetFqnsByWidgetsBundleId(ctx.getTenantId(), widgetsBundle.getId());
|
||||
exportData.setFqns(fqns);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@ -0,0 +1,70 @@
|
||||
/**
|
||||
* Copyright © 2016-2023 The Thingsboard Authors
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.thingsboard.server.service.sync.ie.importing.impl;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.thingsboard.server.common.data.EntityType;
|
||||
import org.thingsboard.server.common.data.id.TenantId;
|
||||
import org.thingsboard.server.common.data.id.WidgetTypeId;
|
||||
import org.thingsboard.server.common.data.id.WidgetsBundleId;
|
||||
import org.thingsboard.server.common.data.sync.ie.WidgetTypeExportData;
|
||||
import org.thingsboard.server.common.data.sync.ie.WidgetsBundleExportData;
|
||||
import org.thingsboard.server.common.data.widget.WidgetTypeDetails;
|
||||
import org.thingsboard.server.common.data.widget.WidgetsBundle;
|
||||
import org.thingsboard.server.dao.widget.WidgetTypeService;
|
||||
import org.thingsboard.server.dao.widget.WidgetsBundleService;
|
||||
import org.thingsboard.server.queue.util.TbCoreComponent;
|
||||
import org.thingsboard.server.service.sync.vc.data.EntitiesImportCtx;
|
||||
|
||||
@Service
|
||||
@TbCoreComponent
|
||||
@RequiredArgsConstructor
|
||||
public class WidgetTypeImportService extends BaseEntityImportService<WidgetTypeId, WidgetTypeDetails, WidgetTypeExportData> {
|
||||
|
||||
private final WidgetTypeService widgetTypeService;
|
||||
|
||||
@Override
|
||||
protected void setOwner(TenantId tenantId, WidgetTypeDetails widgetsBundle, IdProvider idProvider) {
|
||||
widgetsBundle.setTenantId(tenantId);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected WidgetTypeDetails prepare(EntitiesImportCtx ctx, WidgetTypeDetails widgetsBundle, WidgetTypeDetails old, WidgetTypeExportData exportData, IdProvider idProvider) {
|
||||
return widgetsBundle;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected WidgetTypeDetails saveOrUpdate(EntitiesImportCtx ctx, WidgetTypeDetails widgetsBundle, WidgetTypeExportData exportData, IdProvider idProvider) {
|
||||
return widgetTypeService.saveWidgetType(widgetsBundle);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean compare(EntitiesImportCtx ctx, WidgetTypeExportData exportData, WidgetTypeDetails prepared, WidgetTypeDetails existing) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected WidgetTypeDetails deepCopy(WidgetTypeDetails widgetsBundle) {
|
||||
return new WidgetTypeDetails(widgetsBundle);
|
||||
}
|
||||
|
||||
@Override
|
||||
public EntityType getEntityType() {
|
||||
return EntityType.WIDGET_TYPE;
|
||||
}
|
||||
|
||||
}
|
||||
@ -17,22 +17,19 @@ package org.thingsboard.server.service.sync.ie.importing.impl;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.thingsboard.common.util.JacksonUtil;
|
||||
import org.thingsboard.server.common.data.EntityType;
|
||||
import org.thingsboard.server.common.data.id.TenantId;
|
||||
import org.thingsboard.server.common.data.id.WidgetsBundleId;
|
||||
import org.thingsboard.server.common.data.sync.ie.WidgetsBundleExportData;
|
||||
import org.thingsboard.server.common.data.widget.BaseWidgetType;
|
||||
import org.thingsboard.server.common.data.util.CollectionsUtil;
|
||||
import org.thingsboard.server.common.data.widget.WidgetTypeDetails;
|
||||
import org.thingsboard.server.common.data.widget.WidgetTypeInfo;
|
||||
import org.thingsboard.server.common.data.widget.WidgetsBundle;
|
||||
import org.thingsboard.server.dao.widget.WidgetTypeService;
|
||||
import org.thingsboard.server.dao.widget.WidgetsBundleService;
|
||||
import org.thingsboard.server.queue.util.TbCoreComponent;
|
||||
import org.thingsboard.server.service.sync.vc.data.EntitiesImportCtx;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Service
|
||||
@TbCoreComponent
|
||||
@RequiredArgsConstructor
|
||||
@ -53,8 +50,27 @@ public class WidgetsBundleImportService extends BaseEntityImportService<WidgetsB
|
||||
|
||||
@Override
|
||||
protected WidgetsBundle saveOrUpdate(EntitiesImportCtx ctx, WidgetsBundle widgetsBundle, WidgetsBundleExportData exportData, IdProvider idProvider) {
|
||||
if (CollectionsUtil.isNotEmpty(exportData.getWidgets())) {
|
||||
exportData.getWidgets().forEach(widgetTypeNode -> {
|
||||
String bundleAlias = widgetTypeNode.remove("bundleAlias").asText();
|
||||
String alias = widgetTypeNode.remove("alias").asText();
|
||||
String fqn = String.format("%s.%s", bundleAlias, alias);
|
||||
exportData.addFqn(fqn);
|
||||
WidgetTypeDetails widgetType = JacksonUtil.treeToValue(widgetTypeNode, WidgetTypeDetails.class);
|
||||
widgetType.setTenantId(ctx.getTenantId());
|
||||
widgetType.setFqn(fqn);
|
||||
var existingWidgetType = widgetTypeService.findWidgetTypeByTenantIdAndFqn(ctx.getTenantId(), fqn);
|
||||
if (existingWidgetType == null) {
|
||||
widgetType.setId(null);
|
||||
} else {
|
||||
widgetType.setId(existingWidgetType.getId());
|
||||
widgetType.setCreatedTime(existingWidgetType.getCreatedTime());
|
||||
}
|
||||
widgetTypeService.saveWidgetType(widgetType);
|
||||
});
|
||||
}
|
||||
WidgetsBundle savedWidgetsBundle = widgetsBundleService.saveWidgetsBundle(widgetsBundle);
|
||||
widgetTypeService.updateWidgetsBundleWidgetFqns(ctx.getTenantId(), savedWidgetsBundle.getId(), exportData.getWidgets());
|
||||
widgetTypeService.updateWidgetsBundleWidgetFqns(ctx.getTenantId(), savedWidgetsBundle.getId(), exportData.getFqns());
|
||||
return savedWidgetsBundle;
|
||||
}
|
||||
|
||||
|
||||
@ -39,6 +39,7 @@ import java.util.Map;
|
||||
@JsonSubTypes({
|
||||
@Type(name = "DEVICE", value = DeviceExportData.class),
|
||||
@Type(name = "RULE_CHAIN", value = RuleChainExportData.class),
|
||||
@Type(name = "WIDGET_TYPE", value = WidgetTypeExportData.class),
|
||||
@Type(name = "WIDGETS_BUNDLE", value = WidgetsBundleExportData.class)
|
||||
})
|
||||
@JsonInclude(JsonInclude.Include.NON_NULL)
|
||||
|
||||
@ -0,0 +1,26 @@
|
||||
/**
|
||||
* Copyright © 2016-2023 The Thingsboard Authors
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.thingsboard.server.common.data.sync.ie;
|
||||
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import org.thingsboard.server.common.data.widget.WidgetTypeDetails;
|
||||
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
public class WidgetTypeExportData extends EntityExportData<WidgetTypeDetails> {
|
||||
|
||||
}
|
||||
@ -16,13 +16,12 @@
|
||||
package org.thingsboard.server.common.data.sync.ie;
|
||||
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import com.fasterxml.jackson.databind.node.ObjectNode;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import org.thingsboard.server.common.data.widget.BaseWidgetType;
|
||||
import org.thingsboard.server.common.data.widget.WidgetTypeDetails;
|
||||
import org.thingsboard.server.common.data.widget.WidgetsBundle;
|
||||
|
||||
import java.util.Comparator;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
@ -30,6 +29,16 @@ import java.util.List;
|
||||
public class WidgetsBundleExportData extends EntityExportData<WidgetsBundle> {
|
||||
|
||||
@JsonProperty(index = 3)
|
||||
private List<String> widgets;
|
||||
private List<ObjectNode> widgets;
|
||||
|
||||
@JsonProperty(index = 4)
|
||||
private List<String> fqns;
|
||||
|
||||
public void addFqn(String fqn) {
|
||||
if (fqns == null) {
|
||||
fqns = new ArrayList<>();
|
||||
}
|
||||
fqns.add(fqn);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -30,6 +30,7 @@ export const exportableEntityTypes: Array<EntityType> = [
|
||||
EntityType.DEVICE_PROFILE,
|
||||
EntityType.ASSET_PROFILE,
|
||||
EntityType.RULE_CHAIN,
|
||||
EntityType.WIDGET_TYPE,
|
||||
EntityType.WIDGETS_BUNDLE,
|
||||
EntityType.NOTIFICATION_TEMPLATE,
|
||||
EntityType.NOTIFICATION_TARGET,
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user