[ONOS-2600] Implementation of basic BGP protocol message parsing factories

Change-Id: Ie8ff454a36c9bff2a785ea198ed47ce5f60666cd
diff --git a/bgp/bgpio/src/main/java/org/onosproject/bgpio/protocol/BGPFactories.java b/bgp/bgpio/src/main/java/org/onosproject/bgpio/protocol/BGPFactories.java
new file mode 100755
index 0000000..71b9cbf
--- /dev/null
+++ b/bgp/bgpio/src/main/java/org/onosproject/bgpio/protocol/BGPFactories.java
@@ -0,0 +1,82 @@
+/*

+ * Copyright 2015 Open Networking Laboratory

+ *

+ * Licensed under the Apache License, Version 2.0 (the "License");

+ * you may not use this file except in compliance with the License.

+ * You may obtain a copy of the License at

+ *

+ *     http://www.apache.org/licenses/LICENSE-2.0

+ *

+ * Unless required by applicable law or agreed to in writing, software

+ * distributed under the License is distributed on an "AS IS" BASIS,

+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

+ * See the License for the specific language governing permissions and

+ * limitations under the License.

+ */

+

+package org.onosproject.bgpio.protocol;

+

+import org.jboss.netty.buffer.ChannelBuffer;

+import org.onosproject.bgpio.exceptions.BGPParseException;

+import org.onosproject.bgpio.protocol.ver4.BGPFactoryVer4;

+import org.onosproject.bgpio.types.BGPHeader;

+import org.slf4j.Logger;

+import org.slf4j.LoggerFactory;

+

+/**

+ * Abstraction to provide the version for BGP.

+ */

+public final class BGPFactories {

+

+    protected static final Logger log = LoggerFactory.getLogger(BGPFactories.class);

+

+    private static final GenericReader GENERIC_READER = new GenericReader();

+

+    private BGPFactories() {

+    }

+

+    /**

+     * Returns the instance of BGP Version.

+     *

+     * @param version BGP version

+     * @return BGP version

+     */

+    public static BGPFactory getFactory(BGPVersion version) {

+        switch (version) {

+        case BGP_4:

+            return BGPFactoryVer4.INSTANCE;

+        default:

+            throw new IllegalArgumentException("[BGPFactory:]Unknown version: " + version);

+        }

+    }

+

+    /**

+     * Reader class for reading BGP messages from channel buffer.

+     *

+     */

+    private static class GenericReader implements BGPMessageReader<BGPMessage> {

+

+        @Override

+        public BGPMessage readFrom(ChannelBuffer bb, BGPHeader bgpHeader)

+                throws BGPParseException {

+            BGPFactory factory;

+

+            if (!bb.readable()) {

+                log.error("Empty message received");

+                throw new BGPParseException("Empty message received");

+            }

+            // TODO: Currently only BGP version 4 is supported

+            factory = org.onosproject.bgpio.protocol.ver4.BGPFactoryVer4.INSTANCE;

+            return factory.getReader().readFrom(bb, bgpHeader);

+        }

+    }

+

+    /**

+     * Returns BGP messsage generic reader.

+     *

+     * @return bgp message generic reader

+     */

+    public static BGPMessageReader<BGPMessage> getGenericReader() {

+        return GENERIC_READER;

+    }

+}