| /* |
| * Copyright 2015-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.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 a byte. |
| */ |
| BYTE, |
| |
| /** |
| * 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 a byte. |
| * |
| * @return byte value |
| */ |
| public byte asByte() { |
| checkState(type == Type.BYTE, "Value is not a byte"); |
| return Byte.parseByte(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 name.hashCode(); |
| } |
| |
| /** |
| * {@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(); |
| } |
| } |