public ConfigImportResult importData()

in shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/RuleServiceImpl.java [308:365]


    public ConfigImportResult importData(final String namespace, final List<RuleDTO> ruleList, final ConfigsImportContext context) {
        if (CollectionUtils.isEmpty(ruleList)) {
            return ConfigImportResult.success();
        }
        Map<String, String> selectorIdMapping = context.getSelectorIdMapping();
        Map<String, List<RuleDO>> selectorRuleMap = ruleMapper
                .selectAllByNamespaceId(namespace)
                .stream()
                .collect(Collectors.groupingBy(RuleDO::getSelectorId));
        
        int successCount = 0;
        StringBuilder errorMsgBuilder = new StringBuilder();
        for (RuleDTO ruleDTO : ruleList) {
            String selectorId = ruleDTO.getSelectorId();
            String ruleName = ruleDTO.getName();

            String newSelectorId = selectorIdMapping.get(selectorId);
            if (Objects.isNull(newSelectorId)) {
                errorMsgBuilder
                        .append(ruleName)
                        .append(",");
                continue;
            }
            Set<String> existRuleNameSet = selectorRuleMap
                    .getOrDefault(newSelectorId, Lists.newArrayList())
                    .stream()
                    .map(RuleDO::getName)
                    .collect(Collectors.toSet());
            
            if (existRuleNameSet.contains(ruleName)) {
                errorMsgBuilder
                        .append(ruleName)
                        .append(",");
                continue;
            }
            ruleDTO.setNamespaceId(namespace);
            ruleDTO.setSelectorId(newSelectorId);
            String ruleId = UUIDUtils.getInstance().generateShortUuid();
            ruleDTO.setId(ruleId);
            RuleDO ruleDO = RuleDO.buildRuleDO(ruleDTO);
            final int ruleCount = ruleMapper.insertSelective(ruleDO);
            Optional.ofNullable(ruleDTO.getRuleConditions())
                            .orElse(Collections.emptyList()).forEach(c -> {
                                c.setRuleId(ruleId);
                                c.setId(null);
                            });
            addCondition(ruleDO, ruleDTO.getRuleConditions());
            if (ruleCount > 0) {
                successCount++;
            }
        }
        if (StringUtils.isNotEmpty(errorMsgBuilder)) {
            errorMsgBuilder.setLength(errorMsgBuilder.length() - 1);
            return ConfigImportResult
                    .fail(successCount, "import fail rule: " + errorMsgBuilder);
        }
        return ConfigImportResult.success(successCount);
    }