CalculatedField functionality support for Edge
- refactoring
This commit is contained in:
		
							parent
							
								
									2414b97923
								
							
						
					
					
						commit
						3ae97e0d7e
					
				@ -62,7 +62,7 @@ import org.thingsboard.server.service.edge.rpc.processor.alarm.AlarmProcessor;
 | 
			
		||||
import org.thingsboard.server.service.edge.rpc.processor.alarm.comment.AlarmCommentProcessor;
 | 
			
		||||
import org.thingsboard.server.service.edge.rpc.processor.asset.AssetEdgeProcessor;
 | 
			
		||||
import org.thingsboard.server.service.edge.rpc.processor.asset.profile.AssetProfileEdgeProcessor;
 | 
			
		||||
import org.thingsboard.server.service.edge.rpc.processor.calculated.CalculatedFieldProcessor;
 | 
			
		||||
import org.thingsboard.server.service.edge.rpc.processor.cf.CalculatedFieldProcessor;
 | 
			
		||||
import org.thingsboard.server.service.edge.rpc.processor.dashboard.DashboardEdgeProcessor;
 | 
			
		||||
import org.thingsboard.server.service.edge.rpc.processor.device.DeviceEdgeProcessor;
 | 
			
		||||
import org.thingsboard.server.service.edge.rpc.processor.device.profile.DeviceProfileEdgeProcessor;
 | 
			
		||||
 | 
			
		||||
