Refactored bridge config to take bridge description

OVSDB provides lots of bridge configuration options but the exisisting
bridge config implementation only allows some of them by overloading
addBridge method. Also some of the bridge properties were set static
and unable to configure. This patch fixes these limitations.

- Added some bridge config options to the bridge description
- Deprecated multiple overloaded addBridge methods
- Some code clean up

Change-Id: Ibc828177b210bd4b215aea0b63cc359776c13e03
diff --git a/protocols/ovsdb/api/src/main/java/org/onosproject/ovsdb/controller/driver/DefaultOvsdbClient.java b/protocols/ovsdb/api/src/main/java/org/onosproject/ovsdb/controller/driver/DefaultOvsdbClient.java
index 3649866..cbb94ac 100644
--- a/protocols/ovsdb/api/src/main/java/org/onosproject/ovsdb/controller/driver/DefaultOvsdbClient.java
+++ b/protocols/ovsdb/api/src/main/java/org/onosproject/ovsdb/controller/driver/DefaultOvsdbClient.java
@@ -17,7 +17,6 @@
 
 import com.fasterxml.jackson.databind.JsonNode;
 import com.google.common.base.Function;
-import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 import com.google.common.collect.Sets;
@@ -29,12 +28,10 @@
 
 import org.onlab.packet.IpAddress;
 import org.onosproject.net.DeviceId;
+import org.onosproject.net.behaviour.BridgeDescription;
 import org.onosproject.net.behaviour.ControllerInfo;
 import org.onosproject.ovsdb.controller.OvsdbBridge;
-import org.onosproject.ovsdb.controller.OvsdbBridgeName;
 import org.onosproject.ovsdb.controller.OvsdbClientService;
-import org.onosproject.ovsdb.controller.OvsdbConstant;
-import org.onosproject.ovsdb.controller.OvsdbDatapathId;
 import org.onosproject.ovsdb.controller.OvsdbNodeId;
 import org.onosproject.ovsdb.controller.OvsdbPort;
 import org.onosproject.ovsdb.controller.OvsdbPortName;
@@ -43,7 +40,6 @@
 import org.onosproject.ovsdb.controller.OvsdbStore;
 import org.onosproject.ovsdb.controller.OvsdbTableStore;
 import org.onosproject.ovsdb.controller.OvsdbTunnel;
-import org.onosproject.ovsdb.rfc.exception.BridgeCreateException;
 import org.onosproject.ovsdb.rfc.jsonrpc.Callback;
 import org.onosproject.ovsdb.rfc.message.OperationResult;
 import org.onosproject.ovsdb.rfc.message.TableUpdates;
@@ -77,7 +73,6 @@
 import java.net.InetSocketAddress;
 import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
@@ -88,28 +83,24 @@
 import java.util.concurrent.atomic.AtomicReference;
 import java.util.stream.Collectors;
 
+import static org.onosproject.ovsdb.controller.OvsdbConstant.*;
+
 /**
  * An representation of an ovsdb client.
  */
