package org.ovirt.engine.core.config.entity; import java.security.InvalidParameterException; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.apache.log4j.Logger; import org.ovirt.engine.core.config.entity.helper.ValueHelper; public class ConfigKey { private String type; private String description; private String alternateKey; private String keyName; private String value; private List<String> validValues; private static final ArrayList<String> EMPTY_LIST = new ArrayList<String>(0); private final static Logger log = Logger.getLogger(ConfigKey.class); private String version; private ValueHelper valueHelper; protected ConfigKey(String type, String description, String alternateKey, String key, String value, String[] validValues, String version, ValueHelper helper) { super(); this.type = type; this.description = description; this.alternateKey = alternateKey; this.keyName = key; this.value = value; setVersion(version); this.validValues = validValues != null ? Arrays.asList(validValues) : EMPTY_LIST; this.valueHelper = helper; } public void setVersion(String version) { this.version = version == null || version.isEmpty() ? "general" : version; } public String getType() { return type; } public String getDescription() { return description; } public String getAlternateKeys() { return alternateKey; } public String getKey() { return keyName; } public String getValue() { return value; } public String getDisplayValue() throws Exception { return valueHelper.getValue(value); } public void setType(String type) { this.type = type; } public void setDescription(String description) { this.description = description; } public void setAlternateKey(String alternateKey) { this.alternateKey = alternateKey; } public void setKey(String key) { this.keyName = key; } /** * Sets the value of this Config key to the given value. Is meant to be used before updating the DB, therefore is * safe, and throws an Exception in case of validation failure. * * @param value * The value to set * @throws InvalidParameterException * @throws Exception */ public void safeSetValue(String value) throws InvalidParameterException, Exception { if (!valueHelper.validate(this, value)) { throw new InvalidParameterException("Cannot set value " + value + "to key " + keyName); } this.value = valueHelper.setValue(value); } /** * Sets the value of this ConfigKey to the given value without validation. Is meant for internal use only. * * @param value */ public void unsafeSetValue(String value) { this.value = value; } @Override public String toString() { String value = "Error fetching value"; try{ value = getDisplayValue(); } catch (Exception e) { } return (new StringBuilder ("ConfigKey [type=").append(type).append(", description=").append(description) .append(", alternateKey=").append(alternateKey).append(", key=").append(keyName).append(", value=").append(value) .append(", validValues=").append(validValues).append(", version=").append(version + "]")).toString(); } public List<String> getValidValues() { return this.validValues; } public String getVersion() { return version; } public ValueHelper getValueHelper() { return valueHelper; } }