解决服务路由兼容2.6时不能支持多路由问题 (#555)

diff --git a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/service/impl/RouteServiceImpl.java b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/service/impl/RouteServiceImpl.java
index bbc1b25..c4810b8 100644
--- a/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/service/impl/RouteServiceImpl.java
+++ b/dubbo-admin-server/src/main/java/org/apache/dubbo/admin/service/impl/RouteServiceImpl.java
@@ -32,6 +32,7 @@
 import org.apache.dubbo.common.utils.StringUtils;
 import org.springframework.stereotype.Component;
 
+import java.util.LinkedList;
 import java.util.List;
 
 @Component
@@ -54,8 +55,9 @@
 
         //register2.6
         if (StringUtils.isNotEmpty(conditionRoute.getService())) {
-            Route old = convertRouteToOldRoute(conditionRoute);
-            registry.register(old.toUrl().addParameter(Constants.COMPATIBLE_CONFIG, true));
+            for (Route old : convertRouteToOldRoute(conditionRoute)) {
+            	registry.register(old.toUrl().addParameter(Constants.COMPATIBLE_CONFIG, true));
+            }
         }
 
     }
@@ -75,10 +77,12 @@
 
         //for 2.6
         if (StringUtils.isNotEmpty(newConditionRoute.getService())) {
-            Route old = convertRouteToOldRoute(oldConditionRoute);
-            Route updated = convertRouteToOldRoute(newConditionRoute);
-            registry.unregister(old.toUrl().addParameter(Constants.COMPATIBLE_CONFIG, true));
-            registry.register(updated.toUrl().addParameter(Constants.COMPATIBLE_CONFIG, true));
+            for (Route old : convertRouteToOldRoute(oldConditionRoute)) {
+            	registry.unregister(old.toUrl().addParameter(Constants.COMPATIBLE_CONFIG, true));
+            }
+            for (Route updated : convertRouteToOldRoute(newConditionRoute)) {
+            	registry.register(updated.toUrl().addParameter(Constants.COMPATIBLE_CONFIG, true));
+            }
         }
     }
 
@@ -105,8 +109,9 @@
         if (route.getScope().equals(Constants.SERVICE)) {
             RoutingRule originRule = YamlParser.loadObject(config, RoutingRule.class);
             ConditionRouteDTO conditionRouteDTO = RouteUtils.createConditionRouteFromRule(originRule);
-            Route old = convertRouteToOldRoute(conditionRouteDTO);
-            registry.unregister(old.toUrl().addParameter(Constants.COMPATIBLE_CONFIG, true));
+            for (Route old : convertRouteToOldRoute(conditionRouteDTO)) {
+            	registry.unregister(old.toUrl().addParameter(Constants.COMPATIBLE_CONFIG, true));
+            }
         }
     }
 
@@ -213,10 +218,12 @@
 
             if (ruleDTO.getScope().equals(Constants.SERVICE)) {
                 //for2.6
-                URL oldURL = convertRouteToOldRoute(RouteUtils.createConditionRouteFromRule(ruleDTO)).toUrl().addParameter(Constants.COMPATIBLE_CONFIG, true);
-                registry.unregister(oldURL);
-                oldURL = oldURL.addParameter("enabled", true);
-                registry.register(oldURL);
+            	for (Route oldRoute : convertRouteToOldRoute(RouteUtils.createConditionRouteFromRule(ruleDTO))) {
+	                URL oldURL = oldRoute.toUrl();
+	                registry.unregister(oldURL);
+	                oldURL = oldURL.addParameter("enabled", true);
+	                registry.register(oldURL);
+            	}
             }
 
             //2.7
@@ -235,10 +242,12 @@
 
             if (routeRule.getScope().equals(Constants.SERVICE)) {
                 //for 2.6
-                URL oldURL = convertRouteToOldRoute(RouteUtils.createConditionRouteFromRule(routeRule)).toUrl().addParameter(Constants.COMPATIBLE_CONFIG,true);
-                registry.unregister(oldURL);
-                oldURL = oldURL.addParameter("enabled", false);
-                registry.register(oldURL);
+            	for (Route oldRoute : convertRouteToOldRoute(RouteUtils.createConditionRouteFromRule(routeRule))) {
+	                URL oldURL = oldRoute.toUrl();
+	                registry.unregister(oldURL);
+	                oldURL = oldURL.addParameter("enabled", false);
+	                registry.register(oldURL);
+            	}
             }
 
             //2.7
@@ -335,43 +344,45 @@
         }
     }
 
-    private String parseCondition(List<String> conditions) {
+    private String parseCondition(String condition) {
         StringBuilder when = new StringBuilder();
         StringBuilder then = new StringBuilder();
-        for (String condition : conditions) {
-            condition = condition.trim();
-            if (condition.contains("=>")) {
-                String[] array = condition.split("=>", 2);
-                String consumer = array[0].trim();
-                String provider = array[1].trim();
-                if (consumer.length() != 0) {
-                    if (when.length() != 0) {
-                        when.append(" & ").append(consumer);
-                    } else {
-                        when.append(consumer);
-                    }
+        condition = condition.trim();
+        if (condition.contains("=>")) {
+            String[] array = condition.split("=>", 2);
+            String consumer = array[0].trim();
+            String provider = array[1].trim();
+            if (consumer.length() != 0) {
+                if (when.length() != 0) {
+                    when.append(" & ").append(consumer);
+                } else {
+                    when.append(consumer);
                 }
-                if (provider.length() != 0) {
-                    if (then.length() != 0) {
-                        then.append(" & ").append(provider);
-                    } else {
-                        then.append(provider);
-                    }
+            }
+            if (provider.length() != 0) {
+                if (then.length() != 0) {
+                    then.append(" & ").append(provider);
+                } else {
+                    then.append(provider);
                 }
             }
         }
         return (when.append(" => ").append(then)).toString();
     }
 
-    private Route convertRouteToOldRoute(ConditionRouteDTO route) {
-        Route old = new Route();
-        old.setService(route.getService());
-        old.setEnabled(route.isEnabled());
-        old.setForce(route.isForce());
-        old.setRuntime(route.isRuntime());
-        old.setPriority(route.getPriority());
-        String rule = parseCondition(route.getConditions());
-        old.setRule(rule);
-        return old;
+    private List<Route> convertRouteToOldRoute(ConditionRouteDTO route) {
+    	List<Route> oldList = new LinkedList<Route>();
+    	for (String condition : route.getConditions()) {
+	        Route old = new Route();
+	        old.setService(route.getService());
+	        old.setEnabled(route.isEnabled());
+	        old.setForce(route.isForce());
+	        old.setRuntime(route.isRuntime());
+	        old.setPriority(route.getPriority());
+	        String rule = parseCondition(condition);
+	        old.setRule(rule);
+	        oldList.add(old);
+    	}
+        return oldList;
     }
 }