[ONOS-6017] Implement DefaultMappingKey and DefaultMappingValue

Change-Id: Ie41242436323d9fa89400c2ab661fcc35518b9c8
diff --git a/apps/mappingmanagement/api/src/main/java/org/onosproject/mapping/actions/DropMappingAction.java b/apps/mappingmanagement/api/src/main/java/org/onosproject/mapping/actions/DropMappingAction.java
new file mode 100644
index 0000000..c38b57a
--- /dev/null
+++ b/apps/mappingmanagement/api/src/main/java/org/onosproject/mapping/actions/DropMappingAction.java
@@ -0,0 +1,56 @@
+/*
+ * 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.mapping.actions;
+
+import java.util.Objects;
+
+/**
+ * Represents a Drop Action mapping.
+ */
+public final class DropMappingAction implements MappingAction {
+
+    /**
+     * Default constructor of DropMappingAction.
+     */
+    DropMappingAction() {
+    }
+
+    @Override
+    public Type type() {
+        return Type.DROP;
+    }
+
+    @Override
+    public String toString() {
+        return type().toString();
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(type());
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj instanceof DropMappingAction) {
+            return true;
+        }
+        return false;
+    }
+}
diff --git a/apps/mappingmanagement/api/src/main/java/org/onosproject/mapping/actions/ForwardMappingAction.java b/apps/mappingmanagement/api/src/main/java/org/onosproject/mapping/actions/ForwardMappingAction.java
new file mode 100644
index 0000000..93a7150
--- /dev/null
+++ b/apps/mappingmanagement/api/src/main/java/org/onosproject/mapping/actions/ForwardMappingAction.java
@@ -0,0 +1,56 @@
+/*
+ * 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.mapping.actions;
+
+import java.util.Objects;
+
+/**
+ * Represents a Forward Action mapping.
+ */
+public final class ForwardMappingAction implements MappingAction {
+
+    /**
+     * Default constructor of ForwardMappingAction.
+     */
+    ForwardMappingAction() {
+    }
+
+    @Override
+    public Type type() {
+        return Type.FORWARD;
+    }
+
+    @Override
+    public String toString() {
+        return type().toString();
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(type());
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj instanceof ForwardMappingAction) {
+            return true;
+        }
+        return false;
+    }
+}
diff --git a/apps/mappingmanagement/api/src/main/java/org/onosproject/mapping/actions/MappingAction.java b/apps/mappingmanagement/api/src/main/java/org/onosproject/mapping/actions/MappingAction.java
new file mode 100644
index 0000000..16047f6
--- /dev/null
+++ b/apps/mappingmanagement/api/src/main/java/org/onosproject/mapping/actions/MappingAction.java
@@ -0,0 +1,55 @@
+/*
+ * 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.mapping.actions;
+
+/**
+ * Presentation of a single mapping action.
+ */
+public interface MappingAction {
+
+    /**
+     * Represents the type of mapping action.
+     */
+    enum Type {
+
+        /**
+         * Signifies that the traffic requires no action.
+         */
+        NO_ACTION,
+
+        /**
+         * Signifies that the traffic requires native forwarding.
+         */
+        NATIVE_FORWARD,
+
+        /**
+         * Signifies that the traffic requires forwarding with mapping information.
+         */
+        FORWARD,
+
+        /**
+         * Signifies that the traffic should be dropped.
+         */
+        DROP
+    }
+
+    /**
+     * Returns the type of mapping action.
+     *
+     * @return type of mapping action
+     */
+    Type type();
+}
diff --git a/apps/mappingmanagement/api/src/main/java/org/onosproject/mapping/actions/MappingActions.java b/apps/mappingmanagement/api/src/main/java/org/onosproject/mapping/actions/MappingActions.java
new file mode 100644
index 0000000..676d65b
--- /dev/null
+++ b/apps/mappingmanagement/api/src/main/java/org/onosproject/mapping/actions/MappingActions.java
@@ -0,0 +1,63 @@
+/*
+ * 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.mapping.actions;
+
+/**
+ * Factory class for creating various mapping actions.
+ */
+public final class MappingActions {
+
+    /**
+     * Prevents instantiation from external.
+     */
+    private MappingActions() {}
+
+    /**
+     * Creates a drop mapping action.
+     *
+     * @return a drop mapping action
+     */
+    public static DropMappingAction drop() {
+        return new DropMappingAction();
+    }
+
+    /**
+     * Creates a forward mapping action.
+     *
+     * @return a forward mapping action
+     */
+    public static ForwardMappingAction forward() {
+        return new ForwardMappingAction();
+    }
+
+    /**
+     * Creates a native forward mapping action.
+     *
+     * @return a native forward mapping action
+     */
+    public static NativeForwardMappingAction nativeForward() {
+        return new NativeForwardMappingAction();
+    }
+
+    /**
+     * Creates a no action.
+     *
+     * @return a no action
+     */
+    public static NoMappingAction noAction() {
+        return new NoMappingAction();
+    }
+}
diff --git a/apps/mappingmanagement/api/src/main/java/org/onosproject/mapping/actions/NativeForwardMappingAction.java b/apps/mappingmanagement/api/src/main/java/org/onosproject/mapping/actions/NativeForwardMappingAction.java
new file mode 100644
index 0000000..a2a9a21
--- /dev/null
+++ b/apps/mappingmanagement/api/src/main/java/org/onosproject/mapping/actions/NativeForwardMappingAction.java
@@ -0,0 +1,56 @@
+/*
+ * 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.mapping.actions;
+
+import java.util.Objects;
+
+/**
+ * Represents a Native Forward Action mapping.
+ */
+public final class NativeForwardMappingAction implements MappingAction {
+
+    /**
+     * Default constructor of NativeForwardMappingAction.
+     */
+    NativeForwardMappingAction() {
+    }
+
+    @Override
+    public Type type() {
+        return Type.NATIVE_FORWARD;
+    }
+
+    @Override
+    public String toString() {
+        return type().toString();
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(type());
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj instanceof NativeForwardMappingAction) {
+            return true;
+        }
+        return false;
+    }
+}
diff --git a/apps/mappingmanagement/api/src/main/java/org/onosproject/mapping/actions/NoMappingAction.java b/apps/mappingmanagement/api/src/main/java/org/onosproject/mapping/actions/NoMappingAction.java
new file mode 100644
index 0000000..b4eb75c
--- /dev/null
+++ b/apps/mappingmanagement/api/src/main/java/org/onosproject/mapping/actions/NoMappingAction.java
@@ -0,0 +1,56 @@
+/*
+ * 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.mapping.actions;
+
+import java.util.Objects;
+
+/**
+ * Represents a No Action mapping.
+ */
+public final class NoMappingAction implements MappingAction {
+
+    /**
+     * Default constructor of NoMappingAction.
+     */
+    NoMappingAction() {
+    }
+
+    @Override
+    public Type type() {
+        return Type.NO_ACTION;
+    }
+
+    @Override
+    public String toString() {
+        return type().toString();
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(type());
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj instanceof NoMappingAction) {
+            return true;
+        }
+        return false;
+    }
+}
diff --git a/apps/mappingmanagement/api/src/main/java/org/onosproject/mapping/actions/package-info.java b/apps/mappingmanagement/api/src/main/java/org/onosproject/mapping/actions/package-info.java
new file mode 100644
index 0000000..0c5bec5
--- /dev/null
+++ b/apps/mappingmanagement/api/src/main/java/org/onosproject/mapping/actions/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * 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.
+ */
+
+/**
+ * Mapping action package.
+ */
+package org.onosproject.mapping.actions;
\ No newline at end of file