Optimize xsql's use of collections 43/12643/9
authorRobert Varga <rovarga@cisco.com>
Fri, 7 Nov 2014 19:03:32 +0000 (20:03 +0100)
committerRobert Varga <rovarga@cisco.com>
Tue, 25 Nov 2014 15:39:06 +0000 (15:39 +0000)
Rather than performing class comparisons, we perform a simple
instanceof check... and then rather than adding items one at a time, we
use Collections.addAll().

Change-Id: I2e73788ab6f1625291970ad9b32d3b5d18ee8205
Signed-off-by: Robert Varga <rovarga@cisco.com>
opendaylight/md-sal/sal-dom-xsql/src/main/java/org/opendaylight/controller/md/sal/dom/xsql/XSQLBluePrintRelation.java

index 9053f00aae32d09768efd4f159bf29e7a3cd8250..55a35e041a9478d55331966ec9af6d4534c22fe4 100644 (file)
@@ -81,59 +81,39 @@ public class XSQLBluePrintRelation implements Serializable {
     }
 
     public List<?> execute(Object o) {
-        List<Object> result = new LinkedList<>();
         if (o == null) {
             return null;
         }
 
-        if (Set.class.isAssignableFrom(o.getClass())) {
-            Set<?> lst = (Set<?>) o;
-            for (Object oo : lst) {
+        List<Object> result = new LinkedList<>();
+        if (o instanceof Set) {
+            for (Object oo : (Set<?>) o) {
                 addToResult(result, execute(oo));
             }
-            return result;
-        } else if (List.class.isAssignableFrom(o.getClass())) {
-            List<?> lst = (List<?>) o;
-            for (Object oo : lst) {
+        } else if (o instanceof List) {
+            for (Object oo : (List<?>) o) {
                 addToResult(result, execute(oo));
             }
-            return result;
-        } else if (Map.class.isAssignableFrom(o.getClass())) {
-            Map<?, ?> map = (Map<?, ?>) o;
-            for (Object oo : map.values()) {
+        } else if (o instanceof Map) {
+            for (Object oo : ((Map<?, ?>) o).values()) {
                 addToResult(result, execute(oo));
             }
-            return result;
+        } else {
+            addToResult(result, XSQLCriteria.getValue(o, this.property));
         }
-
-        addToResult(result, XSQLCriteria.getValue(o, this.property));
-
         return result;
     }
 
     private static void addToResult(List<Object> result, Object o) {
-        if (o == null) {
-            return;
-        }
-        if (Set.class.isAssignableFrom(o.getClass())) {
-            Set<?> lst = (Set<?>) o;
-            for (Object oo : lst) {
-                result.add(oo);
-            }
-        } else if (List.class.isAssignableFrom(o.getClass())) {
-            List<?> lst = (List<?>) o;
-            for (Object oo : lst) {
-                result.add(oo);
-            }
-        } else if (Map.class.isAssignableFrom(o.getClass())) {
-            Map<?, ?> map = (Map<?, ?>) o;
-            for (Object oo : map.values()) {
-                result.add(oo);
-            }
-        } else {
+        if (o instanceof Set) {
+            result.addAll((Set<?>)o);
+        } else if (o instanceof List) {
+            result.addAll((List<?>)o);
+        } else if (o instanceof Map) {
+            result.addAll(((Map<?, ?>)o).values());
+        } else if (o != null) {
             result.add(o);
         }
     }
-
 }