Package org.aperteworkflow.util.vaadin.ui.date

Source Code of org.aperteworkflow.util.vaadin.ui.date.OptionalDateField

package org.aperteworkflow.util.vaadin.ui.date;

import com.vaadin.ui.CheckBox;
import com.vaadin.ui.DateField;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.PopupDateField;
import org.aperteworkflow.util.vaadin.VaadinUtility;
import org.vaadin.addon.customfield.CustomField;
import pl.net.bluesoft.rnd.util.i18n.I18NSource;

import java.util.Date;

public class OptionalDateField extends CustomField {
    private CheckBox maxRangeCheckBox;
    private PopupDateField dateField;

    public OptionalDateField(I18NSource messageSource) {
        HorizontalLayout layout = new HorizontalLayout();
        layout.setSpacing(true);
        layout.setWidth("100%");

        maxRangeCheckBox = new CheckBox(messageSource.getMessage("date.field.max.range"));
        maxRangeCheckBox.setValue(false);
        maxRangeCheckBox.setImmediate(true);
        maxRangeCheckBox.setWidth("100%");
        maxRangeCheckBox.addListener(new ValueChangeListener() {
            public void valueChange(com.vaadin.data.Property.ValueChangeEvent event) {
                toggleDateField(maxRangeCheckBox.booleanValue() ? null : new Date());
            }
        });

        dateField = new PopupDateField();
        dateField.setImmediate(true);
        dateField.setDateFormat(VaadinUtility.SIMPLE_DATE_FORMAT_STRING);
        dateField.setWidth("100px");
        dateField.setResolution(DateField.RESOLUTION_DAY);

        layout.addComponent(dateField);
        layout.addComponent(maxRangeCheckBox);
        layout.setExpandRatio(maxRangeCheckBox, 1.0F);

        setCompositionRoot(layout);
    }

    public void setDateFormat(String dateFormat) {
        dateField.setDateFormat(dateFormat);
    }

    public void setMaximumRangeCaption(String caption) {
        maxRangeCheckBox.setCaption(caption);
    }

    public void setDateFieldPrompt(String prompt) {
        dateField.setInputPrompt(prompt);
    }

    public void toggleMaximumRange(boolean select) {
        maxRangeCheckBox.setValue(select);
    }

    @Override
    protected void setInternalValue(Object newValue) {
        maxRangeCheckBox.setValue(newValue == null);
        toggleDateField(newValue);
        super.setInternalValue(newValue);
    }

    private void toggleDateField(Object value) {
        dateField.setValue(value);
        dateField.setEnabled(value != null);
    }

    public void addDateChangedListener(ValueChangeListener listener) {
        dateField.addListener(listener);
    }

    @Override
    public Object getValue() {
        return dateField.getValue();
    }

    public Date dateValue() {
        return (Date) getValue();
    }

    @Override
    public Class<?> getType() {
        return Date.class;
    }
}
TOP

Related Classes of org.aperteworkflow.util.vaadin.ui.date.OptionalDateField

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.