Commit ca62616cccc77feccd69eb7c3526437b112dd11d

Authored by Volodymyr Babak
1 parent 02895bf3

Fixes for cases when asset/device deleted but has entity view assigned

@@ -30,6 +30,7 @@ import org.springframework.util.StringUtils; @@ -30,6 +30,7 @@ import org.springframework.util.StringUtils;
30 import org.thingsboard.server.common.data.Customer; 30 import org.thingsboard.server.common.data.Customer;
31 import org.thingsboard.server.common.data.EntitySubtype; 31 import org.thingsboard.server.common.data.EntitySubtype;
32 import org.thingsboard.server.common.data.EntityType; 32 import org.thingsboard.server.common.data.EntityType;
  33 +import org.thingsboard.server.common.data.EntityView;
33 import org.thingsboard.server.common.data.Tenant; 34 import org.thingsboard.server.common.data.Tenant;
34 import org.thingsboard.server.common.data.asset.Asset; 35 import org.thingsboard.server.common.data.asset.Asset;
35 import org.thingsboard.server.common.data.asset.AssetSearchQuery; 36 import org.thingsboard.server.common.data.asset.AssetSearchQuery;
@@ -43,6 +44,7 @@ import org.thingsboard.server.common.data.relation.EntityRelation; @@ -43,6 +44,7 @@ import org.thingsboard.server.common.data.relation.EntityRelation;
43 import org.thingsboard.server.common.data.relation.EntitySearchDirection; 44 import org.thingsboard.server.common.data.relation.EntitySearchDirection;
44 import org.thingsboard.server.dao.customer.CustomerDao; 45 import org.thingsboard.server.dao.customer.CustomerDao;
45 import org.thingsboard.server.dao.entity.AbstractEntityService; 46 import org.thingsboard.server.dao.entity.AbstractEntityService;
  47 +import org.thingsboard.server.dao.entityview.EntityViewService;
46 import org.thingsboard.server.dao.exception.DataValidationException; 48 import org.thingsboard.server.dao.exception.DataValidationException;
47 import org.thingsboard.server.dao.service.DataValidator; 49 import org.thingsboard.server.dao.service.DataValidator;
48 import org.thingsboard.server.dao.service.PaginatedRemover; 50 import org.thingsboard.server.dao.service.PaginatedRemover;
@@ -77,6 +79,9 @@ public class BaseAssetService extends AbstractEntityService implements AssetServ @@ -77,6 +79,9 @@ public class BaseAssetService extends AbstractEntityService implements AssetServ
77 private CustomerDao customerDao; 79 private CustomerDao customerDao;
78 80
79 @Autowired 81 @Autowired
  82 + private EntityViewService entityViewService;
  83 +
  84 + @Autowired
80 private CacheManager cacheManager; 85 private CacheManager cacheManager;
81 86
82 @Override 87 @Override
@@ -130,11 +135,21 @@ public class BaseAssetService extends AbstractEntityService implements AssetServ @@ -130,11 +135,21 @@ public class BaseAssetService extends AbstractEntityService implements AssetServ
130 validateId(assetId, INCORRECT_ASSET_ID + assetId); 135 validateId(assetId, INCORRECT_ASSET_ID + assetId);
131 deleteEntityRelations(assetId); 136 deleteEntityRelations(assetId);
132 137
133 - Cache cache = cacheManager.getCache(ASSET_CACHE);  
134 Asset asset = assetDao.findById(assetId.getId()); 138 Asset asset = assetDao.findById(assetId.getId());
  139 + try {
  140 + List<EntityView> entityViews = entityViewService.findEntityViewsByTenantIdAndEntityIdAsync(asset.getTenantId(), assetId).get();
  141 + if (entityViews != null && !entityViews.isEmpty()) {
  142 + throw new DataValidationException("Can't delete asset that is assigned to entity views!");
  143 + }
  144 + } catch (Exception e) {
  145 + log.error("Exception while finding entity views for assetId [{}]", assetId, e);
  146 + throw new RuntimeException("Exception while finding entity views for assetId [" + assetId + "]", e);
  147 + }
  148 +
135 List<Object> list = new ArrayList<>(); 149 List<Object> list = new ArrayList<>();
136 list.add(asset.getTenantId()); 150 list.add(asset.getTenantId());
137 list.add(asset.getName()); 151 list.add(asset.getName());
  152 + Cache cache = cacheManager.getCache(ASSET_CACHE);
138 cache.evict(list); 153 cache.evict(list);
139 154
140 assetDao.removeById(assetId.getId()); 155 assetDao.removeById(assetId.getId());
@@ -31,6 +31,7 @@ import org.thingsboard.server.common.data.Customer; @@ -31,6 +31,7 @@ import org.thingsboard.server.common.data.Customer;
31 import org.thingsboard.server.common.data.Device; 31 import org.thingsboard.server.common.data.Device;
32 import org.thingsboard.server.common.data.EntitySubtype; 32 import org.thingsboard.server.common.data.EntitySubtype;
33 import org.thingsboard.server.common.data.EntityType; 33 import org.thingsboard.server.common.data.EntityType;
  34 +import org.thingsboard.server.common.data.EntityView;
