Adding enhancements to the GUI server-side.
Fixing a few intent-related glitches for the optical use-case.
Fixing lat/lng information in the optical config.

Change-Id: I6a1dd1ee69c2db2f0e351d191627bba468a3c49c
diff --git a/web/api/src/main/java/org/onlab/onos/rest/ConfigResource.java b/web/api/src/main/java/org/onlab/onos/rest/ConfigResource.java
index 34d5814..30fc51f 100644
--- a/web/api/src/main/java/org/onlab/onos/rest/ConfigResource.java
+++ b/web/api/src/main/java/org/onlab/onos/rest/ConfigResource.java
@@ -21,6 +21,8 @@
 import org.onlab.onos.net.host.HostProviderRegistry;
 import org.onlab.onos.net.link.LinkProviderRegistry;
 import org.onlab.rest.BaseResource;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import javax.ws.rs.Consumes;
 import javax.ws.rs.POST;
@@ -31,6 +33,8 @@
 import java.io.IOException;
 import java.io.InputStream;
 
+import static javax.ws.rs.core.Response.Status.INTERNAL_SERVER_ERROR;
+
 /**
  * Resource that acts as an ancillary provider for uploading pre-configured
  * devices, ports and links.
@@ -38,17 +42,24 @@
 @Path("config")
 public class ConfigResource extends BaseResource {
 
+    private static Logger log = LoggerFactory.getLogger(ConfigResource.class);
+
     @POST
     @Path("topology")
     @Consumes(MediaType.APPLICATION_JSON)
     @Produces(MediaType.APPLICATION_JSON)
     public Response topology(InputStream input) throws IOException {
-        ObjectMapper mapper = new ObjectMapper();
-        JsonNode cfg = mapper.readTree(input);
-        new ConfigProvider(cfg, get(DeviceProviderRegistry.class),
-                           get(LinkProviderRegistry.class),
-                           get(HostProviderRegistry.class)).parse();
-        return Response.ok(mapper.createObjectNode().toString()).build();
+        try {
+            ObjectMapper mapper = new ObjectMapper();
+            JsonNode cfg = mapper.readTree(input);
+            new ConfigProvider(cfg, get(DeviceProviderRegistry.class),
+                               get(LinkProviderRegistry.class),
+                               get(HostProviderRegistry.class)).parse();
+            return Response.ok(mapper.createObjectNode().toString()).build();
+        } catch (Exception e) {
+            log.error("Unable to parse topology configuration", e);
+            return Response.status(INTERNAL_SERVER_ERROR).entity(e.toString()).build();
+        }
     }
 
 }