package org.wildfly.extension.io;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
import org.jboss.as.controller.ExpressionResolver;
import org.jboss.as.controller.OperationFailedException;
import org.jboss.dmr.ModelNode;
import org.xnio.Option;
import org.xnio.OptionMap;
/**
* @author Tomaz Cerar (c) 2013 Red Hat Inc.
*/
public class OptionList {
private OptionList() {
}
public static OptionMap resolveOptions(final ExpressionResolver context, final ModelNode model, Collection<OptionAttributeDefinition> attributes) throws OperationFailedException {
OptionMap.Builder builder = OptionMap.builder();
for (OptionAttributeDefinition attr : attributes) {
attr.resolveOption(context, model, builder);
}
return builder.getMap();
}
public static Builder builder() {
return new Builder();
}
public static final class Builder {
private List<OptionAttributeDefinition> attributes = new LinkedList<>();
private Builder() {
}
public Builder addOption(Option<?> option, String name) {
return addOption(option, name, null, true, true);
}
public Builder addOption(Option<?> option, String name, ModelNode defaultValue) {
return addOption(option, name, defaultValue, true, true);
}
public Builder addOption(Option<?> option, String name, ModelNode defaultValue, boolean allowNull) {
return addOption(option, name, defaultValue, true, allowNull);
}
public Builder addOption(Option<?> option, String name, ModelNode defaultValue, boolean allowExpression, boolean allowNull) {
attributes.add(OptionAttributeDefinition.builder(name, option)
.setDefaultValue(defaultValue)
.setAllowExpression(allowExpression)
.setAllowNull(allowNull)
.build()
);
return this;
}
public List<OptionAttributeDefinition> build() {
return attributes;
}
}
}