package com.prezi.grub.gradle.config;
import groovy.lang.Closure;
import groovy.lang.GroovyObjectSupport;
public class Parameter extends GroovyObjectSupport {
private final String name;
private String title;
private String description;
private Closure<?> value;
private Class<?> type;
private boolean required = true;
private boolean prompt = true;
public Parameter(String name) {
this.name = name;
}
public String getName() {
return name;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
@SuppressWarnings("UnusedDeclaration")
public void title(String title) {
setTitle(title);
}
public Closure<?> getValue() {
return value;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
@SuppressWarnings("UnusedDeclaration")
public void description(String description) {
setDescription(description);
}
private void setValueInternal(Closure<?> value, boolean prompt) {
this.value = value;
setPrompt(prompt);
}
public void setValue(Object value) {
Closure<?> closure = value instanceof Closure ? (Closure<?>) value : new ValueClosure<Object>(value);
setValueInternal(closure, false);
}
@SuppressWarnings("UnusedDeclaration")
public void value(Object value) {
setValue(value);
}
public void setDefaultValue(Object value) {
Closure<?> closure = value instanceof Closure ? (Closure<?>) value : new ValueClosure<Object>(value);
setValueInternal(closure, true);
}
@SuppressWarnings("UnusedDeclaration")
public void defaultValue(Object value) {
setDefaultValue(value);
}
public Class<?> getType() {
return type;
}
public void setType(Class<?> type) {
this.type = type;
}
@SuppressWarnings("UnusedDeclaration")
public void type(Class<?> type) {
setType(type);
}
public boolean isRequired() {
return required;
}
public void setRequired(boolean required) {
this.required = required;
}
@SuppressWarnings("UnusedDeclaration")
public void required(boolean required) {
setRequired(required);
}
public boolean isPrompt() {
return prompt;
}
public void setPrompt(boolean prompt) {
this.prompt = prompt;
}
@SuppressWarnings("UnusedDeclaration")
public void prompt(boolean prompt) {
setPrompt(prompt);
}
private class ValueClosure<T> extends Closure<T> {
private final T value;
public ValueClosure(T value) {
super(Parameter.this);
this.value = value;
}
@SuppressWarnings("UnusedDeclaration")
public T doCall(Object arguments) {
return value;
}
}
}