action instance classes of NEMO project

Signed-off-by: Yuan <936396749@qq.com>

Change-Id: I56072d5f144df4bcd0ae370ec2fa1946e93050b3
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/operation/action/instance/parameter/values/IntValue.java b/nemoengine/src/main/java/org/onosproject/nemo/model/operation/action/instance/parameter/values/IntValue.java
new file mode 100644
index 0000000..417162c
--- /dev/null
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/operation/action/instance/parameter/values/IntValue.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright 2014-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.nemo.model.operation.action.instance.parameter.values;
+
+/**
+ * Description of the integer value object.
+ */
+public interface IntValue {
+
+    /**
+     * Returns value of the instance.
+     *
+     * @return value
+     */
+    long getValue();
+
+    /**
+     * Returns integer order of the instance.
+     *
+     * @return order
+     */
+    long getOrder();
+
+    /**
+     * Returns key of the instance.
+     *
+     * @return key
+     */
+    IntValueKey getKey();
+}
\ No newline at end of file
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/operation/action/instance/parameter/values/IntValueBuilder.java b/nemoengine/src/main/java/org/onosproject/nemo/model/operation/action/instance/parameter/values/IntValueBuilder.java
new file mode 100644
index 0000000..d2f86f3
--- /dev/null
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/operation/action/instance/parameter/values/IntValueBuilder.java
@@ -0,0 +1,214 @@
+/*
+ * Copyright 2014-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.nemo.model.operation.action.instance.parameter.values;
+
+import static com.google.common.base.MoreObjects.toStringHelper;
+import static org.onosproject.nemo.model.operation.action.instance
+                .parameter.values.Utils.checkOrderRange;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Objects;
+/**
+ * The description of builder for integer value objects.
+ */
+public class IntValueBuilder {
+
+    private final Map<Class<? extends IntValue>, IntValue> augmentation =
+            new HashMap<>();
+
+    private IntValueKey key;
+    private long order;
+    private long value;
+
+    /**
+     * Creates an instance by default.
+     */
+    public IntValueBuilder() {
+    }
+
+    /**
+     * Creates an integer value builder from a given integer value.
+     *
+     * @param base integer value
+     */
+    public IntValueBuilder(IntValue base) {
+        if (base.getKey() == null) {
+            key = new IntValueKey(base.getOrder(), base.getValue());
+            order = base.getOrder();
+            value = base.getValue();
+        } else {
+            key = base.getKey();
+            order = key.getOrder();
+            value = key.getValue();
+        }
+    }
+
+    /**
+     * Sets the key to be used by the builder.
+     *
+     * @param value key value
+     * @return self
+     */
+    public IntValueBuilder key(IntValueKey value) {
+        key = value;
+        return this;
+    }
+
+    /**
+     * Sets the order to be used by the builder.
+     *
+     * @param value order value
+     * @return self
+     */
+    public IntValueBuilder order(long value) {
+        checkOrderRange(value);
+        order = value;
+        return this;
+    }
+
+    /**
+     * Sets the value to be used by the builder.
+     *
+     * @param value the value
+     * @return self
+     */
+    public IntValueBuilder value(long value) {
+        this.value = value;
+        return this;
+    }
+
+    /**
+     * Adds the augmentation to be used by the builder.
+     * Remove the augmentation, if the integer value is null.
+     *
+     * @param augmentationType augmentation type
+     * @param augmentation the augmentation to be used
+     * @return self
+     */
+    public IntValueBuilder addAugmentation(
+            Class<? extends IntValue> augmentationType,
+            IntValue augmentation) {
+        if (augmentation == null) {
+            return removeAugmentation(augmentationType);
+        }
+        this.augmentation.put(augmentationType, augmentation);
+        return this;
+    }
+
+    /**
+     * Removes augmentation to be used by integer value builder.
+     *
+     * @param augmentationType remove augmentation
+     * @return an integer value builder
+     */
+    public IntValueBuilder removeAugmentation(
+            Class<? extends IntValue> augmentationType) {
+        augmentation.remove(augmentationType);
+        return this;
+    }
+
+    /**
+     * Builds a new integer value instance.
+     *
+     * @return the integer value instance
+     */
+    public IntValue build() {
+        return new IntValueImpl(this);
+    }
+
+    /**
+     * The implementation of integer value to create an instance.
+     */
+    private static final class IntValueImpl implements IntValue {
+
+        private final IntValueKey key;
+        private final long order;
+        private final long value;
+        private Map<Class<? extends IntValue>, IntValue> augmentation;
+
+        private IntValueImpl(IntValueBuilder base) {
+            if (base.key == null) {
+                key = new IntValueKey(base.order, base.value);
+                order = base.order;
+                value = base.value;
+            } else {
+                key = base.key;
+                order = key.getOrder();
+                value = key.getValue();
+            }
+            augmentation = new HashMap<>(base.augmentation);
+        }
+
+        @Override
+        public IntValueKey getKey() {
+            return key;
+        }
+
+        @Override
+        public long getOrder() {
+            return order;
+        }
+
+        @Override
+        public long getValue() {
+            return value;
+        }
+
+        @Override
+        public int hashCode() {
+            return Objects.hash(key, order, value, augmentation);
+        }
+
+        @Override
+        public boolean equals(Object obj) {
+            if (this == obj) {
+                return true;
+            }
+            if (obj == null) {
+                return false;
+            }
+            if (getClass() != obj.getClass()) {
+                return false;
+            }
+            IntValue other = (IntValue) obj;
+            if (!Objects.equals(key, other.getKey())) {
+                return false;
+            }
+            if (!Objects.equals(order, other.getOrder())) {
+                return false;
+            }
+            if (!Objects.equals(value, other.getValue())) {
+                return false;
+            }
+            // Simple case: we are comparing against self
+            IntValueImpl otherImpl = (IntValueImpl) obj;
+            if (!Objects.equals(augmentation, otherImpl.augmentation)) {
+                return false;
+            }
+            return true;
+        }
+
+        @Override
+        public String toString() {
+            return toStringHelper(this)
+                    .add("key", key)
+                    .add("order", order)
+                    .add("augmentation", augmentation)
+                    .toString();
+        }
+    }
+}
\ No newline at end of file
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/operation/action/instance/parameter/values/IntValueKey.java b/nemoengine/src/main/java/org/onosproject/nemo/model/operation/action/instance/parameter/values/IntValueKey.java
new file mode 100644
index 0000000..f8cda4d
--- /dev/null
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/operation/action/instance/parameter/values/IntValueKey.java
@@ -0,0 +1,99 @@
+/*
+ * Copyright 2016-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.nemo.model.operation.action.instance.parameter.values;
+
+import java.util.Objects;
+
+import com.google.common.base.MoreObjects;
+
+/**
+ * Key of IntValue.
+ */
+public class IntValueKey {
+
+    private final long value;
+    private final long order;
+
+    /**
+     * Creates an object from order and value.
+     *
+     * @param order order
+     * @param value value
+     */
+    public IntValueKey(long order, long value) {
+        this.order = order;
+        this.value = value;
+    }
+
+    /**
+     * Creates a copy from Source Object.
+     *
+     * @param source Source object
+     */
+    public IntValueKey(IntValueKey source) {
+        this.value = source.value;
+        this.order = source.order;
+    }
+
+    /**
+     * Returns the value of this instance.
+     *
+     * @return value
+     */
+    public long getValue() {
+        return value;
+    }
+
+    /**
+     * Returns order of the instance.
+     *
+     * @return order
+     */
+    public long getOrder() {
+        return order;
+    }
+
+    @Override
+    public int hashCode() {
+        int prime = 31;
+        int result = Objects.hashCode(value);
+        return prime * result + Objects.hashCode(order);
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        IntValueKey other = (IntValueKey) obj;
+        return Objects.equals(value, other.value) &&
+                Objects.equals(order, other.order);
+    }
+
+    @Override
+    public String toString() {
+        return MoreObjects.toStringHelper(this)
+                .add("value", value)
+                .add("order", order)
+                .toString();
+    }
+}
\ No newline at end of file
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/operation/action/instance/parameter/values/RangeValue.java b/nemoengine/src/main/java/org/onosproject/nemo/model/operation/action/instance/parameter/values/RangeValue.java
new file mode 100644
index 0000000..cfa501f
--- /dev/null
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/operation/action/instance/parameter/values/RangeValue.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright 2016-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.nemo.model.operation.action.instance.parameter.values;
+
+/**
+ * Range of value for the values.
+ */
+public interface RangeValue {
+
+    /**
+     * Returns minimum value of the range.
+     *
+     * @return minimum value
+     */
+    long getMin();
+
+    /**
+     * Returns maximum value of the range.
+     *
+     * @return maximum value
+     */
+    long getMax();
+}
\ No newline at end of file
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/operation/action/instance/parameter/values/RangeValueBuilder.java b/nemoengine/src/main/java/org/onosproject/nemo/model/operation/action/instance/parameter/values/RangeValueBuilder.java
new file mode 100644
index 0000000..f39d600
--- /dev/null
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/operation/action/instance/parameter/values/RangeValueBuilder.java
@@ -0,0 +1,167 @@
+/*
+ * Copyright 2014-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.nemo.model.operation.action.instance.parameter.values;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Objects;
+
+import static com.google.common.base.MoreObjects.toStringHelper;
+
+/**
+ * Builder of range value.
+ */
+public class RangeValueBuilder {
+
+    private Map<Class<? extends RangeValue>, RangeValue> augmentation =
+            new HashMap<>();
+    private long max;
+    private long min;
+
+    /**
+     * Creates object by default.
+     */
+    public RangeValueBuilder() {
+    }
+
+    /**
+     * Creates a copy from Source Object.
+     *
+     * @param base Source object
+     */
+    public RangeValueBuilder(RangeValue base) {
+        max = base.getMax();
+        min = base.getMin();
+    }
+
+    /**
+     * Sets maximum value of the instance.
+     *
+     * @param value maximum value
+     * @return self
+     */
+    public RangeValueBuilder max(long value) {
+        max = value;
+        return this;
+    }
+
+    /**
+     * Sets minimum value of the instance.
+     *
+     * @param value minimum value
+     * @return self
+     */
+    public RangeValueBuilder min(long value) {
+        min = value;
+        return this;
+    }
+
+    /**
+     * Adds augmentation from RangeValue.
+     * Remove the augmentation, if the range value is null.
+     *
+     * @param augmentationType class of range value
+     * @param augmentation range value
+     * @return self
+     */
+    public RangeValueBuilder addAugmentation(
+            Class<? extends RangeValue> augmentationType,
+            RangeValue augmentation) {
+        if (augmentation == null) {
+            return removeAugmentation(augmentationType);
+        }
+        this.augmentation.put(augmentationType, augmentation);
+        return this;
+    }
+
+    /**
+     * Removes augmentation.
+     *
+     * @param augmentationType class of range value
+     * @return self
+     */
+    public RangeValueBuilder
+            removeAugmentation(Class<? extends RangeValue> augmentationType) {
+        augmentation.remove(augmentationType);
+        return this;
+    }
+
+    /**
+     * Builds the range value instance.
+     *
+     * @return implement of range value
+     */
+    public RangeValue build() {
+        return new RangeValueImpl(this);
+    }
+
+    /**
+     * Implement of RangeValue.
+     */
+    private static final class RangeValueImpl implements RangeValue {
+
+        private final long max;
+        private final long min;
+        private final Map<Class<? extends RangeValue>, RangeValue> augmentation;
+
+        private RangeValueImpl(RangeValueBuilder base) {
+            max = base.max;
+            min = base.min;
+            augmentation = new HashMap<>(base.augmentation);
+        }
+
+        @Override
+        public long getMax() {
+            return max;
+        }
+
+        @Override
+        public long getMin() {
+            return min;
+        }
+
+        @Override
+        public int hashCode() {
+            return Objects.hash(max, min, augmentation);
+        }
+
+        @Override
+        public boolean equals(Object obj) {
+            if (this == obj) {
+                return true;
+            }
+            if (obj == null) {
+                return false;
+            }
+            if (getClass() != obj.getClass()) {
+                return false;
+            }
+            RangeValueImpl o = (RangeValueImpl) obj;
+            return max == o.max &&
+                    min == o.min &&
+                    Objects.equals(augmentation, o.augmentation);
+        }
+
+        @Override
+        public String toString() {
+            return toStringHelper(this)
+                    .add("max", max)
+                    .add("min", min)
+                    .add("augmentation", augmentation)
+                    .toString();
+        }
+    }
+}
\ No newline at end of file
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/operation/action/instance/parameter/values/StringValue.java b/nemoengine/src/main/java/org/onosproject/nemo/model/operation/action/instance/parameter/values/StringValue.java
new file mode 100644
index 0000000..81b5f0e
--- /dev/null
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/operation/action/instance/parameter/values/StringValue.java
@@ -0,0 +1,43 @@
+/*
+ * Copyright 2016-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.nemo.model.operation.action.instance.parameter.values;
+
+/**
+ * String value class.
+ */
+public interface StringValue {
+
+    /**
+     * Returns string value of this instance.
+     *
+     * @return string value
+     */
+    String getValue();
+
+    /**
+     * Returns long value order of the instance.
+     *
+     * @return order
+     */
+    long getOrder();
+
+    /**
+     * Returns key of the instance.
+     *
+     * @return key
+     */
+    StringValueKey getKey();
+}
\ No newline at end of file
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/operation/action/instance/parameter/values/StringValueBuilder.java b/nemoengine/src/main/java/org/onosproject/nemo/model/operation/action/instance/parameter/values/StringValueBuilder.java
new file mode 100644
index 0000000..c255863
--- /dev/null
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/operation/action/instance/parameter/values/StringValueBuilder.java
@@ -0,0 +1,209 @@
+/*
+ * Copyright 2016-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.nemo.model.operation.action.instance.parameter.values;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Objects;
+
+import static com.google.common.base.MoreObjects.toStringHelper;
+import static org.onosproject.nemo.model.operation.action.instance
+                .parameter.values.Utils.checkOrderRange;
+
+/**
+ * Builder of string value.
+ */
+public class StringValueBuilder {
+
+    private Map<Class<? extends StringValue>, StringValue> augmentation =
+            new HashMap<>();
+    private StringValueKey key;
+    private long order;
+    private String value;
+
+    /**
+     * Creates object by default.
+     */
+    public StringValueBuilder() {
+    }
+
+    /**
+     * Creates a copy from Source Object.
+     *
+     * @param base string value
+     */
+    public StringValueBuilder(StringValue base) {
+        if (base.getKey() == null) {
+            key = new StringValueKey(base.getOrder(), base.getValue());
+            order = base.getOrder();
+            value = base.getValue();
+        } else {
+            key = base.getKey();
+            order = key.getOrder();
+            value = key.getValue();
+        }
+    }
+
+    /**
+     * Sets key of instance.
+     *
+     * @param value for the key
+     * @return self
+     */
+    public StringValueBuilder key(StringValueKey value) {
+        key = value;
+        return this;
+    }
+
+    /**
+     * Sets order of instance.
+     *
+     * @param order for the order
+     * @return self
+     */
+    public StringValueBuilder order(long order) {
+        checkOrderRange(order);
+        this.order = order;
+        return this;
+    }
+
+    /**
+     * Sets value of the instance.
+     *
+     * @param value to be set
+     * @return self
+     */
+    public StringValueBuilder value(String value) {
+        this.value = value;
+        return this;
+    }
+
+    /**
+     * Adds augmentation for the instance.
+     * Remove the augmentation, if the string value is null.
+     *
+     * @param augmentationType class of string value
+     * @param augmentation string value
+     * @return self
+     */
+    public StringValueBuilder addAugmentation(
+            Class<? extends StringValue> augmentationType,
+            StringValue augmentation) {
+        if (augmentation == null) {
+            return removeAugmentation(augmentationType);
+        }
+        this.augmentation.put(augmentationType, augmentation);
+        return this;
+    }
+
+    /**
+     * Removes augmentation for the instance.
+     *
+     * @param augmentationType augmentation to be removed
+     * @return builder of string value
+     */
+    public StringValueBuilder removeAugmentation(
+            Class<? extends StringValue> augmentationType) {
+        augmentation.remove(augmentationType);
+        return this;
+    }
+
+    /**
+     * Builds the string value instance.
+     *
+     * @return new string value instance
+     */
+    public StringValue build() {
+        return new StringValueImpl(this);
+    }
+
+    /**
+     * The implementation of string value to create an instance.
+     */
+    private static final class StringValueImpl implements StringValue {
+
+        private final StringValueKey key;
+        private final long order;
+        private final String value;
+        private final Map<Class<? extends StringValue>, StringValue> augmentation;
+
+        /**
+         * Creates a copy from Source Object.
+         *
+         * @param base Source object
+         */
+        private StringValueImpl(StringValueBuilder base) {
+            if (base.key == null) {
+                key = new StringValueKey(base.order, base.value);
+                order = base.order;
+                value = base.value;
+            } else {
+                key = base.key;
+                order = key.getOrder();
+                value = key.getValue();
+            }
+            augmentation = new HashMap<>(base.augmentation);
+        }
+
+        @Override
+        public StringValueKey getKey() {
+            return key;
+        }
+
+        @Override
+        public long getOrder() {
+            return order;
+        }
+
+        @Override
+        public String getValue() {
+            return value;
+        }
+
+        @Override
+        public int hashCode() {
+            return Objects.hash(key, order, value, augmentation);
+        }
+
+        @Override
+        public boolean equals(Object obj) {
+            if (this == obj) {
+                return true;
+            }
+            if(obj == null) {
+                return false;
+            }
+            if (getClass() == obj.getClass()) {
+                return false;
+            }
+            StringValueImpl o = (StringValueImpl) obj;
+            return Objects.equals(key, o.key) &&
+                    Objects.equals(order, o.order) &&
+                    Objects.equals(value, o.value) &&
+                    Objects.equals(augmentation, o.augmentation);
+        }
+
+        @Override
+        public String toString() {
+            return toStringHelper(this)
+                    .add("key", key)
+                    .add("order", order)
+                    .add("value", value)
+                    .add("augmentation", augmentation)
+                    .toString();
+        }
+    }
+}
\ No newline at end of file
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/operation/action/instance/parameter/values/StringValueKey.java b/nemoengine/src/main/java/org/onosproject/nemo/model/operation/action/instance/parameter/values/StringValueKey.java
new file mode 100644
index 0000000..95f72f3
--- /dev/null
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/operation/action/instance/parameter/values/StringValueKey.java
@@ -0,0 +1,97 @@
+/*
+ * Copyright 2016-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.nemo.model.operation.action.instance.parameter.values;
+
+import java.util.Objects;
+
+import static com.google.common.base.MoreObjects.toStringHelper;
+
+/**
+ * String value key.
+ */
+public class StringValueKey {
+
+    private final String value;
+    private final long order;
+
+    /**
+     * Creates a string value key from the given order and value.
+     *
+     * @param order the order
+     * @param value the value
+     */
+    public StringValueKey(long order, String value) {
+        this.order = order;
+        this.value = value;
+    }
+
+    /**
+     * Creates a copy from Source Object.
+     *
+     * @param source Source object
+     */
+    public StringValueKey(StringValueKey source) {
+        this.value = source.value;
+        this.order = source.order;
+    }
+
+    /**
+     * Returns the value of the instance.
+     *
+     * @return the value
+     */
+    public String getValue() {
+        return value;
+    }
+
+    /**
+     * Returns order of the instance.
+     *
+     * @return the order
+     */
+    public long getOrder() {
+        return order;
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(order, value);
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj) {
+            return true;
+        }
+        if (obj == null) {
+            return false;
+        }
+        if (getClass() != obj.getClass()) {
+            return false;
+        }
+        StringValueKey other = (StringValueKey) obj;
+        return Objects.equals(value, other.value) &&
+                Objects.equals(order, other.order);
+    }
+
+    @Override
+    public String toString() {
+        return toStringHelper(this)
+                .add("order", order)
+                .add("value", value)
+                .toString();
+    }
+}
\ No newline at end of file
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/operation/action/instance/parameter/values/Utils.java b/nemoengine/src/main/java/org/onosproject/nemo/model/operation/action/instance/parameter/values/Utils.java
new file mode 100644
index 0000000..f372e33
--- /dev/null
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/operation/action/instance/parameter/values/Utils.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright 2016-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.nemo.model.operation.action.instance.parameter.values;
+
+/**
+ * Utilities for the action parameter values package.
+ */
+public final class Utils {
+
+    private static final long MIN_VALUE = 0L;
+    private static final long MAX_VALUE = 4294967295L;
+    private static final String E_OUT_OF_RANGE =
+              "Invalid range: %s, expected: [[" + MIN_VALUE +
+              ".." + MAX_VALUE + "]]";
+
+    /**
+     * Checks if the value is in range.
+     *
+     * @param value value to be checked
+     * @throws IllegalArgumentException if the value is out of range
+     */
+    public static void checkOrderRange(long value) {
+        if (value < MIN_VALUE || value > MAX_VALUE) {
+            throw new IllegalArgumentException(
+                    String.format(E_OUT_OF_RANGE, value));
+        }
+    }
+}
\ No newline at end of file
diff --git a/nemoengine/src/main/java/org/onosproject/nemo/model/operation/action/instance/parameter/values/package-info.java b/nemoengine/src/main/java/org/onosproject/nemo/model/operation/action/instance/parameter/values/package-info.java
new file mode 100644
index 0000000..857ce92
--- /dev/null
+++ b/nemoengine/src/main/java/org/onosproject/nemo/model/operation/action/instance/parameter/values/package-info.java
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2016-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.
+ */
+
+/**
+ * The action instance classes for NEMO model.
+ */
+package org.onosproject.nemo.model.operation.action.instance.parameter.values;
\ No newline at end of file