use of org.kanonizo.annotations.OptionProvider in project kanonizo by kanonizo.
the class KanonizoFrame method getParameterField.
private Control getParameterField(Field param, boolean runPrerequisites) {
Control parameterField = null;
Class<?> type = param.getType();
if (type.equals(boolean.class) || type.equals(Boolean.class)) {
parameterField = new CheckBox();
((CheckBox) parameterField).selectedProperty().addListener((obs, old, nw) -> {
try {
Util.setParameter(param, nw.toString());
if (runPrerequisites) {
addErrors(fw.getAlgorithm());
}
} catch (IllegalAccessException e) {
e.printStackTrace();
}
});
try {
((CheckBox) parameterField).setSelected((Boolean) param.get(null));
} catch (IllegalAccessException e) {
e.printStackTrace();
}
} else if (param.getType().equals(String.class) || param.getType().isPrimitive() || param.getType().isAssignableFrom(Number.class)) {
parameterField = new TextField();
((TextField) parameterField).textProperty().addListener((obs, old, nw) -> {
try {
Util.setParameter(param, nw);
if (runPrerequisites) {
addErrors(fw.getAlgorithm());
}
} catch (IllegalAccessException e) {
e.printStackTrace();
}
});
try {
((TextField) parameterField).setText(param.get(null).toString());
} catch (IllegalAccessException e) {
e.printStackTrace();
}
} else if (param.getType().equals(File.class)) {
try {
Button control = new Button();
File paramFile = (File) param.get(null);
control.setText(paramFile == null ? "Select File" : paramFile.getName());
control.setOnAction(ev -> {
FileChooser fc = new FileChooser();
File f = fc.showOpenDialog(KanonizoFxApplication.stage);
try {
Util.setParameter(param, f == null ? null : f.getAbsolutePath());
if (runPrerequisites) {
addErrors(fw.getAlgorithm());
}
} catch (IllegalAccessException e) {
e.printStackTrace();
}
control.setText(f == null ? "Select File" : f.getName());
});
parameterField = control;
} catch (IllegalAccessException e) {
e.printStackTrace();
}
} else if (param.getAnnotation(Parameter.class).hasOptions()) {
String paramKey = param.getAnnotation(Parameter.class).key();
Method[] methods = param.getDeclaringClass().getMethods();
Optional<Method> optionProviderOpt = Arrays.asList(methods).stream().filter(m -> m.getAnnotation(OptionProvider.class) != null && m.getAnnotation(OptionProvider.class).paramKey().equals(paramKey)).findFirst();
if (!optionProviderOpt.isPresent()) {
logger.error("Missing OptionProvider for key" + paramKey);
return null;
}
Method optionProvider = optionProviderOpt.get();
if (optionProvider.getReturnType() != List.class) {
logger.error("OptionProvider must return a list");
return null;
}
if (!Modifier.isStatic(optionProvider.getModifiers())) {
logger.error("OptionProvider must be static");
return null;
}
try {
List<?> options = (List<?>) optionProvider.invoke(null, null);
parameterField = new ComboBox();
((ComboBox) parameterField).getItems().addAll(options);
((ComboBox) parameterField).getSelectionModel().selectedItemProperty().addListener((ov, old, nw) -> {
try {
param.set(null, nw);
} catch (IllegalAccessException e) {
e.printStackTrace();
}
});
((ComboBox) parameterField).setConverter(new StringConverter() {
@Override
public String toString(Object object) {
return object.getClass().getSimpleName();
}
@Override
public Object fromString(String string) {
String comparatorPackage = "org.kanonizo.algorithms.heuristics.comparators";
try {
return Class.forName(comparatorPackage + "." + string).newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return null;
}
});
try {
((ComboBox) parameterField).getSelectionModel().select(param.get(null));
} catch (IllegalAccessException e) {
e.printStackTrace();
}
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
return parameterField;
}
use of org.kanonizo.annotations.OptionProvider in project kanonizo by kanonizo.
the class Schwa method getOptions.
@OptionProvider(paramKey = "schwa_secondary_objective")
public static List<Comparator> getOptions() {
ArrayList<Comparator> options = new ArrayList<>();
options.add(new GreedyComparator());
options.add(new AdditionalComparator());
return options;
}
Aggregations