[ONOS-6183] NET l3VPN structure and store implementation

Change-Id: I2fc9054dba07ef522b3cc879810422bd0f1f5de4
diff --git a/apps/l3vpn/netl3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/ProtocolInfo.java b/apps/l3vpn/netl3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/ProtocolInfo.java
new file mode 100644
index 0000000..1692127
--- /dev/null
+++ b/apps/l3vpn/netl3vpn/src/main/java/org/onosproject/l3vpn/netl3vpn/ProtocolInfo.java
@@ -0,0 +1,197 @@
+/*
+ * Copyright 2017-present 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.l3vpn.netl3vpn;
+
+import java.util.LinkedList;
+import java.util.List;
+
+/**
+ * Representation of protocol info of the BGP info. It contains the route
+ * protocol and the interfaces which are associated with the information.
+ */
+public class ProtocolInfo {
+
+    /**
+     * Route protocol.
+     */
+    private RouteProtocol routeProtocol;
+
+    /**
+     * Interface details which uses this protocol with respect to IPV4 address.
+     */
+    private List<AccessInfo> v4Accesses;
+
+    /**
+     * Interface details which uses this protocol with respect to IPV6 address.
+     */
+    private List<AccessInfo> v6Accesses;
+
+    /**
+     * Status of IPV4 address family available.
+     */
+    private boolean ipv4Af;
+
+    /**
+     * Status of IPV6 address family available.
+     */
+    private boolean ipv6Af;
+
+    /**
+     * Process id of the protocol info.
+     */
+    private String processId;
+
+    /**
+     * Constructs protocol info.
+     */
+    public ProtocolInfo() {
+    }
+
+    /**
+     * Returns the route protocol.
+     *
+     * @return route protocol
+     */
+    RouteProtocol routeProtocol() {
+        return routeProtocol;
+    }
+
+    /**
+     * Sets the route protocol.
+     *
+     * @param routeProtocol route protocol
+     */
+    void routeProtocol(RouteProtocol routeProtocol) {
+        this.routeProtocol = routeProtocol;
+    }
+
+    /**
+     * Returns the process id.
+     *
+     * @return process id
+     */
+    String processId() {
+        return processId;
+    }
+
+    /**
+     * Sets the process id.
+     *
+     * @param processId process id.
+     */
+    void processId(String processId) {
+        this.processId = processId;
+    }
+
+    /**
+     * Returns true if the IPV4 address family uses the protocol info; false
+     * otherwise.
+     *
+     * @return true if IPV4 address family uses; false otherwise
+     */
+    boolean isIpv4Af() {
+        return ipv4Af;
+    }
+
+    /**
+     * Sets true if the IPV4 address family uses the protocol info; false
+     * otherwise.
+     *
+     * @param ipv4Af true if IPV4 interface uses; false otherwise
+     */
+    void ipv4Af(boolean ipv4Af) {
+        this.ipv4Af = ipv4Af;
+    }
+
+    /**
+     * Returns true if the IPV6 address family uses the protocol info; false
+     * otherwise.
+     *
+     * @return true if IPV6 address family uses; false otherwise
+     */
+    boolean isIpv6Af() {
+        return ipv6Af;
+    }
+
+    /**
+     * Sets true if the IPV6 address family uses the protocol info; false
+     * otherwise.
+     *
+     * @param ipv6Af true if IPV6 interface uses; false otherwise
+     */
+    void ipv6Af(boolean ipv6Af) {
+        this.ipv6Af = ipv6Af;
+    }
+
+    /**
+     * Returns the list of IPV4 network access information.
+     *
+     * @return IPV4 network accesses
+     */
+    List<AccessInfo> v4Accesses() {
+        return v4Accesses;
+    }
+
+    /**
+     * Sets the list of IPV4 network access information.
+     *
+     * @param v4Accesses IPV4 network accesses
+     */
+    void v4Accesses(List<AccessInfo> v4Accesses) {
+        this.v4Accesses = v4Accesses;
+    }
+
+    /**
+     * Adds a access info to the IPV4 network accesses.
+     *
+     * @param info IPV4 network access
+     */
+    void addV4Key(AccessInfo info) {
+        if (v4Accesses == null) {
+            v4Accesses = new LinkedList<>();
+        }
+        v4Accesses.add(info);
+    }
+
+    /**
+     * Returns the list of IPV6 network access information.
+     *
+     * @return IPV6 network accesses
+     */
+    List<AccessInfo> v6Accesses() {
+        return v6Accesses;
+    }
+
+    /**
+     * Sets the list of IPV6 network access information.
+     *
+     * @param v6Accesses IPV6 network accesses
+     */
+    void v6Accesses(List<AccessInfo> v6Accesses) {
+        this.v4Accesses = v6Accesses;
+    }
+
+    /**
+     * Adds a access info to the IPV6 network accesses.
+     * @param info IPV4 network access
+     */
+    void addV6Key(AccessInfo info) {
+        if (v6Accesses == null) {
+            v6Accesses = new LinkedList<>();
+        }
+        v6Accesses.add(info);
+    }
+}