001 package edu.nrao.sss.webapp.faces.converter; 002 003 import javax.faces.convert.Converter; 004 import javax.faces.convert.ConverterException; 005 import javax.faces.context.FacesContext; 006 import javax.faces.component.UIComponent; 007 import javax.faces.application.FacesMessage; 008 009 import java.util.Date; 010 import java.text.SimpleDateFormat; 011 import java.text.ParseException; 012 import org.apache.log4j.Logger; 013 014 public class DateConverter implements Converter 015 { 016 private static Logger log = Logger.getLogger(DateConverter.class); 017 private static final SimpleDateFormat formatter; 018 019 public static final String dateFieldSeparator = "-"; 020 public static final String timeFieldSeparator = ":"; 021 public static final String dateTimeSeparator = " "; 022 023 static 024 { 025 String format = "yyyy" + dateFieldSeparator + "MM" + dateFieldSeparator + "dd" + 026 dateTimeSeparator + "HH" + timeFieldSeparator + "mm"; 027 028 formatter = new SimpleDateFormat(format); 029 } 030 031 public Object getAsObject(FacesContext context, UIComponent component, String value) 032 { 033 log.debug("Trying to convert '" + value + "' to an object"); 034 if (value == null || value.length() < 1) 035 return null; 036 037 try 038 { 039 Date d = formatter.parse(value); 040 log.debug("Returning " + d); 041 return d; 042 } 043 catch (ParseException pe) 044 { 045 throw new ConverterException(new FacesMessage(FacesMessage.SEVERITY_WARN, "", "Value '" + value + "' is not a recognized date format."), pe); 046 } 047 } 048 049 public String getAsString(FacesContext context, UIComponent component, Object value) 050 { 051 log.debug("Trying to convert " + value + " to a string"); 052 053 if (value == null) 054 return ""; 055 056 else if (value instanceof Date) 057 return formatter.format((Date)value); 058 059 else 060 { 061 log.warn("Can not Convert objects of type: " + value.getClass()); 062 throw new ConverterException(new FacesMessage(FacesMessage.SEVERITY_WARN, "", "Can not Convert objects of type: " + value.getClass())); 063 } 064 } 065 }