/* * Copyright 1999-2101 Alibaba Group. * * 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 com.alibaba.dubbo.registry.common.util; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Map; import com.alibaba.dubbo.common.utils.StringUtils; import com.alibaba.dubbo.registry.common.domain.LoadBalance; import com.alibaba.dubbo.registry.common.domain.Override; import com.alibaba.dubbo.registry.common.domain.Weight; /** * OverrideUtils.java * @author tony.chenl */ public class OverrideUtils { public static List<Weight> overridesToWeights(List<Override> overrides){ List<Weight> weights = new ArrayList<Weight>(); if(overrides == null){ return weights; } for(Override o : overrides){ if(StringUtils.isEmpty(o.getParams())){ continue; }else{ Map<String,String> params = StringUtils.parseQueryString(o.getParams()); for(Map.Entry<String, String> entry : params.entrySet()){ if(entry.getKey().equals("weight")){ Weight weight = new Weight(); weight.setAddress(o.getAddress()); weight.setId(o.getId()); weight.setService(o.getService()); weight.setWeight(Integer.valueOf(entry.getValue())); weights.add(weight); } } } } return weights; } public static Weight overrideToWeight(Override override){ return overridesToWeights(Arrays.asList(override)).get(0); } public static Override weightToOverride(Weight weight){ Override override = new Override(); override.setId(weight.getId()); override.setAddress(weight.getAddress()); override.setEnabled(true); override.setParams("weight=" + weight.getWeight()); override.setService(weight.getService()); return override; } public static List<LoadBalance> overridesToLoadBalances(List<Override> overrides){ List<LoadBalance> loadBalances = new ArrayList<LoadBalance>(); if(overrides == null){ return loadBalances; } for(Override o : overrides){ if(StringUtils.isEmpty(o.getParams())){ continue; }else{ Map<String,String> params = StringUtils.parseQueryString(o.getParams()); for(Map.Entry<String, String> entry : params.entrySet()){ if(entry.getKey().endsWith("loadbalance")){ LoadBalance loadBalance = new LoadBalance(); String method = null; if(entry.getKey().endsWith(".loadbalance")){ method = entry.getKey().split(".loadbalance")[0]; }else{ method = "*"; } loadBalance.setMethod(method); loadBalance.setId(o.getId()); loadBalance.setService(o.getService()); loadBalance.setStrategy(entry.getValue()); loadBalances.add(loadBalance); } } } } return loadBalances; } public static LoadBalance overrideToLoadBalance(Override override){ return OverrideUtils.overridesToLoadBalances(Arrays.asList(override)).get(0); } public static Override loadBalanceToOverride(LoadBalance loadBalance){ Override override = new Override(); override.setId(loadBalance.getId()); override.setService(loadBalance.getService()); override.setEnabled(true); String method = loadBalance.getMethod(); String strategy = loadBalance.getStrategy(); if(StringUtils.isEmpty(method) ||method.equals("*")){ override.setParams("loadbalance=" + strategy); }else{ override.setParams(method + ".loadbalance=" + strategy); } return override; } }