Trigger conversion to JSON earlier.

- Lazy evaluation of JSON Representation was
  causing topology object outside readLock section,
  triggering ConcurrentModificationException during CHO tests.
  This patch forces evaluation while holding readLock.

Change-Id: I2d3cfde947c92246836a522ded77c11afec2df3a
diff --git a/src/main/java/net/onrc/onos/core/intent/runtime/web/ShortestPathResource.java b/src/main/java/net/onrc/onos/core/intent/runtime/web/ShortestPathResource.java
index 69e55d0..1abd61d 100644
--- a/src/main/java/net/onrc/onos/core/intent/runtime/web/ShortestPathResource.java
+++ b/src/main/java/net/onrc/onos/core/intent/runtime/web/ShortestPathResource.java
@@ -1,5 +1,6 @@
 package net.onrc.onos.core.intent.runtime.web;
 
+import static net.onrc.onos.core.topology.web.TopologyResource.eval;
 import java.util.LinkedList;
 import java.util.List;
 
@@ -11,6 +12,7 @@
 import net.onrc.onos.core.topology.Switch;
 import net.onrc.onos.core.topology.Topology;
 import net.onrc.onos.core.util.Dpid;
+
 import org.restlet.representation.Representation;
 import org.restlet.resource.Get;
 import org.restlet.resource.ServerResource;
@@ -74,7 +76,7 @@
                 }
                 links.add(link);
             }
-            return toRepresentation(links, null);
+            return eval(toRepresentation(links, null));
         } finally {
             topology.releaseReadLock();
         }
diff --git a/src/main/java/net/onrc/onos/core/topology/web/DevicesResource.java b/src/main/java/net/onrc/onos/core/topology/web/DevicesResource.java
index ccad694..ef5f4a3 100644
--- a/src/main/java/net/onrc/onos/core/topology/web/DevicesResource.java
+++ b/src/main/java/net/onrc/onos/core/topology/web/DevicesResource.java
@@ -1,5 +1,6 @@
 package net.onrc.onos.core.topology.web;
 
+import static net.onrc.onos.core.topology.web.TopologyResource.eval;
 import net.onrc.onos.core.topology.ITopologyService;
 import net.onrc.onos.core.topology.Topology;
 
@@ -26,7 +27,7 @@
         Topology topology = topologyService.getTopology();
         topology.acquireReadLock();
         try {
-            return toRepresentation(topology.getDevices(), null);
+            return eval(toRepresentation(topology.getDevices(), null));
         } finally {
             topology.releaseReadLock();
         }
diff --git a/src/main/java/net/onrc/onos/core/topology/web/LinksResource.java b/src/main/java/net/onrc/onos/core/topology/web/LinksResource.java
index 2cbf036..6d910a8 100644
--- a/src/main/java/net/onrc/onos/core/topology/web/LinksResource.java
+++ b/src/main/java/net/onrc/onos/core/topology/web/LinksResource.java
@@ -1,5 +1,6 @@
 package net.onrc.onos.core.topology.web;
 
+import static net.onrc.onos.core.topology.web.TopologyResource.eval;
 import net.onrc.onos.core.topology.ITopologyService;
 import net.onrc.onos.core.topology.Topology;
 
@@ -26,7 +27,7 @@
         Topology topology = topologyService.getTopology();
         topology.acquireReadLock();
         try {
-            return toRepresentation(topology.getLinks(), null);
+            return eval(toRepresentation(topology.getLinks(), null));
         } finally {
             topology.releaseReadLock();
         }
diff --git a/src/main/java/net/onrc/onos/core/topology/web/SwitchesResource.java b/src/main/java/net/onrc/onos/core/topology/web/SwitchesResource.java
index 1d4c9d6..dfb381e 100644
--- a/src/main/java/net/onrc/onos/core/topology/web/SwitchesResource.java
+++ b/src/main/java/net/onrc/onos/core/topology/web/SwitchesResource.java
@@ -1,5 +1,6 @@
 package net.onrc.onos.core.topology.web;
 
+import static net.onrc.onos.core.topology.web.TopologyResource.eval;
 import net.onrc.onos.core.topology.ITopologyService;
 import net.onrc.onos.core.topology.Topology;
 
@@ -26,7 +27,7 @@
         Topology topology = topologyService.getTopology();
         topology.acquireReadLock();
         try {
-            return toRepresentation(topology.getSwitches(), null);
+            return eval(toRepresentation(topology.getSwitches(), null));
         } finally {
             topology.releaseReadLock();
         }
diff --git a/src/main/java/net/onrc/onos/core/topology/web/TopologyResource.java b/src/main/java/net/onrc/onos/core/topology/web/TopologyResource.java
index c9476d0..8068552 100644
--- a/src/main/java/net/onrc/onos/core/topology/web/TopologyResource.java
+++ b/src/main/java/net/onrc/onos/core/topology/web/TopologyResource.java
@@ -3,6 +3,7 @@
 import net.onrc.onos.core.topology.ITopologyService;
 import net.onrc.onos.core.topology.Topology;
 
+import org.restlet.engine.io.BufferingRepresentation;
 import org.restlet.representation.Representation;
 import org.restlet.resource.Get;
 import org.restlet.resource.ServerResource;
@@ -25,9 +26,23 @@
         Topology topology = topologyService.getTopology();
         topology.acquireReadLock();
         try {
-            return toRepresentation(topology, null);
+            return eval(toRepresentation(topology, null));
         } finally {
             topology.releaseReadLock();
         }
     }
+
+    /**
+     * Workaround code to trigger evaluation of Representation immediately.
+     *
+     * @param repr Representation to evaluate immediately
+     * @return Evaluated Representation
+     */
+    public static Representation eval(final Representation repr) {
+
+        BufferingRepresentation eval = new BufferingRepresentation(repr);
+        // trigger evaluation
+        eval.getSize();
+        return eval;
+    }
 }