Device profile and asset profile - handle name duplicates from edge
This commit is contained in:
parent
7cb9ee3302
commit
c933f782fb
@ -20,6 +20,7 @@ import com.fasterxml.jackson.databind.node.ObjectNode;
|
||||
import com.google.common.util.concurrent.Futures;
|
||||
import com.google.common.util.concurrent.ListenableFuture;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.data.util.Pair;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.thingsboard.common.util.JacksonUtil;
|
||||
import org.thingsboard.server.common.data.DataConstants;
|
||||
@ -27,6 +28,8 @@ import org.thingsboard.server.common.data.EdgeUtils;
|
||||
import org.thingsboard.server.common.data.asset.AssetProfile;
|
||||
import org.thingsboard.server.common.data.edge.Edge;
|
||||
import org.thingsboard.server.common.data.edge.EdgeEvent;
|
||||
import org.thingsboard.server.common.data.edge.EdgeEventActionType;
|
||||
import org.thingsboard.server.common.data.edge.EdgeEventType;
|
||||
import org.thingsboard.server.common.data.id.AssetProfileId;
|
||||
import org.thingsboard.server.common.data.id.DashboardId;
|
||||
import org.thingsboard.server.common.data.id.RuleChainId;
|
||||
@ -74,11 +77,16 @@ public class AssetProfileEdgeProcessor extends BaseAssetProfileProcessor {
|
||||
}
|
||||
|
||||
private void saveOrUpdateAssetProfile(TenantId tenantId, AssetProfileId assetProfileId, AssetProfileUpdateMsg assetProfileUpdateMsg, Edge edge) {
|
||||
boolean created = super.saveOrUpdateAssetProfile(tenantId, assetProfileId, assetProfileUpdateMsg);
|
||||
Pair<Boolean, Boolean> resultPair = super.saveOrUpdateAssetProfile(tenantId, assetProfileId, assetProfileUpdateMsg);
|
||||
Boolean created = resultPair.getFirst();
|
||||
if (created) {
|
||||
createRelationFromEdge(tenantId, edge.getId(), assetProfileId);
|
||||
pushAssetProfileCreatedEventToRuleEngine(tenantId, edge, assetProfileId);
|
||||
}
|
||||
Boolean assetProfileNameUpdated = resultPair.getSecond();
|
||||
if (assetProfileNameUpdated) {
|
||||
saveEdgeEvent(tenantId, edge.getId(), EdgeEventType.ASSET_PROFILE, EdgeEventActionType.UPDATED, assetProfileId, null);
|
||||
}
|
||||
}
|
||||
|
||||
private void pushAssetProfileCreatedEventToRuleEngine(TenantId tenantId, Edge edge, AssetProfileId assetProfileId) {
|
||||
|
||||
@ -17,6 +17,8 @@ package org.thingsboard.server.service.edge.rpc.processor.asset;
|
||||
|
||||
import com.datastax.oss.driver.api.core.uuid.Uuids;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.data.util.Pair;
|
||||
import org.thingsboard.server.common.data.StringUtils;
|
||||
import org.thingsboard.server.common.data.asset.AssetProfile;
|
||||
import org.thingsboard.server.common.data.id.AssetProfileId;
|
||||
import org.thingsboard.server.common.data.id.TenantId;
|
||||
@ -28,8 +30,9 @@ import java.nio.charset.StandardCharsets;
|
||||
@Slf4j
|
||||
public abstract class BaseAssetProfileProcessor extends BaseEdgeProcessor {
|
||||
|
||||
protected boolean saveOrUpdateAssetProfile(TenantId tenantId, AssetProfileId assetProfileId, AssetProfileUpdateMsg assetProfileUpdateMsg) {
|
||||
protected Pair<Boolean, Boolean> saveOrUpdateAssetProfile(TenantId tenantId, AssetProfileId assetProfileId, AssetProfileUpdateMsg assetProfileUpdateMsg) {
|
||||
boolean created = false;
|
||||
boolean assetProfileNameUpdated = false;
|
||||
assetCreationLock.lock();
|
||||
try {
|
||||
AssetProfile assetProfile = assetProfileService.findAssetProfileById(tenantId, assetProfileId);
|
||||
@ -40,6 +43,13 @@ public abstract class BaseAssetProfileProcessor extends BaseEdgeProcessor {
|
||||
assetProfile.setTenantId(tenantId);
|
||||
assetProfile.setCreatedTime(Uuids.unixTimestamp(assetProfileId.getId()));
|
||||
}
|
||||
AssetProfile assetProfileByName = assetProfileService.findAssetProfileByName(tenantId, assetProfileName);
|
||||
if (assetProfileByName != null && !assetProfileByName.getId().equals(assetProfileId)) {
|
||||
assetProfileName = assetProfileName + "_" + StringUtils.randomAlphabetic(15);
|
||||
log.warn("Asset profile with name {} already exists. Renaming asset profile name to {}",
|
||||
assetProfileUpdateMsg.getName(), assetProfileName);
|
||||
assetProfileNameUpdated = true;
|
||||
}
|
||||
assetProfile.setName(assetProfileName);
|
||||
assetProfile.setDefault(assetProfileUpdateMsg.getDefault());
|
||||
assetProfile.setDefaultQueueName(assetProfileUpdateMsg.hasDefaultQueueName() ? assetProfileUpdateMsg.getDefaultQueueName() : null);
|
||||
@ -59,7 +69,7 @@ public abstract class BaseAssetProfileProcessor extends BaseEdgeProcessor {
|
||||
} finally {
|
||||
assetCreationLock.unlock();
|
||||
}
|
||||
return created;
|
||||
return Pair.of(created, assetProfileNameUpdated);
|
||||
}
|
||||
|
||||
protected abstract void setDefaultRuleChainId(TenantId tenantId, AssetProfile assetProfile, AssetProfileUpdateMsg assetProfileUpdateMsg);
|
||||
|
||||
@ -18,6 +18,7 @@ package org.thingsboard.server.service.edge.rpc.processor.device;
|
||||
import com.datastax.oss.driver.api.core.uuid.Uuids;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.data.util.Pair;
|
||||
import org.thingsboard.server.common.data.DeviceProfile;
|
||||
import org.thingsboard.server.common.data.DeviceProfileProvisionType;
|
||||
import org.thingsboard.server.common.data.DeviceProfileType;
|
||||
@ -41,18 +42,27 @@ public abstract class BaseDeviceProfileProcessor extends BaseEdgeProcessor {
|
||||
@Autowired
|
||||
private DataDecodingEncodingService dataDecodingEncodingService;
|
||||
|
||||
protected boolean saveOrUpdateDeviceProfile(TenantId tenantId, DeviceProfileId deviceProfileId, DeviceProfileUpdateMsg deviceProfileUpdateMsg) {
|
||||
protected Pair<Boolean, Boolean> saveOrUpdateDeviceProfile(TenantId tenantId, DeviceProfileId deviceProfileId, DeviceProfileUpdateMsg deviceProfileUpdateMsg) {
|
||||
boolean created = false;
|
||||
boolean deviceProfileNameUpdated = false;
|
||||
deviceCreationLock.lock();
|
||||
try {
|
||||
DeviceProfile deviceProfile = deviceProfileService.findDeviceProfileById(tenantId, deviceProfileId);
|
||||
String deviceProfileName = deviceProfileUpdateMsg.getName();
|
||||
if (deviceProfile == null) {
|
||||
created = true;
|
||||
deviceProfile = new DeviceProfile();
|
||||
deviceProfile.setTenantId(tenantId);
|
||||
deviceProfile.setCreatedTime(Uuids.unixTimestamp(deviceProfileId.getId()));
|
||||
}
|
||||
deviceProfile.setName(deviceProfileUpdateMsg.getName());
|
||||
DeviceProfile deviceProfileByName = deviceProfileService.findDeviceProfileByName(tenantId, deviceProfileName);
|
||||
if (deviceProfileByName != null && !deviceProfileByName.getId().equals(deviceProfileId)) {
|
||||
deviceProfileName = deviceProfileName + "_" + StringUtils.randomAlphabetic(15);
|
||||
log.warn("Device profile with name {} already exists. Renaming device profile name to {}",
|
||||
deviceProfileUpdateMsg.getName(), deviceProfileName);
|
||||
deviceProfileNameUpdated = true;
|
||||
}
|
||||
deviceProfile.setName(deviceProfileName);
|
||||
deviceProfile.setDescription(deviceProfileUpdateMsg.hasDescription() ? deviceProfileUpdateMsg.getDescription() : null);
|
||||
deviceProfile.setType(DeviceProfileType.valueOf(deviceProfileUpdateMsg.getType()));
|
||||
deviceProfile.setTransportType(deviceProfileUpdateMsg.hasTransportType()
|
||||
@ -91,7 +101,7 @@ public abstract class BaseDeviceProfileProcessor extends BaseEdgeProcessor {
|
||||
} finally {
|
||||
deviceCreationLock.unlock();
|
||||
}
|
||||
return created;
|
||||
return Pair.of(created, deviceProfileNameUpdated);
|
||||
}
|
||||
|
||||
protected abstract void setDefaultRuleChainId(TenantId tenantId, DeviceProfile deviceProfile, DeviceProfileUpdateMsg deviceProfileUpdateMsg);
|
||||
|
||||
@ -20,6 +20,7 @@ import com.fasterxml.jackson.databind.node.ObjectNode;
|
||||
import com.google.common.util.concurrent.Futures;
|
||||
import com.google.common.util.concurrent.ListenableFuture;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.data.util.Pair;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.thingsboard.common.util.JacksonUtil;
|
||||
import org.thingsboard.server.common.data.DataConstants;
|
||||
@ -27,6 +28,8 @@ import org.thingsboard.server.common.data.DeviceProfile;
|
||||
import org.thingsboard.server.common.data.EdgeUtils;
|
||||
import org.thingsboard.server.common.data.edge.Edge;
|
||||
import org.thingsboard.server.common.data.edge.EdgeEvent;
|
||||
import org.thingsboard.server.common.data.edge.EdgeEventActionType;
|
||||
import org.thingsboard.server.common.data.edge.EdgeEventType;
|
||||
import org.thingsboard.server.common.data.id.DashboardId;
|
||||
import org.thingsboard.server.common.data.id.DeviceProfileId;
|
||||
import org.thingsboard.server.common.data.id.RuleChainId;
|
||||
@ -75,11 +78,16 @@ public class DeviceProfileEdgeProcessor extends BaseDeviceProfileProcessor {
|
||||
}
|
||||
|
||||
private void saveOrUpdateDeviceProfile(TenantId tenantId, DeviceProfileId deviceProfileId, DeviceProfileUpdateMsg deviceProfileUpdateMsg, Edge edge) {
|
||||
boolean created = super.saveOrUpdateDeviceProfile(tenantId, deviceProfileId, deviceProfileUpdateMsg);
|
||||
Pair<Boolean, Boolean> resultPair = super.saveOrUpdateDeviceProfile(tenantId, deviceProfileId, deviceProfileUpdateMsg);
|
||||
Boolean created = resultPair.getFirst();
|
||||
if (created) {
|
||||
createRelationFromEdge(tenantId, edge.getId(), deviceProfileId);
|
||||
pushDeviceProfileCreatedEventToRuleEngine(tenantId, edge, deviceProfileId);
|
||||
}
|
||||
Boolean deviceProfileNameUpdated = resultPair.getSecond();
|
||||
if (deviceProfileNameUpdated) {
|
||||
saveEdgeEvent(tenantId, edge.getId(), EdgeEventType.DEVICE_PROFILE, EdgeEventActionType.UPDATED, deviceProfileId, null);
|
||||
}
|
||||
}
|
||||
|
||||
private void pushDeviceProfileCreatedEventToRuleEngine(TenantId tenantId, Edge edge, DeviceProfileId deviceProfileId) {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user