Minor improvements

This commit is contained in:
Viacheslav Klimov 2022-04-25 14:28:54 +03:00
parent 955aec0b41
commit 7e2910ed95
5 changed files with 55 additions and 19 deletions

View File

@ -29,8 +29,10 @@ import org.thingsboard.server.service.security.model.SecurityUser;
import org.thingsboard.server.service.sync.EntitiesExportImportService; import org.thingsboard.server.service.sync.EntitiesExportImportService;
import org.thingsboard.server.service.sync.exporting.ExportableEntitiesService; import org.thingsboard.server.service.sync.exporting.ExportableEntitiesService;
import org.thingsboard.server.service.sync.exporting.data.EntityExportData; import org.thingsboard.server.service.sync.exporting.data.EntityExportData;
import org.thingsboard.server.service.sync.exporting.data.request.EntityExportSettings;
import org.thingsboard.server.service.sync.exporting.data.request.ExportRequest; import org.thingsboard.server.service.sync.exporting.data.request.ExportRequest;
import org.thingsboard.server.service.sync.importing.data.EntityImportResult; import org.thingsboard.server.service.sync.importing.data.EntityImportResult;
import org.thingsboard.server.service.sync.importing.data.EntityImportSettings;
import org.thingsboard.server.service.sync.importing.data.request.ImportRequest; import org.thingsboard.server.service.sync.importing.data.request.ImportRequest;
import java.util.ArrayList; import java.util.ArrayList;
@ -79,10 +81,16 @@ public class EntitiesExportImportController extends BaseController {
private List<EntityExportData<?>> exportEntitiesByRequest(SecurityUser user, ExportRequest exportRequest) throws ThingsboardException { private List<EntityExportData<?>> exportEntitiesByRequest(SecurityUser user, ExportRequest exportRequest) throws ThingsboardException {
List<EntityId> entities = exportableEntitiesService.findEntitiesForRequest(user.getTenantId(), exportRequest); List<EntityId> entities = exportableEntitiesService.findEntitiesForRequest(user.getTenantId(), exportRequest);
EntityExportSettings exportSettings = exportRequest.getExportSettings();
if (exportSettings == null) {
exportSettings = EntityExportSettings.builder()
.exportRelations(false)
.build();
}
List<EntityExportData<?>> exportDataList = new ArrayList<>(); List<EntityExportData<?>> exportDataList = new ArrayList<>();
for (EntityId entityId : entities) { for (EntityId entityId : entities) {
EntityExportData<?> exportData = exportImportService.exportEntity(user, entityId, exportRequest.getExportSettings()); EntityExportData<?> exportData = exportImportService.exportEntity(user, entityId, exportSettings);
exportDataList.add(exportData); exportDataList.add(exportData);
} }
return exportDataList; return exportDataList;
@ -93,7 +101,15 @@ public class EntitiesExportImportController extends BaseController {
public List<EntityImportResult<?>> importEntities(@RequestBody ImportRequest importRequest) throws ThingsboardException { public List<EntityImportResult<?>> importEntities(@RequestBody ImportRequest importRequest) throws ThingsboardException {
SecurityUser user = getCurrentUser(); SecurityUser user = getCurrentUser();
try { try {
List<EntityImportResult<?>> importResults = exportImportService.importEntities(user, importRequest.getExportDataList(), importRequest.getImportSettings()); EntityImportSettings importSettings = importRequest.getImportSettings();
if (importSettings == null) {
importSettings = EntityImportSettings.builder()
.findExistingByName(false)
.updateRelations(false)
.build();
}
List<EntityImportResult<?>> importResults = exportImportService.importEntities(user, importRequest.getExportDataList(), importSettings);
importResults.stream() importResults.stream()
.map(EntityImportResult::getSendEventsCallback) .map(EntityImportResult::getSendEventsCallback)

View File

@ -17,6 +17,7 @@ package org.thingsboard.server.service.sync.exporting;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataAccessException; import org.springframework.dao.DataAccessException;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -56,7 +57,6 @@ import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import static org.thingsboard.server.dao.sql.query.EntityKeyMapping.CREATED_TIME; import static org.thingsboard.server.dao.sql.query.EntityKeyMapping.CREATED_TIME;
@ -78,12 +78,17 @@ public class DefaultExportableEntitiesService implements ExportableEntitiesServi
EntityType entityType = externalId.getEntityType(); EntityType entityType = externalId.getEntityType();
Dao<E> dao = getDao(entityType); Dao<E> dao = getDao(entityType);
E entity = null;
if (dao instanceof ExportableEntityDao) { if (dao instanceof ExportableEntityDao) {
ExportableEntityDao<E> exportableEntityDao = (ExportableEntityDao<E>) dao; ExportableEntityDao<E> exportableEntityDao = (ExportableEntityDao<E>) dao;
return exportableEntityDao.findByTenantIdAndExternalId(tenantId.getId(), externalId.getId()); entity = exportableEntityDao.findByTenantIdAndExternalId(tenantId.getId(), externalId.getId());
} else { }
if (entity == null || !belongsToTenant(entity, tenantId)) {
return null; return null;
} }
return entity;
} }
@Override @Override
@ -92,24 +97,36 @@ public class DefaultExportableEntitiesService implements ExportableEntitiesServi
Dao<E> dao = getDao(entityType); Dao<E> dao = getDao(entityType);
E entity = dao.findById(tenantId, id.getId()); E entity = dao.findById(tenantId, id.getId());
if (((HasTenantId) entity).getTenantId().equals(tenantId)) {
return entity; if (entity == null || !belongsToTenant(entity, tenantId)) {
return null;
} }
return null;
return entity;
} }
@Override @Override
public <E extends ExportableEntity<I>, I extends EntityId> E findEntityByTenantIdAndName(TenantId tenantId, EntityType entityType, String name) { public <E extends ExportableEntity<I>, I extends EntityId> E findEntityByTenantIdAndName(TenantId tenantId, EntityType entityType, String name) {
Dao<E> dao = getDao(entityType); Dao<E> dao = getDao(entityType);
E entity = null;
if (dao instanceof ExportableEntityDao) { if (dao instanceof ExportableEntityDao) {
ExportableEntityDao<E> exportableEntityDao = (ExportableEntityDao<E>) dao; ExportableEntityDao<E> exportableEntityDao = (ExportableEntityDao<E>) dao;
try { try {
return exportableEntityDao.findByTenantIdAndName(tenantId.getId(), name); entity = exportableEntityDao.findByTenantIdAndName(tenantId.getId(), name);
} catch (UnsupportedOperationException ignored) { } catch (UnsupportedOperationException ignored) {
} }
} }
return null; if (entity == null || !belongsToTenant(entity, tenantId)) {
return null;
}
return entity;
}
private boolean belongsToTenant(HasId<? extends EntityId> entity, TenantId tenantId) {
return tenantId.equals(((HasTenantId) entity).getTenantId());
} }
@ -127,21 +144,21 @@ public class DefaultExportableEntitiesService implements ExportableEntitiesServi
EntityTypeFilter entityTypeFilter = new EntityTypeFilter(); EntityTypeFilter entityTypeFilter = new EntityTypeFilter();
entityTypeFilter.setEntityType(exportRequest.getEntityType()); entityTypeFilter.setEntityType(exportRequest.getEntityType());
CustomerId customerId = Optional.ofNullable(exportRequest.getCustomerId()).orElse(new CustomerId(EntityId.NULL_UUID)); CustomerId customerId = new CustomerId(ObjectUtils.defaultIfNull(exportRequest.getCustomerId(), EntityId.NULL_UUID));
return findEntitiesByFilter(tenantId, customerId, entityTypeFilter, exportRequest.getPage(), exportRequest.getPageSize()); return findEntitiesByFilter(tenantId, customerId, entityTypeFilter, exportRequest.getPage(), exportRequest.getPageSize());
} }
case CUSTOM_ENTITY_FILTER: { case CUSTOM_ENTITY_FILTER: {
CustomEntityFilterExportRequest exportRequest = (CustomEntityFilterExportRequest) request; CustomEntityFilterExportRequest exportRequest = (CustomEntityFilterExportRequest) request;
EntityFilter filter = exportRequest.getFilter(); EntityFilter filter = exportRequest.getFilter();
CustomerId customerId = Optional.ofNullable(exportRequest.getCustomerId()).orElse(new CustomerId(EntityId.NULL_UUID)); CustomerId customerId = new CustomerId(ObjectUtils.defaultIfNull(exportRequest.getCustomerId(), EntityId.NULL_UUID));
return findEntitiesByFilter(tenantId, customerId, filter, exportRequest.getPage(), exportRequest.getPageSize()); return findEntitiesByFilter(tenantId, customerId, filter, exportRequest.getPage(), exportRequest.getPageSize());
} }
case CUSTOM_ENTITY_QUERY: { case CUSTOM_ENTITY_QUERY: {
CustomEntityQueryExportRequest exportRequest = (CustomEntityQueryExportRequest) request; CustomEntityQueryExportRequest exportRequest = (CustomEntityQueryExportRequest) request;
EntityDataQuery query = exportRequest.getQuery(); EntityDataQuery query = exportRequest.getQuery();
CustomerId customerId = Optional.ofNullable(exportRequest.getCustomerId()).orElse(new CustomerId(EntityId.NULL_UUID)); CustomerId customerId = new CustomerId(ObjectUtils.defaultIfNull(exportRequest.getCustomerId(), EntityId.NULL_UUID));
return findEntitiesByQuery(tenantId, customerId, query); return findEntitiesByQuery(tenantId, customerId, query);
} }
default: { default: {

View File

@ -17,9 +17,10 @@ package org.thingsboard.server.service.sync.exporting.data.request;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import org.thingsboard.server.common.data.id.CustomerId;
import org.thingsboard.server.common.data.query.EntityFilter; import org.thingsboard.server.common.data.query.EntityFilter;
import java.util.UUID;
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
@Data @Data
public class CustomEntityFilterExportRequest extends ExportRequest { public class CustomEntityFilterExportRequest extends ExportRequest {
@ -27,7 +28,7 @@ public class CustomEntityFilterExportRequest extends ExportRequest {
private EntityFilter filter; private EntityFilter filter;
private int page; private int page;
private int pageSize; private int pageSize;
private CustomerId customerId; private UUID customerId;
@Override @Override
public ExportRequestType getType() { public ExportRequestType getType() {

View File

@ -17,15 +17,16 @@ package org.thingsboard.server.service.sync.exporting.data.request;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import org.thingsboard.server.common.data.id.CustomerId;
import org.thingsboard.server.common.data.query.EntityDataQuery; import org.thingsboard.server.common.data.query.EntityDataQuery;
import java.util.UUID;
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
@Data @Data
public class CustomEntityQueryExportRequest extends ExportRequest { public class CustomEntityQueryExportRequest extends ExportRequest {
private EntityDataQuery query; private EntityDataQuery query;
private CustomerId customerId; private UUID customerId;
@Override @Override
public ExportRequestType getType() { public ExportRequestType getType() {

View File

@ -18,7 +18,8 @@ package org.thingsboard.server.service.sync.exporting.data.request;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import org.thingsboard.server.common.data.EntityType; import org.thingsboard.server.common.data.EntityType;
import org.thingsboard.server.common.data.id.CustomerId;
import java.util.UUID;
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
@Data @Data
@ -27,7 +28,7 @@ public class EntityTypeExportRequest extends ExportRequest {
private EntityType entityType; private EntityType entityType;
private int page; private int page;
private int pageSize; private int pageSize;
private CustomerId customerId; private UUID customerId;
@Override @Override
public ExportRequestType getType() { public ExportRequestType getType() {