ONOS-3760 Injection of mfg/hw/sw/serial in BasicDeviceConfig

Change-Id: I7f2269039e0cdabbee85cdad178c4ca27cdc2dce
diff --git a/core/api/src/main/java/org/onosproject/net/config/basics/BasicDeviceConfig.java b/core/api/src/main/java/org/onosproject/net/config/basics/BasicDeviceConfig.java
index ea40829..77073cb 100644
--- a/core/api/src/main/java/org/onosproject/net/config/basics/BasicDeviceConfig.java
+++ b/core/api/src/main/java/org/onosproject/net/config/basics/BasicDeviceConfig.java
@@ -26,11 +26,16 @@
     private static final String TYPE = "type";
     private static final String DRIVER = "driver";
     private static final String MANAGEMENT_ADDRESS = "managementAddress";
+    private static final String MANUFACTURER = "manufacturer";
+    private static final String HW_VERSION = "hwVersion";
+    private static final String SW_VERSION = "swVersion";
+    private static final String SERIAL = "serial";
 
     @Override
     public boolean isValid() {
         return hasOnlyFields(ALLOWED, NAME, LATITUDE, LONGITUDE, RACK_ADDRESS, OWNER,
-                             TYPE, DRIVER, MANAGEMENT_ADDRESS);
+                             TYPE, DRIVER, MANUFACTURER, HW_VERSION, SW_VERSION, SERIAL,
+                             MANAGEMENT_ADDRESS);
     }
 
     /**
@@ -55,7 +60,7 @@
     /**
      * Returns the device driver name.
      *
-     * @return driver name of null if not set
+     * @return driver name or null if not set
      */
     public String driver() {
         return get(DRIVER, null);
@@ -67,8 +72,84 @@
      * @param driverName new driver name; null to clear
      * @return self
      */
-    public BasicElementConfig driver(String driverName) {
-        return (BasicElementConfig) setOrClear(DRIVER, driverName);
+    public BasicDeviceConfig driver(String driverName) {
+        return (BasicDeviceConfig) setOrClear(DRIVER, driverName);
+    }
+
+    /**
+     * Returns the device manufacturer.
+     *
+     * @return manufacturer or null if not set
+     */
+    public String manufacturer() {
+        return get(MANUFACTURER, null);
+    }
+
+    /**
+     * Sets the device manufacturer.
+     *
+     * @param manufacturerName new manufacturer; null to clear
+     * @return self
+     */
+    public BasicDeviceConfig manufacturer(String manufacturerName) {
+        return (BasicDeviceConfig) setOrClear(MANUFACTURER, manufacturerName);
+    }
+
+    /**
+     * Returns the device hardware version.
+     *
+     * @return hardware version or null if not set
+     */
+    public String hwVersion() {
+        return get(HW_VERSION, null);
+    }
+
+    /**
+     * Sets the device hardware version.
+     *
+     * @param hwVersion new hardware version; null to clear
+     * @return self
+     */
+    public BasicDeviceConfig hwVersion(String hwVersion) {
+        return (BasicDeviceConfig) setOrClear(HW_VERSION, hwVersion);
+    }
+
+    /**
+     * Returns the device software version.
+     *
+     * @return software version or null if not set
+     */
+    public String swVersion() {
+        return get(SW_VERSION, null);
+    }
+
+    /**
+     * Sets the device software version.
+     *
+     * @param swVersion new software version; null to clear
+     * @return self
+     */
+    public BasicDeviceConfig swVersion(String swVersion) {
+        return (BasicDeviceConfig) setOrClear(SW_VERSION, swVersion);
+    }
+
+    /**
+     * Returns the device serial number.
+     *
+     * @return serial number or null if not set
+     */
+    public String serial() {
+        return get(SERIAL, null);
+    }
+
+    /**
+     * Sets the device serial number.
+     *
+     * @param serial new serial number; null to clear
+     * @return self
+     */
+    public BasicDeviceConfig serial(String serial) {
+        return (BasicDeviceConfig) setOrClear(SERIAL, serial);
     }
 
     /**
@@ -86,8 +167,8 @@
      * @param managementAddress new device management address (ip:port); null to clear
      * @return self
      */
-    public BasicElementConfig managementAddress(String managementAddress) {
-        return (BasicElementConfig) setOrClear(MANAGEMENT_ADDRESS, managementAddress);
+    public BasicDeviceConfig managementAddress(String managementAddress) {
+        return (BasicDeviceConfig) setOrClear(MANAGEMENT_ADDRESS, managementAddress);
     }
 
     // TODO: device port meta-data to be configured via BasicPortsConfig