public class UIInputDate extends UIInput {

   public static final String COMPONENT_FAMILY = "to.msn.wings.jsf.custom.input";

   public static final String COMPONENT_TYPE = "to.wings.msn.jsf.custom.UIInputDate";

   public String getFamily() {
      return COMPONENT_FAMILY;
   }

   public void restoreState(FacesContext context, Object state) {
      Object[] objValues = (Object[])state;
      super.restoreState( context, objValues[0] );
   }

   public Object saveState(FacesContext context) {
      Object objValues[] = new Object[1];
      objValues[0] = super.saveState(context);
      return objValues;
   }

   protected Object getConvertedValue(FacesContext context,Object submittedValue) {
      Map submittedMap = (Map)submittedValue;
      String year = (String)submittedMap.get ( InputDateRenderer.YEAR_SUFFIX );
      String month = (String)submittedMap.get ( InputDateRenderer.MONTH_SUFFIX );
      String day = (String)submittedMap.get ( InputDateRenderer.DAY_SUFFIX );

      Calendar cal = Calendar.getInstance ( context.getViewRoot().getLocale() );
      cal.clear();
      try {

         cal.set(Integer.parseInt(year) , Integer.parseInt(month) - 1 , Integer.parseInt(day ));
      } catch (Exception e) {
         FacesMessage facesMessage = new FacesMessage ( "正しい日付を入力して下さい。" );
         context.addMessage(getClientId(context), facesMessage);

         setValid(false);
         return submittedValue;
      }

      return cal;
   }
}