diff options
author | Ashlee Young <ashlee@onosfw.com> | 2015-09-09 22:15:21 -0700 |
---|---|---|
committer | Ashlee Young <ashlee@onosfw.com> | 2015-09-09 22:15:21 -0700 |
commit | 13d05bc8458758ee39cb829098241e89616717ee (patch) | |
tree | 22a4d1ce65f15952f07a3df5af4b462b4697cb3a /framework/src/onos/core/api/src/main/java/org/onosproject/cfg/ConfigProperty.java | |
parent | 6139282e1e93c2322076de4b91b1c85d0bc4a8b3 (diff) |
ONOS checkin based on commit tag e796610b1f721d02f9b0e213cf6f7790c10ecd60
Change-Id: Ife8810491034fe7becdba75dda20de4267bd15cd
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.java | 279 |
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(); + } +} |