Updated and refactored the JSON serialization of Topology-related
and "Low Intent" objects:

* Added JSON serialization for topology-related FooEvent objects
  For now, their format matches exactly the corresponding Topology Foo object:
  - DeviceEvent: matches Device
  - SwitchEvent: matches Switch
  - PortEvent: matches Port
  - LinkEvent: matches Link

* Refactored the JSON serialization of existing objects so it
  is more consistent:

============================================
  - Topology Device serialization: "port" is renamed to "portNumber"

  OLD:
{
    "mac": "00:01:02:03:04:05"
    "attachmentPoints": [
        {
            "dpid": "11:22:33:44:55:66:77:88",
            "port": 1
        },
        ...
    ]
}

  NEW:
{
    "mac": "00:01:02:03:04:05"
    "attachmentPoints": [
        {
            "dpid": "11:22:33:44:55:66:77:88",
            "portNumber": 1
        },
        ...
    ]
}
============================================
   - Low Level Intent serialization (LinkEvent used by "path"):
     portNumber is an integer instead of a string

OLD:
[
        ...
        "path": [
            {
                "src": {
                    "portNumber": "2",
                    "dpid": "00:00:00:00:00:00:02:02"
                },
                "dst": {
                    "portNumber": "2",
                    "dpid": "00:00:00:00:00:00:02:01"
                }
            },

NEW:
[
        ...
        "path": [
            {
                "src": {
                    "portNumber": 2,
                    "dpid": "00:00:00:00:00:00:02:02"
                },
                "dst": {
                    "portNumber": 2,
                    "dpid": "00:00:00:00:00:00:02:01"
                }
            },
============================================
   - Topology Link serialization: Format changed to match LinkEvent (and SwitchPort):

OLD:
{
    ...
    "links": [
        {
            "dst-switch": "00:00:00:00:00:00:01:03",
            "src-switch": "00:00:00:00:00:00:01:06",
            "src-port": 3,
            "dst-port": 4
        },

NEW:
{
    ...
    "links": [
        {
            "src": {
                "portNumber": 3,
                "dpid": "00:00:00:00:00:00:01:06"
            },
            "dst": {
                "portNumber": 4,
                "dpid": "00:00:00:00:00:00:01:03"
            }
        },

============================================
    - Topology Port serialization: Renamed "number" to "portNumber"

OLD:
{
    "switches": [
        {
            "state": "ACTIVE",
            "ports": [
                {
                    "state": "ACTIVE",
                    "desc": null,
                    "number": 1,
                    "dpid": "00:00:00:00:00:00:04:0e"
                },

NEW:
{
    "switches": [
        {
            "state": "ACTIVE",
            "ports": [
                {
                    "state": "ACTIVE",
                    "desc": null,
                    "portNumber": 1,
                    "dpid": "00:00:00:00:00:00:04:0e"
                },

============================================
      - SwitchPort serialization (used in number of places referred above):
        portNumber is an integer instead of a string
OLD:
                {
                    "portNumber": "2",
                    "dpid": "00:00:00:00:00:00:02:02"
                }

NEW:
                {
                    "portNumber": 2,
                    "dpid": "00:00:00:00:00:00:02:02"
                }

======================

* Added JSON serialization for TopologyEvents. The format is:

{
    "addedSwitches": [
        {
            "state": "ACTIVE",
            "ports": [
            ],
            "dpid": "00:00:00:00:00:00:02:07"
        },
        ...
    ],
    "removedSwitches": [
        {
            "state": "ACTIVE",
            "ports": [
            ],
            "dpid": "00:00:00:00:00:00:02:08"
        },
        ...
    ],
    "addedPorts": [
        {
            "state": "ACTIVE",
            "desc": null,
            "portNumber": 1,
            "dpid": "00:00:00:00:00:00:02:07"
        },
        ...
    ],
    "removedPorts": [
        {
            "state": "ACTIVE",
            "desc": null,
            "portNumber": 1,
            "dpid": "00:00:00:00:00:00:02:08"
        },
        ...
    ],
    "addedLinks": [
        {
            "src": {
                "portNumber": 10,
                "dpid": "00:00:00:00:00:00:04:01"
            },
            "dst": {
                "portNumber": 2,
                "dpid": "00:00:00:00:00:00:04:0a"
            }
        },
        ...
    ],
    "removedLinks": [
        {
            "src": {
                "portNumber": 5,
                "dpid": "00:00:00:00:00:00:05:01"
            },
            "dst": {
                "portNumber": 6,
                "dpid": "00:00:00:00:00:00:05:0a"
            }
        },
        ...
    ],
    "addedHosts": [
        {
            "mac": "00:01:02:03:04:05"
            "attachmentPoints": [
                {
                    "dpid": "11:22:33:44:55:66:77:88",
                    "port": 1
                },
                ...
            ]
        },
        ...
    ],
    "removedHosts": [
        {
            "mac": "00:01:02:03:08:08"
            "attachmentPoints": [
                {
                    "dpid": "11:22:33:44:55:11:11:11",
                    "port": 1
                },
                ...
            ]
        },
        ...
    ]
}

Change-Id: Ib72be653bc03444b888c0417b3f026966a7df3f3
diff --git a/src/main/java/net/onrc/onos/core/topology/web/serializers/PortSerializer.java b/src/main/java/net/onrc/onos/core/topology/web/serializers/PortSerializer.java
index 52fbe44..a0d7385 100644
--- a/src/main/java/net/onrc/onos/core/topology/web/serializers/PortSerializer.java
+++ b/src/main/java/net/onrc/onos/core/topology/web/serializers/PortSerializer.java
@@ -18,12 +18,23 @@
     public void serialize(Port port, JsonGenerator jsonGenerator,
                           SerializerProvider serializerProvider)
             throws IOException {
+        //
+        // TODO: For now, the JSON format of the serialized output should
+        // be same as the JSON format of the corresponding class PortEvent.
+        // In the future, we will use a single serializer.
+        //
+
         jsonGenerator.writeStartObject();
         jsonGenerator.writeStringField("state", "ACTIVE");
         jsonGenerator.writeStringField("dpid", port.getDpid().toString());
-        jsonGenerator.writeNumberField("number", port.getNumber().value());
+        //
+        // FIXME: The solution below to preresent the "short" port number
+        // as an unsigned value is a hack. The fix should be elsewhere
+        // (e.g., in class PortNumber itself).
+        //
+        jsonGenerator.writeNumberField("portNumber",
+                                       (0xffff & port.getNumber().value()));
         jsonGenerator.writeStringField("desc", port.getDescription());
         jsonGenerator.writeEndObject();
     }
-
 }