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