-public class DefaultOvsdbClient
-        implements OvsdbProviderService, OvsdbClientService {
+public class DefaultOvsdbClient implements OvsdbProviderService, OvsdbClientService {
 
-    private final Logger log = LoggerFactory
-            .getLogger(DefaultOvsdbClient.class);
+    private final Logger log = LoggerFactory.getLogger(DefaultOvsdbClient.class);
 
     private Channel channel;
-
     private OvsdbAgent agent;
     private boolean connected;
     private OvsdbNodeId nodeId;
     private Callback monitorCallBack;
-
     private OvsdbStore ovsdbStore = new OvsdbStore();
 
     private final Map<String, String> requestMethod = Maps.newHashMap();
-    private final Map<String, SettableFuture<? extends Object>> requestResult = Maps
-            .newHashMap();
-
+    private final Map<String, SettableFuture<? extends Object>> requestResult = Maps.newHashMap();
     private final Map<String, DatabaseSchema> schema = Maps.newHashMap();
     private final Set<OvsdbTunnel> ovsdbTunnels = new HashSet<OvsdbTunnel>();
 
@@ -245,11 +236,9 @@
 
     @Override
     public String getPortUuid(String portName, String bridgeUuid) {
-        DatabaseSchema dbSchema = schema.get(OvsdbConstant.DATABASENAME);
+        DatabaseSchema dbSchema = schema.get(DATABASENAME);
 
-        Row bridgeRow = getRow(OvsdbConstant.DATABASENAME,
-                               OvsdbConstant.BRIDGE, bridgeUuid);
-
+        Row bridgeRow = getRow(DATABASENAME, BRIDGE, bridgeUuid);
         Bridge bridge = (Bridge) TableGenerator.getTable(dbSchema, bridgeRow,
                                                          OvsdbTable.BRIDGE);
         if (bridge != null) {
@@ -262,27 +251,23 @@
             }
 
             for (Uuid uuid : ports) {
-                Row portRow = getRow(OvsdbConstant.DATABASENAME,
-                                     OvsdbConstant.PORT, uuid.value());
+                Row portRow = getRow(DATABASENAME, PORT, uuid.value());
                 Port port = (Port) TableGenerator.getTable(dbSchema, portRow,
                                                            OvsdbTable.PORT);
                 if (port != null && portName.equalsIgnoreCase(port.getName())) {
                     return uuid.value();
                 }
             }
-
         }
         return null;
     }
 
     @Override
     public String getInterfaceUuid(String portUuid, String portName) {
-        DatabaseSchema dbSchema = schema.get(OvsdbConstant.DATABASENAME);
+        DatabaseSchema dbSchema = schema.get(DATABASENAME);
 
-        Row portRow = getRow(OvsdbConstant.DATABASENAME, OvsdbConstant.PORT,
-                             portUuid);
-        Port port = (Port) TableGenerator.getTable(dbSchema, portRow,
-                                                   OvsdbTable.PORT);
+        Row portRow = getRow(DATABASENAME, PORT, portUuid);
+        Port port = (Port) TableGenerator.getTable(dbSchema, portRow, OvsdbTable.PORT);
 
         if (port != null) {
             OvsdbSet setInterfaces = (OvsdbSet) port.getInterfacesColumn().data();
@@ -295,26 +280,22 @@
             }
 
             for (Uuid uuid : interfaces) {
-                Row intfRow = getRow(OvsdbConstant.DATABASENAME,
-                                     OvsdbConstant.INTERFACE, uuid.value());
+                Row intfRow = getRow(DATABASENAME, INTERFACE, uuid.value());
                 Interface intf = (Interface) TableGenerator
                         .getTable(dbSchema, intfRow, OvsdbTable.INTERFACE);
                 if (intf != null && portName.equalsIgnoreCase(intf.getName())) {
                     return uuid.value();
                 }
             }
-
         }
-
         return null;
     }
 
     @Override
     public String getBridgeUuid(String bridgeName) {
-        DatabaseSchema dbSchema = schema.get(OvsdbConstant.DATABASENAME);
+        DatabaseSchema dbSchema = schema.get(DATABASENAME);
 
-        OvsdbRowStore rowStore = getRowStore(OvsdbConstant.DATABASENAME,
-                                             OvsdbConstant.BRIDGE);
+        OvsdbRowStore rowStore = getRowStore(DATABASENAME, BRIDGE);
         if (rowStore == null) {
             log.debug("The bridge uuid is null");
             return null;
@@ -328,23 +309,18 @@
 
         for (String uuid : bridgeTableRows.keySet()) {
             Bridge bridge = (Bridge) TableGenerator
-                    .getTable(dbSchema, bridgeTableRows.get(uuid),
-                              OvsdbTable.BRIDGE);
-
+                    .getTable(dbSchema, bridgeTableRows.get(uuid), OvsdbTable.BRIDGE);
             if (bridge.getName().equals(bridgeName)) {
                 return uuid;
             }
-
         }
         return null;
     }
 
     @Override
-    public String getControllerUuid(String controllerName,
-                                    String controllerTarget) {
-        DatabaseSchema dbSchema = schema.get(OvsdbConstant.DATABASENAME);
-        OvsdbRowStore rowStore = getRowStore(OvsdbConstant.DATABASENAME,
-                                             OvsdbConstant.CONTROLLER);
+    public String getControllerUuid(String controllerName, String controllerTarget) {
+        DatabaseSchema dbSchema = schema.get(DATABASENAME);
+        OvsdbRowStore rowStore = getRowStore(DATABASENAME, CONTROLLER);
         if (rowStore == null) {
             log.debug("The controller uuid is null");
             return null;
@@ -353,7 +329,6 @@
         ConcurrentMap<String, Row> controllerTableRows = rowStore.getRowStore();
         if (controllerTableRows != null) {
             for (String uuid : controllerTableRows.keySet()) {
-
                 Controller controller = (Controller) TableGenerator
                         .getTable(dbSchema, controllerTableRows.get(uuid),
                                   OvsdbTable.CONTROLLER);
@@ -361,7 +336,6 @@
                 if (target.equalsIgnoreCase(controllerTarget)) {
                     return uuid;
                 }
-
             }
         }
         return null;
@@ -369,8 +343,7 @@
 
     @Override
     public String getOvsUuid(String dbName) {
-        OvsdbRowStore rowStore = getRowStore(OvsdbConstant.DATABASENAME,
-                                             OvsdbConstant.DATABASENAME);
+        OvsdbRowStore rowStore = getRowStore(DATABASENAME, DATABASENAME);
         if (rowStore == null) {
             log.debug("The bridge uuid is null");
             return null;
@@ -392,26 +365,19 @@
     public void createPort(String bridgeName, String portName) {
         String bridgeUuid = getBridgeUuid(bridgeName);
         if (bridgeUuid == null) {
-            log.error("Can't find bridge {} in {}", bridgeName,
-                      nodeId.getIpAddress());
+            log.error("Can't find bridge {} in {}", bridgeName, nodeId.getIpAddress());
             return;
         }
 
-        DatabaseSchema dbSchema = schema.get(OvsdbConstant.DATABASENAME);
+        DatabaseSchema dbSchema = schema.get(DATABASENAME);
         String portUuid = getPortUuid(portName, bridgeUuid);
-
-        Port port = (Port) TableGenerator
-                .createTable(dbSchema, OvsdbTable.PORT);
-
+        Port port = (Port) TableGenerator.createTable(dbSchema, OvsdbTable.PORT);
         port.setName(portName);
         if (portUuid == null) {
-            insertConfig(OvsdbConstant.PORT, "_uuid", OvsdbConstant.BRIDGE,
-                         "ports", bridgeUuid, port.getRow());
+            insertConfig(PORT, UUID, BRIDGE, PORTS, bridgeUuid, port.getRow());
         } else {
-            updateConfig(OvsdbConstant.PORT, "_uuid", portUuid, port.getRow());
+            updateConfig(PORT, UUID, portUuid, port.getRow());
         }
-
-        return;
     }
 
     @Override
@@ -425,220 +391,103 @@
         String portUuid = getPortUuid(portName, bridgeUuid);
         if (portUuid != null) {
             log.info("Port {} delete", portName);
-            deleteConfig(OvsdbConstant.PORT, "_uuid", portUuid,
-                         OvsdbConstant.BRIDGE, "ports");
+            deleteConfig(PORT, UUID, portUuid, BRIDGE, PORTS);
         }
     }
 
+    @Deprecated
     @Override
     public void createBridge(String bridgeName) {
-        log.debug("create bridge {}", bridgeName);
+        OvsdbBridge ovsdbBridge = OvsdbBridge.builder()
+                .name(bridgeName)
+                .build();
 
-        DatabaseSchema dbSchema = schema.get(OvsdbConstant.DATABASENAME);
-        if (dbSchema == null) {
-            log.warn("The schema is null");
-            return;
-        }
-
-        Bridge bridge = (Bridge) TableGenerator.createTable(dbSchema,
-                                                            OvsdbTable.BRIDGE);
-        if (bridge == null) {
-            log.debug("Can not create bridge");
-            return;
-        }
-
-        Set<String> failModes = new HashSet<>();
-        failModes.add("secure");
-        bridge.setFailMode(failModes);
-
-        Set<String> protocols = new HashSet<>();
-        protocols.add(OvsdbConstant.OPENFLOW13);
-        bridge.setProtocols(protocols);
-
-        String ovsUuid = getOvsUuid(OvsdbConstant.DATABASENAME);
-        if (ovsUuid == null) {
-            log.warn("The Open_vSwitch is null");
-            return;
-        }
-
-        Map<String, String> options = new HashMap<>();
-        options.put("disable-in-band", "true");
-        bridge.setOtherConfig(options);
-
-        String bridgeUuid = getBridgeUuid(bridgeName);
-        if (bridgeUuid == null) {
-            log.debug("Create a new bridge");
-
-            bridge.setName(bridgeName);
-            bridgeUuid = insertConfig(OvsdbConstant.BRIDGE, "_uuid",
-                                      OvsdbConstant.DATABASENAME, "bridges",
-                                      ovsUuid, bridge.getRow());
-
-            if (bridgeUuid != null) {
-                Port port = (Port) TableGenerator.createTable(dbSchema,
-                                                              OvsdbTable.PORT);
-                if (port != null) {
-                    log.debug("the port is not null");
-                    port.setName(bridgeName);
-
-                    insertConfig(OvsdbConstant.PORT, "_uuid", "Bridge", "ports", bridgeUuid,
-                                 port.getRow());
-                }
-            } else {
-                String message = BridgeCreateException.createMessage(ovsUuid);
-                throw new BridgeCreateException(message);
-            }
-
-        } else {
-            log.info("Update a bridge");
-            updateConfig(OvsdbConstant.BRIDGE, "_uuid", bridgeUuid, bridge.getRow());
-        }
-
-        setControllerAuto(bridgeUuid);
-        log.info("Create bridge success");
+        createBridge(ovsdbBridge);
     }
 
+    @Deprecated
     @Override
     public void createBridge(String bridgeName, String dpid, String exPortName) {
-        log.debug("create bridge {}", bridgeName);
+        OvsdbBridge ovsdbBridge = OvsdbBridge.builder()
+                .name(bridgeName)
+                .failMode(BridgeDescription.FailMode.SECURE)
+                .datapathId(dpid)
+                .disableInBand()
+                .controllers(Lists.newArrayList(localController()))
+                .build();
 
-        DatabaseSchema dbSchema = schema.get(OvsdbConstant.DATABASENAME);
-        if (dbSchema == null) {
-            log.warn("The schema is null");
-            return;
-        }
+        createBridge(ovsdbBridge);
 
-        Bridge bridge = (Bridge) TableGenerator.createTable(dbSchema,
-                                                            OvsdbTable.BRIDGE);
-        if (bridge == null) {
-            log.debug("Can not create bridge");
-            return;
-        }
-
-        Set<String> failModes = new HashSet<>();
-        failModes.add("secure");
-        bridge.setFailMode(failModes);
-
-        Set<String> protocols = new HashSet<>();
-        protocols.add(OvsdbConstant.OPENFLOW13);
-        bridge.setProtocols(protocols);
-
-        String ovsUuid = getOvsUuid(OvsdbConstant.DATABASENAME);
-        if (ovsUuid == null) {
-            log.warn("The Open_vSwitch is null");
-            return;
-        }
-
-        Map<String, String> options = new HashMap<>();
-        options.put("disable-in-band", "true");
-        if (dpid != null) {
-            options.put("datapath-id", dpid);
-        }
-        bridge.setOtherConfig(options);
-
-        String bridgeUuid = getBridgeUuid(bridgeName);
-        if (bridgeUuid == null) {
-            log.debug("Create a new bridge");
-
-            bridge.setName(bridgeName);
-            bridgeUuid = insertConfig(OvsdbConstant.BRIDGE, "_uuid",
-                                      OvsdbConstant.DATABASENAME, "bridges",
-                                      ovsUuid, bridge.getRow());
-
-            if (bridgeUuid != null) {
-                Port port = (Port) TableGenerator.createTable(dbSchema,
-                                                              OvsdbTable.PORT);
-                if (port != null) {
-                    log.debug("the port is not null");
-                    port.setName(bridgeName);
-
-                    insertConfig(OvsdbConstant.PORT, "_uuid", "Bridge", "ports", bridgeUuid,
-                                 port.getRow());
-                }
-            } else {
-                String message = BridgeCreateException.createMessage(ovsUuid);
-                throw new BridgeCreateException(message);
-            }
-
-        } else {
-            log.info("Update a bridge");
-            updateConfig(OvsdbConstant.BRIDGE, "_uuid", bridgeUuid, bridge.getRow());
-        }
-        // Create external port
         if (exPortName != null) {
             createPort(bridgeName, exPortName);
         }
+    }
 
-        setControllerAuto(bridgeUuid);
-        log.info("Create bridge success");
+    @Deprecated
+    @Override
+    public boolean createBridge(String bridgeName, String dpid, List<ControllerInfo> controllers) {
+        OvsdbBridge ovsdbBridge = OvsdbBridge.builder()
+                .name(bridgeName)
+                .failMode(BridgeDescription.FailMode.SECURE)
+                .datapathId(dpid)
+                .disableInBand()
+                .controllers(controllers)
+                .build();
+
+        return createBridge(ovsdbBridge);
     }
 
     @Override
-    public boolean createBridge(String bridgeName, String dpid, List<ControllerInfo> controllers) {
-
-        DatabaseSchema dbSchema = schema.get(OvsdbConstant.DATABASENAME);
-        String ovsUuid = getOvsUuid(OvsdbConstant.DATABASENAME);
+    public boolean createBridge(OvsdbBridge ovsdbBridge) {
+        DatabaseSchema dbSchema = schema.get(DATABASENAME);
+        String ovsUuid = getOvsUuid(DATABASENAME);
 
         if (dbSchema == null || ovsUuid == null) {
-            log.warn("Couldn't find database Open_vSwitch");
+            log.error("Can't find database Open_vSwitch");
             return false;
         }
 
         Bridge bridge = (Bridge) TableGenerator.createTable(dbSchema, OvsdbTable.BRIDGE);
-        Set<String> failMode = new HashSet<>(Arrays.asList("secure"));
-        bridge.setFailMode(failMode);
+        bridge.setOtherConfig(ovsdbBridge.otherConfigs());
 
-        Set<String> protocols = new HashSet<>(Arrays.asList(OvsdbConstant.OPENFLOW13));
-        bridge.setProtocols(protocols);
-
-        Map<String, String> options = new HashMap<>();
-        options.put("disable-in-band", "true");
-        if (dpid != null) {
-            options.put("datapath-id", dpid);
+        if (ovsdbBridge.failMode().isPresent()) {
+            String failMode = ovsdbBridge.failMode().get().name().toLowerCase();
+            bridge.setFailMode(Sets.newHashSet(failMode));
         }
-        bridge.setOtherConfig(options);
 
-        String bridgeUuid = getBridgeUuid(bridgeName);
+        String bridgeUuid = getBridgeUuid(ovsdbBridge.name());
         if (bridgeUuid == null) {
-            bridge.setName(bridgeName);
-            bridgeUuid = insertConfig(OvsdbConstant.BRIDGE, "_uuid",
-                                      OvsdbConstant.DATABASENAME, "bridges",
-                                      ovsUuid, bridge.getRow());
+            bridge.setName(ovsdbBridge.name());
+            bridgeUuid = insertConfig(
+                    BRIDGE, UUID, DATABASENAME, BRIDGES,
+                    ovsUuid, bridge.getRow());
         } else {
-            updateConfig(OvsdbConstant.BRIDGE, "_uuid", bridgeUuid, bridge.getRow());
+            // update the bridge if it's already existing
+            updateConfig(BRIDGE, UUID, bridgeUuid, bridge.getRow());
         }
 
-        if (bridgeUuid != null) {
-            createPort(bridgeName, bridgeName);
-        } else {
-            log.warn("Failed to create bridge {} on {}", bridgeName, nodeId.toString());
+        if (bridgeUuid == null) {
+            log.warn("Failed to create bridge {} on {}", ovsdbBridge.name(), nodeId);
             return false;
         }
 
-        setControllersWithUuid(Uuid.uuid(bridgeUuid), controllers);
+        createPort(ovsdbBridge.name(), ovsdbBridge.name());
+        setControllersWithUuid(Uuid.uuid(bridgeUuid), ovsdbBridge.controllers());
+
+        log.info("Created bridge {}", ovsdbBridge.name());
         return true;
     }
 
-    /**
-     * Sets the bridge's controller automatically.
-     * <p/>
-     * The connection is a TCP connection to the local ONOS instance's IP
-     * and the default OpenFlow port.
-     *
-     * @param bridgeUuid bridge uuid
-     */
-    private void setControllerAuto(String bridgeUuid) {
-        IpAddress ipAddress = IpAddress.valueOf(((InetSocketAddress) channel.localAddress()).getAddress());
-        ControllerInfo controllerInfo = new ControllerInfo(ipAddress, OvsdbConstant.OFPORT, "tcp");
-        log.debug("Automatically setting controller for bridge {} to {}",
-                  bridgeUuid, controllerInfo.target());
-        setControllersWithUuid(Uuid.uuid(bridgeUuid), ImmutableList.of(controllerInfo));
+    @Override
+    public ControllerInfo localController() {
+        IpAddress ipAddress = IpAddress.valueOf(((InetSocketAddress)
+                channel.localAddress()).getAddress());
+        return new ControllerInfo(ipAddress, OFPORT, "tcp");
     }
 
     @Override
     public void setControllersWithUuid(Uuid bridgeUuid, List<ControllerInfo> controllers) {
-
-        DatabaseSchema dbSchema = schema.get(OvsdbConstant.DATABASENAME);
+        DatabaseSchema dbSchema = schema.get(DATABASENAME);
         if (dbSchema == null) {
             log.debug("There is no schema");
             return;
@@ -662,31 +511,27 @@
                 removeControllers.add(controller);
             }
         });
-        OvsdbRowStore controllerRowStore = getRowStore(OvsdbConstant.DATABASENAME,
-                                                       OvsdbConstant.CONTROLLER);
+        OvsdbRowStore controllerRowStore = getRowStore(DATABASENAME, CONTROLLER);
         if (controllerRowStore == null) {
             log.debug("There is no controller table");
             return;
         }
 
-        removeControllers.forEach(c -> deleteConfig(OvsdbConstant.CONTROLLER, "_uuid", c.getRow().uuid().value(),
-                                                    OvsdbConstant.BRIDGE, "controller"));
-
+        removeControllers.forEach(c -> deleteConfig(CONTROLLER, UUID, c.getRow().uuid().value(),
+                                                    BRIDGE, "controller"));
         newControllers.stream().map(c -> {
             Controller controller = (Controller) TableGenerator
                     .createTable(dbSchema, OvsdbTable.CONTROLLER);
             controller.setTarget(c.target());
             return controller;
         }).forEach(c -> {
-            String uuid = insertConfig(OvsdbConstant.CONTROLLER, "_uuid",
-                                       OvsdbConstant.BRIDGE, "controller", bridgeUuid.value(),
+            String uuid = insertConfig(CONTROLLER, UUID, BRIDGE, "controller", bridgeUuid.value(),
                                        c.getRow());
             newControllerUuids.add(Uuid.uuid(uuid));
 
         });
 
-        OvsdbRowStore rowStore = getRowStore(OvsdbConstant.DATABASENAME,
-                                             OvsdbConstant.BRIDGE);
+        OvsdbRowStore rowStore = getRowStore(DATABASENAME, BRIDGE);
         if (rowStore == null) {
             log.debug("There is no bridge table");
             return;
@@ -695,7 +540,7 @@
         Row bridgeRow = rowStore.getRow(bridgeUuid.value());
         Bridge bridge = (Bridge) TableGenerator.getTable(dbSchema, bridgeRow, OvsdbTable.BRIDGE);
         bridge.setController(OvsdbSet.ovsdbSet(newControllerUuids));
-        updateConfig(OvsdbConstant.BRIDGE, "_uuid", bridgeUuid.value(), bridge.getRow());
+        updateConfig(BRIDGE, UUID, bridgeUuid.value(), bridge.getRow());
     }
 
     @Override
@@ -710,13 +555,11 @@
             log.warn("Could not find bridge in node", nodeId.getIpAddress());
             return;
         }
-        deleteConfig(OvsdbConstant.BRIDGE, "_uuid", bridgeUuid,
-                     OvsdbConstant.DATABASENAME, "bridges");
+        deleteConfig(BRIDGE, UUID, bridgeUuid, DATABASENAME, "bridges");
     }
 
     @Override
     public boolean createTunnel(String bridgeName, String portName, String tunnelType, Map<String, String> options) {
-
         String bridgeUuid  = getBridgeUuid(bridgeName);
         if (bridgeUuid == null) {
             log.warn("Couldn't find bridge {} in {}", bridgeName, nodeId.getIpAddress());
@@ -730,7 +573,7 @@
         }
 
         ArrayList<Operation> operations = Lists.newArrayList();
-        DatabaseSchema dbSchema = schema.get(OvsdbConstant.DATABASENAME);
+        DatabaseSchema dbSchema = schema.get(DATABASENAME);
 
         // insert a new port to the port table
         Port port = (Port) TableGenerator.createTable(dbSchema, OvsdbTable.PORT);
@@ -740,8 +583,8 @@
         operations.add(portInsert);
 
         // update the bridge table
-        Condition condition = ConditionUtil.isEqual("_uuid", Uuid.uuid(bridgeUuid));
-        Mutation mutation = MutationUtil.insert("ports", Uuid.uuid("Port"));
+        Condition condition = ConditionUtil.isEqual(UUID, Uuid.uuid(bridgeUuid));
+        Mutation mutation = MutationUtil.insert(PORTS, Uuid.uuid("Port"));
         List<Condition> conditions = new ArrayList<>(Arrays.asList(condition));
         List<Mutation> mutations = new ArrayList<>(Arrays.asList(mutation));
         operations.add(new Mutate(dbSchema.getTableSchema("Bridge"), conditions, mutations));
@@ -754,15 +597,15 @@
         Insert intfInsert = new Insert(dbSchema.getTableSchema("Interface"), "Interface", intf.getRow());
         operations.add(intfInsert);
 
-        transactConfig(OvsdbConstant.DATABASENAME, operations);
+        transactConfig(DATABASENAME, operations);
         return true;
     }
 
     @Override
     public void dropTunnel(IpAddress srcIp, IpAddress dstIp) {
-        String bridgeName = OvsdbConstant.INTEGRATION_BRIDGE;
-        String portName = getTunnelName(OvsdbConstant.TYPEVXLAN, dstIp);
-        String bridgeUuid = getBridgeUuid(OvsdbConstant.INTEGRATION_BRIDGE);
+        String bridgeName = INTEGRATION_BRIDGE;
+        String portName = getTunnelName(TYPEVXLAN, dstIp);
+        String bridgeUuid = getBridgeUuid(INTEGRATION_BRIDGE);
         if (bridgeUuid == null) {
             log.warn("Could not find bridge {} in {}", bridgeName,
                      nodeId.getIpAddress());
@@ -772,11 +615,8 @@
         String portUuid = getPortUuid(portName, bridgeUuid);
         if (portUuid != null) {
             log.info("Delete tunnel");
-            deleteConfig(OvsdbConstant.PORT, "_uuid", portUuid,
-                         OvsdbConstant.BRIDGE, "ports");
+            deleteConfig(PORT, UUID, portUuid, BRIDGE, PORTS);
         }
-
-        return;
     }
 
     /**
@@ -791,7 +631,7 @@
     private void deleteConfig(String childTableName, String childColumnName,
                               String childUuid, String parentTableName,
                               String parentColumnName) {
-        DatabaseSchema dbSchema = schema.get(OvsdbConstant.DATABASENAME);
+        DatabaseSchema dbSchema = schema.get(DATABASENAME);
         TableSchema childTableSchema = dbSchema.getTableSchema(childTableName);
 
         ArrayList<Operation> operations = Lists.newArrayList();
@@ -817,9 +657,7 @@
         conditions.add(condition);
         Delete del = new Delete(childTableSchema, conditions);
         operations.add(del);
-        transactConfig(OvsdbConstant.DATABASENAME, operations);
-
-        return;
+        transactConfig(DATABASENAME, operations);
     }
 
     /**
@@ -832,7 +670,7 @@
      */
     private void updateConfig(String tableName, String columnName, String uuid,
                               Row row) {
-        DatabaseSchema dbSchema = schema.get(OvsdbConstant.DATABASENAME);
+        DatabaseSchema dbSchema = schema.get(DATABASENAME);
         TableSchema tableSchema = dbSchema.getTableSchema(tableName);
 
         List<Condition> conditions = Lists.newArrayList();
@@ -844,7 +682,7 @@
         ArrayList<Operation> operations = Lists.newArrayList();
         operations.add(update);
 
-        transactConfig(OvsdbConstant.DATABASENAME, operations);
+        transactConfig(DATABASENAME, operations);
     }
 
     /**
@@ -861,7 +699,7 @@
     private String insertConfig(String childTableName, String childColumnName,
                                 String parentTableName, String parentColumnName,
                                 String parentUuid, Row row) {
-        DatabaseSchema dbSchema = schema.get(OvsdbConstant.DATABASENAME);
+        DatabaseSchema dbSchema = schema.get(DATABASENAME);
         TableSchema tableSchema = dbSchema.getTableSchema(childTableName);
 
         Insert insert = new Insert(tableSchema, childTableName, row);
@@ -881,32 +719,27 @@
             mutations.add(mutation);
 
             List<Condition> conditions = Lists.newArrayList();
-            Condition condition = ConditionUtil.isEqual("_uuid",
-                                                       Uuid.uuid(parentUuid));
+            Condition condition = ConditionUtil.isEqual(UUID, Uuid.uuid(parentUuid));
             conditions.add(condition);
 
             Mutate op = new Mutate(parentTableSchema, conditions, mutations);
             operations.add(op);
         }
-        if (childTableName.equalsIgnoreCase(OvsdbConstant.PORT)) {
-            log.info("Handle port insert");
-            Insert intfInsert = handlePortInsertTable(OvsdbConstant.INTERFACE,
-                                                      row);
+        if (childTableName.equalsIgnoreCase(PORT)) {
+            log.debug("Handle port insert");
+            Insert intfInsert = handlePortInsertTable(INTERFACE, row);
 
             if (intfInsert != null) {
                 operations.add(intfInsert);
             }
 
             Insert ins = (Insert) operations.get(0);
-            ins.getRow().put("interfaces",
-                             Uuid.uuid(OvsdbConstant.INTERFACE));
+            ins.getRow().put("interfaces", Uuid.uuid(INTERFACE));
         }
 
         List<OperationResult> results;
         try {
-            results = transactConfig(OvsdbConstant.DATABASENAME, operations)
-                    .get();
-
+            results = transactConfig(DATABASENAME, operations).get();
             return results.get(0).getUuid().value();
         } catch (InterruptedException e) {
             log.warn("Interrupted while waiting to get result");
@@ -926,30 +759,23 @@
      * @return insert, empty if null
      */
     private Insert handlePortInsertTable(String tableName, Row portRow) {
-        DatabaseSchema dbSchema = schema.get(OvsdbConstant.DATABASENAME);
+        DatabaseSchema dbSchema = schema.get(DATABASENAME);
 
-        TableSchema portTableSchema = dbSchema
-                .getTableSchema(OvsdbConstant.PORT);
+        TableSchema portTableSchema = dbSchema.getTableSchema(PORT);
         ColumnSchema portColumnSchema = portTableSchema.getColumnSchema("name");
 
         String portName = (String) portRow.getColumn(portColumnSchema.name()).data();
-
-        Interface inf = (Interface) TableGenerator
-                .createTable(dbSchema, OvsdbTable.INTERFACE);
-
+        Interface inf = (Interface) TableGenerator.createTable(dbSchema, OvsdbTable.INTERFACE);
         inf.setName(portName);
 
-        TableSchema intfTableSchema = dbSchema
-                .getTableSchema(OvsdbConstant.INTERFACE);
-        Insert insert = new Insert(intfTableSchema, OvsdbConstant.INTERFACE,
-                                   inf.getRow());
-        return insert;
+        TableSchema intfTableSchema = dbSchema.getTableSchema(INTERFACE);
+        return new Insert(intfTableSchema, INTERFACE, inf.getRow());
     }
 
     /**
      * Gets tunnel name.
      *
-     * @param tunnelType
+     * @param tunnelType tunnel type
      * @param dstIp      the remote ip address
      * @return tunnel name
      */
@@ -966,20 +792,15 @@
         if (databaseSchema == null) {
             List<String> dbNames = new ArrayList<String>();
             dbNames.add(dbName);
-            Function<JsonNode, DatabaseSchema> rowFunction = new Function<JsonNode, DatabaseSchema>() {
-                @Override
-                public DatabaseSchema apply(JsonNode input) {
-                    log.info("Get ovsdb database schema {}", dbName);
-                    DatabaseSchema dbSchema = FromJsonUtil
-                            .jsonNodeToDbSchema(dbName, input);
-                    if (dbSchema == null) {
-                        log.debug("Get ovsdb database schema error");
-                        return null;
-                    }
-                    schema.put(dbName, dbSchema);
-
-                    return dbSchema;
+            Function<JsonNode, DatabaseSchema> rowFunction = input -> {
+                log.debug("Get ovsdb database schema {}", dbName);
+                DatabaseSchema dbSchema = FromJsonUtil.jsonNodeToDbSchema(dbName, input);
+                if (dbSchema == null) {
+                    log.debug("Get ovsdb database schema error");
+                    return null;
                 }
+                schema.put(dbName, dbSchema);
+                return dbSchema;
             };
 
             ListenableFuture<JsonNode> input = getSchema(dbNames);
@@ -999,18 +820,14 @@
         }
         DatabaseSchema dbSchema = schema.get(dbName);
         if (dbSchema != null) {
-            Function<JsonNode, TableUpdates> rowFunction = new Function<JsonNode, TableUpdates>() {
-                @Override
-                public TableUpdates apply(JsonNode input) {
-                    log.info("Get table updates");
-                    TableUpdates updates = FromJsonUtil
-                            .jsonNodeToTableUpdates(input, dbSchema);
-                    if (updates == null) {
-                        log.debug("Get table updates error");
-                        return null;
-                    }
-                    return updates;
+            Function<JsonNode, TableUpdates> rowFunction = input -> {
+                log.debug("Get table updates");
+                TableUpdates updates = FromJsonUtil.jsonNodeToTableUpdates(input, dbSchema);
+                if (updates == null) {
+                    log.debug("Get table updates error");
+                    return null;
                 }
+                return updates;
             };
             return Futures.transform(monitor(dbSchema, id), rowFunction);
         }
@@ -1026,18 +843,15 @@
         DatabaseSchema dbSchema = schema.get(dbName);
         if (dbSchema != null) {
             Function<List<JsonNode>, List<OperationResult>> rowFunction = (input -> {
-                log.info("Get ovsdb operation result");
-                List<OperationResult> result = FromJsonUtil
-                        .jsonNodeToOperationResult(input, operations);
-
+                log.debug("Get ovsdb operation result");
+                List<OperationResult> result = FromJsonUtil.jsonNodeToOperationResult(input, operations);
                 if (result == null) {
                     log.debug("The operation result is null");
                     return null;
                 }
                 return result;
             });
-            return Futures.transform(transact(dbSchema, operations),
-                                     rowFunction);
+            return Futures.transform(transact(dbSchema, operations), rowFunction);
         }
         return null;
     }
@@ -1053,7 +867,6 @@
 
         channel.writeAndFlush(getSchemaString);
         return sf;
-
     }
 
     @Override
@@ -1067,7 +880,6 @@
 
         channel.writeAndFlush(echoString);
         return sf;
-
     }
 
     @Override
@@ -1083,7 +895,6 @@
 
         channel.writeAndFlush(monitorString);
         return sf;
-
     }
 
     @Override
@@ -1097,7 +908,6 @@
 
         channel.writeAndFlush(listDbsString);
         return sf;
-
     }
 
     @Override
@@ -1113,7 +923,6 @@
 
         channel.writeAndFlush(transactString);
         return sf;
-
     }
 
     @SuppressWarnings({"rawtypes", "unchecked"})
@@ -1127,12 +936,7 @@
             return;
         }
         String methodName = requestMethod.get(requestId);
-
-        Object result;
-        result = FromJsonUtil.jsonResultParser(response, methodName);
-
-        sf.set(result);
-        return;
+        sf.set(FromJsonUtil.jsonResultParser(response, methodName));
     }
 
     @Override
@@ -1143,12 +947,8 @@
 
             String replyString = FromJsonUtil.getEchoRequestStr(requestJson);
             channel.writeAndFlush(replyString);
-
-            return;
         } else {
-            FromJsonUtil
-                    .jsonCallbackRequestParser(requestJson, monitorCallBack);
-            return;
+            FromJsonUtil.jsonCallbackRequestParser(requestJson, monitorCallBack);
         }
     }
 
@@ -1164,19 +964,18 @@
 
     @Override
     public Set<OvsdbBridge> getBridges() {
-        Set<OvsdbBridge> ovsdbBridges = new HashSet<OvsdbBridge>();
-        OvsdbTableStore tableStore = getTableStore(OvsdbConstant.DATABASENAME);
+        Set<OvsdbBridge> ovsdbBridges = new HashSet<>();
+        OvsdbTableStore tableStore = getTableStore(DATABASENAME);
         if (tableStore == null) {
             return null;
         }
-        OvsdbRowStore rowStore = tableStore.getRows(OvsdbConstant.BRIDGE);
+        OvsdbRowStore rowStore = tableStore.getRows(BRIDGE);
         if (rowStore == null) {
             return null;
         }
         ConcurrentMap<String, Row> rows = rowStore.getRowStore();
         for (String uuid : rows.keySet()) {
-            Row row = getRow(OvsdbConstant.DATABASENAME, OvsdbConstant.BRIDGE,
-                             uuid);
+            Row row = getRow(DATABASENAME, BRIDGE, uuid);
             OvsdbBridge ovsdbBridge = getOvsdbBridge(row);
             if (ovsdbBridge != null) {
                 ovsdbBridges.add(ovsdbBridge);
@@ -1197,19 +996,17 @@
             log.warn("bad list of controllers");
             return null;
         }
-        return controllers.stream().
-                map(controller -> new ControllerInfo(
-                        (String) controller.getTargetColumn()
-                                .data())).collect(Collectors.toSet());
+        return controllers.stream().map(controller -> new ControllerInfo(
+                (String) controller.getTargetColumn()
+                        .data())).collect(Collectors.toSet());
     }
 
     private List<Controller> getControllers(Uuid bridgeUuid) {
-        DatabaseSchema dbSchema = schema.get(OvsdbConstant.DATABASENAME);
+        DatabaseSchema dbSchema = schema.get(DATABASENAME);
         if (dbSchema == null) {
             return null;
         }
-        OvsdbRowStore rowStore = getRowStore(OvsdbConstant.DATABASENAME,
-                                             OvsdbConstant.BRIDGE);
+        OvsdbRowStore rowStore = getRowStore(DATABASENAME, BRIDGE);
         if (rowStore == null) {
             log.debug("There is no bridge table");
             return null;
@@ -1224,10 +1021,8 @@
                 .data().getClass());
         Set<Uuid> controllerUuids = (Set<Uuid>) ((OvsdbSet) bridge
                 .getControllerColumn().data()).set();
-//        Set<String> controllerUuidStrings = (Set<String>) bridge.getControllerColumn().data();
 
-        OvsdbRowStore controllerRowStore = getRowStore(OvsdbConstant.DATABASENAME,
-                                                       OvsdbConstant.CONTROLLER);
+        OvsdbRowStore controllerRowStore = getRowStore(DATABASENAME, CONTROLLER);
         if (controllerRowStore == null) {
             log.debug("There is no controller table");
             return null;
@@ -1248,12 +1043,11 @@
 
 
     private Uuid getBridgeUuid(DeviceId openflowDeviceId) {
-        DatabaseSchema dbSchema = schema.get(OvsdbConstant.DATABASENAME);
+        DatabaseSchema dbSchema = schema.get(DATABASENAME);
         if (dbSchema == null) {
             return null;
         }
-        OvsdbRowStore rowStore = getRowStore(OvsdbConstant.DATABASENAME,
-                                             OvsdbConstant.BRIDGE);
+        OvsdbRowStore rowStore = getRowStore(DATABASENAME, BRIDGE);
         if (rowStore == null) {
             log.debug("There is no bridge table");
             return null;
@@ -1262,10 +1056,12 @@
         ConcurrentMap<String, Row> bridgeTableRows = rowStore.getRowStore();
         final AtomicReference<Uuid> uuid = new AtomicReference<>();
         for (Map.Entry<String, Row> entry : bridgeTableRows.entrySet()) {
-            Bridge b = (Bridge) TableGenerator.getTable(dbSchema,
-                                                        entry.getValue(),
-                                                        OvsdbTable.BRIDGE);
-            if (matchesDpid(b, openflowDeviceId)) {
+            Bridge bridge = (Bridge) TableGenerator.getTable(
+                    dbSchema,
+                    entry.getValue(),
+                    OvsdbTable.BRIDGE);
+
+            if (matchesDpid(bridge, openflowDeviceId)) {
                 uuid.set(Uuid.uuid(entry.getKey()));
                 break;
             }
@@ -1274,7 +1070,6 @@
             log.debug("There is no bridge for {}", openflowDeviceId);
         }
         return uuid.get();
-
     }
 
     private static boolean matchesDpid(Bridge b, DeviceId deviceId) {
@@ -1286,19 +1081,18 @@
 
     @Override
     public Set<OvsdbPort> getPorts() {
-        Set<OvsdbPort> ovsdbPorts = new HashSet<OvsdbPort>();
-        OvsdbTableStore tableStore = getTableStore(OvsdbConstant.DATABASENAME);
+        Set<OvsdbPort> ovsdbPorts = new HashSet<>();
+        OvsdbTableStore tableStore = getTableStore(DATABASENAME);
         if (tableStore == null) {
             return null;
         }
-        OvsdbRowStore rowStore = tableStore.getRows(OvsdbConstant.INTERFACE);
+        OvsdbRowStore rowStore = tableStore.getRows(INTERFACE);
         if (rowStore == null) {
             return null;
         }
         ConcurrentMap<String, Row> rows = rowStore.getRowStore();
         for (String uuid : rows.keySet()) {
-            Row row = getRow(OvsdbConstant.DATABASENAME,
-                             OvsdbConstant.INTERFACE, uuid);
+            Row row = getRow(DATABASENAME, INTERFACE, uuid);
             OvsdbPort ovsdbPort = getOvsdbPort(row);
             if (ovsdbPort != null) {
                 ovsdbPorts.add(ovsdbPort);
@@ -1312,9 +1106,8 @@
         return schema.get(dbName);
     }
 
-    //Gets ovsdb port.
     private OvsdbPort getOvsdbPort(Row row) {
-        DatabaseSchema dbSchema = getDatabaseSchema(OvsdbConstant.DATABASENAME);
+        DatabaseSchema dbSchema = getDatabaseSchema(DATABASENAME);
         Interface intf = (Interface) TableGenerator
                 .getTable(dbSchema, row, OvsdbTable.INTERFACE);
         if (intf == null) {
@@ -1325,17 +1118,12 @@
         if ((ofPort < 0) || (portName == null)) {
             return null;
         }
-
-        OvsdbPort ovsdbPort = new OvsdbPort(new OvsdbPortNumber(ofPort),
-                                            new OvsdbPortName(portName));
-        return ovsdbPort;
+        return new OvsdbPort(new OvsdbPortNumber(ofPort), new OvsdbPortName(portName));
     }
 
-    ////Gets ovsdb bridge.
     private OvsdbBridge getOvsdbBridge(Row row) {
-        DatabaseSchema dbSchema = getDatabaseSchema(OvsdbConstant.DATABASENAME);
-        Bridge bridge = (Bridge) TableGenerator.getTable(dbSchema, row,
-                                                         OvsdbTable.BRIDGE);
+        DatabaseSchema dbSchema = getDatabaseSchema(DATABASENAME);
+        Bridge bridge = (Bridge) TableGenerator.getTable(dbSchema, row, OvsdbTable.BRIDGE);
         if (bridge == null) {
             return null;
         }
@@ -1351,18 +1139,14 @@
         if ((datapathId == null) || (bridgeName == null)) {
             return null;
         }
-
-        OvsdbBridge ovsdbBridge = new OvsdbBridge(new OvsdbBridgeName(bridgeName),
-                                                  new OvsdbDatapathId(datapathId));
-        return ovsdbBridge;
+        return OvsdbBridge.builder().name(bridgeName).datapathId(datapathId).build();
     }
 
-    //Gets ofPort in the interface.
     private long getOfPort(Interface intf) {
         OvsdbSet ofPortSet = (OvsdbSet) intf.getOpenFlowPortColumn().data();
         @SuppressWarnings("unchecked")
         Set<Integer> ofPorts = ofPortSet.set();
-        while (ofPorts == null || ofPorts.size() <= 0) {
+        if (ofPorts == null || ofPorts.size() <= 0) {
             log.debug("The ofport is null in {}", intf.getName());
             return -1;
         }
@@ -1373,41 +1157,38 @@
 
     @Override
     public Set<OvsdbPort> getLocalPorts(Iterable<String> ifaceids) {
-        Set<OvsdbPort> ovsdbPorts = new HashSet<OvsdbPort>();
-        OvsdbTableStore tableStore = getTableStore(OvsdbConstant.DATABASENAME);
+        Set<OvsdbPort> ovsdbPorts = new HashSet<>();
+        OvsdbTableStore tableStore = getTableStore(DATABASENAME);
         if (tableStore == null) {
             return null;
         }
-        OvsdbRowStore rowStore = tableStore.getRows(OvsdbConstant.INTERFACE);
+        OvsdbRowStore rowStore = tableStore.getRows(INTERFACE);
         if (rowStore == null) {
             return null;
         }
         ConcurrentMap<String, Row> rows = rowStore.getRowStore();
         for (String uuid : rows.keySet()) {
-            Row row = getRow(OvsdbConstant.DATABASENAME,
-                             OvsdbConstant.INTERFACE, uuid);
-            DatabaseSchema dbSchema = getDatabaseSchema(OvsdbConstant.DATABASENAME);
+            Row row = getRow(DATABASENAME, INTERFACE, uuid);
+            DatabaseSchema dbSchema = getDatabaseSchema(DATABASENAME);
             Interface intf = (Interface) TableGenerator
                     .getTable(dbSchema, row, OvsdbTable.INTERFACE);
             if (intf == null || getIfaceid(intf) == null) {
                 continue;
             }
             String portName = intf.getName();
+            if (portName == null) {
+                continue;
+            }
             Set<String> ifaceidSet = Sets.newHashSet(ifaceids);
-            if (portName.startsWith("vxlan")
-                    || !ifaceidSet.contains(getIfaceid(intf))) {
+            if (portName.startsWith(TYPEVXLAN) || !ifaceidSet.contains(getIfaceid(intf))) {
                 continue;
             }
             long ofPort = getOfPort(intf);
-            if ((ofPort < 0) || (portName == null)) {
+            if (ofPort < 0) {
                 continue;
             }
-
-            OvsdbPort ovsdbPort = new OvsdbPort(new OvsdbPortNumber(ofPort),
-                                                new OvsdbPortName(portName));
-            if (ovsdbPort != null) {
-                ovsdbPorts.add(ovsdbPort);
-            }
+            ovsdbPorts.add(new OvsdbPort(new OvsdbPortNumber(ofPort),
+                                         new OvsdbPortName(portName)));
         }
         return ovsdbPorts;
     }
@@ -1420,8 +1201,7 @@
             log.warn("The external_ids is null");
             return null;
         }
-        String ifaceid = externalIds
-                .get(OvsdbConstant.EXTERNAL_ID_INTERFACE_ID);
+        String ifaceid = externalIds.get(EXTERNAL_ID_INTERFACE_ID);
         if (ifaceid == null) {
             log.warn("The ifaceid is null");
             return null;