added resource delete validation
This commit is contained in:
parent
1d3a9a25b3
commit
9ddc5e5b8d
@ -16,6 +16,7 @@
|
|||||||
package org.thingsboard.server.service.entitiy;
|
package org.thingsboard.server.service.entitiy;
|
||||||
|
|
||||||
import org.thingsboard.server.common.data.User;
|
import org.thingsboard.server.common.data.User;
|
||||||
|
import org.thingsboard.server.common.data.exception.ThingsboardException;
|
||||||
|
|
||||||
public interface SimpleTbEntityService<T> {
|
public interface SimpleTbEntityService<T> {
|
||||||
|
|
||||||
@ -25,6 +26,6 @@ public interface SimpleTbEntityService<T> {
|
|||||||
|
|
||||||
T save(T entity, User user) throws Exception;
|
T save(T entity, User user) throws Exception;
|
||||||
|
|
||||||
void delete(T entity, User user);
|
void delete(T entity, User user) throws ThingsboardException;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -27,14 +27,18 @@ import org.thingsboard.server.common.data.TbResourceInfo;
|
|||||||
import org.thingsboard.server.common.data.TbResourceInfoFilter;
|
import org.thingsboard.server.common.data.TbResourceInfoFilter;
|
||||||
import org.thingsboard.server.common.data.User;
|
import org.thingsboard.server.common.data.User;
|
||||||
import org.thingsboard.server.common.data.audit.ActionType;
|
import org.thingsboard.server.common.data.audit.ActionType;
|
||||||
|
import org.thingsboard.server.common.data.exception.ThingsboardErrorCode;
|
||||||
import org.thingsboard.server.common.data.exception.ThingsboardException;
|
import org.thingsboard.server.common.data.exception.ThingsboardException;
|
||||||
import org.thingsboard.server.common.data.id.TbResourceId;
|
import org.thingsboard.server.common.data.id.TbResourceId;
|
||||||
import org.thingsboard.server.common.data.id.TenantId;
|
import org.thingsboard.server.common.data.id.TenantId;
|
||||||
import org.thingsboard.server.common.data.lwm2m.LwM2mObject;
|
import org.thingsboard.server.common.data.lwm2m.LwM2mObject;
|
||||||
import org.thingsboard.server.common.data.page.PageData;
|
import org.thingsboard.server.common.data.page.PageData;
|
||||||
import org.thingsboard.server.common.data.page.PageLink;
|
import org.thingsboard.server.common.data.page.PageLink;
|
||||||
|
import org.thingsboard.server.common.data.widget.BaseWidgetType;
|
||||||
|
import org.thingsboard.server.common.data.widget.WidgetTypeDetails;
|
||||||
import org.thingsboard.server.dao.exception.DataValidationException;
|
import org.thingsboard.server.dao.exception.DataValidationException;
|
||||||
import org.thingsboard.server.dao.resource.ResourceService;
|
import org.thingsboard.server.dao.resource.ResourceService;
|
||||||
|
import org.thingsboard.server.dao.widget.WidgetTypeService;
|
||||||
import org.thingsboard.server.queue.util.TbCoreComponent;
|
import org.thingsboard.server.queue.util.TbCoreComponent;
|
||||||
import org.thingsboard.server.service.entitiy.AbstractTbEntityService;
|
import org.thingsboard.server.service.entitiy.AbstractTbEntityService;
|
||||||
|
|
||||||
@ -55,9 +59,11 @@ import static org.thingsboard.server.utils.LwM2mObjectModelUtils.toLwm2mResource
|
|||||||
public class DefaultTbResourceService extends AbstractTbEntityService implements TbResourceService {
|
public class DefaultTbResourceService extends AbstractTbEntityService implements TbResourceService {
|
||||||
|
|
||||||
private final ResourceService resourceService;
|
private final ResourceService resourceService;
|
||||||
|
private final WidgetTypeService widgetTypeService;
|
||||||
|
|
||||||
public DefaultTbResourceService(ResourceService resourceService) {
|
public DefaultTbResourceService(ResourceService resourceService, WidgetTypeService widgetTypeService) {
|
||||||
this.resourceService = resourceService;
|
this.resourceService = resourceService;
|
||||||
|
this.widgetTypeService = widgetTypeService;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -145,10 +151,15 @@ public class DefaultTbResourceService extends AbstractTbEntityService implements
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void delete(TbResource tbResource, User user) {
|
public void delete(TbResource tbResource, User user) throws ThingsboardException {
|
||||||
TbResourceId resourceId = tbResource.getId();
|
TbResourceId resourceId = tbResource.getId();
|
||||||
TenantId tenantId = tbResource.getTenantId();
|
TenantId tenantId = tbResource.getTenantId();
|
||||||
try {
|
try {
|
||||||
|
List<WidgetTypeDetails> widgets = widgetTypeService.findWidgetTypesInfosByTenantIdAndResourceId(tenantId, resourceId);
|
||||||
|
if (!widgets.isEmpty()) {
|
||||||
|
List<String> widgetNames = widgets.stream().map(BaseWidgetType::getName).collect(Collectors.toList());
|
||||||
|
throw new ThingsboardException(String.format("Following widget types uses current resource: %s", widgetNames), ThingsboardErrorCode.GENERAL);
|
||||||
|
}
|
||||||
resourceService.deleteResource(tenantId, resourceId);
|
resourceService.deleteResource(tenantId, resourceId);
|
||||||
tbClusterService.onResourceDeleted(tbResource, null);
|
tbClusterService.onResourceDeleted(tbResource, null);
|
||||||
notificationEntityService.logEntityAction(tenantId, resourceId, tbResource, ActionType.DELETED, user, resourceId.toString());
|
notificationEntityService.logEntityAction(tenantId, resourceId, tbResource, ActionType.DELETED, user, resourceId.toString());
|
||||||
|
|||||||
@ -15,6 +15,7 @@
|
|||||||
*/
|
*/
|
||||||
package org.thingsboard.server.dao.widget;
|
package org.thingsboard.server.dao.widget;
|
||||||
|
|
||||||
|
import org.thingsboard.server.common.data.id.TbResourceId;
|
||||||
import org.thingsboard.server.common.data.id.TenantId;
|
import org.thingsboard.server.common.data.id.TenantId;
|
||||||
import org.thingsboard.server.common.data.id.WidgetTypeId;
|
import org.thingsboard.server.common.data.id.WidgetTypeId;
|
||||||
import org.thingsboard.server.common.data.widget.WidgetType;
|
import org.thingsboard.server.common.data.widget.WidgetType;
|
||||||
@ -40,6 +41,8 @@ public interface WidgetTypeService extends EntityDaoService {
|
|||||||
|
|
||||||
List<WidgetTypeInfo> findWidgetTypesInfosByTenantIdAndBundleAlias(TenantId tenantId, String bundleAlias);
|
List<WidgetTypeInfo> findWidgetTypesInfosByTenantIdAndBundleAlias(TenantId tenantId, String bundleAlias);
|
||||||
|
|
||||||
|
List<WidgetTypeDetails> findWidgetTypesInfosByTenantIdAndResourceId(TenantId tenantId, TbResourceId tbResourceId);
|
||||||
|
|
||||||
WidgetType findWidgetTypeByTenantIdBundleAliasAndAlias(TenantId tenantId, String bundleAlias, String alias);
|
WidgetType findWidgetTypeByTenantIdBundleAliasAndAlias(TenantId tenantId, String bundleAlias, String alias);
|
||||||
|
|
||||||
void deleteWidgetTypesByTenantIdAndBundleAlias(TenantId tenantId, String bundleAlias);
|
void deleteWidgetTypesByTenantIdAndBundleAlias(TenantId tenantId, String bundleAlias);
|
||||||
|
|||||||
@ -77,6 +77,11 @@ public class JpaWidgetTypeDao extends JpaAbstractDao<WidgetTypeDetailsEntity, Wi
|
|||||||
return DaoUtil.getData(widgetTypeRepository.findWidgetTypeByTenantIdAndBundleAliasAndAlias(tenantId, bundleAlias, alias));
|
return DaoUtil.getData(widgetTypeRepository.findWidgetTypeByTenantIdAndBundleAliasAndAlias(tenantId, bundleAlias, alias));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<WidgetTypeDetails> findWidgetTypesInfosByTenantIdAndResourceId(UUID tenantId, UUID tbResourceId) {
|
||||||
|
return DaoUtil.convertDataList(widgetTypeRepository.findWidgetTypesInfosByTenantIdAndResourceId(tenantId, tbResourceId));
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public EntityType getEntityType() {
|
public EntityType getEntityType() {
|
||||||
return EntityType.WIDGET_TYPE;
|
return EntityType.WIDGET_TYPE;
|
||||||
|
|||||||
@ -46,4 +46,11 @@ public interface WidgetTypeRepository extends JpaRepository<WidgetTypeDetailsEnt
|
|||||||
WidgetTypeEntity findWidgetTypeByTenantIdAndBundleAliasAndAlias(@Param("tenantId") UUID tenantId,
|
WidgetTypeEntity findWidgetTypeByTenantIdAndBundleAliasAndAlias(@Param("tenantId") UUID tenantId,
|
||||||
@Param("bundleAlias") String bundleAlias,
|
@Param("bundleAlias") String bundleAlias,
|
||||||
@Param("alias") String alias);
|
@Param("alias") String alias);
|
||||||
|
|
||||||
|
@Query(value = "SELECT * FROM widget_type wt " +
|
||||||
|
"WHERE wt.tenant_id = :tenantId AND cast(wt.descriptor as json) ->> 'resources' LIKE LOWER(CONCAT('%', :resourceId, '%'))",
|
||||||
|
nativeQuery = true)
|
||||||
|
List<WidgetTypeDetailsEntity> findWidgetTypesInfosByTenantIdAndResourceId(@Param("tenantId") UUID tenantId,
|
||||||
|
@Param("resourceId") UUID resourceId);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -83,4 +83,12 @@ public interface WidgetTypeDao extends Dao<WidgetTypeDetails> {
|
|||||||
*/
|
*/
|
||||||
WidgetType findByTenantIdBundleAliasAndAlias(UUID tenantId, String bundleAlias, String alias);
|
WidgetType findByTenantIdBundleAliasAndAlias(UUID tenantId, String bundleAlias, String alias);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Find widget types infos by tenantId and resourceId in descriptor.
|
||||||
|
*
|
||||||
|
* @param tenantId the tenantId
|
||||||
|
* @param tbResourceId the resourceId
|
||||||
|
* @return the list of widget types infos objects
|
||||||
|
*/
|
||||||
|
List<WidgetTypeDetails> findWidgetTypesInfosByTenantIdAndResourceId(UUID tenantId, UUID tbResourceId);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -21,6 +21,7 @@ import org.springframework.stereotype.Service;
|
|||||||
import org.thingsboard.server.common.data.EntityType;
|
import org.thingsboard.server.common.data.EntityType;
|
||||||
import org.thingsboard.server.common.data.id.EntityId;
|
import org.thingsboard.server.common.data.id.EntityId;
|
||||||
import org.thingsboard.server.common.data.id.HasId;
|
import org.thingsboard.server.common.data.id.HasId;
|
||||||
|
import org.thingsboard.server.common.data.id.TbResourceId;
|
||||||
import org.thingsboard.server.common.data.id.TenantId;
|
import org.thingsboard.server.common.data.id.TenantId;
|
||||||
import org.thingsboard.server.common.data.id.WidgetTypeId;
|
import org.thingsboard.server.common.data.id.WidgetTypeId;
|
||||||
import org.thingsboard.server.common.data.widget.WidgetType;
|
import org.thingsboard.server.common.data.widget.WidgetType;
|
||||||
@ -37,6 +38,7 @@ import java.util.Optional;
|
|||||||
public class WidgetTypeServiceImpl implements WidgetTypeService {
|
public class WidgetTypeServiceImpl implements WidgetTypeService {
|
||||||
|
|
||||||
public static final String INCORRECT_TENANT_ID = "Incorrect tenantId ";
|
public static final String INCORRECT_TENANT_ID = "Incorrect tenantId ";
|
||||||
|
public static final String INCORRECT_RESOURCE_ID = "Incorrect resourceId ";
|
||||||
public static final String INCORRECT_BUNDLE_ALIAS = "Incorrect bundleAlias ";
|
public static final String INCORRECT_BUNDLE_ALIAS = "Incorrect bundleAlias ";
|
||||||
@Autowired
|
@Autowired
|
||||||
private WidgetTypeDao widgetTypeDao;
|
private WidgetTypeDao widgetTypeDao;
|
||||||
@ -96,6 +98,14 @@ public class WidgetTypeServiceImpl implements WidgetTypeService {
|
|||||||
return widgetTypeDao.findWidgetTypesInfosByTenantIdAndBundleAlias(tenantId.getId(), bundleAlias);
|
return widgetTypeDao.findWidgetTypesInfosByTenantIdAndBundleAlias(tenantId.getId(), bundleAlias);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<WidgetTypeDetails> findWidgetTypesInfosByTenantIdAndResourceId(TenantId tenantId, TbResourceId tbResourceId) {
|
||||||
|
log.trace("Executing findWidgetTypesInfosByTenantIdAndResourceId, tenantId [{}], tbResourceId [{}]", tenantId, tbResourceId);
|
||||||
|
Validator.validateId(tenantId, INCORRECT_TENANT_ID + tenantId);
|
||||||
|
Validator.validateId(tbResourceId, INCORRECT_RESOURCE_ID + tbResourceId);
|
||||||
|
return widgetTypeDao.findWidgetTypesInfosByTenantIdAndResourceId(tenantId.getId(), tbResourceId.getId());
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public WidgetType findWidgetTypeByTenantIdBundleAliasAndAlias(TenantId tenantId, String bundleAlias, String alias) {
|
public WidgetType findWidgetTypeByTenantIdBundleAliasAndAlias(TenantId tenantId, String bundleAlias, String alias) {
|
||||||
log.trace("Executing findWidgetTypeByTenantIdBundleAliasAndAlias, tenantId [{}], bundleAlias [{}], alias [{}]", tenantId, bundleAlias, alias);
|
log.trace("Executing findWidgetTypeByTenantIdBundleAliasAndAlias, tenantId [{}], bundleAlias [{}], alias [{}]", tenantId, bundleAlias, alias);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user