in shenyu-admin/src/main/java/org/apache/shenyu/admin/service/impl/SelectorServiceImpl.java [501:560]
public ConfigImportResult importData(final String namespace, final List<SelectorDTO> selectorList, final ConfigsImportContext context) {
if (CollectionUtils.isEmpty(selectorList)) {
return ConfigImportResult.success();
}
Map<String, String> selectorIdMapping = context.getSelectorIdMapping();
StringBuilder errorMsgBuilder = new StringBuilder();
int successCount = 0;
Map<String, List<SelectorDO>> pluginSelectorMap = selectorMapper.selectAllByNamespaceId(namespace).stream()
.filter(Objects::nonNull)
.collect(Collectors.groupingBy(SelectorDO::getPluginId));
Map<String, List<SelectorDTO>> importSelectorMap = selectorList.stream()
.collect(Collectors.groupingBy(SelectorDTO::getPluginId));
for (Map.Entry<String, List<SelectorDTO>> selectorEntry : importSelectorMap.entrySet()) {
// the import selector's pluginId
String pluginId = context.getPluginTemplateIdMapping().get(selectorEntry.getKey());
List<SelectorDTO> selectorDTOList = selectorEntry.getValue();
if (CollectionUtils.isNotEmpty(selectorDTOList)) {
Map<String, String> existSelectorSet = Optional
.ofNullable(pluginSelectorMap.get(pluginId))
.orElseGet(Lists::newArrayList)
.stream()
.collect(Collectors.toMap(SelectorDO::getName, SelectorDO::getId));
for (SelectorDTO selectorDTO : selectorDTOList) {
// filter by selectorName
String selectorName = selectorDTO.getName();
if (MapUtils.isNotEmpty(existSelectorSet)
&& existSelectorSet.containsKey(selectorName)) {
errorMsgBuilder
.append(selectorName)
.append(",");
selectorIdMapping.put(selectorDTO.getId(), existSelectorSet.get(selectorName));
} else {
// gen new id
String selectorId = UUIDUtils.getInstance().generateShortUuid();
selectorIdMapping.put(selectorDTO.getId(), selectorId);
selectorDTO.setId(selectorId);
selectorDTO.setNamespaceId(namespace);
selectorDTO.setPluginId(pluginId);
Optional.ofNullable(selectorDTO.getSelectorConditions())
.orElse(Collections.emptyList()).forEach(c -> {
c.setSelectorId(selectorId);
c.setId(null);
});
create(selectorDTO);
successCount++;
}
}
}
}
if (StringUtils.isNotEmpty(errorMsgBuilder)) {
errorMsgBuilder.setLength(errorMsgBuilder.length() - 1);
return ConfigImportResult
.fail(successCount, "import fail selector: " + errorMsgBuilder);
}
return ConfigImportResult.success(successCount);
}