Adding device type

Adding device type on port(eg Ethernet Port,TPort,WPort), Link(Ethernet,Optical..) and Switch(Ethernet,Optical)
Updated Serializers.
Fixed javadoc issue for Enums.

ONOS-1428

Change-Id: Id3e3094f1fbf90154fff9a61e3c0ca36be69c281
diff --git a/src/main/java/net/onrc/onos/core/topology/Link.java b/src/main/java/net/onrc/onos/core/topology/Link.java
index 80d450e..087110f 100644
--- a/src/main/java/net/onrc/onos/core/topology/Link.java
+++ b/src/main/java/net/onrc/onos/core/topology/Link.java
@@ -65,4 +65,11 @@
      * @return the link capacity.
      */
     public Double getCapacity();
+
+    /**
+     * Returns the link type of the link.
+     *
+     * @return {@link LinkType} for this link
+     */
+    public LinkType getLinkType();
 }
diff --git a/src/main/java/net/onrc/onos/core/topology/LinkImpl.java b/src/main/java/net/onrc/onos/core/topology/LinkImpl.java
index dea629e..5886c8e 100644
--- a/src/main/java/net/onrc/onos/core/topology/LinkImpl.java
+++ b/src/main/java/net/onrc/onos/core/topology/LinkImpl.java
@@ -83,6 +83,17 @@
         return this.topology.getLinkEvent(id).getCapacity();
     }
 
+    /**
+     * Returns the link type of the link.
+     *
+     * @return {@link net.onrc.onos.core.topology.LinkType} for this link
+     */
+    @Override
+    public LinkType getLinkType() {
+        return LinkType.valueOf(getStringAttribute(TopologyElement.ELEMENT_TYPE,
+                LinkType.ETHERNET_LINK.toString()));
+    }
+
     @Override
     public String getStringAttribute(String attr) {
         return this.topology.getLinkEvent(id).getStringAttribute(attr);
diff --git a/src/main/java/net/onrc/onos/core/topology/LinkType.java b/src/main/java/net/onrc/onos/core/topology/LinkType.java
new file mode 100644
index 0000000..1c9d9d1
--- /dev/null
+++ b/src/main/java/net/onrc/onos/core/topology/LinkType.java
@@ -0,0 +1,16 @@
+package net.onrc.onos.core.topology;
+
+public enum LinkType {
+    /**
+     * Ethernet link is link between {@link PortType.ETHERNET_PORT}.
+     */
+    ETHERNET_LINK,
+    /**
+     * WDM Link is link between {@link PortType.WDM_PORT}.
+     */
+    WDM_LINK,
+    /**
+     * This link is link between {@link PortType.ETHERNET_PORT} and {@link PortType.TRANSPONDER_PORT}.
+     */
+    PACKET_TPORT_LINK;
+}
diff --git a/src/main/java/net/onrc/onos/core/topology/Port.java b/src/main/java/net/onrc/onos/core/topology/Port.java
index 2e428c7..5419c02 100644
--- a/src/main/java/net/onrc/onos/core/topology/Port.java
+++ b/src/main/java/net/onrc/onos/core/topology/Port.java
@@ -133,4 +133,12 @@
      * @return {@link Host}s attached to this port
      */
     public Collection<Host> getHosts();
+
+
+    /**
+     * Returns the port type of this port.
+     *
+     * @return {@link PortType}
+     */
+    public PortType getPortType();
 }
diff --git a/src/main/java/net/onrc/onos/core/topology/PortImpl.java b/src/main/java/net/onrc/onos/core/topology/PortImpl.java
index 2521a9a..3f4cdfb 100644
--- a/src/main/java/net/onrc/onos/core/topology/PortImpl.java
+++ b/src/main/java/net/onrc/onos/core/topology/PortImpl.java
@@ -152,6 +152,18 @@
         }
     }
 
+    /**
+     * Returns the port type of this port.
+     *
+     * @return {@link net.onrc.onos.core.topology.PortType}
+     */
+    @Override
+    public PortType getPortType() {
+        return PortType.valueOf(getStringAttribute(TopologyElement.ELEMENT_TYPE,
+                PortType.ETHERNET_PORT.toString()));
+    }
+
+
     @Override
     public String getStringAttribute(String attr) {
         return this.topology.getPortEvent(id).getStringAttribute(attr);
diff --git a/src/main/java/net/onrc/onos/core/topology/PortType.java b/src/main/java/net/onrc/onos/core/topology/PortType.java
new file mode 100644
index 0000000..6b5e6ca
--- /dev/null
+++ b/src/main/java/net/onrc/onos/core/topology/PortType.java
@@ -0,0 +1,18 @@
+package net.onrc.onos.core.topology;
+
+public enum PortType {
+    /**
+     *  Ethernet port is a port on Ethernet Switch.
+     */
+    ETHERNET_PORT,
+    /**
+     * WDM port is port connecting two Optical Switches,
+     * WDM port is only connected to another WDM port.
+     */
+    WDM_PORT,
+    /**
+     * Transponder port is a port on Optical Switch, which will be connected to Packet/Ethernet Switch.
+     * Transponder port is connected to Ethernet port.
+     */
+    TRANSPONDER_PORT;
+}
diff --git a/src/main/java/net/onrc/onos/core/topology/Switch.java b/src/main/java/net/onrc/onos/core/topology/Switch.java
index 67e9c94..7f52bd2 100644
--- a/src/main/java/net/onrc/onos/core/topology/Switch.java
+++ b/src/main/java/net/onrc/onos/core/topology/Switch.java
@@ -79,4 +79,11 @@
      * @return {@link Host}s attached to this switch
      */
     public Collection<Host> getHosts();
+
+    /**
+     * Returns the switch type of this switch.
+     *
+     * @return switch type {@link SwitchType} of this switch.
+     */
+    public SwitchType getSwitchType();
 }