@ -222,7 +222,7 @@ public abstract class BaseEdgeProcessor implements EdgeProcessor {
 | 
			
		||||
                    if (edgeId != null) {
 | 
			
		||||
                        return saveEdgeEvent(tenantId, edgeId, type, actionType, entityId, body);
 | 
			
		||||
                    } else {
 | 
			
		||||
                        return processNotificationToRelatedEdges(tenantId, entityId, type, actionType, originatorEdgeId);
 | 
			
		||||
                        return processNotificationToRelatedEdges(tenantId, entityId, entityId, type, actionType, originatorEdgeId);
 | 
			
		||||
                    }
 | 
			
		||||
                case DELETED:
 | 
			
		||||
                    EdgeEventActionType deleted = EdgeEventActionType.DELETED;
 | 
			
		||||
@ -260,11 +260,11 @@ public abstract class BaseEdgeProcessor implements EdgeProcessor {
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private ListenableFuture<Void> processNotificationToRelatedEdges(TenantId tenantId, EntityId entityId, EdgeEventType type,
 | 
			
		||||
                                                                     EdgeEventActionType actionType, EdgeId sourceEdgeId) {
 | 
			
		||||
    protected ListenableFuture<Void> processNotificationToRelatedEdges(TenantId tenantId, EntityId ownerEntityId, EntityId entityId, EdgeEventType type,
 | 
			
		||||
                                                                       EdgeEventActionType actionType, EdgeId sourceEdgeId) {
 | 
			
		||||
        List<ListenableFuture<Void>> futures = new ArrayList<>();
 | 
			
		||||
        PageDataIterableByTenantIdEntityId<EdgeId> edgeIds =
 | 
			
		||||
                new PageDataIterableByTenantIdEntityId<>(edgeCtx.getEdgeService()::findRelatedEdgeIdsByEntityId, tenantId, entityId, RELATED_EDGES_CACHE_ITEMS);
 | 
			
		||||
                new PageDataIterableByTenantIdEntityId<>(edgeCtx.getEdgeService()::findRelatedEdgeIdsByEntityId, tenantId, ownerEntityId, RELATED_EDGES_CACHE_ITEMS);
 | 
			
		||||
        for (EdgeId relatedEdgeId : edgeIds) {
 | 
			
		||||
            if (!relatedEdgeId.equals(sourceEdgeId)) {
 | 
			
		||||
                futures.add(saveEdgeEvent(tenantId, relatedEdgeId, type, actionType, entityId, null));
 | 
			
		||||
 | 
			
		||||
@ -13,33 +13,21 @@
 | 
			
		||||
 * See the License for the specific language governing permissions and
 | 
			
		||||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
package org.thingsboard.server.service.edge.rpc.processor.calculated;
 | 
			
		||||
package org.thingsboard.server.service.edge.rpc.processor.cf;
 | 
			
		||||
 | 
			
		||||
import com.datastax.oss.driver.api.core.uuid.Uuids;
 | 
			
		||||
import com.google.common.util.concurrent.Futures;
 | 
			
		||||
import com.google.common.util.concurrent.ListenableFuture;
 | 
			
		||||
import lombok.extern.slf4j.Slf4j;
 | 
			
		||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
import org.springframework.data.util.Pair;
 | 
			
		||||
import org.thingsboard.common.util.JacksonUtil;
 | 
			
		||||
import org.thingsboard.server.common.data.StringUtils;
 | 
			
		||||
import org.thingsboard.server.common.data.cf.CalculatedField;
 | 
			
		||||
import org.thingsboard.server.common.data.edge.EdgeEventActionType;
 | 
			
		||||
import org.thingsboard.server.common.data.edge.EdgeEventType;
 | 
			
		||||
import org.thingsboard.server.common.data.id.CalculatedFieldId;
 | 
			
		||||
import org.thingsboard.server.common.data.id.EdgeId;
 | 
			
		||||
import org.thingsboard.server.common.data.id.EntityId;
 | 
			
		||||
import org.thingsboard.server.common.data.id.TenantId;
 | 
			
		||||
import org.thingsboard.server.common.data.page.PageDataIterableByTenantIdEntityId;
 | 
			
		||||
import org.thingsboard.server.dao.service.DataValidator;
 | 
			
		||||
import org.thingsboard.server.gen.edge.v1.CalculatedFieldUpdateMsg;
 | 
			
		||||
import org.thingsboard.server.service.edge.rpc.processor.BaseEdgeProcessor;
 | 
			
		||||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
import static org.thingsboard.server.dao.edge.BaseRelatedEdgesService.RELATED_EDGES_CACHE_ITEMS;
 | 
			
		||||
 | 
			
		||||
@Slf4j
 | 
			
		||||
public abstract class BaseCalculatedFieldProcessor extends BaseEdgeProcessor {
 | 
			
		||||
 | 
			
		||||
@ -88,23 +76,4 @@ public abstract class BaseCalculatedFieldProcessor extends BaseEdgeProcessor {
 | 
			
		||||
        return Pair.of(isCreated, isNameUpdated);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected ListenableFuture<Void> pushEventToAllRelatedEdges(TenantId tenantId, EntityId calculatedFieldOwnerId, EntityId entityId, EdgeEventType type, EdgeEventActionType actionType, EdgeId sourceEdgeId) {
 | 
			
		||||
        List<ListenableFuture<Void>> futures = new ArrayList<>();
 | 
			
		||||
        PageDataIterableByTenantIdEntityId<EdgeId> edgeIds =
 | 
			
		||||
                new PageDataIterableByTenantIdEntityId<>(edgeCtx.getEdgeService()::findRelatedEdgeIdsByEntityId, tenantId, calculatedFieldOwnerId, RELATED_EDGES_CACHE_ITEMS);
 | 
			
		||||
        for (EdgeId relatedEdgeId : edgeIds) {
 | 
			
		||||
            if (!relatedEdgeId.equals(sourceEdgeId)) {
 | 
			
		||||
                futures.add(saveEdgeEvent(tenantId, relatedEdgeId, type, actionType, entityId, null));
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        return Futures.transform(Futures.allAsList(futures), voids -> null, dbCallbackExecutorService);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected ListenableFuture<Void> pushEventToAllEdges(TenantId tenantId, EdgeEventType type, EdgeEventActionType actionType, EntityId entityId, EdgeId sourceEdgeId) {
 | 
			
		||||
        return switch (actionType) {
 | 
			
		||||
            case ADDED, UPDATED, DELETED -> processActionForAllEdges(tenantId, type, actionType, entityId, null, sourceEdgeId);
 | 
			
		||||
            default -> Futures.immediateFuture(null);
 | 
			
		||||
        };
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@ -13,7 +13,7 @@
 | 
			
		||||
 * See the License for the specific language governing permissions and
 | 
			
		||||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
package org.thingsboard.server.service.edge.rpc.processor.calculated;
 | 
			
		||||
package org.thingsboard.server.service.edge.rpc.processor.cf;
 | 
			
		||||
 | 
			
		||||
import com.fasterxml.jackson.databind.JsonNode;
 | 
			
		||||
import com.google.common.util.concurrent.Futures;
 | 
			
		||||
@ -134,9 +134,9 @@ public class CalculatedFieldEdgeProcessor extends BaseCalculatedFieldProcessor i
 | 
			
		||||
 | 
			
		||||
                    return edgeId != null ?
 | 
			
		||||
                            saveEdgeEvent(tenantId, edgeId, type, actionType, entityId, body) :
 | 
			
		||||
                            pushEventToAllRelatedEdges(tenantId, calculatedFieldOwnerId, entityId, type, actionType, originatorEdgeId);
 | 
			
		||||
                            processNotificationToRelatedEdges(tenantId, calculatedFieldOwnerId, entityId, type, actionType, originatorEdgeId);
 | 
			
		||||
                } else {
 | 
			
		||||
                    return pushEventToAllEdges(tenantId, type, actionType, entityId, originatorEdgeId);
 | 
			
		||||
                    return processActionForAllEdges(tenantId, type, actionType, entityId, null, originatorEdgeId);
 | 
			
		||||
                }
 | 
			
		||||
            default:
 | 
			
		||||
                return super.processEntityNotification(tenantId, edgeNotificationMsg);
 | 
			
		||||
@ -13,7 +13,7 @@
 | 
			
		||||
 * See the License for the specific language governing permissions and
 | 
			
		||||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
package org.thingsboard.server.service.edge.rpc.processor.calculated;
 | 
			
		||||
package org.thingsboard.server.service.edge.rpc.processor.cf;
 | 
			
		||||
 | 
			
		||||
import com.google.common.util.concurrent.ListenableFuture;
 | 
			
		||||
import org.thingsboard.server.common.data.edge.Edge;
 | 
			
		||||
@ -78,7 +78,6 @@ import java.util.HashMap;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
import java.util.UUID;
 | 
			
		||||
import java.util.stream.Collectors;
 | 
			
		||||
 | 
			
		||||
@Service
 | 
			
		||||
@TbCoreComponent
 | 
			
		||||
@ -322,11 +321,10 @@ public class DefaultEdgeRequestsService implements EdgeRequestsService {
 | 
			
		||||
                            return saveEdgeEvent(tenantId, edgeId, EdgeEventType.CALCULATED_FIELD,
 | 
			
		||||
                                    EdgeEventActionType.ADDED, calculatedField.getId(), JacksonUtil.valueToTree(calculatedField));
 | 
			
		||||
                        } catch (Exception e) {
 | 
			
		||||
                            String errMsg = String.format("[%s][%s] Exception during loading calculatedField [%s] to edge on sync!", tenantId, edgeId, calculatedField);
 | 
			
		||||
                            log.error(errMsg, e);
 | 
			
		||||
                            log.error("[{}][{}] Exception during loading calculatedField [{}] to edge on sync!", tenantId, edgeId, calculatedField, e);
 | 
			
		||||
                            return Futures.immediateFailedFuture(e);
 | 
			
		||||
                        }
 | 
			
		||||
                    }).collect(Collectors.toList());
 | 
			
		||||
                    }).toList();
 | 
			
		||||
 | 
			
		||||
                    return Futures.transform(
 | 
			
		||||
                            Futures.allAsList(futures),
 | 
			
		||||
 | 
			
		||||
@ -58,20 +58,17 @@ public class BaseCalculatedFieldService extends AbstractEntityService implements
 | 
			
		||||
    @Override
 | 
			
		||||
    public CalculatedField save(CalculatedField calculatedField) {
 | 
			
		||||
        CalculatedField oldCalculatedField = calculatedFieldDataValidator.validate(calculatedField, CalculatedField::getTenantId);
 | 
			
		||||
 | 
			
		||||
        return doSave(calculatedField, oldCalculatedField);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public CalculatedField save(CalculatedField calculatedField, boolean doValidate) {
 | 
			
		||||
        CalculatedField oldCalculatedField = null;
 | 
			
		||||
 | 
			
		||||
        if (doValidate) {
 | 
			
		||||
            oldCalculatedField = calculatedFieldDataValidator.validate(calculatedField, CalculatedField::getTenantId);
 | 
			
		||||
        } else if (calculatedField.getId() != null) {
 | 
			
		||||
            oldCalculatedField = findById(calculatedField.getTenantId(), calculatedField.getId());
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return doSave(calculatedField, oldCalculatedField);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -106,7 +103,6 @@ public class BaseCalculatedFieldService extends AbstractEntityService implements
 | 
			
		||||
    public CalculatedField findByEntityIdAndName(EntityId entityId, String name) {
 | 
			
		||||
        log.trace("Executing findByEntityIdAndName [{}], calculatedFieldName[{}]", entityId, name);
 | 
			
		||||
        validateId(entityId.getId(), id -> INCORRECT_ENTITY_ID + id);
 | 
			
		||||
 | 
			
		||||
        return calculatedFieldDao.findByEntityIdAndName(entityId, name);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -524,7 +524,6 @@ public class EdgeServiceImpl extends AbstractCachedEntityService<EdgeCacheKey, E
 | 
			
		||||
            case ENTITY_VIEW:
 | 
			
		||||
            case DASHBOARD:
 | 
			
		||||
            case RULE_CHAIN:
 | 
			
		||||
            case CALCULATED_FIELD:
 | 
			
		||||
                return relatedEdgesService.findEdgeIdsByEntityId(tenantId, entityId, pageLink);
 | 
			
		||||
            case USER:
 | 
			
		||||
                User userById = userService.findUserById(tenantId, new UserId(entityId.getId()));
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user