/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You 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.apache.dubbo.admin.registry.common.registry; import com.alibaba.dubbo.common.Constants; import com.alibaba.dubbo.common.utils.StringUtils; import java.util.HashMap; import java.util.Map; public class ConvertUtil { private ConvertUtil() { } public static Map> convertRegister(Map> register) { Map> newRegister = new HashMap>(); for (Map.Entry> entry : register.entrySet()) { String serviceName = entry.getKey(); Map serviceUrls = entry.getValue(); if (!serviceName.contains(":") && !serviceName.contains("/")) { for (Map.Entry entry2 : serviceUrls.entrySet()) { String serviceUrl = entry2.getKey(); String serviceQuery = entry2.getValue(); Map params = StringUtils.parseQueryString(serviceQuery); String group = params.get("group"); String version = params.get("version"); params.remove("group"); params.remove("version"); String name = serviceName; if (group != null && group.length() > 0) { name = group + "/" + name; } if (version != null && version.length() > 0 && !"0.0.0".equals(version)) { name = name + ":" + version; } Map newUrls = newRegister.get(name); if (newUrls == null) { newUrls = new HashMap(); newRegister.put(name, newUrls); } newUrls.put(serviceUrl, StringUtils.toQueryString(params)); } } else { newRegister.put(serviceName, serviceUrls); } } return newRegister; } public static Map convertSubscribe(Map subscribe) { Map newSubscribe = new HashMap(); for (Map.Entry entry : subscribe.entrySet()) { String serviceName = entry.getKey(); String serviceQuery = entry.getValue(); if (!serviceName.contains(":") && !serviceName.contains("/")) { Map params = StringUtils.parseQueryString(serviceQuery); String group = params.get("group"); String version = params.get("version"); params.remove("group"); params.remove("version"); String name = serviceName; if (group != null && group.length() > 0) { name = group + "/" + name; } if (version != null && version.length() > 0 && !"0.0.0".equals(version)) { name = name + ":" + version; } newSubscribe.put(name, StringUtils.toQueryString(params)); } else { newSubscribe.put(serviceName, serviceQuery); } } return newSubscribe; } public static Map serviceName2Map(String serviceName) { String group = null; String version = null; int i = serviceName.indexOf("/"); if (i > 0) { group = serviceName.substring(0, i); serviceName = serviceName.substring(i + 1); } i = serviceName.lastIndexOf(":"); if (i > 0) { version = serviceName.substring(i + 1); serviceName = serviceName.substring(0, i); } Map ret = new HashMap(); if (!StringUtils.isEmpty(serviceName)) { ret.put(Constants.INTERFACE_KEY, serviceName); } if (!StringUtils.isEmpty(version)) { ret.put(Constants.VERSION_KEY, version); } if (!StringUtils.isEmpty(group)) { ret.put(Constants.GROUP_KEY, group); } return ret; } }