package play.utils.meta.form;
import java.util.Locale;
import play.api.i18n.Lang;
import play.twirl.api.Html;
import play.data.Form;
import play.data.Form.Field;
import play.utils.meta.FieldMetadata;
import scala.Symbol;
import scala.Tuple2;
import views.html.helper.FieldConstructor;
import views.html.helper.FieldElements;
import views.html.helper.twitterBootstrap.twitterBootstrapFieldConstructor;
public abstract class FormFieldWidget {
protected FieldMetadata fieldMetadata;
private String fieldName;
public FormFieldWidget(FieldMetadata fieldMetadata) {
super();
this.fieldMetadata = fieldMetadata;
fieldName = fieldMetadata.getField().getName();
}
public java.lang.reflect.Field field() {
return fieldMetadata.getField();
}
public Html render(Form<?> form) {
Field formField = form.field(fieldName);
Lang lang = getLang();
FieldConstructor fc = new FieldConstructor() {
public Html apply(FieldElements elements) {
return twitterBootstrapFieldConstructor.apply(elements);
}
};
@SuppressWarnings("unchecked")
Tuple2<Symbol, Object>[] args = new Tuple2[] {};
return render(formField, args, fc, lang);
}
protected abstract Html render(Field formField, Tuple2<Symbol, Object>[] args, FieldConstructor fieldConstructor, Lang lang);
protected Lang getLang() {
Lang lang = null;
if (play.mvc.Http.Context.current.get() != null) {
lang = play.mvc.Http.Context.current().lang();
} else {
Locale defaultLocale = Locale.getDefault();
lang = new Lang(defaultLocale.getLanguage(), defaultLocale.getCountry());
}
return lang;
}
}