diff --git a/src/main/java/net/onrc/onos/core/topology/SwitchImpl.java b/src/main/java/net/onrc/onos/core/topology/SwitchImpl.java
index de4194e..e0e02d5 100644
--- a/src/main/java/net/onrc/onos/core/topology/SwitchImpl.java
+++ b/src/main/java/net/onrc/onos/core/topology/SwitchImpl.java
@@ -98,6 +98,17 @@
         return hosts;
     }
 
+    /**
+     * Returns the switch type of this switch.
+     *
+     * @return switch type {@link net.onrc.onos.core.topology.SwitchType} of this switch.
+     */
+    @Override
+    public SwitchType getSwitchType() {
+        return SwitchType.valueOf(getStringAttribute(TopologyElement.ELEMENT_TYPE,
+                SwitchType.ETHERNET_SWITCH.toString()));
+    }
+
     @Override
     public Iterable<Link> getOutgoingLinks() {
         LinkedList<Link> links = new LinkedList<Link>();
diff --git a/src/main/java/net/onrc/onos/core/topology/SwitchType.java b/src/main/java/net/onrc/onos/core/topology/SwitchType.java
new file mode 100644
index 0000000..062a7ee
--- /dev/null
+++ b/src/main/java/net/onrc/onos/core/topology/SwitchType.java
@@ -0,0 +1,5 @@
+package net.onrc.onos.core.topology;
+
+public enum SwitchType {
+    ETHERNET_SWITCH, OPTICAL_SWITCH;
+}
diff --git a/src/main/java/net/onrc/onos/core/topology/TopologyElement.java b/src/main/java/net/onrc/onos/core/topology/TopologyElement.java
index a9cfbf8..f70e7f5 100644
--- a/src/main/java/net/onrc/onos/core/topology/TopologyElement.java
+++ b/src/main/java/net/onrc/onos/core/topology/TopologyElement.java
@@ -38,6 +38,11 @@
 
     public static final String ELEMENT_ADMIN_STATUS = "AdminStatus";
 
+    /**
+     * Attribute name for device type.
+     */
+    public static final String ELEMENT_TYPE = "ElementType";
+
     private boolean isFrozen = false;
 
     private ConcurrentMap<String, String> stringAttributes;
diff --git a/src/main/java/net/onrc/onos/core/topology/web/serializers/LinkSerializer.java b/src/main/java/net/onrc/onos/core/topology/web/serializers/LinkSerializer.java
index b0984da..78f344f 100644
--- a/src/main/java/net/onrc/onos/core/topology/web/serializers/LinkSerializer.java
+++ b/src/main/java/net/onrc/onos/core/topology/web/serializers/LinkSerializer.java
@@ -34,6 +34,7 @@
         //
         jsonGenerator.writeStartObject();
         jsonGenerator.writeStringField(TopologyElement.TYPE, link.getType());
+        jsonGenerator.writeStringField(TopologyElement.ELEMENT_TYPE, link.getLinkType().toString());
         jsonGenerator.writeObjectField("src", link.getSrcPort().getSwitchPort());
         jsonGenerator.writeObjectField("dst", link.getDstPort().getSwitchPort());
         jsonGenerator.writeObjectFieldStart("stringAttributes");
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 ff08f5b..2da7cfd 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
@@ -34,6 +34,7 @@
 
         jsonGenerator.writeStartObject();
         jsonGenerator.writeStringField(TopologyElement.TYPE, port.getType());
+        jsonGenerator.writeStringField(TopologyElement.ELEMENT_TYPE, port.getPortType().toString());
         jsonGenerator.writeStringField("state", "ACTIVE");
         jsonGenerator.writeStringField("dpid", port.getDpid().toString());
         jsonGenerator.writeNumberField("portNumber",
diff --git a/src/main/java/net/onrc/onos/core/topology/web/serializers/SwitchSerializer.java b/src/main/java/net/onrc/onos/core/topology/web/serializers/SwitchSerializer.java
index 69a5cac..3f49a98 100644
--- a/src/main/java/net/onrc/onos/core/topology/web/serializers/SwitchSerializer.java
+++ b/src/main/java/net/onrc/onos/core/topology/web/serializers/SwitchSerializer.java
@@ -34,6 +34,7 @@
 
         jsonGenerator.writeStartObject();
         jsonGenerator.writeStringField(TopologyElement.TYPE, sw.getType());
+        jsonGenerator.writeStringField(TopologyElement.ELEMENT_TYPE, sw.getSwitchType().toString());
         jsonGenerator.writeStringField("dpid", sw.getDpid().toString());
         jsonGenerator.writeStringField("state", "ACTIVE");
         jsonGenerator.writeArrayFieldStart("ports");