package com.rapidminer.tools.parameter; import com.rapidminer.parameter.ParameterType; /** * Value and Definition of a Parameter. Two types of parameters can be defined: * Implicit ones and Defined ones. The defined one have a type definition, while the implicit * ones only have a key and value. Only defined parameters can be edited using the GUI and will be * saved in the config files. * * @author Sebastian Land */ public class Parameter { ParameterType type = null; String group; String value; private ParameterScope scope = new ParameterScope(); /** * This creates a new implicit Parameter. */ public Parameter(String value) { } /** * This creates a new defined Parameter with a default scope and an undefined value. * * The group of the Parameter is set automatically by the second segment of the dot separated * key. For setting the group explicitly, please use {@link #Parameter(ParameterType, String)}. * * @param type */ public Parameter(ParameterType type) { this.type = type; this.value = type.getDefaultValueAsString(); if (value == null) value = ""; String[] parts = type.getKey().split("\\."); if ("rapidminer".equals(parts[0])) { this.group = parts[1]; } else { this.group = "system"; } } public Parameter(ParameterType type, String group) { this.type = type; this.group = group; this.value = type.getDefaultValueAsString(); if (value == null) value = ""; } /** * Sets the value of this parameter. If the given value is null, * it is automatically converted to an empty String. */ public void setValue(String value) { if (value == null) throw new NullPointerException(); else this.value = value; } /** * This method returns whether this parameter is a defined type. With a * description, valid value range and name. * Only defined types can be edited in the GUI, all others can only be set * directly using system properties. */ public boolean isDefined() { return type != null; } /** * This returns the scope of this parameter if it is a defined parameter. */ public ParameterScope getScope() { return scope; } /** * Returns the actual value or an empty String if no values has been set. */ public String getValue() { return value; } /** * This returns the group of this parameter. */ public String getGroup() { return group; } /** * Returns the type of this parameter. */ public ParameterType getType() { return type; } /** * This converts this parameter from an implicit Parameter into a defined one. */ public void setType(ParameterType type) { this.type = type; String[] parts = type.getKey().split("\\."); if ("rapidminer".equals(parts[0])) { this.group = parts[1]; } else { this.group = "system"; } } /** * This sets the scope to the given one. */ public void setScope(ParameterScope scope) { this.scope = scope; } /** * This method allows to set the group explicitly. */ public void setGroup(String group) { this.group = group; } }