aboutsummaryrefslogtreecommitdiffstats
path: root/framework/src/onos/core/api/src/main/java/org/onosproject/cfg/ConfigProperty.java
diff options
context:
space:
mode:
Diffstat (limited to 'framework/src/onos/core/api/src/main/java/org/onosproject/cfg/ConfigProperty.java')
-rw-r--r--framework/src/onos/core/api/src/main/java/org/onosproject/cfg/ConfigProperty.java279
1 files changed, 279 insertions, 0 deletions
diff --git a/framework/src/onos/core/api/src/main/java/org/onosproject/cfg/ConfigProperty.java b/framework/src/onos/core/api/src/main/java/org/onosproject/cfg/ConfigProperty.java
new file mode 100644
index 00000000..36cd22b5
--- /dev/null
+++ b/framework/src/onos/core/api/src/main/java/org/onosproject/cfg/ConfigProperty.java
@@ -0,0 +1,279 @@
+/*
+ * Copyright 2015 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.cfg;
+
+import com.google.common.base.MoreObjects;
+
+import java.util.Objects;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.base.Preconditions.checkState;
+
+/**
+ * Component configuration property.
+ */
+public final class ConfigProperty {
+
+ private final String name;
+ private final Type type;
+ private final String value;
+ private final String defaultValue;
+ private final String description;
+ private final boolean isSet;
+
+ /**
+ * Representation of the type of property value.
+ */
+ public enum Type {
+ /**
+ * Indicates the value is a string.
+ */
+ STRING,
+
+ /**
+ * Indicates the value is an integer.
+ */
+ INTEGER,
+
+ /**
+ * Indicates the value is a long.
+ */
+ LONG,
+
+ /**
+ * Indicates the value is a float.
+ */
+ FLOAT,
+
+ /**
+ * Indicates the value is a double.
+ */
+ DOUBLE,
+
+ /**
+ * Indicates the value is a boolean.
+ */
+ BOOLEAN
+ }
+
+ /**
+ * Creates a new configuration property with its default value.
+ *
+ * @param name property name
+ * @param type value type
+ * @param defaultValue default value as a string
+ * @param description property description
+ * @return newly defined property
+ */
+ public static ConfigProperty defineProperty(String name, Type type,
+ String defaultValue,
+ String description) {
+ return new ConfigProperty(name, type, description, defaultValue, defaultValue, false);
+ }
+
+ /**
+ * Creates a new configuration property as a copy of an existing one, but
+ * with a new value.
+ *
+ * @param property property to be changed
+ * @param newValue new value as a string
+ * @return newly updated property
+ */
+ public static ConfigProperty setProperty(ConfigProperty property, String newValue) {
+ return new ConfigProperty(property.name, property.type, property.description,
+ property.defaultValue, newValue, true);
+ }
+
+ /**
+ * Creates a new configuration property as a copy of an existing one, but
+ * without a specific value, thus making it take its default value.
+ *
+ * @param property property to be reset
+ * @return newly reset property
+ */
+ public static ConfigProperty resetProperty(ConfigProperty property) {
+ return new ConfigProperty(property.name, property.type, property.description,
+ property.defaultValue, property.defaultValue, false);
+ }
+
+ /**
+ * Creates a new configuration property with its default value.
+ *
+ * @param name property name
+ * @param type value type
+ * @param defaultValue default value as a string
+ * @param description property description
+ * @param value property value
+ * @param isSet indicates whether the property is set or not
+ */
+ private ConfigProperty(String name, Type type, String description,
+ String defaultValue, String value, boolean isSet) {
+ this.name = checkNotNull(name, "Property name cannot be null");
+ this.type = checkNotNull(type, "Property type cannot be null");
+ this.description = checkNotNull(description, "Property description cannot be null");
+ this.defaultValue = defaultValue;
+ this.value = value;
+ this.isSet = isSet;
+ }
+
+ /**
+ * Returns the property name.
+ *
+ * @return property name
+ */
+ public String name() {
+ return name;
+ }
+
+ /**
+ * Returns the property type.
+ *
+ * @return property type
+ */
+ public Type type() {
+ return type;
+ }
+
+ /**
+ * Returns the property description.
+ *
+ * @return string value
+ */
+ public String description() {
+ return description;
+ }
+
+ /**
+ * Returns the property default value as a string.
+ *
+ * @return string default value
+ */
+ public String defaultValue() {
+ return defaultValue;
+ }
+
+ /**
+ * Returns the property value as a string.
+ *
+ * @return string value
+ */
+ public String value() {
+ return value;
+ }
+
+ /**
+ * Indicates whether the property is set or whether it assumes its
+ * default value.
+ *
+ * @return true if the property is set
+ */
+ public boolean isSet() {
+ return isSet;
+ }
+
+ /**
+ * Returns the property value as a string.
+ *
+ * @return string value
+ */
+ public String asString() {
+ return value;
+ }
+
+ /**
+ * Returns the property value as an integer.
+ *
+ * @return integer value
+ */
+ public int asInteger() {
+ checkState(type == Type.INTEGER, "Value is not an integer");
+ return Integer.parseInt(value);
+ }
+
+ /**
+ * Returns the property value as a long.
+ *
+ * @return long value
+ */
+ public long asLong() {
+ checkState(type == Type.INTEGER || type == Type.LONG, "Value is not a long or integer");
+ return Long.parseLong(value);
+ }
+
+ /**
+ * Returns the property value as a float.
+ *
+ * @return float value
+ */
+ public float asFloat() {
+ checkState(type == Type.FLOAT, "Value is not a float");
+ return Float.parseFloat(value);
+ }
+
+ /**
+ * Returns the property value as a double.
+ *
+ * @return double value
+ */
+ public double asDouble() {
+ checkState(type == Type.FLOAT || type == Type.DOUBLE, "Value is not a float or double");
+ return Double.parseDouble(value);
+ }
+
+ /**
+ * Returns the property value as a boolean.
+ *
+ * @return string value
+ */
+ public boolean asBoolean() {
+ checkState(type == Type.BOOLEAN, "Value is not a boolean");
+ return Boolean.parseBoolean(value);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(name);
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * Equality is considered only on the basis of property name.
+ */
+ @Override
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj instanceof ConfigProperty) {
+ final ConfigProperty other = (ConfigProperty) obj;
+ return Objects.equals(this.name, other.name);
+ }
+ return false;
+ }
+
+ @Override
+ public String toString() {
+ return MoreObjects.toStringHelper(this)
+ .add("name", name)
+ .add("type", type)
+ .add("value", value)
+ .add("defaultValue", defaultValue)
+ .add("description", description)
+ .add("isSet", isSet)
+ .toString();
+ }
+}