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    }