/** * Copyright (c) 2014-2017 by the respective copyright holders. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ package org.eclipse.smarthome.config.core; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; import org.eclipse.smarthome.config.core.ConfigDescriptionParameter.Type; /** * The {@link ConfigDescriptionParameterBuilder} class provides a builder for the {@link ConfigDescriptionParameter} * class. * * @author Chris Jackson - Initial Contribution * @author Thomas Höfer - Added unit * */ public class ConfigDescriptionParameterBuilder { private String name; private Type type; private String groupName; private BigDecimal min; private BigDecimal max; private BigDecimal step; private String pattern; private Boolean required; private Boolean readOnly; private Boolean multiple; private Integer multipleLimit; private String unit; private String unitLabel; private String context; private String defaultValue; private String label; private String description; private Boolean limitToOptions; private Boolean advanced; private Boolean verify; private List<ParameterOption> options = new ArrayList<ParameterOption>(); private List<FilterCriteria> filterCriteria = new ArrayList<FilterCriteria>(); private ConfigDescriptionParameterBuilder(String name, Type type) { this.name = name; this.type = type; } /** * Creates a parameter builder * * @param name configuration parameter name * @param type configuration parameter type * @return parameter builder */ public static ConfigDescriptionParameterBuilder create(String name, Type type) { return new ConfigDescriptionParameterBuilder(name, type); } /** * Set the minimum value of the configuration parameter * * @param min the min value of the {@link ConfigDescriptionParameter} * @return the updated builder instance */ public ConfigDescriptionParameterBuilder withMinimum(BigDecimal min) { this.min = min; return this; } /** * Set the maximum value of the configuration parameter * * @param max the max value of the {@link ConfigDescriptionParameter} * @return the updated builder instance */ public ConfigDescriptionParameterBuilder withMaximum(BigDecimal max) { this.max = max; return this; } /** * Set the step size of the configuration parameter * * @param step the step of the {@link ConfigDescriptionParameter} * @return the updated builder instance */ public ConfigDescriptionParameterBuilder withStepSize(BigDecimal step) { this.step = step; return this; } /** * Set the pattern of the configuration parameter * * @param pattern the pattern for the {@link ConfigDescriptionParameter} * @return the updated builder instance */ public ConfigDescriptionParameterBuilder withPattern(String pattern) { this.pattern = pattern; return this; } /** * Set the configuration parameter as read only * * @param readOnly <code>true</code> to make the parameter read only * @return the updated builder instance */ public ConfigDescriptionParameterBuilder withReadOnly(Boolean readOnly) { this.readOnly = readOnly; return this; } /** * Set the configuration parameter to allow multiple selection * * @param multiple <code>true</code> for multiple selection * @return the updated builder instance */ public ConfigDescriptionParameterBuilder withMultiple(Boolean multiple) { this.multiple = multiple; return this; } /** * Set the configuration parameter to allow multiple selection * * @param multipleLimit the parameters limit * @return the updated builder instance */ public ConfigDescriptionParameterBuilder withMultipleLimit(Integer multipleLimit) { this.multipleLimit = multipleLimit; return this; } /** * Set the context of the configuration parameter * * @param context the context for this parameter * @return the updated builder instance */ public ConfigDescriptionParameterBuilder withContext(String context) { this.context = context; return this; } /** * Set the configuration parameter to be required * * @param required <code>true</code> if the parameter is required * @return the updated builder instance */ public ConfigDescriptionParameterBuilder withRequired(Boolean required) { this.required = required; return this; } /** * Set the default value of the configuration parameter * * @param defaultValue the default value of the configuration parameter * @return the updated builder instance */ public ConfigDescriptionParameterBuilder withDefault(String defaultValue) { this.defaultValue = defaultValue; return this; } /** * Set the label of the configuration parameter * * @param label a short user friendly description * @return the updated builder instance */ public ConfigDescriptionParameterBuilder withLabel(String label) { this.label = label; return this; } /** * Set the description of the configuration parameter * * @param description a detailed user friendly description * @return the updated builder instance */ public ConfigDescriptionParameterBuilder withDescription(String description) { this.description = description; return this; } /** * Set the options of the configuration parameter * * @param options the options for this parameter * @return the updated builder instance */ public ConfigDescriptionParameterBuilder withOptions(List<ParameterOption> options) { this.options = options; return this; } /** * Set the configuration parameter as an advanced parameter * * @param advanced <code>true</code> to make the parameter advanced * @return the updated builder instance */ public ConfigDescriptionParameterBuilder withAdvanced(Boolean advanced) { this.advanced = advanced; return this; } /** * Set the configuration parameter as a verifyable parameter * * @param verify flag */ public ConfigDescriptionParameterBuilder withVerify(Boolean verify) { this.verify = verify; return this; } /** * Set the configuration parameter to be limited to the values in the options list * * @param limitToOptions <code>true</code> if only the declared options are acceptable * @return the updated builder instance */ public ConfigDescriptionParameterBuilder withLimitToOptions(Boolean limitToOptions) { this.limitToOptions = limitToOptions; return this; } /** * Set the configuration parameter to be limited to the values in the options list * * @param groupName the group name of this config description parameter * @return the updated builder instance */ public ConfigDescriptionParameterBuilder withGroupName(String groupName) { this.groupName = groupName; return this; } /** * Set the filter criteria of the configuration parameter * * @param filterCriteria the filter criteria * @return the updated builder instance */ public ConfigDescriptionParameterBuilder withFilterCriteria(List<FilterCriteria> filterCriteria) { this.filterCriteria = filterCriteria; return this; } /** * Sets the unit of the configuration parameter. * * @param unit the unit to be set * * @return the updated builder instance */ public ConfigDescriptionParameterBuilder withUnit(String unit) { this.unit = unit; return this; } /** * Sets the unit label of the configuration parameter. * * @param unitLabel the unit label to be set * * @return the updated builder instance */ public ConfigDescriptionParameterBuilder withUnitLabel(String unitLabel) { this.unitLabel = unitLabel; return this; } /** * Builds a result with the settings of this builder. * * @return the desired result */ public ConfigDescriptionParameter build() throws IllegalArgumentException { return new ConfigDescriptionParameter(name, type, min, max, step, pattern, required, readOnly, multiple, context, defaultValue, label, description, options, filterCriteria, groupName, advanced, limitToOptions, multipleLimit, unit, unitLabel, verify); } }