org.crsh.plugin.PropertyDescriptor Maven / Gradle / Ivy
The newest version!
/*
* Copyright (C) 2012 eXo Platform SAS.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.crsh.plugin;
import org.crsh.util.Utils;
import java.util.List;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;
public abstract class PropertyDescriptor {
/** The display value returned when a property is secret. */
public static final String SECRET_DISPLAY_VALUE = "*****";
public static PropertyDescriptor create(String name, String defaultValue, String description, boolean secret) {
return new PropertyDescriptor(String.class, name, defaultValue, description, secret) {
@Override
protected String doParse(String s) throws Exception {
return s;
}
};
}
public static PropertyDescriptor create(String name, String defaultValue, String description) {
return create(name, defaultValue, description, false);
}
public static PropertyDescriptor create(String name, Integer defaultValue, String description, boolean secret) {
return new PropertyDescriptor(Integer.class, name, defaultValue, description, secret) {
@Override
protected Integer doParse(String s) throws Exception {
return Integer.parseInt(s);
}
};
}
public static PropertyDescriptor create(String name, Integer defaultValue, String description) {
return create(name, defaultValue, description, false);
}
public static PropertyDescriptor create(String name, List defaultValue, String description, boolean secret) {
return new PropertyDescriptor(List.class, name, defaultValue, description, secret) {
@Override
protected List doParse(String s) throws Exception {
String[] split = Utils.split(s, ',');
List list = Arrays.asList(split);
for (int i = 0;i < list.size();i++) {
list.set(i, list.get(i).trim());
}
return list;
}
};
}
public static PropertyDescriptor create(String name, List defaultValue, String description) {
return create(name, defaultValue, description, false);
}
/** . */
private static final Map> INTERNAL_ALL = new HashMap>();
/** . */
public static final Map> ALL = Collections.unmodifiableMap(INTERNAL_ALL);
/** . */
public static final PropertyDescriptor VFS_REFRESH_UNIT = new PropertyDescriptor(TimeUnit.class, "vfs.refresh_unit", TimeUnit.SECONDS, "The refresh time unit") {
@Override
public TimeUnit doParse(String s) {
return TimeUnit.valueOf(s);
}
};
/** . */
public static final PropertyDescriptor VFS_REFRESH_PERIOD = PropertyDescriptor.create("vfs.refresh_period", (Integer)null, "The refresh rate period");
/** . */
public final Class type;
/** . */
public final String name;
/** . */
public final T defaultValue;
/** . */
public final String description;
/** . */
public final boolean secret;
/**
* Create a new property descriptor.
*
* @param type the property type
* @param name the property name
* @param defaultValue the default value
* @param description the description
* @throws NullPointerException if the type, name or description is null
*/
protected PropertyDescriptor(Class type, String name, T defaultValue, String description) throws NullPointerException {
this(type, name, defaultValue, description, false);
}
/**
* Create a new property descriptor.
*
* @param type the property type
* @param name the property name
* @param defaultValue the default value
* @param description the description
* @param secret the value is secret (like a password)
* @throws NullPointerException if the type, name or description is null
*/
protected PropertyDescriptor(Class type, String name, T defaultValue, String description, boolean secret) throws NullPointerException {
if (type == null) {
throw new NullPointerException("No null type accepted");
}
if (name == null) {
throw new NullPointerException("No null name accepted");
}
if (description == null) {
throw new NullPointerException("No null description accepted");
}
this.type = type;
this.name = name;
this.defaultValue = defaultValue;
this.description = description;
this.secret = secret;
//
INTERNAL_ALL.put(name, this);
}
public final String getName() {
return name;
}
public final String getDescription() {
return description;
}
public final Class getType() {
return type;
}
public final T getDefaultValue() {
return defaultValue;
}
public final String getDefaultDisplayValue() {
return secret ? SECRET_DISPLAY_VALUE : String.valueOf(defaultValue);
}
/**
* Parse a string representation of a value and returns the corresponding typed value.
*
* @param s the string to parse
* @return the corresponding value
* @throws NullPointerException if the argument is null
* @throws IllegalArgumentException if the string value cannot be parsed for some reason
*/
public final T parse(String s) throws NullPointerException, IllegalArgumentException {
if (s == null) {
throw new NullPointerException("Cannot parse null property values");
}
try {
return doParse(s);
}
catch (Exception e) {
throw new IllegalArgumentException("Illegal property value " + s, e);
}
}
@Override
public boolean equals(Object obj) {
if (obj == this) {
return true;
} else if (obj instanceof PropertyDescriptor>) {
PropertyDescriptor> that = (PropertyDescriptor>)obj;
return name.equals(that.name) && type.equals(that.type);
} else {
return false;
}
}
/**
* Parse a string representation of a value and returns the correspondig property value.
*
* @param s the string to parse
* @return the corresponding property
* @throws NullPointerException if the argument is null
* @throws IllegalArgumentException if the string value cannot be parsed for some reason
*/
public final Property toProperty(String s) throws NullPointerException, IllegalArgumentException {
T value = parse(s);
return new Property(this, value);
}
/**
* Implements the real parsing, the string argument must nto be null. The returned value must not be null instead an
* exception must be thrown.
*
* @param s the string to parse
* @return the related value
* @throws Exception any exception that would prevent parsing to hapen
*/
protected abstract T doParse(String s) throws Exception;
@Override
public final String toString() {
return "PropertyDescriptor[name=" + name + ",type=" + type.getName() + ",description=" + description + "]";
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy