added TbEdgeService
This commit is contained in:
		
							parent
							
								
									8cde2ac848
								
							
						
					
					
						commit
						1bd4e6e3bf
					
				@ -550,8 +550,7 @@ public class AssetController extends BaseController {
 | 
			
		||||
    @PostMapping("/asset/bulk_import")
 | 
			
		||||
    public BulkImportResult<Asset> processAssetsBulkImport(@RequestBody BulkImportRequest request) throws Exception {
 | 
			
		||||
        SecurityUser user = getCurrentUser();
 | 
			
		||||
        return assetBulkImportService.processBulkImport(request, user, importedAssetInfo -> {
 | 
			
		||||
        });
 | 
			
		||||
        return assetBulkImportService.processBulkImport(request, user);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -794,8 +794,7 @@ public class DeviceController extends BaseController {
 | 
			
		||||
    public BulkImportResult<Device> processDevicesBulkImport(@RequestBody BulkImportRequest request) throws
 | 
			
		||||
            Exception {
 | 
			
		||||
        SecurityUser user = getCurrentUser();
 | 
			
		||||
        return deviceBulkImportService.processBulkImport(request, user, importedDeviceInfo -> {
 | 
			
		||||
        });
 | 
			
		||||
        return deviceBulkImportService.processBulkImport(request, user);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -34,10 +34,7 @@ import org.springframework.web.bind.annotation.ResponseStatus;
 | 
			
		||||
import org.springframework.web.bind.annotation.RestController;
 | 
			
		||||
import org.thingsboard.server.common.data.Customer;
 | 
			
		||||
import org.thingsboard.server.common.data.EntitySubtype;
 | 
			
		||||
import org.thingsboard.server.common.data.EntityType;
 | 
			
		||||
import org.thingsboard.server.common.data.audit.ActionType;
 | 
			
		||||
import org.thingsboard.server.common.data.edge.Edge;
 | 
			
		||||
import org.thingsboard.server.common.data.edge.EdgeEventActionType;
 | 
			
		||||
import org.thingsboard.server.common.data.edge.EdgeInfo;
 | 
			
		||||
import org.thingsboard.server.common.data.edge.EdgeSearchQuery;
 | 
			
		||||
import org.thingsboard.server.common.data.exception.ThingsboardErrorCode;
 | 
			
		||||
@ -48,20 +45,19 @@ import org.thingsboard.server.common.data.id.RuleChainId;
 | 
			
		||||
import org.thingsboard.server.common.data.id.TenantId;
 | 
			
		||||
import org.thingsboard.server.common.data.page.PageData;
 | 
			
		||||
import org.thingsboard.server.common.data.page.PageLink;
 | 
			
		||||
import org.thingsboard.server.common.data.plugin.ComponentLifecycleEvent;
 | 
			
		||||
import org.thingsboard.server.common.data.rule.RuleChain;
 | 
			
		||||
import org.thingsboard.server.dao.exception.DataValidationException;
 | 
			
		||||
import org.thingsboard.server.dao.exception.IncorrectParameterException;
 | 
			
		||||
import org.thingsboard.server.dao.model.ModelConstants;
 | 
			
		||||
import org.thingsboard.server.queue.util.TbCoreComponent;
 | 
			
		||||
import org.thingsboard.server.service.edge.EdgeBulkImportService;
 | 
			
		||||
import org.thingsboard.server.service.entitiy.edge.TbEdgeService;
 | 
			
		||||
import org.thingsboard.server.service.importing.BulkImportRequest;
 | 
			
		||||
import org.thingsboard.server.service.importing.BulkImportResult;
 | 
			
		||||
import org.thingsboard.server.service.security.model.SecurityUser;
 | 
			
		||||
import org.thingsboard.server.service.security.permission.Operation;
 | 
			
		||||
import org.thingsboard.server.service.security.permission.Resource;
 | 
			
		||||
 | 
			
		||||
import java.io.IOException;
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.stream.Collectors;
 | 
			
		||||
@ -90,6 +86,7 @@ import static org.thingsboard.server.controller.ControllerConstants.UUID_WIKI_LI
 | 
			
		||||
@RequiredArgsConstructor
 | 
			
		||||
public class EdgeController extends BaseController {
 | 
			
		||||
    private final EdgeBulkImportService edgeBulkImportService;
 | 
			
		||||
    private final TbEdgeService tbEdgeService;
 | 
			
		||||
 | 
			
		||||
    public static final String EDGE_ID = "edgeId";
 | 
			
		||||
    public static final String EDGE_SECURITY_CHECK = "If the user has the authority of 'Tenant Administrator', the server checks that the edge is owned by the same tenant. " +
 | 
			
		||||
@ -144,84 +141,43 @@ public class EdgeController extends BaseController {
 | 
			
		||||
                    "Specify existing Edge id to update the edge. " +
 | 
			
		||||
                    "Referencing non-existing Edge Id will cause 'Not Found' error." +
 | 
			
		||||
                    "\n\nEdge name is unique in the scope of tenant. Use unique identifiers like MAC or IMEI for the edge names and non-unique 'label' field for user-friendly visualization purposes."
 | 
			
		||||
            + TENANT_AUTHORITY_PARAGRAPH,
 | 
			
		||||
                    + TENANT_AUTHORITY_PARAGRAPH,
 | 
			
		||||
            produces = MediaType.APPLICATION_JSON_VALUE)
 | 
			
		||||
    @PreAuthorize("hasAuthority('TENANT_ADMIN')")
 | 
			
		||||
    @RequestMapping(value = "/edge", method = RequestMethod.POST)
 | 
			
		||||
    @ResponseBody
 | 
			
		||||
    public Edge saveEdge(@ApiParam(value = "A JSON value representing the edge.", required = true)
 | 
			
		||||
                         @RequestBody Edge edge) throws ThingsboardException {
 | 
			
		||||
        try {
 | 
			
		||||
            TenantId tenantId = getCurrentUser().getTenantId();
 | 
			
		||||
            edge.setTenantId(tenantId);
 | 
			
		||||
            boolean created = edge.getId() == null;
 | 
			
		||||
        TenantId tenantId = getCurrentUser().getTenantId();
 | 
			
		||||
        edge.setTenantId(tenantId);
 | 
			
		||||
        boolean created = edge.getId() == null;
 | 
			
		||||
 | 
			
		||||
            RuleChain edgeTemplateRootRuleChain = null;
 | 
			
		||||
            if (created) {
 | 
			
		||||
                edgeTemplateRootRuleChain = ruleChainService.getEdgeTemplateRootRuleChain(tenantId);
 | 
			
		||||
                if (edgeTemplateRootRuleChain == null) {
 | 
			
		||||
                    throw new DataValidationException("Root edge rule chain is not available!");
 | 
			
		||||
                }
 | 
			
		||||
        RuleChain edgeTemplateRootRuleChain = null;
 | 
			
		||||
        if (created) {
 | 
			
		||||
            edgeTemplateRootRuleChain = ruleChainService.getEdgeTemplateRootRuleChain(tenantId);
 | 
			
		||||
            if (edgeTemplateRootRuleChain == null) {
 | 
			
		||||
                throw new DataValidationException("Root edge rule chain is not available!");
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            Operation operation = created ? Operation.CREATE : Operation.WRITE;
 | 
			
		||||
 | 
			
		||||
            accessControlService.checkPermission(getCurrentUser(), Resource.EDGE, operation,
 | 
			
		||||
                    edge.getId(), edge);
 | 
			
		||||
 | 
			
		||||
            Edge savedEdge = checkNotNull(edgeService.saveEdge(edge));
 | 
			
		||||
            onEdgeCreatedOrUpdated(tenantId, savedEdge, edgeTemplateRootRuleChain, !created, getCurrentUser());
 | 
			
		||||
 | 
			
		||||
            return savedEdge;
 | 
			
		||||
        } catch (Exception e) {
 | 
			
		||||
            logEntityAction(emptyId(EntityType.EDGE), edge,
 | 
			
		||||
                    null, edge.getId() == null ? ActionType.ADDED : ActionType.UPDATED, e);
 | 
			
		||||
            throw handleException(e);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void onEdgeCreatedOrUpdated(TenantId tenantId, Edge edge, RuleChain edgeTemplateRootRuleChain, boolean updated, SecurityUser user) throws IOException, ThingsboardException {
 | 
			
		||||
        if (!updated) {
 | 
			
		||||
            ruleChainService.assignRuleChainToEdge(tenantId, edgeTemplateRootRuleChain.getId(), edge.getId());
 | 
			
		||||
            edgeNotificationService.setEdgeRootRuleChain(tenantId, edge, edgeTemplateRootRuleChain.getId());
 | 
			
		||||
            edgeService.assignDefaultRuleChainsToEdge(tenantId, edge.getId());
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        tbClusterService.broadcastEntityStateChangeEvent(edge.getTenantId(), edge.getId(),
 | 
			
		||||
                updated ? ComponentLifecycleEvent.UPDATED : ComponentLifecycleEvent.CREATED);
 | 
			
		||||
        Operation operation = created ? Operation.CREATE : Operation.WRITE;
 | 
			
		||||
 | 
			
		||||
        logEntityAction(user, edge.getId(), edge, null, updated ? ActionType.UPDATED : ActionType.ADDED, null);
 | 
			
		||||
        accessControlService.checkPermission(getCurrentUser(), Resource.EDGE, operation, edge.getId(), edge);
 | 
			
		||||
 | 
			
		||||
        return tbEdgeService.saveEdge(edge, edgeTemplateRootRuleChain, getCurrentUser());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @ApiOperation(value = "Delete edge (deleteEdge)",
 | 
			
		||||
            notes = "Deletes the edge. Referencing non-existing edge Id will cause an error."+ TENANT_AUTHORITY_PARAGRAPH)
 | 
			
		||||
            notes = "Deletes the edge. Referencing non-existing edge Id will cause an error." + TENANT_AUTHORITY_PARAGRAPH)
 | 
			
		||||
    @PreAuthorize("hasAuthority('TENANT_ADMIN')")
 | 
			
		||||
    @RequestMapping(value = "/edge/{edgeId}", method = RequestMethod.DELETE)
 | 
			
		||||
    @ResponseStatus(value = HttpStatus.OK)
 | 
			
		||||
    public void deleteEdge(@ApiParam(value = EDGE_ID_PARAM_DESCRIPTION, required = true)
 | 
			
		||||
                           @PathVariable(EDGE_ID) String strEdgeId) throws ThingsboardException {
 | 
			
		||||
        checkParameter(EDGE_ID, strEdgeId);
 | 
			
		||||
        try {
 | 
			
		||||
            EdgeId edgeId = new EdgeId(toUUID(strEdgeId));
 | 
			
		||||
            Edge edge = checkEdgeId(edgeId, Operation.DELETE);
 | 
			
		||||
            edgeService.deleteEdge(getTenantId(), edgeId);
 | 
			
		||||
 | 
			
		||||
            tbClusterService.broadcastEntityStateChangeEvent(getTenantId(), edgeId,
 | 
			
		||||
                    ComponentLifecycleEvent.DELETED);
 | 
			
		||||
 | 
			
		||||
            logEntityAction(edgeId, edge,
 | 
			
		||||
                    null,
 | 
			
		||||
                    ActionType.DELETED, null, strEdgeId);
 | 
			
		||||
 | 
			
		||||
        } catch (Exception e) {
 | 
			
		||||
 | 
			
		||||
            logEntityAction(emptyId(EntityType.EDGE),
 | 
			
		||||
                    null,
 | 
			
		||||
                    null,
 | 
			
		||||
                    ActionType.DELETED, e, strEdgeId);
 | 
			
		||||
 | 
			
		||||
            throw handleException(e);
 | 
			
		||||
        }
 | 
			
		||||
        EdgeId edgeId = new EdgeId(toUUID(strEdgeId));
 | 
			
		||||
        Edge edge = checkEdgeId(edgeId, Operation.DELETE);
 | 
			
		||||
        tbEdgeService.deleteEdge(edge, getCurrentUser());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @ApiOperation(value = "Get Tenant Edges (getEdges)",
 | 
			
		||||
@ -261,32 +217,11 @@ public class EdgeController extends BaseController {
 | 
			
		||||
                                     @PathVariable(EDGE_ID) String strEdgeId) throws ThingsboardException {
 | 
			
		||||
        checkParameter("customerId", strCustomerId);
 | 
			
		||||
        checkParameter(EDGE_ID, strEdgeId);
 | 
			
		||||
        try {
 | 
			
		||||
            CustomerId customerId = new CustomerId(toUUID(strCustomerId));
 | 
			
		||||
            Customer customer = checkCustomerId(customerId, Operation.READ);
 | 
			
		||||
 | 
			
		||||
            EdgeId edgeId = new EdgeId(toUUID(strEdgeId));
 | 
			
		||||
            checkEdgeId(edgeId, Operation.ASSIGN_TO_CUSTOMER);
 | 
			
		||||
 | 
			
		||||
            Edge savedEdge = checkNotNull(edgeService.assignEdgeToCustomer(getCurrentUser().getTenantId(), edgeId, customerId));
 | 
			
		||||
 | 
			
		||||
            tbClusterService.broadcastEntityStateChangeEvent(getTenantId(), edgeId,
 | 
			
		||||
                    ComponentLifecycleEvent.UPDATED);
 | 
			
		||||
 | 
			
		||||
            logEntityAction(edgeId, savedEdge,
 | 
			
		||||
                    savedEdge.getCustomerId(),
 | 
			
		||||
                    ActionType.ASSIGNED_TO_CUSTOMER, null, strEdgeId, strCustomerId, customer.getName());
 | 
			
		||||
 | 
			
		||||
            sendEntityAssignToCustomerNotificationMsg(savedEdge.getTenantId(), savedEdge.getId(),
 | 
			
		||||
                    customerId, EdgeEventActionType.ASSIGNED_TO_CUSTOMER);
 | 
			
		||||
 | 
			
		||||
            return savedEdge;
 | 
			
		||||
        } catch (Exception e) {
 | 
			
		||||
            logEntityAction(emptyId(EntityType.EDGE), null,
 | 
			
		||||
                    null,
 | 
			
		||||
                    ActionType.ASSIGNED_TO_CUSTOMER, e, strEdgeId, strCustomerId);
 | 
			
		||||
            throw handleException(e);
 | 
			
		||||
        }
 | 
			
		||||
        CustomerId customerId = new CustomerId(toUUID(strCustomerId));
 | 
			
		||||
        Customer customer = checkCustomerId(customerId, Operation.READ);
 | 
			
		||||
        EdgeId edgeId = new EdgeId(toUUID(strEdgeId));
 | 
			
		||||
        checkEdgeId(edgeId, Operation.ASSIGN_TO_CUSTOMER);
 | 
			
		||||
        return tbEdgeService.assignEdgeToCustomer(getTenantId(), edgeId, customer, getCurrentUser());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @ApiOperation(value = "Unassign edge from customer (unassignEdgeFromCustomer)",
 | 
			
		||||
@ -298,33 +233,14 @@ public class EdgeController extends BaseController {
 | 
			
		||||
    public Edge unassignEdgeFromCustomer(@ApiParam(value = EDGE_ID_PARAM_DESCRIPTION, required = true)
 | 
			
		||||
                                         @PathVariable(EDGE_ID) String strEdgeId) throws ThingsboardException {
 | 
			
		||||
        checkParameter(EDGE_ID, strEdgeId);
 | 
			
		||||
        try {
 | 
			
		||||
            EdgeId edgeId = new EdgeId(toUUID(strEdgeId));
 | 
			
		||||
            Edge edge = checkEdgeId(edgeId, Operation.UNASSIGN_FROM_CUSTOMER);
 | 
			
		||||
            if (edge.getCustomerId() == null || edge.getCustomerId().getId().equals(ModelConstants.NULL_UUID)) {
 | 
			
		||||
                throw new IncorrectParameterException("Edge isn't assigned to any customer!");
 | 
			
		||||
            }
 | 
			
		||||
            Customer customer = checkCustomerId(edge.getCustomerId(), Operation.READ);
 | 
			
		||||
 | 
			
		||||
            Edge savedEdge = checkNotNull(edgeService.unassignEdgeFromCustomer(getCurrentUser().getTenantId(), edgeId));
 | 
			
		||||
 | 
			
		||||
            tbClusterService.broadcastEntityStateChangeEvent(getTenantId(), edgeId,
 | 
			
		||||
                    ComponentLifecycleEvent.UPDATED);
 | 
			
		||||
 | 
			
		||||
            logEntityAction(edgeId, edge,
 | 
			
		||||
                    edge.getCustomerId(),
 | 
			
		||||
                    ActionType.UNASSIGNED_FROM_CUSTOMER, null, strEdgeId, customer.getId().toString(), customer.getName());
 | 
			
		||||
 | 
			
		||||
            sendEntityAssignToCustomerNotificationMsg(savedEdge.getTenantId(), savedEdge.getId(),
 | 
			
		||||
                    customer.getId(), EdgeEventActionType.UNASSIGNED_FROM_CUSTOMER);
 | 
			
		||||
 | 
			
		||||
            return savedEdge;
 | 
			
		||||
        } catch (Exception e) {
 | 
			
		||||
            logEntityAction(emptyId(EntityType.EDGE), null,
 | 
			
		||||
                    null,
 | 
			
		||||
                    ActionType.UNASSIGNED_FROM_CUSTOMER, e, strEdgeId);
 | 
			
		||||
            throw handleException(e);
 | 
			
		||||
        EdgeId edgeId = new EdgeId(toUUID(strEdgeId));
 | 
			
		||||
        Edge edge = checkEdgeId(edgeId, Operation.UNASSIGN_FROM_CUSTOMER);
 | 
			
		||||
        if (edge.getCustomerId() == null || edge.getCustomerId().getId().equals(ModelConstants.NULL_UUID)) {
 | 
			
		||||
            throw new IncorrectParameterException("Edge isn't assigned to any customer!");
 | 
			
		||||
        }
 | 
			
		||||
        Customer customer = checkCustomerId(edge.getCustomerId(), Operation.READ);
 | 
			
		||||
 | 
			
		||||
        return tbEdgeService.unassignEdgeFromCustomer(edge, customer, getCurrentUser());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @ApiOperation(value = "Make edge publicly available (assignEdgeToPublicCustomer)",
 | 
			
		||||
@ -338,26 +254,9 @@ public class EdgeController extends BaseController {
 | 
			
		||||
    public Edge assignEdgeToPublicCustomer(@ApiParam(value = EDGE_ID_PARAM_DESCRIPTION, required = true)
 | 
			
		||||
                                           @PathVariable(EDGE_ID) String strEdgeId) throws ThingsboardException {
 | 
			
		||||
        checkParameter(EDGE_ID, strEdgeId);
 | 
			
		||||
        try {
 | 
			
		||||
            EdgeId edgeId = new EdgeId(toUUID(strEdgeId));
 | 
			
		||||
            Edge edge = checkEdgeId(edgeId, Operation.ASSIGN_TO_CUSTOMER);
 | 
			
		||||
            Customer publicCustomer = customerService.findOrCreatePublicCustomer(edge.getTenantId());
 | 
			
		||||
            Edge savedEdge = checkNotNull(edgeService.assignEdgeToCustomer(getCurrentUser().getTenantId(), edgeId, publicCustomer.getId()));
 | 
			
		||||
 | 
			
		||||
            tbClusterService.broadcastEntityStateChangeEvent(getTenantId(), edgeId,
 | 
			
		||||
                    ComponentLifecycleEvent.UPDATED);
 | 
			
		||||
 | 
			
		||||
            logEntityAction(edgeId, savedEdge,
 | 
			
		||||
                    savedEdge.getCustomerId(),
 | 
			
		||||
                    ActionType.ASSIGNED_TO_CUSTOMER, null, strEdgeId, publicCustomer.getId().toString(), publicCustomer.getName());
 | 
			
		||||
 | 
			
		||||
            return savedEdge;
 | 
			
		||||
        } catch (Exception e) {
 | 
			
		||||
            logEntityAction(emptyId(EntityType.EDGE), null,
 | 
			
		||||
                    null,
 | 
			
		||||
                    ActionType.ASSIGNED_TO_CUSTOMER, e, strEdgeId);
 | 
			
		||||
            throw handleException(e);
 | 
			
		||||
        }
 | 
			
		||||
        EdgeId edgeId = new EdgeId(toUUID(strEdgeId));
 | 
			
		||||
        checkEdgeId(edgeId, Operation.ASSIGN_TO_CUSTOMER);
 | 
			
		||||
        return tbEdgeService.assignEdgeToPublicCustomer(getTenantId(), edgeId, getCurrentUser());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @ApiOperation(value = "Get Tenant Edges (getTenantEdges)",
 | 
			
		||||
@ -455,29 +354,12 @@ public class EdgeController extends BaseController {
 | 
			
		||||
                                     @PathVariable("ruleChainId") String strRuleChainId) throws ThingsboardException {
 | 
			
		||||
        checkParameter(EDGE_ID, strEdgeId);
 | 
			
		||||
        checkParameter("ruleChainId", strRuleChainId);
 | 
			
		||||
        try {
 | 
			
		||||
            RuleChainId ruleChainId = new RuleChainId(toUUID(strRuleChainId));
 | 
			
		||||
            checkRuleChain(ruleChainId, Operation.WRITE);
 | 
			
		||||
 | 
			
		||||
            EdgeId edgeId = new EdgeId(toUUID(strEdgeId));
 | 
			
		||||
            Edge edge = checkEdgeId(edgeId, Operation.WRITE);
 | 
			
		||||
            accessControlService.checkPermission(getCurrentUser(), Resource.EDGE, Operation.WRITE,
 | 
			
		||||
                    edge.getId(), edge);
 | 
			
		||||
 | 
			
		||||
            Edge updatedEdge = edgeNotificationService.setEdgeRootRuleChain(getTenantId(), edge, ruleChainId);
 | 
			
		||||
 | 
			
		||||
            tbClusterService.broadcastEntityStateChangeEvent(updatedEdge.getTenantId(), updatedEdge.getId(), ComponentLifecycleEvent.UPDATED);
 | 
			
		||||
 | 
			
		||||
            logEntityAction(updatedEdge.getId(), updatedEdge, null, ActionType.UPDATED, null);
 | 
			
		||||
 | 
			
		||||
            return updatedEdge;
 | 
			
		||||
        } catch (Exception e) {
 | 
			
		||||
            logEntityAction(emptyId(EntityType.EDGE),
 | 
			
		||||
                    null,
 | 
			
		||||
                    null,
 | 
			
		||||
                    ActionType.UPDATED, e, strEdgeId);
 | 
			
		||||
            throw handleException(e);
 | 
			
		||||
        }
 | 
			
		||||
        RuleChainId ruleChainId = new RuleChainId(toUUID(strRuleChainId));
 | 
			
		||||
        checkRuleChain(ruleChainId, Operation.WRITE);
 | 
			
		||||
        EdgeId edgeId = new EdgeId(toUUID(strEdgeId));
 | 
			
		||||
        Edge edge = checkEdgeId(edgeId, Operation.WRITE);
 | 
			
		||||
        accessControlService.checkPermission(getCurrentUser(), Resource.EDGE, Operation.WRITE, edge.getId(), edge);
 | 
			
		||||
        return tbEdgeService.setEdgeRootRuleChain(edge, ruleChainId, getCurrentUser());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @ApiOperation(value = "Get Customer Edges (getCustomerEdges)",
 | 
			
		||||
@ -693,12 +575,6 @@ public class EdgeController extends BaseController {
 | 
			
		||||
            throw new DataValidationException("Root edge rule chain is not available!");
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return edgeBulkImportService.processBulkImport(request, user, importedAssetInfo -> {
 | 
			
		||||
            try {
 | 
			
		||||
                onEdgeCreatedOrUpdated(user.getTenantId(), importedAssetInfo.getEntity(), edgeTemplateRootRuleChain, importedAssetInfo.isUpdated(), user);
 | 
			
		||||
            } catch (Exception e) {
 | 
			
		||||
                throw new RuntimeException(e);
 | 
			
		||||
            }
 | 
			
		||||
        });
 | 
			
		||||
        return edgeBulkImportService.processBulkImport(request, user);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -18,13 +18,17 @@ package org.thingsboard.server.service.edge;
 | 
			
		||||
import com.fasterxml.jackson.databind.node.ObjectNode;
 | 
			
		||||
import com.fasterxml.jackson.databind.node.TextNode;
 | 
			
		||||
import lombok.RequiredArgsConstructor;
 | 
			
		||||
import lombok.SneakyThrows;
 | 
			
		||||
import org.springframework.stereotype.Service;
 | 
			
		||||
import org.thingsboard.common.util.JacksonUtil;
 | 
			
		||||
import org.thingsboard.server.common.data.EntityType;
 | 
			
		||||
import org.thingsboard.server.common.data.edge.Edge;
 | 
			
		||||
import org.thingsboard.server.common.data.id.TenantId;
 | 
			
		||||
import org.thingsboard.server.common.data.rule.RuleChain;
 | 
			
		||||
import org.thingsboard.server.dao.edge.EdgeService;
 | 
			
		||||
import org.thingsboard.server.dao.rule.RuleChainService;
 | 
			
		||||
import org.thingsboard.server.queue.util.TbCoreComponent;
 | 
			
		||||
import org.thingsboard.server.service.entitiy.edge.TbEdgeService;
 | 
			
		||||
import org.thingsboard.server.service.importing.AbstractBulkImportService;
 | 
			
		||||
import org.thingsboard.server.service.importing.BulkImportColumnType;
 | 
			
		||||
import org.thingsboard.server.service.security.model.SecurityUser;
 | 
			
		||||
@ -37,6 +41,8 @@ import java.util.Optional;
 | 
			
		||||
@RequiredArgsConstructor
 | 
			
		||||
public class EdgeBulkImportService extends AbstractBulkImportService<Edge> {
 | 
			
		||||
    private final EdgeService edgeService;
 | 
			
		||||
    private final TbEdgeService tbEdgeService;
 | 
			
		||||
    private final RuleChainService ruleChainService;
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    protected void setEntityFields(Edge entity, Map<BulkImportColumnType, String> fields) {
 | 
			
		||||
@ -66,9 +72,11 @@ public class EdgeBulkImportService extends AbstractBulkImportService<Edge> {
 | 
			
		||||
        entity.setAdditionalInfo(additionalInfo);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @SneakyThrows
 | 
			
		||||
    @Override
 | 
			
		||||
    protected Edge saveEntity(SecurityUser user, Edge entity, Map<BulkImportColumnType, String> fields) {
 | 
			
		||||
        return edgeService.saveEdge(entity);
 | 
			
		||||
        RuleChain edgeTemplateRootRuleChain = ruleChainService.getEdgeTemplateRootRuleChain(user.getTenantId());
 | 
			
		||||
        return tbEdgeService.saveEdge(entity, edgeTemplateRootRuleChain, user);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
 | 
			
		||||
@ -50,9 +50,11 @@ import org.thingsboard.server.dao.edge.EdgeService;
 | 
			
		||||
import org.thingsboard.server.dao.exception.DataValidationException;
 | 
			
		||||
import org.thingsboard.server.dao.exception.IncorrectParameterException;
 | 
			
		||||
import org.thingsboard.server.dao.model.ModelConstants;
 | 
			
		||||
import org.thingsboard.server.dao.rule.RuleChainService;
 | 
			
		||||
import org.thingsboard.server.dao.tenant.TbTenantProfileCache;
 | 
			
		||||
import org.thingsboard.server.dao.tenant.TenantService;
 | 
			
		||||
import org.thingsboard.server.service.action.EntityActionService;
 | 
			
		||||
import org.thingsboard.server.service.edge.EdgeNotificationService;
 | 
			
		||||
import org.thingsboard.server.service.executors.DbCallbackExecutorService;
 | 
			
		||||
 | 
			
		||||
import javax.mail.MessagingException;
 | 
			
		||||
@ -102,6 +104,10 @@ public abstract class AbstractTbEntityService {
 | 
			
		||||
    protected ClaimDevicesService claimDevicesService;
 | 
			
		||||
    @Autowired
 | 
			
		||||
    protected TbTenantProfileCache tenantProfileCache;
 | 
			
		||||
    @Autowired
 | 
			
		||||
    protected RuleChainService ruleChainService;
 | 
			
		||||
    @Autowired
 | 
			
		||||
    protected EdgeNotificationService edgeNotificationService;
 | 
			
		||||
 | 
			
		||||
    protected ListenableFuture<Void> removeAlarmsByEntityId(TenantId tenantId, EntityId entityId) {
 | 
			
		||||
        ListenableFuture<PageData<AlarmInfo>> alarmsFuture =
 | 
			
		||||
 | 
			
		||||
@ -28,6 +28,7 @@ import org.thingsboard.server.common.data.HasName;
 | 
			
		||||
import org.thingsboard.server.common.data.Tenant;
 | 
			
		||||
import org.thingsboard.server.common.data.asset.Asset;
 | 
			
		||||
import org.thingsboard.server.common.data.audit.ActionType;
 | 
			
		||||
import org.thingsboard.server.common.data.edge.Edge;
 | 
			
		||||
import org.thingsboard.server.common.data.edge.EdgeEventActionType;
 | 
			
		||||
import org.thingsboard.server.common.data.edge.EdgeEventType;
 | 
			
		||||
import org.thingsboard.server.common.data.id.AssetId;
 | 
			
		||||
@ -36,6 +37,7 @@ import org.thingsboard.server.common.data.id.DeviceId;
 | 
			
		||||
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.plugin.ComponentLifecycleEvent;
 | 
			
		||||
import org.thingsboard.server.common.data.security.DeviceCredentials;
 | 
			
		||||
import org.thingsboard.server.common.msg.TbMsg;
 | 
			
		||||
import org.thingsboard.server.common.msg.TbMsgDataType;
 | 
			
		||||
@ -50,9 +52,6 @@ import java.util.List;
 | 
			
		||||
@Service
 | 
			
		||||
@RequiredArgsConstructor
 | 
			
		||||
public class DefaultTbNotificationEntityService implements TbNotificationEntityService {
 | 
			
		||||
 | 
			
		||||
    protected static final int DEFAULT_PAGE_SIZE = 1000;
 | 
			
		||||
 | 
			
		||||
    private static final ObjectMapper json = new ObjectMapper();
 | 
			
		||||
 | 
			
		||||
    private final EntityActionService entityActionService;
 | 
			
		||||
@ -74,6 +73,7 @@ public class DefaultTbNotificationEntityService implements TbNotificationEntityS
 | 
			
		||||
        sendDeleteNotificationMsg(tenantId, entityId, relatedEdgeIds);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public <E extends HasName, I extends EntityId> void notifyAssignOrUnassignEntityToCustomer(TenantId tenantId, I entityId,
 | 
			
		||||
                                                                                               CustomerId customerId, E entity,
 | 
			
		||||
                                                                                               ActionType actionType,
 | 
			
		||||
@ -97,7 +97,6 @@ public class DefaultTbNotificationEntityService implements TbNotificationEntityS
 | 
			
		||||
        sendEntityAssignToEdgeNotificationMsg(tenantId, edgeId, entityId, edgeActionType);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    //Device
 | 
			
		||||
    @Override
 | 
			
		||||
    public void notifyCreateOrUpdateDevice(TenantId tenantId, DeviceId deviceId, CustomerId customerId,
 | 
			
		||||
                                           Device device, Device oldDevice, ActionType actionType,
 | 
			
		||||
@ -130,7 +129,7 @@ public class DefaultTbNotificationEntityService implements TbNotificationEntityS
 | 
			
		||||
        pushAssignedFromNotification(tenant, newTenantId, device);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    //Asset
 | 
			
		||||
    @Override
 | 
			
		||||
    public void notifyCreateOrUpdateAsset(TenantId tenantId, AssetId assetId, CustomerId customerId, Asset asset,
 | 
			
		||||
                                          ActionType actionType, SecurityUser user, Object... additionalInfo) {
 | 
			
		||||
        logEntityAction(tenantId, assetId, asset, customerId, actionType, user, additionalInfo);
 | 
			
		||||
@ -140,6 +139,42 @@ public class DefaultTbNotificationEntityService implements TbNotificationEntityS
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void notifyEdge(TenantId tenantId, EdgeId edgeId, CustomerId customerId, Edge edge, ActionType actionType,
 | 
			
		||||
                           SecurityUser user, Object... additionalInfo) {
 | 
			
		||||
        ComponentLifecycleEvent lifecycleEvent;
 | 
			
		||||
        EdgeEventActionType edgeEventActionType = null;
 | 
			
		||||
        switch (actionType) {
 | 
			
		||||
            case ADDED:
 | 
			
		||||
                lifecycleEvent = ComponentLifecycleEvent.CREATED;
 | 
			
		||||
                break;
 | 
			
		||||
            case UPDATED:
 | 
			
		||||
                lifecycleEvent = ComponentLifecycleEvent.UPDATED;
 | 
			
		||||
                break;
 | 
			
		||||
            case ASSIGNED_TO_CUSTOMER:
 | 
			
		||||
                lifecycleEvent = ComponentLifecycleEvent.UPDATED;
 | 
			
		||||
                edgeEventActionType = EdgeEventActionType.ASSIGNED_TO_CUSTOMER;
 | 
			
		||||
                break;
 | 
			
		||||
            case UNASSIGNED_FROM_CUSTOMER:
 | 
			
		||||
                lifecycleEvent = ComponentLifecycleEvent.UPDATED;
 | 
			
		||||
                edgeEventActionType = EdgeEventActionType.UNASSIGNED_FROM_CUSTOMER;
 | 
			
		||||
                break;
 | 
			
		||||
            case DELETED:
 | 
			
		||||
                lifecycleEvent = ComponentLifecycleEvent.DELETED;
 | 
			
		||||
                break;
 | 
			
		||||
            default:
 | 
			
		||||
                throw new IllegalArgumentException("Unknown actionType: " + actionType);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        tbClusterService.broadcastEntityStateChangeEvent(tenantId, edgeId, lifecycleEvent);
 | 
			
		||||
        logEntityAction(tenantId, edgeId, edge, customerId, actionType, user, additionalInfo);
 | 
			
		||||
 | 
			
		||||
        //Send notification to edge
 | 
			
		||||
        if (edgeEventActionType != null) {
 | 
			
		||||
            sendEntityAssignToCustomerNotificationMsg(tenantId, edgeId, customerId, edgeEventActionType);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private <E extends HasName, I extends EntityId> void logEntityAction(TenantId tenantId, I entityId, E entity, CustomerId customerId,
 | 
			
		||||
                                                                         ActionType actionType, SecurityUser user, Object... additionalInfo) {
 | 
			
		||||
        logEntityAction(tenantId, entityId, entity, customerId, actionType, user, null, additionalInfo);
 | 
			
		||||
@ -154,11 +189,11 @@ public class DefaultTbNotificationEntityService implements TbNotificationEntityS
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected void sendEntityNotificationMsg(TenantId tenantId, EntityId entityId, EdgeEventActionType action) {
 | 
			
		||||
    private void sendEntityNotificationMsg(TenantId tenantId, EntityId entityId, EdgeEventActionType action) {
 | 
			
		||||
        sendNotificationMsgToEdgeService(tenantId, null, entityId, null, null, action);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected void sendEntityAssignToCustomerNotificationMsg(TenantId tenantId, EntityId entityId, CustomerId customerId, EdgeEventActionType action) {
 | 
			
		||||
    private void sendEntityAssignToCustomerNotificationMsg(TenantId tenantId, EntityId entityId, CustomerId customerId, EdgeEventActionType action) {
 | 
			
		||||
        try {
 | 
			
		||||
            sendNotificationMsgToEdgeService(tenantId, null, entityId, json.writeValueAsString(customerId), null, action);
 | 
			
		||||
        } catch (Exception e) {
 | 
			
		||||
@ -166,11 +201,11 @@ public class DefaultTbNotificationEntityService implements TbNotificationEntityS
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected void sendDeleteNotificationMsg(TenantId tenantId, EntityId entityId, List<EdgeId> edgeIds) {
 | 
			
		||||
    private void sendDeleteNotificationMsg(TenantId tenantId, EntityId entityId, List<EdgeId> edgeIds) {
 | 
			
		||||
        sendDeleteNotificationMsg(tenantId, entityId, edgeIds, null);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected void sendDeleteNotificationMsg(TenantId tenantId, EntityId entityId, List<EdgeId> edgeIds, String body) {
 | 
			
		||||
    private void sendDeleteNotificationMsg(TenantId tenantId, EntityId entityId, List<EdgeId> edgeIds, String body) {
 | 
			
		||||
        if (edgeIds != null && !edgeIds.isEmpty()) {
 | 
			
		||||
            for (EdgeId edgeId : edgeIds) {
 | 
			
		||||
                sendNotificationMsgToEdgeService(tenantId, edgeId, entityId, body, null, EdgeEventActionType.DELETED);
 | 
			
		||||
@ -178,7 +213,7 @@ public class DefaultTbNotificationEntityService implements TbNotificationEntityS
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected void sendEntityAssignToEdgeNotificationMsg(TenantId tenantId, EdgeId edgeId, EntityId entityId, EdgeEventActionType action) {
 | 
			
		||||
    private void sendEntityAssignToEdgeNotificationMsg(TenantId tenantId, EdgeId edgeId, EntityId entityId, EdgeEventActionType action) {
 | 
			
		||||
        sendNotificationMsgToEdgeService(tenantId, edgeId, entityId, null, null, action);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -20,6 +20,7 @@ import org.thingsboard.server.common.data.HasName;
 | 
			
		||||
import org.thingsboard.server.common.data.Tenant;
 | 
			
		||||
import org.thingsboard.server.common.data.asset.Asset;
 | 
			
		||||
import org.thingsboard.server.common.data.audit.ActionType;
 | 
			
		||||
import org.thingsboard.server.common.data.edge.Edge;
 | 
			
		||||
import org.thingsboard.server.common.data.edge.EdgeEventActionType;
 | 
			
		||||
import org.thingsboard.server.common.data.id.AssetId;
 | 
			
		||||
import org.thingsboard.server.common.data.id.CustomerId;
 | 
			
		||||
@ -70,4 +71,6 @@ public interface TbNotificationEntityService {
 | 
			
		||||
    void notifyCreateOrUpdateAsset(TenantId tenantId, AssetId assetId, CustomerId customerId, Asset asset,
 | 
			
		||||
                                   ActionType actionType, SecurityUser user, Object... additionalInfo);
 | 
			
		||||
 | 
			
		||||
    void notifyEdge(TenantId tenantId, EdgeId edgeId, CustomerId customerId, Edge edge, ActionType actionType, SecurityUser user, Object... additionalInfo);
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -0,0 +1,150 @@
 | 
			
		||||
/**
 | 
			
		||||
 * Copyright © 2016-2022 The Thingsboard Authors
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
 * you may not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 *     http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
 * See the License for the specific language governing permissions and
 | 
			
		||||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
package org.thingsboard.server.service.entitiy.edge;
 | 
			
		||||
 | 
			
		||||
import lombok.AllArgsConstructor;
 | 
			
		||||
import lombok.extern.slf4j.Slf4j;
 | 
			
		||||
import org.springframework.stereotype.Service;
 | 
			
		||||
import org.thingsboard.server.common.data.Customer;
 | 
			
		||||
import org.thingsboard.server.common.data.EntityType;
 | 
			
		||||
import org.thingsboard.server.common.data.audit.ActionType;
 | 
			
		||||
import org.thingsboard.server.common.data.edge.Edge;
 | 
			
		||||
import org.thingsboard.server.common.data.exception.ThingsboardException;
 | 
			
		||||
import org.thingsboard.server.common.data.id.CustomerId;
 | 
			
		||||
import org.thingsboard.server.common.data.id.EdgeId;
 | 
			
		||||
import org.thingsboard.server.common.data.id.RuleChainId;
 | 
			
		||||
import org.thingsboard.server.common.data.id.TenantId;
 | 
			
		||||
import org.thingsboard.server.common.data.rule.RuleChain;
 | 
			
		||||
import org.thingsboard.server.queue.util.TbCoreComponent;
 | 
			
		||||
import org.thingsboard.server.service.entitiy.AbstractTbEntityService;
 | 
			
		||||
import org.thingsboard.server.service.security.model.SecurityUser;
 | 
			
		||||
 | 
			
		||||
@AllArgsConstructor
 | 
			
		||||
@TbCoreComponent
 | 
			
		||||
@Service
 | 
			
		||||
@Slf4j
 | 
			
		||||
public class DefaultTbEdgeService extends AbstractTbEntityService implements TbEdgeService {
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public Edge saveEdge(Edge edge, RuleChain edgeTemplateRootRuleChain, SecurityUser user) throws ThingsboardException {
 | 
			
		||||
        ActionType actionType = edge.getId() == null ? ActionType.ADDED : ActionType.UPDATED;
 | 
			
		||||
        TenantId tenantId = edge.getTenantId();
 | 
			
		||||
        try {
 | 
			
		||||
            Edge savedEdge = checkNotNull(edgeService.saveEdge(edge));
 | 
			
		||||
            EdgeId edgeId = savedEdge.getId();
 | 
			
		||||
 | 
			
		||||
            if (actionType == ActionType.ADDED) {
 | 
			
		||||
                ruleChainService.assignRuleChainToEdge(tenantId, edgeTemplateRootRuleChain.getId(), edgeId);
 | 
			
		||||
                edgeNotificationService.setEdgeRootRuleChain(tenantId, savedEdge, edgeTemplateRootRuleChain.getId());
 | 
			
		||||
                edgeService.assignDefaultRuleChainsToEdge(tenantId, edgeId);
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            notificationEntityService.notifyEdge(tenantId, edgeId, savedEdge.getCustomerId(), savedEdge, actionType, user);
 | 
			
		||||
 | 
			
		||||
            return savedEdge;
 | 
			
		||||
        } catch (Exception e) {
 | 
			
		||||
            notificationEntityService.notifyEntity(tenantId, emptyId(EntityType.EDGE), edge, null, actionType, user, e);
 | 
			
		||||
            throw handleException(e);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void deleteEdge(Edge edge, SecurityUser user) throws ThingsboardException {
 | 
			
		||||
        ActionType actionType = ActionType.DELETED;
 | 
			
		||||
        EdgeId edgeId = edge.getId();
 | 
			
		||||
        TenantId tenantId = edge.getTenantId();
 | 
			
		||||
        try {
 | 
			
		||||
            edgeService.deleteEdge(tenantId, edgeId);
 | 
			
		||||
            notificationEntityService.notifyEdge(tenantId, edgeId, edge.getCustomerId(), edge, actionType, user, edgeId.toString());
 | 
			
		||||
 | 
			
		||||
        } catch (Exception e) {
 | 
			
		||||
            notificationEntityService.notifyEntity(tenantId, emptyId(EntityType.EDGE), edge, null, actionType, user, e);
 | 
			
		||||
            throw handleException(e);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public Edge assignEdgeToCustomer(TenantId tenantId, EdgeId edgeId, Customer customer, SecurityUser user) throws ThingsboardException {
 | 
			
		||||
        ActionType actionType = ActionType.ASSIGNED_TO_CUSTOMER;
 | 
			
		||||
        CustomerId customerId = customer.getId();
 | 
			
		||||
        try {
 | 
			
		||||
            Edge savedEdge = checkNotNull(edgeService.assignEdgeToCustomer(tenantId, edgeId, customerId));
 | 
			
		||||
 | 
			
		||||
            notificationEntityService.notifyEdge(tenantId, edgeId, customerId, savedEdge, actionType, user,
 | 
			
		||||
                    edgeId.toString(), customerId.toString(), customer.getName());
 | 
			
		||||
 | 
			
		||||
            return savedEdge;
 | 
			
		||||
        } catch (Exception e) {
 | 
			
		||||
            notificationEntityService.notifyEntity(tenantId, emptyId(EntityType.EDGE), null, null,
 | 
			
		||||
                    actionType, user, e, edgeId.toString(), customerId.toString());
 | 
			
		||||
            throw handleException(e);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public Edge unassignEdgeFromCustomer(Edge edge, Customer customer, SecurityUser user) throws ThingsboardException {
 | 
			
		||||
        ActionType actionType = ActionType.UNASSIGNED_FROM_CUSTOMER;
 | 
			
		||||
        TenantId tenantId = edge.getTenantId();
 | 
			
		||||
        EdgeId edgeId = edge.getId();
 | 
			
		||||
        CustomerId customerId = customer.getId();
 | 
			
		||||
        try {
 | 
			
		||||
            Edge savedEdge = checkNotNull(edgeService.unassignEdgeFromCustomer(tenantId, edgeId));
 | 
			
		||||
 | 
			
		||||
            notificationEntityService.notifyEdge(tenantId, edgeId, customerId, savedEdge, actionType, user,
 | 
			
		||||
                    edgeId.toString(), customerId.toString(), customer.getName());
 | 
			
		||||
            return savedEdge;
 | 
			
		||||
        } catch (Exception e) {
 | 
			
		||||
            notificationEntityService.notifyEntity(tenantId, emptyId(EntityType.EDGE), null, null,
 | 
			
		||||
                    actionType, user, e, edgeId.toString());
 | 
			
		||||
            throw handleException(e);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public Edge assignEdgeToPublicCustomer(TenantId tenantId, EdgeId edgeId, SecurityUser user) throws ThingsboardException {
 | 
			
		||||
        ActionType actionType = ActionType.ASSIGNED_TO_CUSTOMER;
 | 
			
		||||
        try {
 | 
			
		||||
            Customer publicCustomer = customerService.findOrCreatePublicCustomer(tenantId);
 | 
			
		||||
            CustomerId customerId = publicCustomer.getId();
 | 
			
		||||
            Edge savedEdge = checkNotNull(edgeService.assignEdgeToCustomer(tenantId, edgeId, customerId));
 | 
			
		||||
 | 
			
		||||
            notificationEntityService.notifyEdge(tenantId, edgeId, customerId, savedEdge, actionType, user,
 | 
			
		||||
                    edgeId.toString(), customerId.toString(), publicCustomer.getName());
 | 
			
		||||
 | 
			
		||||
            return savedEdge;
 | 
			
		||||
        } catch (Exception e) {
 | 
			
		||||
            notificationEntityService.notifyEntity(tenantId, emptyId(EntityType.EDGE), null, null,
 | 
			
		||||
                    actionType, user, e, edgeId.toString());
 | 
			
		||||
            throw handleException(e);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public Edge setEdgeRootRuleChain(Edge edge, RuleChainId ruleChainId, SecurityUser user) throws ThingsboardException {
 | 
			
		||||
        ActionType actionType = ActionType.UPDATED;
 | 
			
		||||
        TenantId tenantId = edge.getTenantId();
 | 
			
		||||
        EdgeId edgeId = edge.getId();
 | 
			
		||||
        try {
 | 
			
		||||
            Edge updatedEdge = edgeNotificationService.setEdgeRootRuleChain(tenantId, edge, ruleChainId);
 | 
			
		||||
            notificationEntityService.notifyEdge(tenantId, edgeId, null, updatedEdge, actionType, user);
 | 
			
		||||
            return updatedEdge;
 | 
			
		||||
        } catch (Exception e) {
 | 
			
		||||
            notificationEntityService.notifyEntity(tenantId, emptyId(EntityType.EDGE), null, null,
 | 
			
		||||
                    actionType, user, e, edgeId.toString());
 | 
			
		||||
            throw handleException(e);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@ -0,0 +1,39 @@
 | 
			
		||||
/**
 | 
			
		||||
 * Copyright © 2016-2022 The Thingsboard Authors
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
 * you may not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 *
 | 
			
		||||
 *     http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
 * See the License for the specific language governing permissions and
 | 
			
		||||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
package org.thingsboard.server.service.entitiy.edge;
 | 
			
		||||
 | 
			
		||||
import org.thingsboard.server.common.data.Customer;
 | 
			
		||||
import org.thingsboard.server.common.data.edge.Edge;
 | 
			
		||||
import org.thingsboard.server.common.data.exception.ThingsboardException;
 | 
			
		||||
import org.thingsboard.server.common.data.id.EdgeId;
 | 
			
		||||
import org.thingsboard.server.common.data.id.RuleChainId;
 | 
			
		||||
import org.thingsboard.server.common.data.id.TenantId;
 | 
			
		||||
import org.thingsboard.server.common.data.rule.RuleChain;
 | 
			
		||||
import org.thingsboard.server.service.security.model.SecurityUser;
 | 
			
		||||
 | 
			
		||||
public interface TbEdgeService {
 | 
			
		||||
    Edge saveEdge(Edge edge, RuleChain edgeTemplateRootRuleChain, SecurityUser user) throws ThingsboardException;
 | 
			
		||||
 | 
			
		||||
    void deleteEdge(Edge edge, SecurityUser user) throws ThingsboardException;
 | 
			
		||||
 | 
			
		||||
    Edge assignEdgeToCustomer(TenantId tenantId, EdgeId edgeId, Customer customer, SecurityUser user) throws ThingsboardException;
 | 
			
		||||
 | 
			
		||||
    Edge unassignEdgeFromCustomer(Edge edge, Customer customer, SecurityUser user) throws ThingsboardException;
 | 
			
		||||
 | 
			
		||||
    Edge assignEdgeToPublicCustomer(TenantId tenantId, EdgeId edgeId, SecurityUser user) throws ThingsboardException;
 | 
			
		||||
 | 
			
		||||
    Edge setEdgeRootRuleChain(Edge edge, RuleChainId ruleChainId, SecurityUser user) throws ThingsboardException;
 | 
			
		||||
}
 | 
			
		||||
@ -95,7 +95,7 @@ public abstract class AbstractBulkImportService<E extends HasId<? extends Entity
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public final BulkImportResult<E> processBulkImport(BulkImportRequest request, SecurityUser user, Consumer<ImportedEntityInfo<E>> onEntityImported) throws Exception {
 | 
			
		||||
    public final BulkImportResult<E> processBulkImport(BulkImportRequest request, SecurityUser user) throws Exception {
 | 
			
		||||
        List<EntityData> entitiesData = parseData(request);
 | 
			
		||||
 | 
			
		||||
        BulkImportResult<E> result = new BulkImportResult<>();
 | 
			
		||||
@ -106,10 +106,9 @@ public abstract class AbstractBulkImportService<E extends HasId<? extends Entity
 | 
			
		||||
        entitiesData.forEach(entityData -> DonAsynchron.submit(() -> {
 | 
			
		||||
                    SecurityContextHolder.setContext(securityContext);
 | 
			
		||||
 | 
			
		||||
                    ImportedEntityInfo<E> importedEntityInfo =  saveEntity(entityData.getFields(), user);
 | 
			
		||||
                    ImportedEntityInfo<E> importedEntityInfo = saveEntity(entityData.getFields(), user);
 | 
			
		||||
                    E entity = importedEntityInfo.getEntity();
 | 
			
		||||
 | 
			
		||||
                    onEntityImported.accept(importedEntityInfo);
 | 
			
		||||
                    saveKvs(user, entity, entityData.getKvs());
 | 
			
		||||
 | 
			
		||||
                    return importedEntityInfo;
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user