Rest-intent
- add get intent by id
- fix problem of not returning the correct intent id at creation to UI.
- create script for mesh mininet topology

Change-Id: I5fc4f008ab2d31a63d222f3e42502408dc25fe6b
diff --git a/src/main/java/net/onrc/onos/datagrid/web/DatagridWebRoutable.java b/src/main/java/net/onrc/onos/datagrid/web/DatagridWebRoutable.java
index 99f79fc..28399c8 100755
--- a/src/main/java/net/onrc/onos/datagrid/web/DatagridWebRoutable.java
+++ b/src/main/java/net/onrc/onos/datagrid/web/DatagridWebRoutable.java
@@ -19,6 +19,7 @@
         router.attach("/get/map/{map-name}/json", GetMapResource.class);
         router.attach("/add/intents/json", IntentResource.class);
         router.attach("/get/intents/json", IntentResource.class);
+        router.attach("/get/intent/{intent_id}/json", IntentResource.class);
         return router;
     }
 
diff --git a/src/main/java/net/onrc/onos/datagrid/web/IntentResource.java b/src/main/java/net/onrc/onos/datagrid/web/IntentResource.java
index daf786f..7a2cdd9 100755
--- a/src/main/java/net/onrc/onos/datagrid/web/IntentResource.java
+++ b/src/main/java/net/onrc/onos/datagrid/web/IntentResource.java
@@ -105,17 +105,29 @@
                 getAttributes().get(IPathCalcRuntimeService.class.getCanonicalName());
         ObjectMapper mapper = new ObjectMapper();
         String restStr = "";
+
+        String intentId = (String) getRequestAttributes().get("intent_id");
         ArrayNode arrayNode = mapper.createArrayNode();
         IntentMap intentMap = pathRuntime.getHighLevelIntents();
         Collection<Intent> intents = intentMap.getAllIntents();
         if (!intents.isEmpty()) {
-            for (Intent intent : intents) {
-                ObjectNode node = mapper.createObjectNode();
-                node.put("intent_id", intent.getId());
-                node.put("status", intent.getState().toString());
-                arrayNode.add(node);
-                restStr = mapper.writeValueAsString(arrayNode);
+            if ((intentId != null )) {
+                Intent intent = intentMap.getIntent(intentId);
+                if (intent != null) {
+                    ObjectNode node = mapper.createObjectNode();
+                    node.put("intent_id", intent.getId());
+                    node.put("status", intent.getState().toString());
+                    arrayNode.add(node);
+                }
+            } else {
+                for (Intent intent : intents) {
+                    ObjectNode node = mapper.createObjectNode();
+                    node.put("intent_id", intent.getId());
+                    node.put("status", intent.getState().toString());
+                    arrayNode.add(node);
+                }
             }
+            restStr = mapper.writeValueAsString(arrayNode);
         }
         return restStr;
     }
@@ -146,9 +158,8 @@
 
     private void appendIntentStatus(String status, final String applnIntentId, 
             ObjectMapper mapper, ArrayNode arrayNode) throws IOException {
-        String intentId = applnIntentId.split(":")[1];
         ObjectNode node = mapper.createObjectNode();
-        node.put("intent_id", intentId);
+        node.put("intent_id", applnIntentId);
         node.put("status", status);
         arrayNode.add(node);
     }
diff --git a/src/main/java/net/onrc/onos/intent/persist/PersistIntent.java b/src/main/java/net/onrc/onos/intent/persist/PersistIntent.java
index 860b6dd..691a656 100755
--- a/src/main/java/net/onrc/onos/intent/persist/PersistIntent.java
+++ b/src/main/java/net/onrc/onos/intent/persist/PersistIntent.java
@@ -5,21 +5,19 @@
 package net.onrc.onos.intent.persist;
 
 import com.esotericsoftware.kryo.Kryo;
-import com.esotericsoftware.kryo.Serializer;
-import com.esotericsoftware.kryo.io.Input;
 import com.esotericsoftware.kryo.io.Output;
 import edu.stanford.ramcloud.JRamCloud;
 import java.io.ByteArrayOutputStream;
 import java.util.concurrent.atomic.AtomicLong;
-import java.util.logging.Level;
-import java.util.logging.Logger;
 import net.onrc.onos.datagrid.web.IntentResource;
 import net.onrc.onos.datastore.RCTable;
 import net.onrc.onos.intent.IntentOperationList;
 import net.onrc.onos.ofcontroller.networkgraph.INetworkGraphService;
 import net.onrc.onos.ofcontroller.networkgraph.NetworkGraph;
+import net.onrc.onos.ofcontroller.util.serializers.KryoFactory;
 import net.onrc.onos.registry.controller.IControllerRegistryService;
 import net.onrc.onos.registry.controller.IdBlock;
+import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 /**
@@ -27,7 +25,7 @@
  * @author nickkaranatsios
  */
 public class PersistIntent {
-    private final static org.slf4j.Logger log = LoggerFactory.getLogger(IntentResource.class);
+    private final static Logger log = LoggerFactory.getLogger(IntentResource.class);
     private final static long range = 10000;
     private final IControllerRegistryService controllerRegistry;
     NetworkGraph graph = null;
@@ -45,7 +43,7 @@
         this.controllerRegistry = controllerRegistry;
         this.graph = ng.getNetworkGraph();
         table = RCTable.getTable(intentJournal);
-        stream = new ByteArrayOutputStream();
+        stream = new ByteArrayOutputStream(1024);
         output = new Output(stream);
     }
     
@@ -75,12 +73,12 @@
         // TODO call controllerRegistry.isClusterLeader()
         if (leader) {
             try {
-                System.out.println("persist operations to ramcloud");
+                System.out.println("persist operations to ramcloud size of operations: " + operations.size());
                 kryo.writeObject(output, operations);
                 output.close();
                 byte[] buffer = stream.toByteArray();
                 table.create(String.valueOf(key).getBytes(), buffer);
-                System.out.println("key is " + key);
+                System.out.println("key is " + key + " value length is " + buffer.length);
                 ret = true;
             } catch (JRamCloud.ObjectExistsException ex) {
                 log.warn("Failed to store intent journal with key " + key);