[ONOS-8012] Add a set of interface for Kubernetes network policy

Change-Id: I5610def14c064cec1230594278081ad1d13a8a0e
diff --git a/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sNetworkPolicyAdminService.java b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sNetworkPolicyAdminService.java
new file mode 100644
index 0000000..2c5bb48
--- /dev/null
+++ b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sNetworkPolicyAdminService.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2019-present Open Networking Foundation
+ *
+ * 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.k8snetworking.api;
+
+import io.fabric8.kubernetes.api.model.networking.NetworkPolicy;
+
+/**
+ * Service for administering the inventory of kubernetes network policy.
+ */
+public interface K8sNetworkPolicyAdminService extends K8sNetworkPolicyService {
+
+    /**
+     * Creates a kubernetes network policy with the given information.
+     *
+     * @param networkPolicy the new kubernetes network policy
+     */
+    void createNetworkPolicy(NetworkPolicy networkPolicy);
+
+    /**
+     * Updates a kubernetes network policy with the given information.
+     *
+     * @param networkPolicy the updated kubernetes network policy
+     */
+    void updateNetworkPolicy(NetworkPolicy networkPolicy);
+
+    /**
+     * Removes the kubernetes network policy.
+     *
+     * @param uid kubernetes network policy UID
+     */
+    void removeNetworkPolicy(String uid);
+
+    /**
+     * Clears the existing kubernetes network policies.
+     */
+    void clear();
+}
diff --git a/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sNetworkPolicyEvent.java b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sNetworkPolicyEvent.java
new file mode 100644
index 0000000..28c502f
--- /dev/null
+++ b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sNetworkPolicyEvent.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright 2019-present Open Networking Foundation
+ *
+ * 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.k8snetworking.api;
+
+import io.fabric8.kubernetes.api.model.networking.NetworkPolicy;
+import org.onosproject.event.AbstractEvent;
+
+/**
+ * Describes kubernetes network policy event.
+ */
+public class K8sNetworkPolicyEvent extends
+        AbstractEvent<K8sNetworkPolicyEvent.Type, NetworkPolicy> {
+
+    /**
+     * Creates an event of a given type for the specified kubernetes network policy.
+     *
+     * @param type      kubernetes network policy event type
+     * @param subject   kubernetes network policy
+     */
+    public K8sNetworkPolicyEvent(Type type, NetworkPolicy subject) {
+        super(type, subject);
+    }
+
+    /**
+     * Kubernetes network policy events.
+     */
+    public enum Type {
+
+        /**
+         * Signifies that a new kubernetes network policy is created.
+         */
+        K8S_NETWORK_POLICY_CREATED,
+
+        /**
+         * Signifies that a new kubernetes network policy is updated.
+         */
+        K8S_NETWORK_POLICY_UPDATED,
+
+        /**
+         * Signifies that a new kubernetes network policy is removed.
+         */
+        K8S_NETWORK_POLICY_REMOVED,
+
+    }
+}
diff --git a/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sNetworkPolicyListener.java b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sNetworkPolicyListener.java
new file mode 100644
index 0000000..ddb532f
--- /dev/null
+++ b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sNetworkPolicyListener.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright 2019-present Open Networking Foundation
+ *
+ * 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.k8snetworking.api;
+
+import org.onosproject.event.EventListener;
+
+/**
+ * Listener for kubernetes network policy event.
+ */
+public interface K8sNetworkPolicyListener extends EventListener<K8sNetworkPolicyEvent> {
+}
diff --git a/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sNetworkPolicyService.java b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sNetworkPolicyService.java
new file mode 100644
index 0000000..5c3e572
--- /dev/null
+++ b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sNetworkPolicyService.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright 2019-present Open Networking Foundation
+ *
+ * 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.k8snetworking.api;
+
+import io.fabric8.kubernetes.api.model.networking.NetworkPolicy;
+import org.onosproject.event.ListenerService;
+
+import java.util.Set;
+
+/**
+ * Service for interacting with the inventory of kubernetes network policy.
+ */
+public interface K8sNetworkPolicyService
+        extends ListenerService<K8sNetworkPolicyEvent, K8sNetworkPolicyListener> {
+
+    /**
+     * Returns the kubernetes network policy with the supplied network policy UID.
+     *
+     * @param uid kubernetes network policy UID
+     * @return kubernetes network policy
+     */
+    NetworkPolicy networkPolicy(String uid);
+
+    /**
+     * Returns all kubernetes network policies registered.
+     *
+     * @return set of kubernetes network policies
+     */
+    Set<NetworkPolicy> networkPolicies();
+}
diff --git a/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sNetworkPolicyStore.java b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sNetworkPolicyStore.java
new file mode 100644
index 0000000..c6250ae
--- /dev/null
+++ b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sNetworkPolicyStore.java
@@ -0,0 +1,70 @@
+/*
+ * Copyright 2019-present Open Networking Foundation
+ *
+ * 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.k8snetworking.api;
+
+import io.fabric8.kubernetes.api.model.networking.NetworkPolicy;
+import org.onosproject.store.Store;
+
+import java.util.Set;
+
+/**
+ * Manages inventory of kubernetes network policy; not intended for direct use.
+ */
+public interface K8sNetworkPolicyStore
+        extends Store<K8sNetworkPolicyEvent, K8sNetworkPolicyStoreDelegate> {
+
+    /**
+     * Creates the new kubernetes network policy.
+     *
+     * @param networkPolicy kubernetes network policy
+     */
+    void createNetworkPolicy(NetworkPolicy networkPolicy);
+
+    /**
+     * Updates the new kubernetes network policy.
+     *
+     * @param networkPolicy kubernetes network policy
+     */
+    void updateNetworkPolicy(NetworkPolicy networkPolicy);
+
+    /**
+     * Removes the kubernetes network policy with the given network policy UID.
+     *
+     * @param uid kubernetes network policy UID
+     * @return removed kubernetes network policy; null if failed
+     */
+    NetworkPolicy removeNetworkPolicy(String uid);
+
+    /**
+     * Returns the kubernetes network policy with the given network policy UID.
+     *
+     * @param uid kubernetes network policy UID
+     * @return kubernetes network policy; null if not found
+     */
+    NetworkPolicy networkPolicy(String uid);
+
+    /**
+     * Returns all kubernetes network policies.
+     *
+     * @return set of kubernetes network policies
+     */
+    Set<NetworkPolicy> networkPolicies();
+
+    /**
+     * Removes all kubernetes network policies.
+     */
+    void clear();
+}
diff --git a/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sNetworkPolicyStoreDelegate.java b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sNetworkPolicyStoreDelegate.java
new file mode 100644
index 0000000..17099e5
--- /dev/null
+++ b/apps/k8s-networking/api/src/main/java/org/onosproject/k8snetworking/api/K8sNetworkPolicyStoreDelegate.java
@@ -0,0 +1,24 @@
+/*
+ * Copyright 2019-present Open Networking Foundation
+ *
+ * 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.k8snetworking.api;
+
+import org.onosproject.store.StoreDelegate;
+
+/**
+ * Kubernetes network policy store delegate abstraction.
+ */
+public interface K8sNetworkPolicyStoreDelegate extends StoreDelegate<K8sNetworkPolicyEvent> {
+}