[ONOS-2594] Channel handle to manage session handling with BGP peers

Change-Id: I6c58c674aa17e2a86b063e248af589d524ec5fe3
diff --git a/bgp/ctl/src/main/java/org/onosproject/bgp/controller/impl/BGPPeerImpl.java b/bgp/ctl/src/main/java/org/onosproject/bgp/controller/impl/BGPPeerImpl.java
index 212b24d..45f7463 100755
--- a/bgp/ctl/src/main/java/org/onosproject/bgp/controller/impl/BGPPeerImpl.java
+++ b/bgp/ctl/src/main/java/org/onosproject/bgp/controller/impl/BGPPeerImpl.java
@@ -24,11 +24,12 @@
 
 import org.jboss.netty.channel.Channel;
 import org.onlab.packet.IpAddress;
-import org.onosproject.bgp.controller.BGPId;
-import org.onosproject.bgp.controller.BGPPacketStats;
+import org.onosproject.bgp.controller.BGPController;
 import org.onosproject.bgp.controller.BGPPeer;
+import org.onosproject.bgp.controller.BgpSessionInfo;
+import org.onosproject.bgpio.protocol.BGPFactories;
+import org.onosproject.bgpio.protocol.BGPFactory;
 import org.onosproject.bgpio.protocol.BGPMessage;
-import org.onosproject.bgpio.protocol.BGPVersion;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -43,19 +44,31 @@
 
     private static final String SHUTDOWN_MSG = "Worker has already been shutdown";
 
+    private BGPController bgpController;
     private Channel channel;
     protected String channelId;
     private boolean connected;
     protected boolean isHandShakeComplete = false;
-    public BGPSessionInfo sessionInfo;
+    private BgpSessionInfo sessionInfo;
     private BGPPacketStatsImpl pktStats;
 
+
     @Override
-    public void init(BGPId bgpId, BGPVersion bgpVersion, BGPPacketStats pktStats) {
-        this.sessionInfo.setRemoteBgpId(bgpId);
-        this.sessionInfo.setRemoteBgpVersion(bgpVersion);
-        this.pktStats = (BGPPacketStatsImpl) pktStats;
-        this.sessionInfo = new BGPSessionInfo();
+    public BgpSessionInfo sessionInfo() {
+        return sessionInfo;
+    }
+
+    /**
+     * Initialize peer.
+     *
+     *@param bgpController controller instance
+     *@param sessionInfo bgp session info
+     *@param pktStats packet statistics
+     */
+    public BGPPeerImpl(BGPController bgpController, BgpSessionInfo sessionInfo, BGPPacketStatsImpl pktStats) {
+        this.bgpController = bgpController;
+        this.sessionInfo = sessionInfo;
+        this.pktStats = pktStats;
     }
 
     // ************************
@@ -129,53 +142,9 @@
         return channelId;
     }
 
-    // ************************
-    // BGP Peer features related
-    // ************************
-
     @Override
-    public final BGPId getBGPId() {
-        return this.sessionInfo.getRemoteBgpId();
-    };
-
-    @Override
-    public final String getStringId() {
-        return this.sessionInfo.getRemoteBgpId().toString();
-    }
-
-    @Override
-    public final void setBgpPeerVersion(BGPVersion peerVersion) {
-        this.sessionInfo.setRemoteBgpVersion(peerVersion);
-    }
-
-    @Override
-    public void setBgpPeerASNum(short peerASNum) {
-        this.sessionInfo.setRemoteBgpASNum(peerASNum);
-    }
-
-    @Override
-    public void setBgpPeerHoldTime(short peerHoldTime) {
-        this.sessionInfo.setRemoteBgpHoldTime(peerHoldTime);
-    }
-
-    @Override
-    public void setBgpPeerIdentifier(int peerIdentifier) {
-        this.sessionInfo.setRemoteBgpIdentifier(peerIdentifier);
-    }
-
-    @Override
-    public int getBgpPeerIdentifier() {
-        return this.sessionInfo.getRemoteBgpIdentifier();
-    }
-
-    @Override
-    public int getNegotiatedHoldTime() {
-        return this.sessionInfo.getNegotiatedholdTime();
-    }
-
-    @Override
-    public void setNegotiatedHoldTime(short negotiatedHoldTime) {
-        this.sessionInfo.setNegotiatedholdTime(negotiatedHoldTime);
+    public BGPFactory factory() {
+        return BGPFactories.getFactory(sessionInfo.remoteBgpVersion());
     }
 
     @Override
@@ -185,7 +154,8 @@
 
     @Override
     public String toString() {
-        return MoreObjects.toStringHelper(getClass()).omitNullValues().add("channel", channelId())
-                .add("bgpId", getBGPId()).toString();
+        return MoreObjects.toStringHelper(getClass()).omitNullValues()
+                                       .add("channel", channelId())
+                                       .add("bgpId", sessionInfo().remoteBgpId()).toString();
     }
 }