34 import org.thingsboard.server.common.data.Tenant; 35 import org.thingsboard.server.common.data.Tenant;
35 import org.thingsboard.server.common.data.device.DeviceSearchQuery; 36 import org.thingsboard.server.common.data.device.DeviceSearchQuery;
36 import org.thingsboard.server.common.data.id.CustomerId; 37 import org.thingsboard.server.common.data.id.CustomerId;
@@ -45,6 +46,7 @@ import org.thingsboard.server.common.data.security.DeviceCredentials; @@ -45,6 +46,7 @@ import org.thingsboard.server.common.data.security.DeviceCredentials;
45 import org.thingsboard.server.common.data.security.DeviceCredentialsType; 46 import org.thingsboard.server.common.data.security.DeviceCredentialsType;
46 import org.thingsboard.server.dao.customer.CustomerDao; 47 import org.thingsboard.server.dao.customer.CustomerDao;
47 import org.thingsboard.server.dao.entity.AbstractEntityService; 48 import org.thingsboard.server.dao.entity.AbstractEntityService;
  49 +import org.thingsboard.server.dao.entityview.EntityViewService;
48 import org.thingsboard.server.dao.exception.DataValidationException; 50 import org.thingsboard.server.dao.exception.DataValidationException;
49 import org.thingsboard.server.dao.service.DataValidator; 51 import org.thingsboard.server.dao.service.DataValidator;
50 import org.thingsboard.server.dao.service.PaginatedRemover; 52 import org.thingsboard.server.dao.service.PaginatedRemover;
@@ -87,6 +89,9 @@ public class DeviceServiceImpl extends AbstractEntityService implements DeviceSe @@ -87,6 +89,9 @@ public class DeviceServiceImpl extends AbstractEntityService implements DeviceSe
87 private DeviceCredentialsService deviceCredentialsService; 89 private DeviceCredentialsService deviceCredentialsService;
88 90
89 @Autowired 91 @Autowired
  92 + private EntityViewService entityViewService;
  93 +
  94 + @Autowired
90 private CacheManager cacheManager; 95 private CacheManager cacheManager;
91 96
92 @Override 97 @Override
@@ -145,18 +150,31 @@ public class DeviceServiceImpl extends AbstractEntityService implements DeviceSe @@ -145,18 +150,31 @@ public class DeviceServiceImpl extends AbstractEntityService implements DeviceSe
145 @Override 150 @Override
146 public void deleteDevice(DeviceId deviceId) { 151 public void deleteDevice(DeviceId deviceId) {
147 log.trace("Executing deleteDevice [{}]", deviceId); 152 log.trace("Executing deleteDevice [{}]", deviceId);
148 - Cache cache = cacheManager.getCache(DEVICE_CACHE);  
149 validateId(deviceId, INCORRECT_DEVICE_ID + deviceId); 153 validateId(deviceId, INCORRECT_DEVICE_ID + deviceId);
  154 +
  155 + Device device = deviceDao.findById(deviceId.getId());
  156 + try {
  157 + List<EntityView> entityViews = entityViewService.findEntityViewsByTenantIdAndEntityIdAsync(device.getTenantId(), deviceId).get();
  158 + if (entityViews != null && !entityViews.isEmpty()) {
  159 + throw new DataValidationException("Can't delete device that is assigned to entity views!");
  160 + }
  161 + } catch (Exception e) {
  162 + log.error("Exception while finding entity views for deviceId [{}]", deviceId, e);
  163 + throw new RuntimeException("Exception while finding entity views for deviceId [" + deviceId + "]", e);
  164 + }
  165 +
150 DeviceCredentials deviceCredentials = deviceCredentialsService.findDeviceCredentialsByDeviceId(deviceId); 166 DeviceCredentials deviceCredentials = deviceCredentialsService.findDeviceCredentialsByDeviceId(deviceId);
151 if (deviceCredentials != null) { 167 if (deviceCredentials != null) {
152 deviceCredentialsService.deleteDeviceCredentials(deviceCredentials); 168 deviceCredentialsService.deleteDeviceCredentials(deviceCredentials);
153 } 169 }
154 deleteEntityRelations(deviceId); 170 deleteEntityRelations(deviceId);
155 - Device device = deviceDao.findById(deviceId.getId()); 171 +
156 List<Object> list = new ArrayList<>(); 172 List<Object> list = new ArrayList<>();
157 list.add(device.getTenantId()); 173 list.add(device.getTenantId());
158 list.add(device.getName()); 174 list.add(device.getName());
  175 + Cache cache = cacheManager.getCache(DEVICE_CACHE);
159 cache.evict(list); 176 cache.evict(list);
  177 +
160 deviceDao.removeById(deviceId.getId()); 178 deviceDao.removeById(deviceId.getId());
161 } 179 }
162 180