package org.icij.task;
import java.lang.reflect.AnnotatedElement;
public abstract class DefaultTask<R> implements Task<String, String[], R> {
protected static Options<String> options(final Class<? extends DefaultTask> taskClass) {
final Options<String> options = new Options<>();
for (org.icij.task.annotation.Option option : taskClass
.getAnnotationsByType(org.icij.task.annotation.Option.class)) {
options.add(option, StringOptionParser::new);
}
for (org.icij.task.annotation.OptionsClass otherClass : taskClass
.getAnnotationsByType(org.icij.task.annotation.OptionsClass.class)) {
options.add(otherClass, StringOptionParser::new);
}
return options;
}
protected final Options<String> options = DefaultTask.options(this.getClass());
@Override
public Options<String> options() {
return options;
}
@Override
public Option<String> option(final String name) {
return options.get(name);
}
@Override
public String description() {
final AnnotatedElement element = getClass();
final Class<org.icij.task.annotation.Task> c = org.icij.task.annotation.Task.class;
if (!element.isAnnotationPresent(c)) {
return null;
}
return element.getAnnotation(c).value();
}
@Override
public R run(final String[] arguments) throws Exception {
return run();
}
}