opendj-server-legacy/src/main/java/org/opends/server/config/BooleanConfigAttribute.java
@@ -26,8 +26,6 @@ */ package org.opends.server.config; import org.forgerock.i18n.LocalizableMessage; import java.util.Iterator; import java.util.LinkedHashSet; import java.util.List; @@ -36,13 +34,14 @@ import javax.management.MBeanAttributeInfo; import javax.management.MBeanParameterInfo; import org.forgerock.i18n.LocalizableMessage; import org.forgerock.opendj.ldap.ByteString; import org.forgerock.opendj.ldap.schema.Syntax; import org.opends.server.core.DirectoryServer; import org.opends.server.types.Attribute; import org.forgerock.opendj.ldap.ByteString; import static org.opends.server.config.ConfigConstants.*; import static org.opends.messages.ConfigMessages.*; import static org.opends.server.config.ConfigConstants.*; import static org.opends.server.util.CollectionUtils.*; import static org.opends.server.util.ServerConstants.*; @@ -195,10 +194,7 @@ { return pendingValue; } else { return activeValue; } return activeValue; } @@ -233,10 +229,7 @@ */ private static LinkedHashSet<ByteString> getValueSet(boolean booleanValue) { LinkedHashSet<ByteString> valueSet = new LinkedHashSet<>(1); valueSet.add(ByteString.valueOf( booleanValue ? CONFIG_VALUE_TRUE : CONFIG_VALUE_FALSE)); return valueSet; return getValueSet(booleanValue ? CONFIG_VALUE_TRUE : CONFIG_VALUE_FALSE); } @@ -419,60 +412,47 @@ if (pendingValueSet) { // We cannot have multiple pending values. LocalizableMessage message = ERR_CONFIG_ATTR_MULTIPLE_PENDING_VALUE_SETS.get(a.getName()); throw new ConfigException(message); throw new ConfigException(ERR_CONFIG_ATTR_MULTIPLE_PENDING_VALUE_SETS.get(a.getName())); } if (a.isEmpty()) { // This is illegal -- it must have a value. LocalizableMessage message = ERR_CONFIG_ATTR_IS_REQUIRED.get(a.getName()); throw new ConfigException(message); throw new ConfigException(ERR_CONFIG_ATTR_IS_REQUIRED.get(a.getName())); } // Get the value and parse it as a Boolean. Iterator<ByteString> iterator = a.iterator(); String valueString = iterator.next().toString().toLowerCase(); if (valueString.equals("true") || valueString.equals("yes") || valueString.equals("on") || valueString.equals("1")) { pendingValue = true; pendingValueSet = true; } else if (valueString.equals("false") || valueString.equals("no") || valueString.equals("off") || valueString.equals("0")) { pendingValue = false; pendingValueSet = true; } else { // Get the value and parse it as a Boolean. Iterator<ByteString> iterator = a.iterator(); String valueString = iterator.next().toString().toLowerCase(); // This is an illegal value. throw new ConfigException(ERR_CONFIG_ATTR_INVALID_BOOLEAN_VALUE.get(getName(), valueString)); } if (valueString.equals("true") || valueString.equals("yes") || valueString.equals("on") || valueString.equals("1")) { pendingValue = true; pendingValueSet = true; } else if (valueString.equals("false") || valueString.equals("no") || valueString.equals("off") || valueString.equals("0")) { pendingValue = false; pendingValueSet = true; } else { // This is an illegal value. LocalizableMessage message = ERR_CONFIG_ATTR_INVALID_BOOLEAN_VALUE.get( getName(), valueString); throw new ConfigException(message); } if (iterator.hasNext()) { // This is illegal -- it must be single-valued. LocalizableMessage message = ERR_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED.get(a.getName()); throw new ConfigException(message); } if (iterator.hasNext()) { // This is illegal -- it must be single-valued. throw new ConfigException(ERR_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED.get(a.getName())); } } else { // This is illegal -- only the pending option is allowed for // configuration attributes. LocalizableMessage message = ERR_CONFIG_ATTR_OPTIONS_NOT_ALLOWED.get(a.getName()); throw new ConfigException(message); throw new ConfigException(ERR_CONFIG_ATTR_OPTIONS_NOT_ALLOWED.get(a.getName())); } } else @@ -481,51 +461,40 @@ if (activeValueSet) { // We cannot have multiple active values. LocalizableMessage message = ERR_CONFIG_ATTR_MULTIPLE_ACTIVE_VALUE_SETS.get(a.getName()); throw new ConfigException(message); throw new ConfigException(ERR_CONFIG_ATTR_MULTIPLE_ACTIVE_VALUE_SETS.get(a.getName())); } if (a.isEmpty()) { // This is illegal -- it must have a value. LocalizableMessage message = ERR_CONFIG_ATTR_IS_REQUIRED.get(a.getName()); throw new ConfigException(message); throw new ConfigException(ERR_CONFIG_ATTR_IS_REQUIRED.get(a.getName())); } // Get the value and parse it as a Boolean. Iterator<ByteString> iterator = a.iterator(); String valueString = iterator.next().toString().toLowerCase(); if (valueString.equals("true") || valueString.equals("yes") || valueString.equals("on") || valueString.equals("1")) { activeValue = true; activeValueSet = true; } else if (valueString.equals("false") || valueString.equals("no") || valueString.equals("off") || valueString.equals("0")) { activeValue = false; activeValueSet = true; } else { // Get the value and parse it as a Boolean. Iterator<ByteString> iterator = a.iterator(); String valueString = iterator.next().toString().toLowerCase(); // This is an illegal value. throw new ConfigException(ERR_CONFIG_ATTR_INVALID_BOOLEAN_VALUE.get(getName(), valueString)); } if (valueString.equals("true") || valueString.equals("yes") || valueString.equals("on") || valueString.equals("1")) { activeValue = true; activeValueSet = true; } else if (valueString.equals("false") || valueString.equals("no") || valueString.equals("off") || valueString.equals("0")) { activeValue = false; activeValueSet = true; } else { // This is an illegal value. LocalizableMessage message = ERR_CONFIG_ATTR_INVALID_BOOLEAN_VALUE.get( getName(), valueString); throw new ConfigException(message); } if (iterator.hasNext()) { // This is illegal -- it must be single-valued. LocalizableMessage message = ERR_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED.get(a.getName()); throw new ConfigException(message); } if (iterator.hasNext()) { // This is illegal -- it must be single-valued. throw new ConfigException(ERR_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED.get(a.getName())); } } } @@ -533,8 +502,7 @@ if (! activeValueSet) { // This is not OK. The value set must contain an active value. LocalizableMessage message = ERR_CONFIG_ATTR_NO_ACTIVE_VALUE_SET.get(getName()); throw new ConfigException(message); throw new ConfigException(ERR_CONFIG_ATTR_NO_ACTIVE_VALUE_SET.get(getName())); } if (pendingValueSet) @@ -712,4 +680,3 @@ pendingValue); } } opendj-server-legacy/src/main/java/org/opends/server/config/ConfigAttribute.java
@@ -25,22 +25,22 @@ * Portions Copyright 2014-2015 ForgeRock AS */ package org.opends.server.config; import org.forgerock.i18n.LocalizableMessage; import static org.opends.messages.ConfigMessages.*; import java.util.Iterator; import java.util.LinkedHashSet; import java.util.List; import javax.management.AttributeList; import javax.management.MBeanAttributeInfo; import javax.management.MBeanParameterInfo; import org.forgerock.i18n.LocalizableMessage; import org.forgerock.opendj.ldap.ByteString; import org.forgerock.opendj.ldap.schema.Syntax; import org.opends.server.types.Attribute; import org.forgerock.opendj.ldap.ByteString; import static org.opends.messages.ConfigMessages.*; /** * This class defines a configuration attribute, which can hold zero or more * values associated with a configurable property within the Directory Server. @@ -341,10 +341,7 @@ { return pendingValues; } else { return activeValues; } return activeValues; } @@ -389,27 +386,23 @@ { if (isRequired) { LocalizableMessage message = ERR_CONFIG_ATTR_IS_REQUIRED.get(name); throw new ConfigException(message); throw new ConfigException(ERR_CONFIG_ATTR_IS_REQUIRED.get(name)); } if (requiresAdminAction) { pendingValues = notNull(values); hasPendingValues = true; } else { if (requiresAdminAction) { pendingValues = notNull(values); activeValues = notNull(values); hasPendingValues = true; } else { activeValues = notNull(values); pendingValues = activeValues; hasPendingValues = false; } return; pendingValues = activeValues; hasPendingValues = false; } return; } @@ -880,5 +873,40 @@ * @return A duplicate of this configuration attribute. */ public abstract ConfigAttribute duplicate(); } /** * Creates the appropriate value set with the provided value. * * @param value * The value to use to create the value set. * @return The value set constructed from the provided value. */ static LinkedHashSet<ByteString> getValueSet(String value) { LinkedHashSet<ByteString> valueSet = new LinkedHashSet<>(1); valueSet.add(ByteString.valueOf(value)); return valueSet; } /** * Creates the appropriate value set with the provided values. * * @param values * The values to use to create the value set. * @return The constructed value set. */ static LinkedHashSet<ByteString> getValueSet(List<String> values) { if (values == null) { return null; } LinkedHashSet<ByteString> valueSet = new LinkedHashSet<>(values.size()); for (String value : values) { valueSet.add(ByteString.valueOf(value)); } return valueSet; } } opendj-server-legacy/src/main/java/org/opends/server/config/DNConfigAttribute.java
@@ -118,7 +118,7 @@ DN value) { super(name, description, isRequired, isMultiValued, requiresAdminAction, getValueSet(value)); getDNValueSet(value)); if (value == null) @@ -157,7 +157,7 @@ List<DN> values) { super(name, description, isRequired, isMultiValued, requiresAdminAction, getValueSet(values)); getDNValueSet(values)); activeValues = values != null ? values : new ArrayList<DN>(); pendingValues = activeValues; @@ -189,8 +189,8 @@ List<DN> activeValues, List<DN> pendingValues) { super(name, description, isRequired, isMultiValued, requiresAdminAction, getValueSet(activeValues), (pendingValues != null), getValueSet(pendingValues)); getDNValueSet(activeValues), pendingValues != null, getDNValueSet(pendingValues)); if (activeValues == null) @@ -356,14 +356,14 @@ if (requiresAdminAction()) { pendingValues = newArrayList(value); setPendingValues(getValueSet(value)); setPendingValues(getDNValueSet(value)); } else { activeValues.clear(); activeValues.add(value); pendingValues = activeValues; setActiveValues(getValueSet(value)); setActiveValues(getDNValueSet(value)); } } @@ -385,32 +385,27 @@ { if (isRequired()) { LocalizableMessage message = ERR_CONFIG_ATTR_IS_REQUIRED.get(getName()); throw new ConfigException(message); throw new ConfigException(ERR_CONFIG_ATTR_IS_REQUIRED.get(getName())); } if (requiresAdminAction()) { setPendingValues(new LinkedHashSet<ByteString>(0)); pendingValues = new ArrayList<>(); } else { if (requiresAdminAction()) { setPendingValues(new LinkedHashSet<ByteString>(0)); pendingValues = new ArrayList<>(); } else { setActiveValues(new LinkedHashSet<ByteString>(0)); activeValues.clear(); } setActiveValues(new LinkedHashSet<ByteString>(0)); activeValues.clear(); } } // Next check if the set contains multiple values and if that is allowed. int numValues = values.size(); if ((! isMultiValued()) && (numValues > 1)) if (!isMultiValued() && (numValues > 1)) { LocalizableMessage message = ERR_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED.get(getName()); throw new ConfigException(message); throw new ConfigException(ERR_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED.get(getName())); } @@ -421,16 +416,13 @@ { if (value == null) { LocalizableMessage message = ERR_CONFIG_ATTR_DN_NULL.get(getName()); throw new ConfigException(message); throw new ConfigException(ERR_CONFIG_ATTR_DN_NULL.get(getName())); } ByteString attrValue = ByteString.valueOf(value.toString()); if (valueSet.contains(attrValue)) { LocalizableMessage message = ERR_CONFIG_ATTR_ADD_VALUES_ALREADY_EXISTS.get(getName(), value); throw new ConfigException(message); throw new ConfigException(ERR_CONFIG_ATTR_ADD_VALUES_ALREADY_EXISTS.get(getName(), value)); } valueSet.add(attrValue); @@ -460,19 +452,13 @@ * * @return The constructed value set. */ private static LinkedHashSet<ByteString> getValueSet(DN value) private static LinkedHashSet<ByteString> getDNValueSet(DN value) { LinkedHashSet<ByteString> valueSet; if (value == null) { valueSet = new LinkedHashSet<>(0); return new LinkedHashSet<>(0); } else { valueSet = new LinkedHashSet<>(1); valueSet.add(ByteString.valueOf(value.toString())); } return valueSet; return newLinkedHashSet(ByteString.valueOf(value.toString())); } @@ -484,7 +470,7 @@ * * @return The constructed value set. */ private static LinkedHashSet<ByteString> getValueSet(List<DN> values) private static LinkedHashSet<ByteString> getDNValueSet(List<DN> values) { if (values == null) { @@ -584,13 +570,9 @@ { if (isRequired()) { LocalizableMessage message = ERR_CONFIG_ATTR_IS_REQUIRED.get(getName()); throw new ConfigException(message); throw new ConfigException(ERR_CONFIG_ATTR_IS_REQUIRED.get(getName())); } else { return new LinkedHashSet<>(); } return new LinkedHashSet<>(); } @@ -608,16 +590,8 @@ { if (valueString == null) { LocalizableMessage message = ERR_CONFIG_ATTR_DN_NULL.get(getName()); if (allowFailures) { logger.error(message); continue; } else { throw new ConfigException(message); } reportError(allowFailures, ERR_CONFIG_ATTR_DN_NULL.get(getName())); continue; } @@ -630,37 +604,32 @@ { logger.traceException(e); LocalizableMessage message = ERR_CONFIG_ATTR_DN_CANNOT_PARSE.get(valueString, getName(), e); if (allowFailures) { logger.error(message); continue; } else { throw new ConfigException(message); } reportError(allowFailures, ERR_CONFIG_ATTR_DN_CANNOT_PARSE.get(valueString, getName(), e)); continue; } valueSet.add(ByteString.valueOf(dn.toString())); } // If this method was configured to continue on error, then it is possible // that we ended up with an empty list. Check to see if this is a required // attribute and if so deal with it accordingly. if ((isRequired()) && valueSet.isEmpty()) { LocalizableMessage message = ERR_CONFIG_ATTR_IS_REQUIRED.get(getName()); throw new ConfigException(message); throw new ConfigException(ERR_CONFIG_ATTR_IS_REQUIRED.get(getName())); } return valueSet; } private void reportError(boolean allowFailures, LocalizableMessage message) throws ConfigException { if (!allowFailures) { throw new ConfigException(message); } logger.error(message); } /** * Converts the set of active values for this configuration attribute into a @@ -760,24 +729,18 @@ if (isRequired()) { // This is illegal -- it must have a value. LocalizableMessage message = ERR_CONFIG_ATTR_IS_REQUIRED.get(a.getName()); throw new ConfigException(message); throw new ConfigException(ERR_CONFIG_ATTR_IS_REQUIRED.get(a.getName())); } else { // This is fine. The pending value set can be empty. pendingValues = new ArrayList<>(0); } // This is fine. The pending value set can be empty. pendingValues = new ArrayList<>(0); } else { int numValues = a.size(); if ((numValues > 1) && (! isMultiValued())) if (numValues > 1 && (!isMultiValued())) { // This is illegal -- the attribute is single-valued. LocalizableMessage message = ERR_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED.get(a.getName()); throw new ConfigException(message); throw new ConfigException(ERR_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED.get(a.getName())); } pendingValues = new ArrayList<>(numValues); @@ -792,8 +755,7 @@ { logger.traceException(e); LocalizableMessage message = ERR_CONFIG_ATTR_DN_CANNOT_PARSE.get( v, getName(), e); LocalizableMessage message = ERR_CONFIG_ATTR_DN_CANNOT_PARSE.get(v, getName(), e); throw new ConfigException(message, e); } @@ -825,24 +787,18 @@ if (isRequired()) { // This is illegal -- it must have a value. LocalizableMessage message = ERR_CONFIG_ATTR_IS_REQUIRED.get(a.getName()); throw new ConfigException(message); throw new ConfigException(ERR_CONFIG_ATTR_IS_REQUIRED.get(a.getName())); } else { // This is fine. The active value set can be empty. activeValues = new ArrayList<>(0); } // This is fine. The active value set can be empty. activeValues = new ArrayList<>(0); } else { int numValues = a.size(); if ((numValues > 1) && (! isMultiValued())) if (numValues > 1 && !isMultiValued()) { // This is illegal -- the attribute is single-valued. LocalizableMessage message = ERR_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED.get(a.getName()); throw new ConfigException(message); throw new ConfigException(ERR_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED.get(a.getName())); } activeValues = new ArrayList<>(numValues); @@ -857,8 +813,7 @@ { logger.traceException(e); LocalizableMessage message = ERR_CONFIG_ATTR_DN_CANNOT_PARSE.get( v, getName(), e); LocalizableMessage message = ERR_CONFIG_ATTR_DN_CANNOT_PARSE.get(v, getName(), e); throw new ConfigException(message, e); } @@ -923,17 +878,14 @@ return new javax.management.Attribute(name, values); } else if (!requestedValues.isEmpty()) { DN dn = requestedValues.get(0); return new javax.management.Attribute(name, dn.toString()); } else { if (requestedValues.isEmpty()) { return null; } else { DN dn = requestedValues.get(0); return new javax.management.Attribute(name, dn.toString()); } return null; } } @@ -1046,44 +998,14 @@ */ public void toJMXAttributeInfo(List<MBeanAttributeInfo> attributeInfoList) { if (isMultiValued()) { attributeInfoList.add(new MBeanAttributeInfo(getName(), JMX_TYPE_STRING_ARRAY, String.valueOf( getDescription()), true, true, false)); } else { attributeInfoList.add(new MBeanAttributeInfo(getName(), String.class.getName(), String.valueOf( getDescription()), true, true, false)); } attributeInfoList.add(new MBeanAttributeInfo(getName(), getType(), String.valueOf(getDescription()), true, true, false)); if (requiresAdminAction()) { String name = getName() + ";" + OPTION_PENDING_VALUES; if (isMultiValued()) { attributeInfoList.add(new MBeanAttributeInfo(name, JMX_TYPE_STRING_ARRAY, String.valueOf( getDescription()), true, false, false)); } else { attributeInfoList.add(new MBeanAttributeInfo(name, String.class.getName(), String.valueOf( getDescription()), true, false, false)); } attributeInfoList.add(new MBeanAttributeInfo(name, getType(), String.valueOf(getDescription()), true, false, false)); } } @@ -1098,19 +1020,13 @@ */ public MBeanParameterInfo toJMXParameterInfo() { if (isMultiValued()) { return new MBeanParameterInfo(getName(), JMX_TYPE_STRING_ARRAY, String.valueOf(getDescription())); } else { return new MBeanParameterInfo(getName(), String.class.getName(), String.valueOf(getDescription())); } return new MBeanParameterInfo(getName(), getType(), String.valueOf(getDescription())); } private String getType() { return isMultiValued() ? JMX_TYPE_STRING_ARRAY : String.class.getName(); } /** * Attempts to set the value of this configuration attribute based on the @@ -1129,8 +1045,7 @@ Object value = jmxAttribute.getValue(); if (value == null) { LocalizableMessage message = ERR_CONFIG_ATTR_DN_NULL.get(getName()); throw new ConfigException(message); throw new ConfigException(ERR_CONFIG_ATTR_DN_NULL.get(getName())); } else if (value instanceof DN) { opendj-server-legacy/src/main/java/org/opends/server/config/IntegerConfigAttribute.java
@@ -26,8 +26,6 @@ */ package org.opends.server.config; import org.forgerock.i18n.LocalizableMessage; import java.lang.reflect.Array; import java.util.ArrayList; import java.util.LinkedHashSet; @@ -37,14 +35,16 @@ import javax.management.MBeanAttributeInfo; import javax.management.MBeanParameterInfo; import org.forgerock.i18n.LocalizableMessage; import org.forgerock.i18n.slf4j.LocalizedLogger; import org.forgerock.opendj.ldap.ByteString; import org.forgerock.opendj.ldap.schema.Syntax; import org.opends.server.core.DirectoryServer; import org.opends.server.types.*; import org.opends.server.types.Attribute; import org.opends.server.util.CollectionUtils; import org.forgerock.opendj.ldap.ByteString; import static org.opends.server.config.ConfigConstants.*; import org.forgerock.i18n.slf4j.LocalizedLogger; import static org.opends.messages.ConfigMessages.*; import static org.opends.server.config.ConfigConstants.*; /** * This class defines an integer configuration attribute, which can hold zero or @@ -64,24 +64,17 @@ /** The set of active values for this attribute. */ private List<Long> activeValues; /** The set of pending values for this attribute. */ private List<Long> pendingValues; /** Indicates whether this attribute will impose a lower bound for its values. */ private boolean hasLowerBound; /** Indicates whether this attribute will impose an upper bound for its values. */ private boolean hasUpperBound; /** The lower bound for values of this attribute. */ private long lowerBound; /** The upper bound for values of this attribute. */ private long upperBound; /** * Creates a new integer configuration attribute stub with the provided * information but no values. The values will be set using the @@ -114,7 +107,6 @@ { super(name, description, isRequired, isMultiValued, requiresAdminAction); this.hasLowerBound = hasLowerBound; this.lowerBound = lowerBound; this.hasUpperBound = hasUpperBound; @@ -124,8 +116,6 @@ pendingValues = activeValues; } /** * Creates a new integer configuration attribute with the provided * information. No validation will be performed on the provided value. @@ -159,8 +149,7 @@ long value) { super(name, description, isRequired, isMultiValued, requiresAdminAction, getValueSet(value)); getLongValueSet(value)); this.hasLowerBound = hasLowerBound; this.lowerBound = lowerBound; @@ -171,8 +160,6 @@ pendingValues = activeValues; } /** * Creates a new integer configuration attribute with the provided * information. No validation will be performed on the provided values. @@ -206,8 +193,7 @@ List<Long> values) { super(name, description, isRequired, isMultiValued, requiresAdminAction, getValueSet(values)); getLongValueSet(values)); this.hasLowerBound = hasLowerBound; this.lowerBound = lowerBound; @@ -218,8 +204,6 @@ pendingValues = activeValues; } /** * Creates a new integer configuration attribute with the provided * information. No validation will be performed on the provided values. @@ -256,9 +240,8 @@ List<Long> pendingValues) { super(name, description, isRequired, isMultiValued, requiresAdminAction, getValueSet(activeValues), (pendingValues != null), getValueSet(pendingValues)); getLongValueSet(activeValues), (pendingValues != null), getLongValueSet(pendingValues)); this.hasLowerBound = hasLowerBound; this.lowerBound = lowerBound; @@ -284,8 +267,6 @@ } } /** * Retrieves the name of the data type for this configuration attribute. This * is for informational purposes (e.g., inclusion in method signatures and @@ -299,8 +280,6 @@ return "Integer"; } /** * Retrieves the attribute syntax for this configuration attribute. * @@ -311,8 +290,6 @@ return DirectoryServer.getDefaultIntegerSyntax(); } /** * Retrieves the active value for this configuration attribute as a long. * This is only valid for single-valued attributes that have a value. @@ -325,7 +302,7 @@ public long activeValue() throws ConfigException { if ((activeValues == null) || activeValues.isEmpty()) if (activeValues == null || activeValues.isEmpty()) { LocalizableMessage message = ERR_CONFIG_ATTR_NO_INT_VALUE.get(getName()); throw new ConfigException(message); @@ -340,8 +317,6 @@ return activeValues.get(0); } /** * Retrieves the active value for this configuration attribute as an integer. * This is only valid for single-valued attributes that have a value within @@ -357,7 +332,7 @@ public int activeIntValue() throws ConfigException { if ((activeValues == null) || activeValues.isEmpty()) if (activeValues == null || activeValues.isEmpty()) { LocalizableMessage message = ERR_CONFIG_ATTR_NO_INT_VALUE.get(getName()); throw new ConfigException(message); @@ -382,8 +357,6 @@ } } /** * Retrieves the set of active values for this configuration attribute. * @@ -394,8 +367,6 @@ return activeValues; } /** * Retrieves the pending value for this configuration attribute as a long. * This is only valid for single-valued attributes that have a value. If this @@ -415,7 +386,7 @@ return activeValue(); } if ((pendingValues == null) || pendingValues.isEmpty()) if (pendingValues == null || pendingValues.isEmpty()) { LocalizableMessage message = ERR_CONFIG_ATTR_NO_INT_VALUE.get(getName()); throw new ConfigException(message); @@ -430,8 +401,6 @@ return pendingValues.get(0); } /** * Retrieves the pending value for this configuration attribute as an integer. * This is only valid for single-valued attributes that have a value within @@ -453,7 +422,7 @@ return activeIntValue(); } if ((pendingValues == null) || pendingValues.isEmpty()) if (pendingValues == null || pendingValues.isEmpty()) { LocalizableMessage message = ERR_CONFIG_ATTR_NO_INT_VALUE.get(getName()); throw new ConfigException(message); @@ -478,8 +447,6 @@ } } /** * Retrieves the set of pending values for this configuration attribute. If * there are no pending values, then the set of active values will be @@ -497,8 +464,6 @@ return pendingValues; } /** * Indicates whether a lower bound will be enforced for the value of this * configuration attribute. @@ -512,8 +477,6 @@ return hasLowerBound; } /** * Retrieves the lower bound for the value of this configuration attribute. * @@ -524,8 +487,6 @@ return lowerBound; } /** * Indicates whether an upper bound will be enforced for the calculated value * of this configuration attribute. @@ -539,8 +500,6 @@ return hasUpperBound; } /** * Retrieves the upper bound for the calculated value of this configuration * attribute. @@ -553,8 +512,6 @@ return upperBound; } /** * Sets the value for this integer configuration attribute. * @@ -565,14 +522,14 @@ public void setValue(long value) throws ConfigException { if (hasLowerBound && (value < lowerBound)) if (hasLowerBound && value < lowerBound) { LocalizableMessage message = ERR_CONFIG_ATTR_INT_BELOW_LOWER_BOUND.get( getName(), value, lowerBound); throw new ConfigException(message); } if (hasUpperBound && (value > upperBound)) if (hasUpperBound && value > upperBound) { LocalizableMessage message = ERR_CONFIG_ATTR_INT_ABOVE_UPPER_BOUND.get( getName(), value, upperBound); @@ -582,19 +539,17 @@ if (requiresAdminAction()) { pendingValues = CollectionUtils.newArrayList(value); setPendingValues(getValueSet(value)); setPendingValues(getLongValueSet(value)); } else { activeValues.clear(); activeValues.add(value); pendingValues = activeValues; setActiveValues(getValueSet(value)); setActiveValues(getLongValueSet(value)); } } /** * Sets the values for this integer configuration attribute. * @@ -607,52 +562,47 @@ throws ConfigException { // First check if the set is empty and if that is allowed. if ((values == null) || (values.isEmpty())) if (values == null || values.isEmpty()) { if (isRequired()) { LocalizableMessage message = ERR_CONFIG_ATTR_IS_REQUIRED.get(getName()); throw new ConfigException(message); throw new ConfigException(ERR_CONFIG_ATTR_IS_REQUIRED.get(getName())); } if (requiresAdminAction()) { setPendingValues(new LinkedHashSet<ByteString>(0)); pendingValues = new ArrayList<>(); } else { if (requiresAdminAction()) { setPendingValues(new LinkedHashSet<ByteString>(0)); pendingValues = new ArrayList<>(); } else { setActiveValues(new LinkedHashSet<ByteString>(0)); activeValues.clear(); } setActiveValues(new LinkedHashSet<ByteString>(0)); activeValues.clear(); } } // Next check if the set contains multiple values and if that is allowed. int numValues = values.size(); if ((! isMultiValued()) && (numValues > 1)) if (!isMultiValued() && numValues > 1) { LocalizableMessage message = ERR_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED.get(getName()); throw new ConfigException(message); } // Iterate through all the provided values, make sure that they are // acceptable, and build the value set. LinkedHashSet<ByteString> valueSet = new LinkedHashSet<>(numValues); for (long value : values) { if (hasLowerBound && (value < lowerBound)) if (hasLowerBound && value < lowerBound) { LocalizableMessage message = ERR_CONFIG_ATTR_INT_BELOW_LOWER_BOUND.get( getName(), value, lowerBound); throw new ConfigException(message); } if (hasUpperBound && (value > upperBound)) if (hasUpperBound && value > upperBound) { LocalizableMessage message = ERR_CONFIG_ATTR_INT_ABOVE_UPPER_BOUND.get( getName(), value, upperBound); @@ -671,7 +621,6 @@ valueSet.add(attrValue); } // Apply this value set to the new active or pending value set. if (requiresAdminAction()) { @@ -686,8 +635,6 @@ } } /** * Creates the appropriate value set with the provided value. * @@ -695,15 +642,11 @@ * * @return The constructed value set. */ private static LinkedHashSet<ByteString> getValueSet(long value) private static LinkedHashSet<ByteString> getLongValueSet(long value) { LinkedHashSet<ByteString> valueSet = new LinkedHashSet<>(1); valueSet.add(ByteString.valueOf(String.valueOf(value))); return valueSet; return getValueSet(String.valueOf(value)); } /** * Creates the appropriate value set with the provided values. * @@ -711,7 +654,7 @@ * * @return The constructed value set. */ private static LinkedHashSet<ByteString> getValueSet(List<Long> values) private static LinkedHashSet<ByteString> getLongValueSet(List<Long> values) { if (values == null) { @@ -726,8 +669,6 @@ return valueSet; } /** * Applies the set of pending values, making them the active values for this * configuration attribute. This will not take any action if there are no @@ -744,8 +685,6 @@ activeValues = pendingValues; } /** * Indicates whether the provided value is acceptable for use in this * attribute. If it is not acceptable, then the reason should be written into @@ -776,29 +715,25 @@ return false; } // Perform any necessary bounds checking. if (hasLowerBound && (longValue < lowerBound)) if (hasLowerBound && longValue < lowerBound) { rejectReason.append(ERR_CONFIG_ATTR_INT_BELOW_LOWER_BOUND.get( getName(), longValue, lowerBound)); return false; } if (hasUpperBound && (longValue > upperBound)) if (hasUpperBound && longValue > upperBound) { rejectReason.append(ERR_CONFIG_ATTR_INT_ABOVE_UPPER_BOUND.get( getName(), longValue, upperBound)); return false; } // If we've gotten here, then the value must be acceptable. return true; } /** * Converts the provided set of strings to a corresponding set of attribute * values. @@ -822,29 +757,21 @@ stringsToValues(List<String> valueStrings, boolean allowFailures) throws ConfigException { if ((valueStrings == null) || valueStrings.isEmpty()) if (valueStrings == null || valueStrings.isEmpty()) { if (isRequired()) { LocalizableMessage message = ERR_CONFIG_ATTR_IS_REQUIRED.get(getName()); throw new ConfigException(message); throw new ConfigException(ERR_CONFIG_ATTR_IS_REQUIRED.get(getName())); } else { return new LinkedHashSet<>(); } return new LinkedHashSet<>(); } int numValues = valueStrings.size(); if ((! isMultiValued()) && (numValues > 1)) if (!isMultiValued() && numValues > 1) { LocalizableMessage message = ERR_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED.get(getName()); throw new ConfigException(message); throw new ConfigException(ERR_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED.get(getName())); } LinkedHashSet<ByteString> valueSet = new LinkedHashSet<>(numValues); for (String valueString : valueStrings) { @@ -857,70 +784,43 @@ { logger.traceException(e); LocalizableMessage message = ERR_CONFIG_ATTR_INT_COULD_NOT_PARSE.get( valueString, getName(), e); if (allowFailures) { logger.error(message); continue; } else { throw new ConfigException(message); } reportError(allowFailures, ERR_CONFIG_ATTR_INT_COULD_NOT_PARSE.get(valueString, getName(), e)); continue; } if (hasLowerBound && (longValue < lowerBound)) if (hasLowerBound && longValue < lowerBound) { LocalizableMessage message = ERR_CONFIG_ATTR_INT_BELOW_LOWER_BOUND.get( getName(), longValue, lowerBound); if (allowFailures) { logger.error(message); continue; } else { throw new ConfigException(message); } reportError(allowFailures, ERR_CONFIG_ATTR_INT_BELOW_LOWER_BOUND.get(getName(), longValue, lowerBound)); continue; } if (hasUpperBound && (longValue > upperBound)) if (hasUpperBound && longValue > upperBound) { LocalizableMessage message = ERR_CONFIG_ATTR_INT_ABOVE_UPPER_BOUND.get( getName(), longValue, upperBound); if (allowFailures) { logger.error(message); continue; } else { throw new ConfigException(message); } reportError(allowFailures, ERR_CONFIG_ATTR_INT_ABOVE_UPPER_BOUND.get(getName(), longValue, upperBound)); continue; } valueSet.add(ByteString.valueOf(valueString)); } // If this method was configured to continue on error, then it is possible // that we ended up with an empty list. Check to see if this is a required // attribute and if so deal with it accordingly. if ((isRequired()) && valueSet.isEmpty()) if (isRequired() && valueSet.isEmpty()) { LocalizableMessage message = ERR_CONFIG_ATTR_IS_REQUIRED.get(getName()); throw new ConfigException(message); throw new ConfigException(ERR_CONFIG_ATTR_IS_REQUIRED.get(getName())); } return valueSet; } private void reportError(boolean allowFailures, LocalizableMessage message) throws ConfigException { if (!allowFailures) { throw new ConfigException(message); } logger.error(message); } /** * Converts the set of active values for this configuration attribute into a @@ -937,8 +837,6 @@ return toListOfString(activeValues); } /** * Converts the set of pending values for this configuration attribute into a * set of strings that may be stored in the configuration or represented over @@ -956,30 +854,19 @@ { return toListOfString(pendingValues); } else { return null; } return null; } /** * @param pendingValues2 * @return */ private List<String> toListOfString(List<Long> pendingValues2) private List<String> toListOfString(List<Long> values) { ArrayList<String> valueStrings = new ArrayList<>(pendingValues2.size()); for (long l : pendingValues2) ArrayList<String> results = new ArrayList<>(values.size()); for (long l : values) { valueStrings.add(String.valueOf(l)); results.add(String.valueOf(l)); } return valueStrings; return results; } /** * Retrieves a new configuration attribute of this type that will contain the * values from the provided attribute. @@ -1022,7 +909,6 @@ throw new ConfigException(message); } if (a.isEmpty()) { if (isRequired()) @@ -1040,7 +926,7 @@ else { int numValues = a.size(); if ((numValues > 1) && (! isMultiValued())) if (numValues > 1 && !isMultiValued()) { // This is illegal -- the attribute is single-valued. LocalizableMessage message = @@ -1063,16 +949,15 @@ throw new ConfigException(message, e); } // Check the bounds set for this attribute. if (hasLowerBound && (longValue < lowerBound)) if (hasLowerBound && longValue < lowerBound) { LocalizableMessage message = ERR_CONFIG_ATTR_INT_BELOW_LOWER_BOUND.get( a.getName(), longValue, lowerBound); throw new ConfigException(message); } if (hasUpperBound && (longValue > upperBound)) if (hasUpperBound && longValue > upperBound) { LocalizableMessage message = ERR_CONFIG_ATTR_INT_ABOVE_UPPER_BOUND.get( a.getName(), longValue, upperBound); @@ -1104,7 +989,6 @@ throw new ConfigException(message); } if (a.isEmpty()) { if (isRequired()) @@ -1122,7 +1006,7 @@ else { int numValues = a.size(); if ((numValues > 1) && (! isMultiValued())) if (numValues > 1 && !isMultiValued()) { // This is illegal -- the attribute is single-valued. LocalizableMessage message = @@ -1145,16 +1029,15 @@ throw new ConfigException(message, e); } // Check the bounds set for this attribute. if (hasLowerBound && (longValue < lowerBound)) if (hasLowerBound && longValue < lowerBound) { LocalizableMessage message = ERR_CONFIG_ATTR_INT_BELOW_LOWER_BOUND.get( a.getName(), longValue, lowerBound); throw new ConfigException(message); } if (hasUpperBound && (longValue > upperBound)) if (hasUpperBound && longValue > upperBound) { LocalizableMessage message = ERR_CONFIG_ATTR_INT_ABOVE_UPPER_BOUND.get( a.getName(), longValue, upperBound); @@ -1180,15 +1063,12 @@ pendingValues = activeValues; } return new IntegerConfigAttribute(getName(), getDescription(), isRequired(), isMultiValued(), requiresAdminAction(), hasLowerBound, lowerBound, hasUpperBound, upperBound, activeValues, pendingValues); } /** * Retrieves a JMX attribute containing the value set for this * configuration attribute (active or pending). @@ -1224,20 +1104,16 @@ return new javax.management.Attribute(name, values); } else if (requestedValues.isEmpty()) { return null; } else { if (requestedValues.isEmpty()) { return null; } else { return new javax.management.Attribute(name, requestedValues.get(0)); } return new javax.management.Attribute(name, requestedValues.get(0)); } } /** * Retrieves a JMX attribute containing the active value set for this * configuration attribute. @@ -1247,9 +1123,9 @@ * any active values. */ public javax.management.Attribute toJMXAttribute() { return _toJMXAttribute(false); } { return _toJMXAttribute(false); } /** * Retrieves a JMX attribute containing the pending value set for this @@ -1263,8 +1139,6 @@ return _toJMXAttribute(true); } /** * Adds information about this configuration attribute to the provided JMX * attribute list. If this configuration attribute requires administrative @@ -1309,9 +1183,9 @@ } } if (requiresAdminAction() && (pendingValues != null) && (pendingValues != activeValues)) if (requiresAdminAction() && pendingValues != null && pendingValues != activeValues) { String name = getName() + ";" + OPTION_PENDING_VALUES; @@ -1333,8 +1207,6 @@ } } /** * Adds information about this configuration attribute to the provided list in * the form of a JMX <CODE>MBeanAttributeInfo</CODE> object. If this @@ -1366,7 +1238,6 @@ true, true, false)); } if (requiresAdminAction()) { String name = getName() + ";" + OPTION_PENDING_VALUES; @@ -1388,8 +1259,6 @@ } } /** * Retrieves a JMX <CODE>MBeanParameterInfo</CODE> object that describes this * configuration attribute. @@ -1411,8 +1280,6 @@ } } /** * Attempts to set the value of this configuration attribute based on the * information in the provided JMX attribute. @@ -1521,8 +1388,6 @@ } } /** * Creates a duplicate of this configuration attribute. * @@ -1536,4 +1401,3 @@ upperBound, activeValues, pendingValues); } } opendj-server-legacy/src/main/java/org/opends/server/config/IntegerWithUnitConfigAttribute.java
@@ -592,17 +592,13 @@ * * @return The constructed value set. */ private static LinkedHashSet<ByteString> getValueSet(long intValue, String unit) private static LinkedHashSet<ByteString> getValueSet(long intValue, String unit) { if (unit == null) if (unit != null) { return null; return getValueSet(intValue + " " + unit); } LinkedHashSet<ByteString> valueSet = new LinkedHashSet<>(1); valueSet.add(ByteString.valueOf(intValue + " " + unit)); return valueSet; return null; } @@ -760,57 +756,33 @@ { if (isRequired()) { LocalizableMessage message = ERR_CONFIG_ATTR_IS_REQUIRED.get(getName()); throw new ConfigException(message); throw new ConfigException(ERR_CONFIG_ATTR_IS_REQUIRED.get(getName())); } else { return new LinkedHashSet<>(); } return new LinkedHashSet<>(); } int numValues = valueStrings.size(); if ((! isMultiValued()) && (numValues > 1)) { LocalizableMessage message = ERR_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED.get(getName()); throw new ConfigException(message); throw new ConfigException(ERR_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED.get(getName())); } LinkedHashSet<ByteString> valueSet = new LinkedHashSet<>(numValues); for (String valueString : valueStrings) { if ((valueString == null) || (valueString.length() == 0)) if (valueString == null || valueString.length() == 0) { LocalizableMessage message = ERR_CONFIG_ATTR_EMPTY_STRING_VALUE.get(getName()); if (allowFailures) { logger.error(message); continue; } else { throw new ConfigException(message); } reportError(allowFailures, ERR_CONFIG_ATTR_EMPTY_STRING_VALUE.get(getName())); continue; } StringBuilder rejectReason = new StringBuilder(); if (! valueIsAcceptable(valueString.toLowerCase(), rejectReason)) if (!valueIsAcceptable(valueString.toLowerCase(), rejectReason)) { LocalizableMessage message = ERR_CONFIG_ATTR_INVALID_VALUE_WITH_UNIT.get( valueString, getName(), rejectReason); if (allowFailures) { logger.error(message); continue; } else { throw new ConfigException(message); } reportError(allowFailures, ERR_CONFIG_ATTR_INVALID_VALUE_WITH_UNIT.get(valueString, getName(), rejectReason)); continue; } valueSet.add(ByteString.valueOf(valueString)); @@ -822,15 +794,21 @@ // attribute and if so deal with it accordingly. if ((isRequired()) && valueSet.isEmpty()) { LocalizableMessage message = ERR_CONFIG_ATTR_IS_REQUIRED.get(getName()); throw new ConfigException(message); throw new ConfigException(ERR_CONFIG_ATTR_IS_REQUIRED.get(getName())); } return valueSet; } private void reportError(boolean allowFailures, LocalizableMessage message) throws ConfigException { if (!allowFailures) { throw new ConfigException(message); } logger.error(message); } /** * Converts the set of active values for this configuration attribute into a @@ -908,86 +886,30 @@ if (a.hasOptions()) { // This must be the pending value. if (a.hasOption(OPTION_PENDING_VALUES)) if (!a.hasOption(OPTION_PENDING_VALUES)) { if (pendingUnit != null) { // We cannot have multiple pending value sets. LocalizableMessage message = ERR_CONFIG_ATTR_MULTIPLE_PENDING_VALUE_SETS.get(a.getName()); throw new ConfigException(message); } if (a.isEmpty()) { // This is illegal -- it must have a value. LocalizableMessage message = ERR_CONFIG_ATTR_IS_REQUIRED.get(a.getName()); throw new ConfigException(message); } else { Iterator<ByteString> iterator = a.iterator(); String valueString = iterator.next().toString(); if (iterator.hasNext()) { // This is illegal -- the attribute is single-valued. LocalizableMessage message = ERR_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED.get(a.getName()); throw new ConfigException(message); } try { int spacePos = valueString.indexOf(' '); pendingIntValue = Long.parseLong(valueString.substring(0, spacePos)); pendingUnit = valueString.substring(spacePos+1).trim(); } catch (Exception e) { throw new ConfigException(ERR_CONFIG_ATTR_COULD_NOT_PARSE_INT_COMPONENT. get(valueString, a.getName(), e)); } // Get the unit and use it to determine the corresponding // multiplier. if (! units.containsKey(pendingUnit)) { LocalizableMessage message = ERR_CONFIG_ATTR_INVALID_UNIT.get(pendingUnit, a.getName()); throw new ConfigException(message); } double multiplier = units.get(activeUnit); pendingCalculatedValue = (long) (multiplier * pendingIntValue); // Check the bounds set for this attribute. if (hasLowerBound && (pendingCalculatedValue < lowerBound)) { LocalizableMessage message = ERR_CONFIG_ATTR_INT_BELOW_LOWER_BOUND.get( a.getName(), pendingCalculatedValue, lowerBound); throw new ConfigException(message); } if (hasUpperBound && (pendingCalculatedValue > upperBound)) { LocalizableMessage message = ERR_CONFIG_ATTR_INT_ABOVE_UPPER_BOUND.get( a.getName(), pendingCalculatedValue, upperBound); throw new ConfigException(message); } } // This is illegal -- only the pending option is allowed for configuration attributes. throw new ConfigException(ERR_CONFIG_ATTR_OPTIONS_NOT_ALLOWED.get(a.getName())); } else if (pendingUnit != null) { // This is illegal -- only the pending option is allowed for // configuration attributes. LocalizableMessage message = ERR_CONFIG_ATTR_OPTIONS_NOT_ALLOWED.get(a.getName()); throw new ConfigException(message); // We cannot have multiple pending value sets. throw new ConfigException(ERR_CONFIG_ATTR_MULTIPLE_PENDING_VALUE_SETS.get(a.getName())); } String valueString = getValue(a); try { int spacePos = valueString.indexOf(' '); pendingIntValue = Long.parseLong(valueString.substring(0, spacePos)); pendingUnit = valueString.substring(spacePos + 1).trim(); } catch (Exception e) { throw new ConfigException(ERR_CONFIG_ATTR_COULD_NOT_PARSE_INT_COMPONENT.get(valueString, a.getName(), e)); } pendingCalculatedValue = calculateValue(pendingIntValue, activeUnit, pendingUnit, a); } else { @@ -995,79 +917,29 @@ if (activeUnit != null) { // We cannot have multiple active value sets. LocalizableMessage message = ERR_CONFIG_ATTR_MULTIPLE_ACTIVE_VALUE_SETS.get(a.getName()); throw new ConfigException(message); throw new ConfigException(ERR_CONFIG_ATTR_MULTIPLE_ACTIVE_VALUE_SETS.get(a.getName())); } if (a.isEmpty()) String valueString = getValue(a); try { // This is illegal -- it must have a value. LocalizableMessage message = ERR_CONFIG_ATTR_IS_REQUIRED.get(a.getName()); throw new ConfigException(message); int spacePos = valueString.indexOf(' '); activeIntValue = Long.parseLong(valueString.substring(0, spacePos)); activeUnit = valueString.substring(spacePos + 1).trim(); } else catch (Exception e) { Iterator<ByteString> iterator = a.iterator(); String valueString = iterator.next().toString(); if (iterator.hasNext()) { // This is illegal -- the attribute is single-valued. LocalizableMessage message = ERR_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED.get(a.getName()); throw new ConfigException(message); } try { int spacePos = valueString.indexOf(' '); activeIntValue = Long.parseLong(valueString.substring(0, spacePos)); activeUnit = valueString.substring(spacePos+1).trim(); } catch (Exception e) { throw new ConfigException(ERR_CONFIG_ATTR_COULD_NOT_PARSE_INT_COMPONENT.get( valueString, a.getName(), e)); } // Get the unit and use it to determine the corresponding multiplier. if (! units.containsKey(activeUnit)) { LocalizableMessage message = ERR_CONFIG_ATTR_INVALID_UNIT.get(activeUnit, a.getName()); throw new ConfigException(message); } double multiplier = units.get(activeUnit); activeCalculatedValue = (long) (multiplier * activeIntValue); // Check the bounds set for this attribute. if (hasLowerBound && (activeCalculatedValue < lowerBound)) { LocalizableMessage message = ERR_CONFIG_ATTR_INT_BELOW_LOWER_BOUND.get( a.getName(), activeCalculatedValue, lowerBound); throw new ConfigException(message); } if (hasUpperBound && (activeCalculatedValue > upperBound)) { LocalizableMessage message = ERR_CONFIG_ATTR_INT_ABOVE_UPPER_BOUND.get( a.getName(), activeCalculatedValue, upperBound); throw new ConfigException(message); } throw new ConfigException(ERR_CONFIG_ATTR_COULD_NOT_PARSE_INT_COMPONENT.get(valueString, a.getName(), e)); } activeCalculatedValue = calculateValue(activeIntValue, activeUnit, activeUnit, a); } } if (activeUnit == null) { // This is not OK. The value set must contain an active value. LocalizableMessage message = ERR_CONFIG_ATTR_NO_ACTIVE_VALUE_SET.get(getName()); throw new ConfigException(message); throw new ConfigException(ERR_CONFIG_ATTR_NO_ACTIVE_VALUE_SET.get(getName())); } if (pendingUnit == null) @@ -1086,7 +958,46 @@ pendingIntValue, pendingUnit); } private String getValue(Attribute a) throws ConfigException { if (a.isEmpty()) { // This is illegal -- it must have a value. throw new ConfigException(ERR_CONFIG_ATTR_IS_REQUIRED.get(a.getName())); } Iterator<ByteString> iterator = a.iterator(); String valueString = iterator.next().toString(); if (iterator.hasNext()) { // This is illegal -- the attribute is single-valued. throw new ConfigException(ERR_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED.get(a.getName())); } return valueString; } private long calculateValue(long intValue, String activeUnit, String pendingUnit, Attribute a) throws ConfigException { // Get the unit and use it to determine the corresponding multiplier. if (!units.containsKey(pendingUnit)) { throw new ConfigException(ERR_CONFIG_ATTR_INVALID_UNIT.get(pendingUnit, a.getName())); } double multiplier = units.get(activeUnit); final long result = (long) (multiplier * intValue); // Check the bounds set for this attribute. if (hasLowerBound && result < lowerBound) { throw new ConfigException(ERR_CONFIG_ATTR_INT_BELOW_LOWER_BOUND.get(a.getName(), result, lowerBound)); } if (hasUpperBound && result > upperBound) { throw new ConfigException(ERR_CONFIG_ATTR_INT_ABOVE_UPPER_BOUND.get(a.getName(), result, upperBound)); } return result; } /** * Retrieves a JMX attribute containing the active value set for this opendj-server-legacy/src/main/java/org/opends/server/config/MultiChoiceConfigAttribute.java
@@ -26,25 +26,26 @@ */ package org.opends.server.config; import org.forgerock.i18n.LocalizableMessage; import java.lang.reflect.Array; import java.util.ArrayList; import java.util.LinkedHashSet; import java.util.List; import java.util.Set; import javax.management.AttributeList; import javax.management.MBeanAttributeInfo; import javax.management.MBeanParameterInfo; import org.forgerock.i18n.LocalizableMessage; import org.forgerock.i18n.slf4j.LocalizedLogger; import org.forgerock.opendj.ldap.ByteString; import org.forgerock.opendj.ldap.schema.Syntax; import org.opends.server.core.DirectoryServer; import org.opends.server.types.*; import org.opends.server.types.Attribute; import org.opends.server.util.CollectionUtils; import org.forgerock.opendj.ldap.ByteString; import static org.opends.server.config.ConfigConstants.*; import org.forgerock.i18n.slf4j.LocalizedLogger; import static org.opends.messages.ConfigMessages.*; import static org.opends.server.config.ConfigConstants.*; /** * This class defines a multi-choice configuration attribute, which can hold @@ -438,25 +439,22 @@ throws ConfigException { // First check if the set is empty and if that is allowed. if ((values == null) || (values.isEmpty())) if (values == null || values.isEmpty()) { if (isRequired()) { LocalizableMessage message = ERR_CONFIG_ATTR_IS_REQUIRED.get(getName()); throw new ConfigException(message); throw new ConfigException(ERR_CONFIG_ATTR_IS_REQUIRED.get(getName())); } if (requiresAdminAction()) { setPendingValues(new LinkedHashSet<ByteString>(0)); pendingValues = new ArrayList<>(); } else { if (requiresAdminAction()) { setPendingValues(new LinkedHashSet<ByteString>(0)); pendingValues = new ArrayList<>(); } else { setActiveValues(new LinkedHashSet<ByteString>(0)); activeValues.clear(); } setActiveValues(new LinkedHashSet<ByteString>(0)); activeValues.clear(); } } @@ -465,9 +463,7 @@ int numValues = values.size(); if ((! isMultiValued()) && (numValues > 1)) { LocalizableMessage message = ERR_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED.get(getName()); throw new ConfigException(message); throw new ConfigException(ERR_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED.get(getName())); } @@ -476,26 +472,19 @@ LinkedHashSet<ByteString> valueSet = new LinkedHashSet<>(numValues); for (String value : values) { if ((value == null) || (value.length() == 0)) if (value == null || value.length() == 0) { LocalizableMessage message = ERR_CONFIG_ATTR_EMPTY_STRING_VALUE.get(getName()); throw new ConfigException(message); throw new ConfigException(ERR_CONFIG_ATTR_EMPTY_STRING_VALUE.get(getName())); } if (! allowedValues.contains(value.toLowerCase())) if (!allowedValues.contains(value.toLowerCase())) { LocalizableMessage message = ERR_CONFIG_ATTR_VALUE_NOT_ALLOWED.get(value, getName()); throw new ConfigException(message); throw new ConfigException(ERR_CONFIG_ATTR_VALUE_NOT_ALLOWED.get(value, getName())); } ByteString attrValue = ByteString.valueOf(value); if (valueSet.contains(attrValue)) { LocalizableMessage message = ERR_CONFIG_ATTR_ADD_VALUES_ALREADY_EXISTS.get(getName(), value); throw new ConfigException(message); throw new ConfigException(ERR_CONFIG_ATTR_ADD_VALUES_ALREADY_EXISTS.get(getName(), value)); } valueSet.add(attrValue); @@ -516,48 +505,6 @@ } } /** * Creates the appropriate value set with the provided value. * * @param value The value to use to create the value set. * * @return The constructed value set. */ private static LinkedHashSet<ByteString> getValueSet(String value) { LinkedHashSet<ByteString> valueSet = new LinkedHashSet<>(1); valueSet.add(ByteString.valueOf(value)); return valueSet; } /** * Creates the appropriate value set with the provided values. * * @param values The values to use to create the value set. * * @return The constructed value set. */ private static LinkedHashSet<ByteString> getValueSet(List<String> values) { if (values == null) { return null; } LinkedHashSet<ByteString> valueSet = new LinkedHashSet<>(values.size()); for (String value : values) { valueSet.add(ByteString.valueOf(value)); } return valueSet; } /** * Applies the set of pending values, making them the active values for this * configuration attribute. This will not take any action if there are no @@ -637,76 +584,58 @@ stringsToValues(List<String> valueStrings, boolean allowFailures) throws ConfigException { if ((valueStrings == null) || valueStrings.isEmpty()) if (valueStrings == null || valueStrings.isEmpty()) { if (isRequired()) { LocalizableMessage message = ERR_CONFIG_ATTR_IS_REQUIRED.get(getName()); throw new ConfigException(message); throw new ConfigException(ERR_CONFIG_ATTR_IS_REQUIRED.get(getName())); } return new LinkedHashSet<>(); } int numValues = valueStrings.size(); if ((! isMultiValued()) && (numValues > 1)) if (!isMultiValued() && numValues > 1) { LocalizableMessage message = ERR_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED.get(getName()); throw new ConfigException(message); throw new ConfigException(ERR_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED.get(getName())); } LinkedHashSet<ByteString> valueSet = new LinkedHashSet<>(numValues); for (String valueString : valueStrings) { if ((valueString == null) || (valueString.length() == 0)) if (valueString == null || valueString.length() == 0) { LocalizableMessage message = ERR_CONFIG_ATTR_EMPTY_STRING_VALUE.get(getName()); if (allowFailures) { logger.error(message); continue; } else { throw new ConfigException(message); } reportError(allowFailures, ERR_CONFIG_ATTR_EMPTY_STRING_VALUE.get(getName())); continue; } if (! allowedValues.contains(valueString.toLowerCase())) { LocalizableMessage message = ERR_CONFIG_ATTR_VALUE_NOT_ALLOWED.get( valueString, getName()); if (allowFailures) { logger.error(message); continue; } else { throw new ConfigException(message); } reportError(allowFailures, ERR_CONFIG_ATTR_VALUE_NOT_ALLOWED.get(valueString, getName())); continue; } valueSet.add(ByteString.valueOf(valueString)); } // If this method was configured to continue on error, then it is possible // that we ended up with an empty list. Check to see if this is a required // attribute and if so deal with it accordingly. if ((isRequired()) && valueSet.isEmpty()) if (isRequired() && valueSet.isEmpty()) { LocalizableMessage message = ERR_CONFIG_ATTR_IS_REQUIRED.get(getName()); throw new ConfigException(message); } return valueSet; } private void reportError(boolean allowFailures, LocalizableMessage message) throws ConfigException { if (!allowFailures) { throw new ConfigException(message); } logger.error(message); } /** * Converts the set of active values for this configuration attribute into a @@ -715,8 +644,7 @@ * compatible with the decoding used by the <CODE>stringsToValues</CODE> * method. * * @return The string representations of the set of active values for this * configuration attribute. * @return The string representations of the set of active values for this configuration attribute. */ public List<String> activeValuesToStrings() { @@ -1051,46 +979,14 @@ */ public void toJMXAttributeInfo(List<MBeanAttributeInfo> attributeInfoList) { if (isMultiValued()) { attributeInfoList.add(new MBeanAttributeInfo(getName(), JMX_TYPE_STRING_ARRAY, String.valueOf( getDescription()), true, true, false)); } else { attributeInfoList.add(new MBeanAttributeInfo(getName(), String.class.getName(), String.valueOf( getDescription()), true, true, false)); } attributeInfoList.add(new MBeanAttributeInfo(getName(), getType(), String.valueOf(getDescription()), true, true, false)); if (requiresAdminAction()) { String name = getName() + ";" + OPTION_PENDING_VALUES; if (isMultiValued()) { attributeInfoList.add(new MBeanAttributeInfo(name, JMX_TYPE_STRING_ARRAY, String.valueOf( getDescription()), true, false, false)); } else { attributeInfoList.add(new MBeanAttributeInfo(name, String.class.getName(), String.valueOf( getDescription()), true, false, false)); } attributeInfoList.add(new MBeanAttributeInfo(name, getType(), String.valueOf(getDescription()), true, false, false)); } } @@ -1105,19 +1001,13 @@ */ public MBeanParameterInfo toJMXParameterInfo() { if (isMultiValued()) { return new MBeanParameterInfo(getName(), JMX_TYPE_STRING_ARRAY, String.valueOf(getDescription())); } else { return new MBeanParameterInfo(getName(), String.class.getName(), String.valueOf(getDescription())); } return new MBeanParameterInfo(getName(), getType(), String.valueOf(getDescription())); } private String getType() { return isMultiValued() ? JMX_TYPE_STRING_ARRAY : String.class.getName(); } /** * Attempts to set the value of this configuration attribute based on the @@ -1198,4 +1088,3 @@ activeValues, pendingValues); } } opendj-server-legacy/src/main/java/org/opends/server/config/ReadOnlyConfigAttribute.java
@@ -26,23 +26,24 @@ */ package org.opends.server.config; import org.forgerock.i18n.LocalizableMessage; import java.util.ArrayList; import java.util.LinkedHashSet; import java.util.List; import javax.management.AttributeList; import javax.management.MBeanAttributeInfo; import javax.management.MBeanParameterInfo; import org.forgerock.i18n.LocalizableMessage; import org.forgerock.opendj.ldap.ByteString; import org.forgerock.opendj.ldap.schema.Syntax; import org.opends.server.core.DirectoryServer; import org.opends.server.types.Attribute; import org.forgerock.opendj.ldap.ByteString; import static org.opends.messages.ConfigMessages.*; import static org.opends.server.config.ConfigConstants.*; import static org.opends.server.util.CollectionUtils.*; import static org.opends.messages.ConfigMessages.*; /** * This class defines a configuration attribute that is only intended for use * in displaying information. It will not allow its value to be altered. @@ -240,11 +241,9 @@ * * @throws ConfigException If the provided value is not acceptable. */ public void setValue(String value) throws ConfigException public void setValue(String value) throws ConfigException { LocalizableMessage message = ERR_CONFIG_ATTR_READ_ONLY.get(getName()); throw new ConfigException(message); throw new ConfigException(ERR_CONFIG_ATTR_READ_ONLY.get(getName())); } @@ -257,45 +256,9 @@ * @throws ConfigException If the provided value set or any of the * individual values are not acceptable. */ public void setValues(List<String> values) throws ConfigException public void setValues(List<String> values) throws ConfigException { LocalizableMessage message = ERR_CONFIG_ATTR_READ_ONLY.get(getName()); throw new ConfigException(message); } /** * Creates the appropriate value set with the provided value. * * @param value The value to use to create the value set. * * @return The constructed value set. */ private static LinkedHashSet<ByteString> getValueSet(String value) { LinkedHashSet<ByteString> valueSet = new LinkedHashSet<>(1); valueSet.add(ByteString.valueOf(value)); return valueSet; } /** * Creates the appropriate value set with the provided values. * * @param values The values to use to create the value set. * * @return The constructed value set. */ private static LinkedHashSet<ByteString> getValueSet(List<String> values) { if (values != null) { return toByteStrings(values); } return null; throw new ConfigException(ERR_CONFIG_ATTR_READ_ONLY.get(getName())); } @@ -350,29 +313,16 @@ * @throws ConfigException If an unrecoverable problem occurs while * performing the conversion. */ public LinkedHashSet<ByteString> stringsToValues(List<String> valueStrings, boolean allowFailures) throws ConfigException public LinkedHashSet<ByteString> stringsToValues(List<String> valueStrings, boolean allowFailures) throws ConfigException { if ((valueStrings == null) || valueStrings.isEmpty()) if (valueStrings == null || valueStrings.isEmpty()) { return new LinkedHashSet<>(); } return toByteStrings(valueStrings); return getValueSet(valueStrings); } private static LinkedHashSet<ByteString> toByteStrings(List<String> strings) { LinkedHashSet<ByteString> valueSet = new LinkedHashSet<>(strings.size()); for (String valueString : strings) { valueSet.add(ByteString.valueOf(valueString)); } return valueSet; } /** * Converts the set of active values for this configuration attribute into a * set of strings that may be stored in the configuration or represented over @@ -451,21 +401,16 @@ { if (isMultiValued()) { String[] valueArray = new String[values.size()]; values.toArray(valueArray); String[] valueArray = values.toArray(new String[values.size()]); return new javax.management.Attribute(getName(), valueArray); } else if (!values.isEmpty()) { return new javax.management.Attribute(getName(), values.get(0)); } else { if (values.isEmpty()) { return null; } else { return new javax.management.Attribute(getName(), values.get(0)); } return null; } } @@ -478,9 +423,10 @@ * configuration attribute, or <CODE>null</CODE> if it does * not have any active values. */ @Override public javax.management.Attribute toJMXAttributePending() { // Should never occurs !!! // Should never occur !!! return toJMXAttribute(); } @@ -499,8 +445,7 @@ */ public void toJMXAttribute(AttributeList attributeList) { javax.management.Attribute jmxAttr = toJMXAttribute(); attributeList.add(jmxAttr); attributeList.add(toJMXAttribute()); } @@ -519,22 +464,8 @@ */ public void toJMXAttributeInfo(List<MBeanAttributeInfo> attributeInfoList) { if (isMultiValued()) { attributeInfoList.add(new MBeanAttributeInfo(getName(), JMX_TYPE_STRING_ARRAY, String.valueOf( getDescription()), true, false, false)); } else { attributeInfoList.add(new MBeanAttributeInfo(getName(), String.class.getName(), String.valueOf( getDescription()), true, false, false)); } attributeInfoList.add(new MBeanAttributeInfo(getName(), getType(), String.valueOf(getDescription()), true, false, false)); } @@ -548,19 +479,13 @@ */ public MBeanParameterInfo toJMXParameterInfo() { if (isMultiValued()) { return new MBeanParameterInfo(getName(), JMX_TYPE_STRING_ARRAY, String.valueOf(getDescription())); } else { return new MBeanParameterInfo(getName(), String.class.getName(), String.valueOf(getDescription())); } return new MBeanParameterInfo(getName(), getType(), String.valueOf(getDescription())); } private String getType() { return isMultiValued() ? JMX_TYPE_STRING_ARRAY : String.class.getName(); } /** * Attempts to set the value of this configuration attribute based on the @@ -576,8 +501,7 @@ public void setValue(javax.management.Attribute jmxAttribute) throws ConfigException { LocalizableMessage message = ERR_CONFIG_ATTR_READ_ONLY.get(getName()); throw new ConfigException(message); throw new ConfigException(ERR_CONFIG_ATTR_READ_ONLY.get(getName())); } @@ -589,8 +513,6 @@ */ public ConfigAttribute duplicate() { return new ReadOnlyConfigAttribute(getName(), getDescription(), activeValues()); return new ReadOnlyConfigAttribute(getName(), getDescription(), activeValues()); } } opendj-server-legacy/src/main/java/org/opends/server/config/StringConfigAttribute.java
@@ -26,7 +26,9 @@ */ package org.opends.server.config; import org.forgerock.i18n.LocalizableMessage; import static org.opends.messages.ConfigMessages.*; import static org.opends.server.config.ConfigConstants.*; import static org.opends.server.util.CollectionUtils.*; import java.lang.reflect.Array; import java.util.ArrayList; @@ -37,15 +39,12 @@ import javax.management.MBeanAttributeInfo; import javax.management.MBeanParameterInfo; import org.forgerock.i18n.LocalizableMessage; import org.forgerock.i18n.slf4j.LocalizedLogger; import org.forgerock.opendj.ldap.ByteString; import org.forgerock.opendj.ldap.schema.Syntax; import org.opends.server.core.DirectoryServer; import org.opends.server.types.*; import org.forgerock.opendj.ldap.ByteString; import static org.opends.server.config.ConfigConstants.*; import static org.opends.server.util.CollectionUtils.*; import org.forgerock.i18n.slf4j.LocalizedLogger; import static org.opends.messages.ConfigMessages.*; import org.opends.server.types.Attribute; /** * This class defines a string configuration attribute, which can hold zero or @@ -330,11 +329,10 @@ */ public List<String> pendingValues() { if (! hasPendingValues()) if (!hasPendingValues()) { return activeValues; } return pendingValues; } @@ -350,10 +348,9 @@ public void setValue(String value) throws ConfigException { if ((value == null) || (value.length() == 0)) if (value == null || value.length() == 0) { LocalizableMessage message = ERR_CONFIG_ATTR_EMPTY_STRING_VALUE.get(getName()); throw new ConfigException(message); throw new ConfigException(ERR_CONFIG_ATTR_EMPTY_STRING_VALUE.get(getName())); } if (requiresAdminAction()) @@ -384,25 +381,22 @@ throws ConfigException { // First check if the set is empty and if that is allowed. if ((values == null) || (values.isEmpty())) if (values == null || values.isEmpty()) { if (isRequired()) { LocalizableMessage message = ERR_CONFIG_ATTR_IS_REQUIRED.get(getName()); throw new ConfigException(message); throw new ConfigException(ERR_CONFIG_ATTR_IS_REQUIRED.get(getName())); } if (requiresAdminAction()) { setPendingValues(new LinkedHashSet<ByteString>(0)); pendingValues = new ArrayList<>(); } else { if (requiresAdminAction()) { setPendingValues(new LinkedHashSet<ByteString>(0)); pendingValues = new ArrayList<>(); } else { setActiveValues(new LinkedHashSet<ByteString>(0)); activeValues.clear(); } setActiveValues(new LinkedHashSet<ByteString>(0)); activeValues.clear(); } } @@ -411,9 +405,7 @@ int numValues = values.size(); if ((! isMultiValued()) && (numValues > 1)) { LocalizableMessage message = ERR_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED.get(getName()); throw new ConfigException(message); throw new ConfigException(ERR_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED.get(getName())); } @@ -424,16 +416,13 @@ { if ((value == null) || (value.length() == 0)) { LocalizableMessage message = ERR_CONFIG_ATTR_EMPTY_STRING_VALUE.get(getName()); throw new ConfigException(message); throw new ConfigException(ERR_CONFIG_ATTR_EMPTY_STRING_VALUE.get(getName())); } ByteString attrValue = ByteString.valueOf(value); if (valueSet.contains(attrValue)) { LocalizableMessage message = ERR_CONFIG_ATTR_ADD_VALUES_ALREADY_EXISTS.get(getName(), value); throw new ConfigException(message); throw new ConfigException(ERR_CONFIG_ATTR_ADD_VALUES_ALREADY_EXISTS.get(getName(), value)); } valueSet.add(attrValue); @@ -457,46 +446,6 @@ /** * Creates the appropriate value set with the provided value. * * @param value The value to use to create the value set. * * @return The constructed value set. */ private static LinkedHashSet<ByteString> getValueSet(String value) { LinkedHashSet<ByteString> valueSet = new LinkedHashSet<>(1); valueSet.add(ByteString.valueOf(value)); return valueSet; } /** * Creates the appropriate value set with the provided values. * * @param values The values to use to create the value set. * * @return The constructed value set. */ private static LinkedHashSet<ByteString> getValueSet(List<String> values) { if (values == null) { return null; } LinkedHashSet<ByteString> valueSet = new LinkedHashSet<>(values.size()); for (String value : values) { valueSet.add(ByteString.valueOf(value)); } return valueSet; } /** * Applies the set of pending values, making them the active values for this * configuration attribute. This will not take any action if there are no * pending values. @@ -559,50 +508,31 @@ * @throws ConfigException If an unrecoverable problem occurs while * performing the conversion. */ public LinkedHashSet<ByteString> stringsToValues(List<String> valueStrings, boolean allowFailures) throws ConfigException public LinkedHashSet<ByteString> stringsToValues(List<String> valueStrings, boolean allowFailures) throws ConfigException { if ((valueStrings == null) || valueStrings.isEmpty()) if (valueStrings == null || valueStrings.isEmpty()) { if (isRequired()) { LocalizableMessage message = ERR_CONFIG_ATTR_IS_REQUIRED.get(getName()); throw new ConfigException(message); throw new ConfigException(ERR_CONFIG_ATTR_IS_REQUIRED.get(getName())); } else { return new LinkedHashSet<>(); } return new LinkedHashSet<>(); } int numValues = valueStrings.size(); if ((! isMultiValued()) && (numValues > 1)) { LocalizableMessage message = ERR_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED.get(getName()); throw new ConfigException(message); throw new ConfigException(ERR_CONFIG_ATTR_SET_VALUES_IS_SINGLE_VALUED.get(getName())); } LinkedHashSet<ByteString> valueSet = new LinkedHashSet<>(numValues); for (String valueString : valueStrings) { if ((valueString == null) || (valueString.length() == 0)) if (valueString == null || valueString.length() == 0) { LocalizableMessage message = ERR_CONFIG_ATTR_EMPTY_STRING_VALUE.get(getName()); if (allowFailures) { logger.error(message); continue; } else { throw new ConfigException(message); } reportError(allowFailures, ERR_CONFIG_ATTR_EMPTY_STRING_VALUE.get(getName())); continue; } valueSet.add(ByteString.valueOf(valueString)); @@ -611,16 +541,22 @@ // If this method was configured to continue on error, then it is possible // that we ended up with an empty list. Check to see if this is a required // attribute and if so deal with it accordingly. if ((isRequired()) && valueSet.isEmpty()) if (isRequired() && valueSet.isEmpty()) { LocalizableMessage message = ERR_CONFIG_ATTR_IS_REQUIRED.get(getName()); throw new ConfigException(message); throw new ConfigException(ERR_CONFIG_ATTR_IS_REQUIRED.get(getName())); } return valueSet; } private void reportError(boolean allowFailures, LocalizableMessage message) throws ConfigException { if (!allowFailures) { throw new ConfigException(message); } logger.error(message); } /** * Converts the set of active values for this configuration attribute into a @@ -656,10 +592,7 @@ { return pendingValues; } else { return null; } return null; } @@ -701,9 +634,7 @@ if (pendingValues != null) { // We cannot have multiple pending value sets. LocalizableMessage message = ERR_CONFIG_ATTR_MULTIPLE_PENDING_VALUE_SETS.get(a.getName()); throw new ConfigException(message); throw new ConfigException(ERR_CONFIG_ATTR_MULTIPLE_PENDING_VALUE_SETS.get(a.getName())); } @@ -712,14 +643,10 @@ if (isRequired()) { // This is illegal -- it must have a value. LocalizableMessage message = ERR_CONFIG_ATTR_IS_REQUIRED.get(a.getName()); throw new ConfigException(message); throw new ConfigException(ERR_CONFIG_ATTR_IS_REQUIRED.get(a.getName())); } else { // This is fine. The pending value set can be empty. pendingValues = new ArrayList<>(0); } // This is fine. The pending value set can be empty. pendingValues = new ArrayList<>(0); } else { @@ -743,9 +670,7 @@ { // This is illegal -- only the pending option is allowed for // configuration attributes. LocalizableMessage message = ERR_CONFIG_ATTR_OPTIONS_NOT_ALLOWED.get(a.getName()); throw new ConfigException(message); throw new ConfigException(ERR_CONFIG_ATTR_OPTIONS_NOT_ALLOWED.get(a.getName())); } } else @@ -754,9 +679,7 @@ if (activeValues!= null) { // We cannot have multiple active value sets. LocalizableMessage message = ERR_CONFIG_ATTR_MULTIPLE_ACTIVE_VALUE_SETS.get(a.getName()); throw new ConfigException(message); throw new ConfigException(ERR_CONFIG_ATTR_MULTIPLE_ACTIVE_VALUE_SETS.get(a.getName())); } @@ -765,14 +688,10 @@ if (isRequired()) { // This is illegal -- it must have a value. LocalizableMessage message = ERR_CONFIG_ATTR_IS_REQUIRED.get(a.getName()); throw new ConfigException(message); throw new ConfigException(ERR_CONFIG_ATTR_IS_REQUIRED.get(a.getName())); } else { // This is fine. The active value set can be empty. activeValues = new ArrayList<>(0); } // This is fine. The active value set can be empty. activeValues = new ArrayList<>(0); } else { @@ -826,8 +745,8 @@ */ private javax.management.Attribute _toJMXAttribute(boolean pending) { List<String> requestedValues ; String name ; List<String> requestedValues; String name; if (pending) { requestedValues = pendingValues ; @@ -838,23 +757,19 @@ requestedValues = activeValues ; name = getName() ; } if (isMultiValued()) { String[] values = new String[requestedValues.size()]; requestedValues.toArray(values); String[] values = requestedValues.toArray(new String[requestedValues.size()]); return new javax.management.Attribute(name, values); } else if (!requestedValues.isEmpty()) { return new javax.management.Attribute(name, requestedValues.get(0)); } else { if (requestedValues.isEmpty()) { return null; } else { return new javax.management.Attribute(name, requestedValues.get(0)); } return null; } } @@ -964,44 +879,14 @@ */ public void toJMXAttributeInfo(List<MBeanAttributeInfo> attributeInfoList) { if (isMultiValued()) { attributeInfoList.add(new MBeanAttributeInfo(getName(), JMX_TYPE_STRING_ARRAY, String.valueOf( getDescription()), true, true, false)); } else { attributeInfoList.add(new MBeanAttributeInfo(getName(), String.class.getName(), String.valueOf( getDescription()), true, true, false)); } attributeInfoList.add(new MBeanAttributeInfo(getName(), getType(), String.valueOf(getDescription()), true, true, false)); if (requiresAdminAction()) { String name = getName() + ";" + OPTION_PENDING_VALUES; if (isMultiValued()) { attributeInfoList.add(new MBeanAttributeInfo(name, JMX_TYPE_STRING_ARRAY, String.valueOf( getDescription()), true, false, false)); } else { attributeInfoList.add(new MBeanAttributeInfo(name, String.class.getName(), String.valueOf( getDescription()), true, false, false)); } attributeInfoList.add(new MBeanAttributeInfo(name, getType(), String.valueOf(getDescription()), true, false, false)); } } @@ -1016,19 +901,13 @@ */ public MBeanParameterInfo toJMXParameterInfo() { if (isMultiValued()) { return new MBeanParameterInfo(getName(), JMX_TYPE_STRING_ARRAY, String.valueOf(getDescription())); } else { return new MBeanParameterInfo(getName(), String.class.getName(), String.valueOf(getDescription())); } return new MBeanParameterInfo(getName(), getType(), String.valueOf(getDescription())); } private String getType() { return isMultiValued() ? JMX_TYPE_STRING_ARRAY : String.class.getName(); } /** * Attempts to set the value of this configuration attribute based on the @@ -1108,4 +987,3 @@ activeValues, pendingValues); } }