package com.lexicalscope.jewel.cli;
import static java.util.Arrays.asList;
import java.util.ArrayList;
import java.util.List;
import com.lexicalscope.fluentreflection.FluentClass;
import com.lexicalscope.fluentreflection.FluentMethod;
/*
* Copyright 2011 Tim Wood
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
class OptionAnnotationAdapter extends AbstractOptionAdapter {
private final Option option;
OptionAnnotationAdapter(
final FluentClass<?> klass,
final FluentMethod method) {
super(klass, method);
this.option = method.annotation(Option.class);
}
@Override public String description() {
return option.description().trim();
}
@Override public String pattern() {
return option.pattern();
}
@Override public boolean defaultToNull() {
return option.defaultToNull();
}
@Override public String[] defaultValue() {
return option.defaultValue();
}
public List<String> shortName() {
final List<String> shortNames = new ArrayList<String>();
for (final String element : option.shortName()) {
final String shortName = element.trim();
if (shortName.length() > 0) {
shortNames.add(element.substring(0, 1));
}
}
return shortNames;
}
public List<String> longName() {
return option.longName().length == 0
? asList(method.property())
: asList(option.longName());
}
public boolean helpRequest() {
return option.helpRequest();
}
@Override public boolean isHidden() {
return option.hidden();
}
@Override public int minimum() {
return option.minimum();
}
@Override public int exactly() {
return option.exactly();
}
@Override public int maximum() {
return option.maximum();
}
}