package org.vaadin.viritin.fields; import org.vaadin.viritin.fluency.ui.FluentCustomField; import org.vaadin.viritin.label.RichText; import com.vaadin.ui.Component; import com.vaadin.ui.CustomField; import com.vaadin.ui.Label; /** * A field which represents the value always in a label, so it is not editable. * <p> * The use case is a non editable value in a form, e.g. an id. * <p> * The creation of the label text can be controlled via a * {@link org.vaadin.viritin.fields.CaptionGenerator}. * * @author Daniel Nordhoff-Vergien * * @param <T> the type of the entity */ public class LabelField<T> extends CustomField<T> implements FluentCustomField<LabelField<T>, T> { private static final long serialVersionUID = -3079451926367430515L; private T value; @Override protected void doSetValue(T value) { this.value = value; updateLabel(); } @Override public T getValue() { return value; } private static class ToStringCaptionGenerator<T> implements CaptionGenerator<T> { private static final long serialVersionUID = 1149675718238329960L; @Override public String getCaption(T option) { if (option == null) { return ""; } else { return option.toString(); } } } public LabelField(String caption) { super(); setCaption(caption); } private CaptionGenerator<T> captionGenerator = new ToStringCaptionGenerator<>(); private Label label = new RichText(); public LabelField() { } @Override protected Component initContent() { updateLabel(); return label; } protected void updateLabel() { String caption; if (captionGenerator != null) { caption = captionGenerator.getCaption(getValue()); } else { caption = getValue().toString(); } label.setValue(caption); } /** * Sets the CaptionGenerator for creating the label value. * * @param captionGenerator the caption generator used to format the * displayed property */ public void setCaptionGenerator(CaptionGenerator<T> captionGenerator) { this.captionGenerator = captionGenerator; updateLabel(); } public void setLabel(Label label) { this.label = label; } public Label getLabel() { return label; } }