in dubbo-admin-server/src/main/java/org/apache/dubbo/admin/service/impl/ProviderServiceImpl.java [313:351]
public Set<ServiceDTO> convertProviders2DTO(List<Provider> providers) {
Set<ServiceDTO> result = new TreeSet<>();
Map<String, List<Provider>> providerMap = providers.stream().collect(Collectors.groupingBy(Provider::getService));
for (Map.Entry<String, List<Provider>> entry : providerMap.entrySet()) {
String service = entry.getKey();
String group = Tool.getGroup(service);
String version = Tool.getVersion(service);
String interfaze = Tool.getInterface(service);
List<Provider> value = entry.getValue();
if (value.size() == 1) {
Provider provider = value.get(0);
ServiceDTO s = new ServiceDTO();
s.setAppName(provider.getApplication());
s.setService(interfaze);
s.setGroup(group);
s.setVersion(version);
s.setRegistrySource(provider.getRegistrySource());
result.add(s);
} else {
String app = value.stream().map(Provider::getApplication).distinct().collect(Collectors.joining(", "));
RegistrySource registrySource = value.get(0).getRegistrySource();
boolean matchInterface = value.stream().map(Provider::getRegistrySource).anyMatch(e -> e.equals(RegistrySource.INTERFACE));
boolean matchInstance = value.stream().map(Provider::getRegistrySource).anyMatch(e -> e.equals(RegistrySource.INSTANCE));
if (matchInterface && matchInstance) {
registrySource = RegistrySource.ALL;
}
ServiceDTO s = new ServiceDTO();
s.setAppName(app);
s.setService(interfaze);
s.setGroup(group);
s.setVersion(version);
s.setRegistrySource(registrySource);
result.add(s);
}
}
return result;
}