ar.com.kyol.jet.client.wrappers.DateBoxWrapper.java Source code

Java tutorial

Introduction

Here is the source code for ar.com.kyol.jet.client.wrappers.DateBoxWrapper.java

Source

/*
 * gwt-jet 
 * 
 * Widgets wrapping objects with reflection autopopulation for fast coding
 * 
 * The gwt-jet library provides a fast, flexible and easy way to wrap business 
 * objects that you want to show at the front-end. The jet classes automatically 
 * create the corresponding widget and automagically populate the user modified 
 * values into the original object.
 * 
 * gwt-jet was created by
 * Silvana Muzzopappa & Federico Pugnali
 * (c)2011 - Apache 2.0 license
 * 
 */
package ar.com.kyol.jet.client.wrappers;

import java.util.Date;

import ar.com.kyol.jet.client.ObjectSetter;

import com.google.gwt.event.logical.shared.ValueChangeEvent;
import com.google.gwt.event.logical.shared.ValueChangeHandler;
import com.google.gwt.i18n.client.DateTimeFormat;
import com.google.gwt.user.datepicker.client.DateBox;
import com.gwtent.reflection.client.ClassType;
import com.gwtent.reflection.client.TypeOracle;

public class DateBoxWrapper extends Wrapper {

    private Date date;
    private DateBox dateBox;
    private ObjectSetter objSetter;

    /**
     * Instantiates a new date box wrapper.
     *
     * @param date the date
     * @param objSetter the obj setter
     */
    public DateBoxWrapper(Date date, ObjectSetter objSetter) {
        this(date, objSetter, new DateBox());
    }

    /**
     * Instantiates a new date box wrapper.
     *
     * @param date the date
     * @param objSetter the obj setter
     * @param dateBox the date box
     */
    public DateBoxWrapper(Date date, ObjectSetter objSetter, DateBox dateBox) {
        this(date, objSetter, dateBox, false);
    }

    /**
     * Instantiates a new date box wrapper.
     *
     * @param date the date
     * @param objSetter the obj setter
     * @param dateBox the date box
     * @param useValueAsString the use value as string
     */
    public DateBoxWrapper(Date date, ObjectSetter objSetter, final DateBox dateBox, boolean useValueAsString) {
        super(useValueAsString);
        this.dateBox = dateBox;
        this.date = date;
        this.objSetter = objSetter;
        dateBox.setValue(this.date);
        String format = "dd/MM/yyyy";
        if (objSetter.getFormat() != null && !objSetter.getFormat().equals("")) {
            format = objSetter.getFormat();
        }
        dateBox.setFormat(new DateBox.DefaultFormat(DateTimeFormat.getFormat(format)));

        dateBox.addValueChangeHandler(new ValueChangeHandler<Date>() {

            @Override
            @SuppressWarnings("rawtypes")
            public void onValueChange(ValueChangeEvent<Date> arg0) {
                if (DateBoxWrapper.this.date == null) {
                    ClassType cType = TypeOracle.Instance
                            .getClassType(DateBoxWrapper.this.objSetter.getObj().getClass());
                    DateBoxWrapper.this.date = new Date();
                    cType.invoke(DateBoxWrapper.this.objSetter.getObj(), DateBoxWrapper.this.objSetter.getSetter(),
                            new Object[] { DateBoxWrapper.this.date });
                }

                if (DateBoxWrapper.this.dateBox.getValue() != null) {
                    DateBoxWrapper.this.date.setTime(DateBoxWrapper.this.dateBox.getValue().getTime());
                } else {
                    DateBoxWrapper.this.date = null;
                    ClassType cType = TypeOracle.Instance
                            .getClassType(DateBoxWrapper.this.objSetter.getObj().getClass());
                    cType.invoke(DateBoxWrapper.this.objSetter.getObj(), DateBoxWrapper.this.objSetter.getSetter(),
                            new Object[] { DateBoxWrapper.this.date });
                }
            }
        });

        //gwt issue 4084 (Fixed in version 2.5)
        dateBox.getTextBox().addValueChangeHandler(new ValueChangeHandler<String>() {
            @Override
            public void onValueChange(ValueChangeEvent<String> event) {
                if ("".equals(event.getValue()) || null == event.getValue()) {
                    ValueChangeEvent.fire(dateBox, null);
                }
            }
        });
        initWidget(dateBox);
    }

    @Override
    protected String getValueAsString() {
        return this.dateBox.getValue().toString();
    }

}