03831d35f7499c87d51205817c93e9a8d42c4baestevel/*
03831d35f7499c87d51205817c93e9a8d42c4baestevel * CDDL HEADER START
03831d35f7499c87d51205817c93e9a8d42c4baestevel *
03831d35f7499c87d51205817c93e9a8d42c4baestevel * The contents of this file are subject to the terms of the
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Common Development and Distribution License, Version 1.0 only
03831d35f7499c87d51205817c93e9a8d42c4baestevel * (the "License"). You may not use this file except in compliance
03831d35f7499c87d51205817c93e9a8d42c4baestevel * with the License.
03831d35f7499c87d51205817c93e9a8d42c4baestevel *
03831d35f7499c87d51205817c93e9a8d42c4baestevel * You can obtain a copy of the license at legal-notices/CDDLv1_0.txt
03831d35f7499c87d51205817c93e9a8d42c4baestevel * or http://forgerock.org/license/CDDLv1.0.html.
03831d35f7499c87d51205817c93e9a8d42c4baestevel * See the License for the specific language governing permissions
03831d35f7499c87d51205817c93e9a8d42c4baestevel * and limitations under the License.
03831d35f7499c87d51205817c93e9a8d42c4baestevel *
03831d35f7499c87d51205817c93e9a8d42c4baestevel * When distributing Covered Code, include this CDDL HEADER in each
03831d35f7499c87d51205817c93e9a8d42c4baestevel * file and include the License file at legal-notices/CDDLv1_0.txt.
03831d35f7499c87d51205817c93e9a8d42c4baestevel * If applicable, add the following below this CDDL HEADER, with the
03831d35f7499c87d51205817c93e9a8d42c4baestevel * fields enclosed by brackets "[]" replaced with your own identifying
03831d35f7499c87d51205817c93e9a8d42c4baestevel * information:
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Portions Copyright [yyyy] [name of copyright owner]
03831d35f7499c87d51205817c93e9a8d42c4baestevel *
03831d35f7499c87d51205817c93e9a8d42c4baestevel * CDDL HEADER END
03831d35f7499c87d51205817c93e9a8d42c4baestevel *
52f4394b704526bb3aa41e8729fd03e754732822jfrank *
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Copyright 2008 Sun Microsystems, Inc.
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Portions Copyright 2014-2015 ForgeRock AS
03831d35f7499c87d51205817c93e9a8d42c4baestevel */
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevelpackage org.opends.server.admin;
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevelimport static org.forgerock.util.Reject.ifNull;
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevelimport java.util.EnumSet;
03831d35f7499c87d51205817c93e9a8d42c4baestevelimport java.util.HashMap;
03831d35f7499c87d51205817c93e9a8d42c4baestevelimport java.util.Map;
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel/**
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Boolean property definition.
03831d35f7499c87d51205817c93e9a8d42c4baestevel */
03831d35f7499c87d51205817c93e9a8d42c4baestevelpublic final class BooleanPropertyDefinition extends
03831d35f7499c87d51205817c93e9a8d42c4baestevel PropertyDefinition<Boolean> {
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel /**
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Mapping used for parsing boolean values. This mapping is more flexible than
03831d35f7499c87d51205817c93e9a8d42c4baestevel * the standard boolean string parser and supports common true/false synonyms
03831d35f7499c87d51205817c93e9a8d42c4baestevel * used in configuration.
03831d35f7499c87d51205817c93e9a8d42c4baestevel */
03831d35f7499c87d51205817c93e9a8d42c4baestevel private static final Map<String, Boolean> VALUE_MAP = new HashMap<>();
03831d35f7499c87d51205817c93e9a8d42c4baestevel static {
03831d35f7499c87d51205817c93e9a8d42c4baestevel // We could have more possibilities but decided against in issue 1960.
03831d35f7499c87d51205817c93e9a8d42c4baestevel VALUE_MAP.put("false", Boolean.FALSE);
03831d35f7499c87d51205817c93e9a8d42c4baestevel VALUE_MAP.put("true", Boolean.TRUE);
03831d35f7499c87d51205817c93e9a8d42c4baestevel }
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel /**
03831d35f7499c87d51205817c93e9a8d42c4baestevel * An interface for incrementally constructing boolean property definitions.
03831d35f7499c87d51205817c93e9a8d42c4baestevel */
03831d35f7499c87d51205817c93e9a8d42c4baestevel public static class Builder extends
03831d35f7499c87d51205817c93e9a8d42c4baestevel AbstractBuilder<Boolean, BooleanPropertyDefinition> {
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel /** Private constructor. */
03831d35f7499c87d51205817c93e9a8d42c4baestevel private Builder(
03831d35f7499c87d51205817c93e9a8d42c4baestevel AbstractManagedObjectDefinition<?, ?> d, String propertyName) {
03831d35f7499c87d51205817c93e9a8d42c4baestevel super(d, propertyName);
03831d35f7499c87d51205817c93e9a8d42c4baestevel }
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel /** {@inheritDoc} */
03831d35f7499c87d51205817c93e9a8d42c4baestevel @Override
03831d35f7499c87d51205817c93e9a8d42c4baestevel protected BooleanPropertyDefinition buildInstance(
03831d35f7499c87d51205817c93e9a8d42c4baestevel AbstractManagedObjectDefinition<?, ?> d, String propertyName,
03831d35f7499c87d51205817c93e9a8d42c4baestevel EnumSet<PropertyOption> options,
03831d35f7499c87d51205817c93e9a8d42c4baestevel AdministratorAction adminAction,
03831d35f7499c87d51205817c93e9a8d42c4baestevel DefaultBehaviorProvider<Boolean> defaultBehavior) {
03831d35f7499c87d51205817c93e9a8d42c4baestevel return new BooleanPropertyDefinition(d, propertyName, options,
03831d35f7499c87d51205817c93e9a8d42c4baestevel adminAction, defaultBehavior);
03831d35f7499c87d51205817c93e9a8d42c4baestevel }
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel }
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel /**
03831d35f7499c87d51205817c93e9a8d42c4baestevel * Create a boolean property definition builder.
03831d35f7499c87d51205817c93e9a8d42c4baestevel *
03831d35f7499c87d51205817c93e9a8d42c4baestevel * @param d
03831d35f7499c87d51205817c93e9a8d42c4baestevel * The managed object definition associated with this
03831d35f7499c87d51205817c93e9a8d42c4baestevel * property definition.
03831d35f7499c87d51205817c93e9a8d42c4baestevel * @param propertyName
03831d35f7499c87d51205817c93e9a8d42c4baestevel * The property name.
03831d35f7499c87d51205817c93e9a8d42c4baestevel * @return Returns the new boolean property definition builder.
03831d35f7499c87d51205817c93e9a8d42c4baestevel */
03831d35f7499c87d51205817c93e9a8d42c4baestevel public static Builder createBuilder(
03831d35f7499c87d51205817c93e9a8d42c4baestevel AbstractManagedObjectDefinition<?, ?> d, String propertyName) {
03831d35f7499c87d51205817c93e9a8d42c4baestevel return new Builder(d, propertyName);
03831d35f7499c87d51205817c93e9a8d42c4baestevel }
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel /** Private constructor. */
03831d35f7499c87d51205817c93e9a8d42c4baestevel private BooleanPropertyDefinition(
03831d35f7499c87d51205817c93e9a8d42c4baestevel AbstractManagedObjectDefinition<?, ?> d, String propertyName,
03831d35f7499c87d51205817c93e9a8d42c4baestevel EnumSet<PropertyOption> options,
03831d35f7499c87d51205817c93e9a8d42c4baestevel AdministratorAction adminAction,
03831d35f7499c87d51205817c93e9a8d42c4baestevel DefaultBehaviorProvider<Boolean> defaultBehavior) {
03831d35f7499c87d51205817c93e9a8d42c4baestevel super(d, Boolean.class, propertyName, options, adminAction,
03831d35f7499c87d51205817c93e9a8d42c4baestevel defaultBehavior);
03831d35f7499c87d51205817c93e9a8d42c4baestevel }
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel /** {@inheritDoc} */
03831d35f7499c87d51205817c93e9a8d42c4baestevel @Override
03831d35f7499c87d51205817c93e9a8d42c4baestevel public void validateValue(Boolean value)
03831d35f7499c87d51205817c93e9a8d42c4baestevel throws PropertyException {
03831d35f7499c87d51205817c93e9a8d42c4baestevel ifNull(value);
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel // No additional validation required.
03831d35f7499c87d51205817c93e9a8d42c4baestevel }
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel /** {@inheritDoc} */
03831d35f7499c87d51205817c93e9a8d42c4baestevel @Override
03831d35f7499c87d51205817c93e9a8d42c4baestevel public Boolean decodeValue(String value)
03831d35f7499c87d51205817c93e9a8d42c4baestevel throws PropertyException {
03831d35f7499c87d51205817c93e9a8d42c4baestevel ifNull(value);
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel String nvalue = value.trim().toLowerCase();
03831d35f7499c87d51205817c93e9a8d42c4baestevel Boolean b = VALUE_MAP.get(nvalue);
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel if (b == null) {
03831d35f7499c87d51205817c93e9a8d42c4baestevel throw PropertyException.illegalPropertyValueException(this, value);
03831d35f7499c87d51205817c93e9a8d42c4baestevel } else {
03831d35f7499c87d51205817c93e9a8d42c4baestevel return b;
03831d35f7499c87d51205817c93e9a8d42c4baestevel }
03831d35f7499c87d51205817c93e9a8d42c4baestevel }
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel /** {@inheritDoc} */
03831d35f7499c87d51205817c93e9a8d42c4baestevel @Override
03831d35f7499c87d51205817c93e9a8d42c4baestevel public <R, P> R accept(PropertyDefinitionVisitor<R, P> v, P p) {
03831d35f7499c87d51205817c93e9a8d42c4baestevel return v.visitBoolean(this, p);
03831d35f7499c87d51205817c93e9a8d42c4baestevel }
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel /** {@inheritDoc} */
03831d35f7499c87d51205817c93e9a8d42c4baestevel @Override
03831d35f7499c87d51205817c93e9a8d42c4baestevel public <R, P> R accept(PropertyValueVisitor<R, P> v, Boolean value, P p) {
03831d35f7499c87d51205817c93e9a8d42c4baestevel return v.visitBoolean(this, value, p);
03831d35f7499c87d51205817c93e9a8d42c4baestevel }
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel
03831d35f7499c87d51205817c93e9a8d42c4baestevel /** {@inheritDoc} */
03831d35f7499c87d51205817c93e9a8d42c4baestevel @Override
03831d35f7499c87d51205817c93e9a8d42c4baestevel public int compare(Boolean o1, Boolean o2) {
03831d35f7499c87d51205817c93e9a8d42c4baestevel return o1.compareTo(o2);
03831d35f7499c87d51205817c93e9a8d42c4baestevel }
03831d35f7499c87d51205817c93e9a8d42c4baestevel}
03831d35f7499c87d51205817c93e9a8d42c4baestevel