package com.nesterovskyBros.jsf; import java.util.List; import java.util.Map; import javax.el.BeanELResolver; import javax.el.ELContext; /** * Resolves properties of types * java.sql.Date, java.sql.Time, java.sql.Timestamp. * The property type is coersed to java.util.Date to be able to * work with date converters. */ public class DateELResolver extends BeanELResolver { /** * Creates a new read/write DateELResolver. */ public DateELResolver() { } /** * {@inheritDoc} */ @SuppressWarnings("unchecked") @Override public Class getType(ELContext context, Object base, Object property) { if ((base == null) || (base instanceof List) || (base instanceof Map)) { return null; } Class propertyClass = super.getType(context, base, property); if ( (propertyClass == null) || !context.isPropertyResolved() || ( (propertyClass != java.sql.Date.class) && (propertyClass != java.sql.Time.class) && (propertyClass != java.sql.Timestamp.class) ) ) { context.setPropertyResolved(false); return null; } return java.util.Date.class; } /** * {@inheritDoc} */ @Override public Object getValue( ELContext context, Object base, Object property) { Class propertyClass = getType(context, base, property); if ((propertyClass == null) || !context.isPropertyResolved()) { return null; } context.setPropertyResolved(false); return super.getValue(context, base, property); } /** * {@inheritDoc} */ @Override public void setValue( ELContext context, Object base, Object property, Object value) { if ((base == null) || (base instanceof List) || (base instanceof Map)) { context.setPropertyResolved(false); return; } Class propertyClass = super.getType(context, base, property); if ( (propertyClass == null) || !context.isPropertyResolved() || !(value instanceof java.util.Date) ) { context.setPropertyResolved(false); return; } java.util.Date date = (java.util.Date)value; context.setPropertyResolved(false); if (propertyClass == java.sql.Date.class) { value = date == null ? null : new java.sql.Date(date.getTime()); } else if (propertyClass == java.sql.Time.class) { value = date == null ? null : new java.sql.Time(date.getTime()); } else if (propertyClass == java.sql.Timestamp.class) { value = date == null ? null : new java.sql.Timestamp(date.getTime()); } else { return; } super.setValue(context, base, property, value); } }