Refactored Configurator a bit
This commit is contained in:
parent
9ab764c2e2
commit
6c87c3595c
4 changed files with 32 additions and 19 deletions
|
|
@ -1,4 +1,7 @@
|
|||
package zutil.ui;
|
||||
package zutil.ui.conf;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* A value provider that will give all Enum values
|
||||
|
|
@ -12,19 +15,23 @@ public class ConfigEnumValueProvider implements Configurator.ConfigValueProvider
|
|||
}
|
||||
|
||||
|
||||
public String getValue(Enum obj) {
|
||||
return (obj == null ? "null" : obj.name());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String[] getPossibleValues() {
|
||||
public List<String> getPossibleValues() {
|
||||
Object[] constants = enumCLass.getEnumConstants();
|
||||
String[] values = new String[constants.length];
|
||||
List<String> values = new ArrayList<>(constants.length);
|
||||
|
||||
for (int i = 0; i < constants.length; ++i)
|
||||
values[i] = ((Enum<?>) constants[i]).name();
|
||||
values.add(((Enum<?>) constants[i]).name());
|
||||
|
||||
return values;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Enum getValueObject(String value) {
|
||||
public Enum getObject(String value) {
|
||||
return Enum.valueOf(enumCLass, value);
|
||||
}
|
||||
}
|
||||
34
src/zutil/ui/Configurator.java → src/zutil/ui/conf/Configurator.java
Executable file → Normal file
34
src/zutil/ui/Configurator.java → src/zutil/ui/conf/Configurator.java
Executable file → Normal file
|
|
@ -22,7 +22,7 @@
|
|||
* THE SOFTWARE.
|
||||
*/
|
||||
|
||||
package zutil.ui;
|
||||
package zutil.ui.conf;
|
||||
|
||||
import zutil.log.LogUtil;
|
||||
import zutil.parser.DataNode;
|
||||
|
|
@ -33,10 +33,7 @@ import java.lang.annotation.RetentionPolicy;
|
|||
import java.lang.annotation.Target;
|
||||
import java.lang.reflect.Constructor;
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.*;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
|
|
@ -95,10 +92,15 @@ public class Configurator<T> {
|
|||
* @param <V> represents the value type that will be assigned to the target field.
|
||||
*/
|
||||
public interface ConfigValueProvider<V> {
|
||||
/**
|
||||
* @return a String representing the given obj.
|
||||
*/
|
||||
String getValue(V obj);
|
||||
|
||||
/**
|
||||
* @return a array of all possible values that the user can select from.
|
||||
*/
|
||||
String[] getPossibleValues();
|
||||
List<String> getPossibleValues();
|
||||
|
||||
/**
|
||||
* Convert the user selected value into the actual Object that should be assigned to the target field.
|
||||
|
|
@ -106,7 +108,7 @@ public class Configurator<T> {
|
|||
* @param value the string value that was selected by the user.
|
||||
* @return a Object that will be assigned to the target field, note a exception will be thrown if the return type does not match the field.
|
||||
*/
|
||||
V getValueObject(String value);
|
||||
V getObject(String value);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -310,9 +312,9 @@ public class Configurator<T> {
|
|||
else if (f.getType().isEnum()) {
|
||||
type = ConfigType.SELECTION;
|
||||
valueProvider = new ConfigEnumValueProvider((Class<Enum>) f.getType());
|
||||
} else
|
||||
} else {
|
||||
throw new IllegalArgumentException(f.getType() + " is not a supported native configurable type, a value provided is required for arbitrary objects.");
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
private ConfigValueProvider getValueProviderInstance(Class<? extends ConfigValueProvider> valueProviderClass) throws ReflectiveOperationException {
|
||||
|
|
@ -340,6 +342,8 @@ public class Configurator<T> {
|
|||
public boolean isTypeSelection() { return type == ConfigType.SELECTION; }
|
||||
|
||||
public String getString() {
|
||||
if (valueProvider != null)
|
||||
return valueProvider.getValue(value);
|
||||
if (value == null)
|
||||
return null;
|
||||
return value.toString();
|
||||
|
|
@ -353,11 +357,11 @@ public class Configurator<T> {
|
|||
/**
|
||||
* @return a String array with all possible values that can be assigned or an empty array if any value within the type definition can be set.
|
||||
*/
|
||||
public String[] getPossibleValues() {
|
||||
public List<String> getPossibleValues() {
|
||||
if (valueProvider != null) {
|
||||
return valueProvider.getPossibleValues();
|
||||
}
|
||||
return new String[0];
|
||||
return Collections.EMPTY_LIST;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -380,7 +384,7 @@ public class Configurator<T> {
|
|||
case BOOLEAN:
|
||||
value = Boolean.parseBoolean(selectedValue); break;
|
||||
case SELECTION:
|
||||
value = valueProvider.getValueObject(selectedValue); break;
|
||||
value = valueProvider.getObject(selectedValue); break;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -401,8 +405,10 @@ public class Configurator<T> {
|
|||
*/
|
||||
private static class DummyValueProvider implements ConfigValueProvider {
|
||||
@Override
|
||||
public String[] getPossibleValues() {return new String[0];}
|
||||
public String getValue(Object obj) {return null;}
|
||||
@Override
|
||||
public Object getValueObject(String value) {return null;}
|
||||
public List<String> getPossibleValues() {return Collections.EMPTY_LIST;}
|
||||
@Override
|
||||
public Object getObject(String value) {return null;}
|
||||
}
|
||||
}
|
||||
0
src/zutil/ui/configurator.dynamic.tmpl → src/zutil/ui/conf/configurator.dynamic.tmpl
Executable file → Normal file
0
src/zutil/ui/configurator.dynamic.tmpl → src/zutil/ui/conf/configurator.dynamic.tmpl
Executable file → Normal file
0
src/zutil/ui/configurator.form.tmpl → src/zutil/ui/conf/configurator.form.tmpl
Executable file → Normal file
0
src/zutil/ui/configurator.form.tmpl → src/zutil/ui/conf/configurator.form.tmpl
Executable file → Normal file
Loading…
Add table
Add a link
Reference in a new issue