Browse Source

Fixed rule chain relation. Fixed default edge removal

pull/2436/head
Volodymyr Babak 6 years ago
parent
commit
8416c206ff
  1. 2
      application/src/main/java/org/thingsboard/server/actors/tenant/TenantActor.java
  2. 12
      application/src/main/java/org/thingsboard/server/controller/EdgeController.java
  3. 18
      application/src/main/java/org/thingsboard/server/controller/RuleChainController.java
  4. 2
      common/dao-api/src/main/java/org/thingsboard/server/dao/edge/EdgeService.java
  5. 3
      common/data/src/main/java/org/thingsboard/server/common/data/relation/RelationTypeGroup.java
  6. 4
      dao/src/main/java/org/thingsboard/server/dao/edge/CassandraEdgeDao.java
  7. 14
      dao/src/main/java/org/thingsboard/server/dao/edge/EdgeServiceImpl.java
  8. 4
      dao/src/main/java/org/thingsboard/server/dao/rule/BaseRuleChainService.java
  9. 2
      dao/src/main/java/org/thingsboard/server/dao/rule/CassandraRuleChainDao.java
  10. 4
      dao/src/main/java/org/thingsboard/server/dao/sql/edge/JpaEdgeDao.java
  11. 2
      dao/src/main/java/org/thingsboard/server/dao/sql/rule/JpaRuleChainDao.java

2
application/src/main/java/org/thingsboard/server/actors/tenant/TenantActor.java

@ -206,7 +206,7 @@ public class TenantActor extends RuleChainManagerActor {
if (msg.getEntityId().getEntityType() == EntityType.RULE_CHAIN) {
RuleChain ruleChain = systemContext.getRuleChainService().
findRuleChainById(tenantId, new RuleChainId(msg.getEntityId().getId()));
if (ruleChain.getType().equals(RuleChainType.SYSTEM)) {
if (ruleChain != null && ruleChain.getType().equals(RuleChainType.SYSTEM)) {
visit(ruleChain, target);
}
}

12
application/src/main/java/org/thingsboard/server/controller/EdgeController.java

@ -15,6 +15,7 @@
*/
package org.thingsboard.server.controller;
import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.ListenableFuture;
import org.springframework.http.HttpStatus;
import org.springframework.security.access.prepost.PreAuthorize;
@ -92,15 +93,16 @@ public class EdgeController extends BaseController {
accessControlService.checkPermission(getCurrentUser(), Resource.EDGE, operation,
edge.getId(), edge);
Edge result = checkNotNull(edgeService.saveEdge(edge));
Edge savedEdge = checkNotNull(edgeService.saveEdge(edge));
if (created) {
ruleChainService.assignRuleChainToEdge(tenantId, defaultRootEdgeRuleChain.getId(), result.getId());
edgeService.setEdgeRootRuleChain(tenantId, result, defaultRootEdgeRuleChain.getId());
ruleChainService.assignRuleChainToEdge(tenantId, defaultRootEdgeRuleChain.getId(), savedEdge.getId());
edgeService.setEdgeRootRuleChain(tenantId, savedEdge, defaultRootEdgeRuleChain.getId());
edgeService.assignDefaultRuleChainsToEdge(tenantId, savedEdge.getId());
}
logEntityAction(result.getId(), result, null, created ? ActionType.ADDED : ActionType.UPDATED, null);
return result;
logEntityAction(savedEdge.getId(), savedEdge, null, created ? ActionType.ADDED : ActionType.UPDATED, null);
return savedEdge;
} catch (Exception e) {
logEntityAction(emptyId(EntityType.EDGE), edge,
null, edge.getId() == null ? ActionType.ADDED : ActionType.UPDATED, e);

18
application/src/main/java/org/thingsboard/server/controller/RuleChainController.java

@ -137,8 +137,10 @@ public class RuleChainController extends BaseController {
RuleChain savedRuleChain = checkNotNull(ruleChainService.saveRuleChain(ruleChain));
tbClusterService.onEntityStateChange(ruleChain.getTenantId(), savedRuleChain.getId(),
created ? ComponentLifecycleEvent.CREATED : ComponentLifecycleEvent.UPDATED);
if (RuleChainType.SYSTEM.equals(savedRuleChain.getType())) {
tbClusterService.onEntityStateChange(ruleChain.getTenantId(), savedRuleChain.getId(),
created ? ComponentLifecycleEvent.CREATED : ComponentLifecycleEvent.UPDATED);
}
logEntityAction(savedRuleChain.getId(), savedRuleChain,
null,
@ -210,7 +212,9 @@ public class RuleChainController extends BaseController {
RuleChain ruleChain = checkRuleChain(ruleChainMetaData.getRuleChainId(), Operation.WRITE);
RuleChainMetaData savedRuleChainMetaData = checkNotNull(ruleChainService.saveRuleChainMetaData(tenantId, ruleChainMetaData));
tbClusterService.onEntityStateChange(ruleChain.getTenantId(), ruleChain.getId(), ComponentLifecycleEvent.UPDATED);
if (RuleChainType.SYSTEM.equals(ruleChain.getType())) {
tbClusterService.onEntityStateChange(ruleChain.getTenantId(), ruleChain.getId(), ComponentLifecycleEvent.UPDATED);
}
logEntityAction(ruleChain.getId(), ruleChain,
null,
@ -266,10 +270,12 @@ public class RuleChainController extends BaseController {
referencingRuleChainIds.remove(ruleChain.getId());
referencingRuleChainIds.forEach(referencingRuleChainId ->
tbClusterService.onEntityStateChange(ruleChain.getTenantId(), referencingRuleChainId, ComponentLifecycleEvent.UPDATED));
if (RuleChainType.SYSTEM.equals(ruleChain.getType())) {
referencingRuleChainIds.forEach(referencingRuleChainId ->
tbClusterService.onEntityStateChange(ruleChain.getTenantId(), referencingRuleChainId, ComponentLifecycleEvent.UPDATED));
tbClusterService.onEntityStateChange(ruleChain.getTenantId(), ruleChain.getId(), ComponentLifecycleEvent.DELETED);
tbClusterService.onEntityStateChange(ruleChain.getTenantId(), ruleChain.getId(), ComponentLifecycleEvent.DELETED);
}
logEntityAction(ruleChainId, ruleChain,
null,

2
common/dao-api/src/main/java/org/thingsboard/server/dao/edge/EdgeService.java

@ -82,6 +82,8 @@ public interface EdgeService {
Edge setEdgeRootRuleChain(TenantId tenantId, Edge edge, RuleChainId ruleChainId) throws IOException;
void assignDefaultRuleChainsToEdge(TenantId tenantId, EdgeId edgeId);
ListenableFuture<TimePageData<Edge>> findEdgesByTenantIdAndRuleChainId(TenantId tenantId, RuleChainId ruleChainId, TimePageLink pageLink);
ListenableFuture<TimePageData<Edge>> findEdgesByTenantIdAndDashboardId(TenantId tenantId, DashboardId dashboardId, TimePageLink pageLink);

3
common/data/src/main/java/org/thingsboard/server/common/data/relation/RelationTypeGroup.java

@ -22,6 +22,7 @@ public enum RelationTypeGroup {
DASHBOARD,
RULE_CHAIN,
RULE_NODE,
EDGE
EDGE,
EDGE_DEFAULT_RULE_CHAIN
}

4
dao/src/main/java/org/thingsboard/server/dao/edge/CassandraEdgeDao.java

@ -116,7 +116,7 @@ public class CassandraEdgeDao extends CassandraAbstractSearchTextDao<EdgeEntity,
return Futures.transformAsync(relations, input -> {
List<ListenableFuture<Edge>> edgeFutures = new ArrayList<>(input.size());
for (EntityRelation relation : input) {
edgeFutures.add(findByIdAsync(new TenantId(tenantId), relation.getTo().getId()));
edgeFutures.add(findByIdAsync(new TenantId(tenantId), relation.getFrom().getId()));
}
return Futures.successfulAsList(edgeFutures);
}, MoreExecutors.directExecutor());
@ -129,7 +129,7 @@ public class CassandraEdgeDao extends CassandraAbstractSearchTextDao<EdgeEntity,
return Futures.transformAsync(relations, input -> {
List<ListenableFuture<Edge>> edgeFutures = new ArrayList<>(input.size());
for (EntityRelation relation : input) {
edgeFutures.add(findByIdAsync(new TenantId(tenantId), relation.getTo().getId()));
edgeFutures.add(findByIdAsync(new TenantId(tenantId), relation.getFrom().getId()));
}
return Futures.successfulAsList(edgeFutures);
}, MoreExecutors.directExecutor());

14
dao/src/main/java/org/thingsboard/server/dao/edge/EdgeServiceImpl.java

@ -665,6 +665,20 @@ public class EdgeServiceImpl extends AbstractEntityService implements EdgeServic
return savedEdge;
}
@Override
public void assignDefaultRuleChainsToEdge(TenantId tenantId, EdgeId edgeId) {
log.trace("Executing assignDefaultRuleChainsToEdge, tenantId [{}], edgeId [{}]", tenantId, edgeId);
ListenableFuture<List<RuleChain>> future = ruleChainService.findDefaultEdgeRuleChainsByTenantId(tenantId);
Futures.transform(future, ruleChains -> {
if (ruleChains != null && !ruleChains.isEmpty()) {
for (RuleChain ruleChain : ruleChains) {
ruleChainService.assignRuleChainToEdge(tenantId, ruleChain.getId(), edgeId);
}
}
return null;
}, MoreExecutors.directExecutor());
}
@Override
public ListenableFuture<TimePageData<Edge>> findEdgesByTenantIdAndRuleChainId(TenantId tenantId, RuleChainId ruleChainId, TimePageLink pageLink) {
log.trace("Executing findEdgesByTenantIdAndRuleChainId, tenantId [{}], ruleChainId [{}], pageLink [{}]", tenantId, ruleChainId, pageLink);

4
dao/src/main/java/org/thingsboard/server/dao/rule/BaseRuleChainService.java

@ -507,7 +507,7 @@ public class BaseRuleChainService extends AbstractEntityService implements RuleC
public boolean addDefaultEdgeRuleChain(TenantId tenantId, RuleChainId ruleChainId) {
try {
createRelation(tenantId, new EntityRelation(tenantId, ruleChainId,
EntityRelation.CONTAINS_TYPE, RelationTypeGroup.EDGE));
EntityRelation.CONTAINS_TYPE, RelationTypeGroup.EDGE_DEFAULT_RULE_CHAIN));
return true;
} catch (ExecutionException | InterruptedException e) {
log.warn("Failed to add default edge rule chain, ruleChainId: [{}]", ruleChainId, e);
@ -519,7 +519,7 @@ public class BaseRuleChainService extends AbstractEntityService implements RuleC
public boolean removeDefaultEdgeRuleChain(TenantId tenantId, RuleChainId ruleChainId) {
try {
deleteRelation(tenantId, new EntityRelation(tenantId, ruleChainId,
EntityRelation.CONTAINS_TYPE, RelationTypeGroup.EDGE));
EntityRelation.CONTAINS_TYPE, RelationTypeGroup.EDGE_DEFAULT_RULE_CHAIN));
return true;
} catch (ExecutionException | InterruptedException e) {
log.warn("Failed to remove default edge rule chain, ruleChainId: [{}]", ruleChainId, e);

2
dao/src/main/java/org/thingsboard/server/dao/rule/CassandraRuleChainDao.java

@ -109,7 +109,7 @@ public class CassandraRuleChainDao extends CassandraAbstractSearchTextDao<RuleCh
@Override
public ListenableFuture<List<RuleChain>> findDefaultEdgeRuleChainsByTenantId(UUID tenantId) {
log.debug("Try to find default edge rule chains by tenantId [{}]", tenantId);
ListenableFuture<List<EntityRelation>> relations = relationDao.findAllByFromAndType(new TenantId(tenantId), new TenantId(tenantId), EntityRelation.CONTAINS_TYPE, RelationTypeGroup.EDGE);
ListenableFuture<List<EntityRelation>> relations = relationDao.findAllByFromAndType(new TenantId(tenantId), new TenantId(tenantId), EntityRelation.CONTAINS_TYPE, RelationTypeGroup.EDGE_DEFAULT_RULE_CHAIN);
return Futures.transformAsync(relations, input -> {
List<ListenableFuture<RuleChain>> ruleChainFutures = new ArrayList<>(input.size());
for (EntityRelation relation : input) {

4
dao/src/main/java/org/thingsboard/server/dao/sql/edge/JpaEdgeDao.java

@ -154,7 +154,7 @@ public class JpaEdgeDao extends JpaAbstractSearchTextDao<EdgeEntity, Edge> imple
return Futures.transformAsync(relations, input -> {
List<ListenableFuture<Edge>> edgeFutures = new ArrayList<>(input.size());
for (EntityRelation relation : input) {
edgeFutures.add(findByIdAsync(new TenantId(tenantId), relation.getTo().getId()));
edgeFutures.add(findByIdAsync(new TenantId(tenantId), relation.getFrom().getId()));
}
return Futures.successfulAsList(edgeFutures);
}, MoreExecutors.directExecutor());
@ -167,7 +167,7 @@ public class JpaEdgeDao extends JpaAbstractSearchTextDao<EdgeEntity, Edge> imple
return Futures.transformAsync(relations, input -> {
List<ListenableFuture<Edge>> edgeFutures = new ArrayList<>(input.size());
for (EntityRelation relation : input) {
edgeFutures.add(findByIdAsync(new TenantId(tenantId), relation.getTo().getId()));
edgeFutures.add(findByIdAsync(new TenantId(tenantId), relation.getFrom().getId()));
}
return Futures.successfulAsList(edgeFutures);
}, MoreExecutors.directExecutor());

2
dao/src/main/java/org/thingsboard/server/dao/sql/rule/JpaRuleChainDao.java

@ -109,7 +109,7 @@ public class JpaRuleChainDao extends JpaAbstractSearchTextDao<RuleChainEntity, R
@Override
public ListenableFuture<List<RuleChain>> findDefaultEdgeRuleChainsByTenantId(UUID tenantId) {
log.debug("Try to find default edge rule chains by tenantId [{}]", tenantId);
ListenableFuture<List<EntityRelation>> relations = relationDao.findAllByFromAndType(new TenantId(tenantId), new TenantId(tenantId), EntityRelation.CONTAINS_TYPE, RelationTypeGroup.EDGE);
ListenableFuture<List<EntityRelation>> relations = relationDao.findAllByFromAndType(new TenantId(tenantId), new TenantId(tenantId), EntityRelation.CONTAINS_TYPE, RelationTypeGroup.EDGE_DEFAULT_RULE_CHAIN);
return Futures.transformAsync(relations, input -> {
List<ListenableFuture<RuleChain>> ruleChainsFutures = new ArrayList<>(input.size());
for (EntityRelation relation : input) {

Loading…
Cancel
Save