Author: abelevich
Date: 2008-07-21 08:29:01 -0400 (Mon, 21 Jul 2008)
New Revision: 9705
Modified:
trunk/ui/calendar/src/main/java/org/richfaces/component/UICalendar.java
trunk/ui/calendar/src/main/java/org/richfaces/renderkit/CalendarRendererBase.java
trunk/ui/calendar/src/test/java/org/richfaces/component/CalendarComponentTest.java
Log:
https://jira.jboss.org/jira/browse/RF-3850
Modified: trunk/ui/calendar/src/main/java/org/richfaces/component/UICalendar.java
===================================================================
--- trunk/ui/calendar/src/main/java/org/richfaces/component/UICalendar.java 2008-07-21
11:18:44 UTC (rev 9704)
+++ trunk/ui/calendar/src/main/java/org/richfaces/component/UICalendar.java 2008-07-21
12:29:01 UTC (rev 9705)
@@ -34,6 +34,9 @@
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+import javax.el.ELContext;
+import javax.el.MethodExpression;
+import javax.el.ValueExpression;
import javax.faces.FacesException;
import javax.faces.application.Application;
import javax.faces.application.FacesMessage;
@@ -43,8 +46,6 @@
import javax.faces.convert.Converter;
import javax.faces.convert.ConverterException;
import javax.faces.convert.DateTimeConverter;
-import javax.faces.el.MethodBinding;
-import javax.faces.el.ValueBinding;
import javax.faces.event.AbortProcessingException;
import javax.faces.event.FacesEvent;
@@ -198,10 +199,10 @@
public abstract void setBoundaryDatesMode(String boundaryDatesMode);
- public abstract MethodBinding getCurrentDateChangeListener();
+ public abstract MethodExpression getCurrentDateChangeListener();
public abstract void setCurrentDateChangeListener(
- MethodBinding scrollerListener);
+ MethodExpression scrollerListener);
public abstract String getMode();
@@ -360,22 +361,23 @@
}
// RF-1073
try {
- ValueBinding vb = getValueBinding("currentDate");
- if (vb != null) {
- if (vb.getType(context).equals(String.class)) {
+ ValueExpression ve = getValueExpression("currentDate");
+ if (ve != null) {
+ ELContext elContext = context.getELContext();
+ if (ve.getType(elContext).equals(String.class)) {
DateTimeConverter convert = new DateTimeConverter();
convert.setLocale(getAsLocale(getLocale()));
convert.setPattern(getDatePattern());
- vb.setValue(context, convert.getAsString(context, this,
+ ve.setValue(context.getELContext(), convert.getAsString(context, this,
currentDate));
return;
- } else if (vb.getType(context).equals(Calendar.class)) {
+ } else if (ve.getType(elContext).equals(Calendar.class)) {
Calendar c = Calendar.getInstance();
c.setTime((Date) currentDate);
- vb.setValue(context, c);
+ ve.setValue(elContext, c);
return;
} else {
- vb.setValue(context, currentDate);
+ ve.setValue(elContext, currentDate);
return;
}
} else {
@@ -419,10 +421,11 @@
if (date == null) {
return null;
} else {
- if (date instanceof Date) {
+
+ if (date instanceof Date) {
return (Date) date;
} else {
- if (date instanceof String) {
+ if (date instanceof String) {
DateTimeConverter converter = new DateTimeConverter();
converter.setPattern(this.getDatePattern());
converter.setLocale(getAsLocale(this.getLocale()));
@@ -434,14 +437,18 @@
if (date instanceof Calendar) {
return ((Calendar) date).getTime();
} else {
- FacesContext context = FacesContext
- .getCurrentInstance();
+
+ FacesContext context = FacesContext.getCurrentInstance();
+ Converter converter = getConverter();
+
+ if(converter != null) {
+ return getAsDate(converter.getAsString(context, this, date));
+ }
+
Application application = context.getApplication();
- Converter converter = application.createConverter(date
- .getClass());
+ converter = application.createConverter(date.getClass());
if (null != converter) {
- return getAsDate(converter.getAsString(context,
- this, date));
+ return getAsDate(converter.getAsString(context, this, date));
} else {
throw new FacesException("Wrong attibute type or there is no converter for
custom attibute type");
}
@@ -561,12 +568,9 @@
if (!submittedCurrentDate.equals(currentDate)) {
updateCurrentDate(facesContext, submittedCurrentDate);
- MethodBinding binding = getCurrentDateChangeListener();
- if (binding != null) {
-
- binding
- .invoke(facesContext,
- new Object[] { dateChangeEvent });
+ MethodExpression methodExpression = getCurrentDateChangeListener();
+ if (methodExpression != null) {
+ methodExpression.invoke(facesContext.getELContext(), new Object[] {
dateChangeEvent });
}
}
@@ -606,9 +610,8 @@
CalendarDataModelItem[] calendarDataModelItems = calendarDataModel
.getData(preloadDateRange);
- HashMap args = new HashMap();
- args.put("startDate", CalendarRendererBase
- .formatDate(preloadDateRange[0]));
+ HashMap <String, Object> args = new HashMap<String,Object>();
+ args.put("startDate",
CalendarRendererBase.formatDate(preloadDateRange[0]));
args.put("days", calendarDataModelItems);
return args;
}
@@ -634,7 +637,7 @@
throw new IllegalArgumentException();
}
- List dates = new ArrayList();
+ List <Date> dates = new ArrayList<Date>();
Calendar calendar = Calendar.getInstance(this.getTimeZone(),
getAsLocale(this.getLocale()));
Calendar calendar2 = (Calendar) calendar.clone();
@@ -756,9 +759,9 @@
if(this._minDaysInFirstWeekSet){
return this._minDaysInFirstWeek;
}
- ValueBinding vb = getValueBinding("minDaysInFirstWeek");
- if (vb != null) {
- Integer value = (Integer) vb.getValue(getFacesContext());
+ ValueExpression ve = getValueExpression("minDaysInFirstWeek");
+ if (ve != null) {
+ Integer value = (Integer) ve.getValue(getFacesContext().getELContext());
if (null == value) {
return getDefaultMinDaysInFirstWeek();
}
@@ -787,9 +790,10 @@
if(this._firstWeekDaySet){
return this._firstWeekDay;
}
- ValueBinding vb = getValueBinding("firstWeekDay");
- if (vb != null) {
- Integer value = (Integer) vb.getValue(getFacesContext());
+ ValueExpression ve = getValueExpression("firstWeekDay");
+ if (ve != null) {
+
+ Integer value = (Integer) ve.getValue(getFacesContext().getELContext());
if (null == value) {
return getDefaultFirstWeekDay();
}
Modified:
trunk/ui/calendar/src/main/java/org/richfaces/renderkit/CalendarRendererBase.java
===================================================================
---
trunk/ui/calendar/src/main/java/org/richfaces/renderkit/CalendarRendererBase.java 2008-07-21
11:18:44 UTC (rev 9704)
+++
trunk/ui/calendar/src/main/java/org/richfaces/renderkit/CalendarRendererBase.java 2008-07-21
12:29:01 UTC (rev 9705)
@@ -114,6 +114,11 @@
@Override
public Object getConvertedValue(FacesContext context, UIComponent component, Object
submittedValue)
throws ConverterException {
+
+ if ((context == null) || (component == null)) {
+ throw new NullPointerException();
+ }
+
// skip conversion of already converted date
if (submittedValue instanceof Date) {
return (Date) submittedValue;
@@ -146,7 +151,7 @@
return converter.getAsObject(context, component, newValue);
}
- private Converter getConverterForClass(Class converterClass, FacesContext context) {
+ private Converter getConverterForClass(Class <? extends Object> converterClass,
FacesContext context) {
if (converterClass == null) {
return null;
}
@@ -196,19 +201,20 @@
return null;
}
UICalendar calendar = (UICalendar) component;
-
+
+ // if value is null and no converter attribute is specified, then
+ // return a zero length String.
+ if(currentValue == null) {
+ return "";
+ }
+
if (converter == null) {
// If there is a converter attribute, use it to to ask application
// instance for a converter with this identifier.
converter = calendar.getConverter();
}
-
+
if (converter == null) {
- // if value is null and no converter attribute is specified, then
- // return a zero length String.
- if(currentValue == null) {
- return "";
- }
// Do not look for "by-type" converters for Strings
if (currentValue instanceof String) {
return (String) currentValue;
@@ -438,8 +444,6 @@
throws IOException {
ResponseWriter writer = context.getResponseWriter();
- String clientId = calendar.getClientId(context);
-
JSFunction ajaxFunction = AjaxRendererUtils.buildAjaxFunction(calendar,
context, AjaxRendererUtils.AJAX_FUNCTION_NAME);
ajaxFunction.addParameter(JSReference.NULL);
@@ -486,30 +490,22 @@
public String getInputValue(FacesContext context, UIComponent component) {
UICalendar calendar = (UICalendar) component;
- // XXX nick - nick - can contain either Date or String instance
// Fix for myFaces 1.1.x RF-997
-
String returnValue = null;
Object value = calendar.getSubmittedValue();
-
if (value != null) {
try {
- value = calendar.getAsDate(value);
+ returnValue = getFormattedValue(context, calendar, value);
} catch (Exception e) {
if (log.isDebugEnabled()) {
log.debug(" InputValue: " + e.toString(), e);
}
- value=null;
- returnValue = (String)calendar.getSubmittedValue();
+ returnValue = (String)value;
}
} else {
- value = calendar.getAsDate(calendar.getValue());
+ returnValue = getFormattedValue(context, calendar, calendar.getValue());
}
- if (value != null) {
- returnValue = getFormattedValue(context, calendar, value);
- }
-
return returnValue;
}
@@ -616,39 +612,17 @@
public String getSelectedDate(FacesContext context, UICalendar calendar)
throws IOException {
-
- // Fix for myFaces 1.1.x RF-997
- Date date;
- if (calendar.isValid()) {
- // Hack. Use converter in "Render response" phase
- // in order to have java.util.Date object to highlight
- // selected date in Calendar popup.
- Date submittedValue = null;
- try {
- submittedValue = calendar.getAsDate(calendar.getSubmittedValue());
- } catch(ConverterException ce) {
- // ignore ConverterException for the case when the user
- // has entered invalid date and there was no validation
- // (and conversion) before, i.e. the form submit has attribute
- // "immediate" = true; and Calendar has "immediate" = false
- submittedValue = null;
- }
- if (submittedValue != null) {
- date = submittedValue;
- } else {
- date = calendar.getAsDate(calendar.getValue());
- }
- } else {
- date = calendar.getAsDate(calendar.getValue());
- // Date submittedValue = null;
- }
-
- if (date != null) {
- return ScriptUtils.toScript(formatSelectedDate(date));
- // XXX KAA Add ServerTime Processing;
- }
-
- return ScriptUtils.toScript(null);
+ Object returnValue = null;
+
+ if(calendar.isValid()) {
+ Date date;
+ Object value = calendar.getValue();
+ date = calendar.getAsDate(value);
+ if(date != null) {
+ returnValue = formatSelectedDate(date);
+ }
+ }
+ return ScriptUtils.toScript(returnValue);
}
public static Object formatDate(Date date) {
Modified:
trunk/ui/calendar/src/test/java/org/richfaces/component/CalendarComponentTest.java
===================================================================
---
trunk/ui/calendar/src/test/java/org/richfaces/component/CalendarComponentTest.java 2008-07-21
11:18:44 UTC (rev 9704)
+++
trunk/ui/calendar/src/test/java/org/richfaces/component/CalendarComponentTest.java 2008-07-21
12:29:01 UTC (rev 9705)
@@ -83,7 +83,7 @@
calendarObject.clear();
calendarObject.set(2001, Calendar.SEPTEMBER, 11, 10, 0, 0);
calendar.setId("calendar");
- calendar.setSubmittedValue(calendarObject.getTime());
+ calendar.setValue(calendarObject.getTime());
form.getChildren().add(calendar);
calendar1.setId("_calendar");
calendar1.setPopup(false);
@@ -94,7 +94,7 @@
.createComponent(UICalendar.COMPONENT_TYPE);
calendar2.setDatePattern("dd/M/yy HH:mm");
calendarObject.set(2001, Calendar.SEPTEMBER, 11, 13, 36);
- calendar2.setSubmittedValue(calendarObject.getTime());
+ calendar2.setValue(calendarObject.getTime());
calendar2.setId("timecalendar");
form.getChildren().add(calendar2);
}