Author: amarkhel
Date: 2010-10-21 08:50:44 -0400 (Thu, 21 Oct 2010)
New Revision: 19635
Modified:
sandbox/trunk/ui/calendar/ui/src/main/java/org/richfaces/component/AbstractCalendar.java
sandbox/trunk/ui/calendar/ui/src/main/java/org/richfaces/component/package-info.java
sandbox/trunk/ui/calendar/ui/src/main/java/org/richfaces/renderkit/CalendarRendererBase.java
sandbox/trunk/ui/calendar/ui/src/main/templates/calendar.template.xml
Log:
RF-9152, RF-9169
fix renderer, migrate some methods to calendar component class
Modified:
sandbox/trunk/ui/calendar/ui/src/main/java/org/richfaces/component/AbstractCalendar.java
===================================================================
---
sandbox/trunk/ui/calendar/ui/src/main/java/org/richfaces/component/AbstractCalendar.java 2010-10-21
09:18:29 UTC (rev 19634)
+++
sandbox/trunk/ui/calendar/ui/src/main/java/org/richfaces/component/AbstractCalendar.java 2010-10-21
12:50:44 UTC (rev 19635)
@@ -23,11 +23,22 @@
package org.richfaces.component;
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import javax.faces.FacesException;
+import javax.faces.application.Application;
import javax.faces.component.UIInput;
+import javax.faces.context.FacesContext;
+import javax.faces.convert.Converter;
+import javax.faces.convert.DateTimeConverter;
import org.richfaces.cdk.annotations.Attribute;
import org.richfaces.cdk.annotations.EventName;
@@ -78,6 +89,12 @@
public abstract boolean isEnableManualInput();
@Attribute
+ public abstract boolean isDayEnabled();
+
+ @Attribute
+ public abstract String getDayStyleClass();
+
+ @Attribute
public abstract String getTabindex();
@Attribute
@@ -103,6 +120,9 @@
@Attribute
public abstract String getButtonIconDisabled();
+
+ @Attribute
+ public abstract Object getDefaultTime();
@Attribute(events=@EventName("inputclick"))
public abstract String getOninputclick();
@@ -146,94 +166,151 @@
@Attribute(events=@EventName("inputblur"))
public abstract String getOninputblur();
+ public Calendar getCalendar() {
+ return Calendar.getInstance(getTimeZone(), getAsLocale(getLocale()));
+ }
+
public Date getCurrentDateOrDefault() {
- /*
Date date = getAsDate(getCurrentDate());
-
- if (date != null) {
- return date;
- } else {
- Date value = getAsDate(this.getValue());
- if (value != null) {
- return value;
- } else {
- return java.util.Calendar.getInstance(getTimeZone()).getTime();
+ if (date == null) {
+ date = getAsDate(this.getValue());
+
+ if (date == null) {
+ TimeZone timeZone = getTimeZone();
+ Calendar calendar = timeZone != null ? Calendar.getInstance(timeZone) :
Calendar.getInstance();
+ date = calendar.getTime();
}
-
+
}
- */
- return null;
+ return date;
}
public Date getAsDate(Object date) {
- /*
+ if(date == null) {
+ return null;
+ }
- if (date == null) {
- return null;
+ Date value = null;
+ FacesContext facesContext = getFacesContext();
+ if(date instanceof Date) {
+ value = (Date)date;
+
+ } else if(date instanceof String) {
+ DateTimeConverter converter = new DateTimeConverter();
+ converter.setPattern(this.getDatePattern());
+ converter.setLocale(getAsLocale(this.getLocale()));
+ converter.setTimeZone(this.getTimeZone());
+ value = (Date)converter.getAsObject(facesContext, this,(String) date);
+
+ } else if(date instanceof Calendar) {
+ value = ((Calendar) date).getTime();
+
} else {
+ Converter converter = getConverter();
+ if(converter != null) {
+ return getAsDate(converter.getAsString(facesContext, this, date));
+ }
- if (date instanceof Date) {
- return (Date) date;
+ Application application = facesContext.getApplication();
+ converter = application.createConverter(date.getClass());
+ if (null != converter) {
+ value = getAsDate(converter.getAsString(facesContext, this, date));
} else {
- if (date instanceof String) {
- DateTimeConverter converter = new DateTimeConverter();
- converter.setPattern(this.getDatePattern());
- converter.setLocale(getAsLocale(this.getLocale()));
- converter.setTimeZone(this.getTimeZone());
- FacesContext context = FacesContext.getCurrentInstance();
- return (Date) converter.getAsObject(context, this,
- (String) date);
- } else {
- if (date instanceof Calendar) {
- return ((Calendar) date).getTime();
- } else {
-
- FacesContext context = FacesContext.getCurrentInstance();
- Converter converter = getConverter();
-
- if(converter != null) {
- return getAsDate(converter.getAsString(context, this,
date));
- }
-
- Application application = context.getApplication();
- converter = application.createConverter(date.getClass());
- if (null != converter) {
- return getAsDate(converter.getAsString(context, this,
date));
- } else {
- throw new FacesException("Wrong attibute type or there
is no converter for custom attibute type");
- }
-
- }
- }
+ throw new FacesException("Wrong attibute type or there is no
converter for custom attibute type");
}
+
}
- */
- return null;
+
+ return value;
}
public Locale getAsLocale(Object locale) {
- /*
+ Locale localeValue = null;
if (locale instanceof Locale) {
- return (Locale) locale;
+ localeValue = (Locale)locale;
} else if (locale instanceof String) {
+ localeValue = parseLocale((String) locale);
- return parseLocale((String) locale);
-
} else {
-
FacesContext context = FacesContext.getCurrentInstance();
Application application = context.getApplication();
Converter converter = application .createConverter(locale.getClass());
+
if (null != converter) {
- return parseLocale(converter.getAsString(context, this, locale));
+ localeValue = parseLocale(converter.getAsString(context, this, locale));
} else {
- throw new FacesException(
- "Wrong locale attibute type or there is no converter for
custom attibute type");
+ throw new FacesException("Wrong locale attibute type or there is no
converter for custom attibute type");
}
- }*/
- return null;
+ }
+ return localeValue;
}
+
+ public Locale parseLocale(String localeStr){
+ if(null==localeStr || localeStr.trim().length() < 2) {
+ return Locale.getDefault();
+ }
+
+ //Lookup index of first '_' in string locale representation.
+ int index1 = localeStr.indexOf("_");
+ //Get first charters (if exist) from string
+ String language = null;
+ if(index1!=-1){
+ language = localeStr.substring(0, index1);
+ }else{
+ return new Locale(localeStr);
+ }
+
+ //Lookup index of second '_' in string locale representation.
+ int index2 = localeStr.indexOf("_", index1+1);
+ String country = null;
+ if(index2!=-1){
+ country = localeStr.substring(index1+1, index2);
+ String variant = localeStr.substring(index2+1);
+ return new Locale(language, country, variant);
+ }else{
+ country = localeStr.substring(index1+1);
+ return new Locale(language, country);
+ }
+ }
+
+ public Date getFormattedDefaultTime() {
+ Object defaultTime = getDefaultTime();
+ if(defaultTime == null) {
+ return null;
+ }
+
+ Date result = null;
+ if (defaultTime instanceof Calendar) {
+ result = ((Calendar) defaultTime).getTime();
+
+ } else if (defaultTime instanceof Date) {
+ result = (Date) defaultTime;
+
+ } else {
+ String defaultTimeString = defaultTime.toString();
+ String datePattern = getDatePattern();
+
+ String timePattern =
"\\s*[hHkKma]+[\\W&&\\S]+[hHkKma]+\\s*";
+ Pattern pattern = Pattern.compile(timePattern);
+ Matcher matcher = pattern.matcher(datePattern);
+
+ String subTimePattern = DEFAULT_TIME_PATTERN;
+ if(matcher.find()) {
+ subTimePattern = matcher.group().trim();
+ }
+
+ DateFormat format = new SimpleDateFormat(subTimePattern);
+ try {
+ result = format.parse(defaultTimeString);
+ } catch (ParseException parseException) {
+ // log??
+ result = null;
+ }
+ }
+
+ return result;
+ }
}
Modified:
sandbox/trunk/ui/calendar/ui/src/main/java/org/richfaces/component/package-info.java
===================================================================
---
sandbox/trunk/ui/calendar/ui/src/main/java/org/richfaces/component/package-info.java 2010-10-21
09:18:29 UTC (rev 19634)
+++
sandbox/trunk/ui/calendar/ui/src/main/java/org/richfaces/component/package-info.java 2010-10-21
12:50:44 UTC (rev 19635)
@@ -20,5 +20,5 @@
* 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
*/
//TODO: rename to input after move to trunk
-@org.richfaces.cdk.annotations.TagLibrary(uri="http://richfaces.org/input",
shortName="input")
+@org.richfaces.cdk.annotations.TagLibrary(uri="http://richfaces.org/calendar",
shortName="calendar")
package org.richfaces.component;
Modified:
sandbox/trunk/ui/calendar/ui/src/main/java/org/richfaces/renderkit/CalendarRendererBase.java
===================================================================
---
sandbox/trunk/ui/calendar/ui/src/main/java/org/richfaces/renderkit/CalendarRendererBase.java 2010-10-21
09:18:29 UTC (rev 19634)
+++
sandbox/trunk/ui/calendar/ui/src/main/java/org/richfaces/renderkit/CalendarRendererBase.java 2010-10-21
12:50:44 UTC (rev 19635)
@@ -26,6 +26,7 @@
import java.util.Calendar;
import java.util.Collections;
import java.util.Date;
+import java.util.HashMap;
import java.util.Map;
import java.util.TimeZone;
@@ -50,7 +51,10 @@
*/
@ResourceDependencies({ @ResourceDependency(library = "javax.faces", name =
"jsf.js"),
+ @ResourceDependency(name = "jquery.js"),
@ResourceDependency(name = "jquery.position.js"),
+ @ResourceDependency(name = "richfaces.js"),
+ @ResourceDependency(name = "richfaces-base-component.js"),
@ResourceDependency(name = "richfaces-event.js"),
@ResourceDependency(library = "org.richfaces", name =
"json-dom.js"),
@ResourceDependency(library = "org.richfaces", name =
"jquery.effects.core.js"),
@@ -60,7 +64,7 @@
@ResourceDependency(library = "org.richfaces", name =
"calendar.js"),
@ResourceDependency(library = "org.richfaces", name =
"calendar.ecss") })
public class CalendarRendererBase extends InputRendererBase {
-
+
public static final String OPTION_ENABLE_MANUAL_INPUT =
"enableManualInput";
public static final String OPTION_DISABLED = "disabled";
@@ -110,8 +114,7 @@
public static final String OPTION_LABELS = "labels";
public static final String OPTION_DEFAULT_TIME = "defaultTime";
-
-
+
protected static final Map<String, ComponentAttribute>
CALENDAR_INPUT_HANDLER_ATTRIBUTES =
Collections.unmodifiableMap(ComponentAttribute.createMap(
new ComponentAttribute(HtmlConstants.ONCLICK_ATTRIBUTE)
.setEventNames("inputclick")
@@ -156,7 +159,11 @@
.setEventNames("inputselect")
.setComponentAttributeName("oninputselect")));
+ private static final String HOURS_VALUE = "hours";
+
+ private static final String MINUTES_VALUE = "minutes";
+
public void renderInputHandlers(FacesContext facesContext, UIComponent component)
throws IOException {
RenderKitUtils.renderPassThroughAttributesOptimized(facesContext, component,
CALENDAR_INPUT_HANDLER_ATTRIBUTES);
}
@@ -227,7 +234,6 @@
return result;
}
-
public Object getCurrentDate(FacesContext facesContext, AbstractCalendar calendar)
throws IOException {
Date date = calendar.getCurrentDateOrDefault();
return formatDate(date);
@@ -260,30 +266,12 @@
}
public JSReference getIsDayEnabled(FacesContext facesContext, AbstractCalendar
calendar) {
- /*UICalendar calendar = (UICalendar) component;
- String isDayEnabled = (String) calendar.getAttributes().get(
- "isDayEnabled");
- if (isDayEnabled != null && isDayEnabled.length() != 0) {
- return new JSReference(isDayEnabled); //new JSFunction(isDayEnabled);
- }*/
-
- return null;
+ return calendar.isDayEnabled() ? JSReference.TRUE : JSReference.FALSE;
}
-
-
public JSReference getDayStyleClass(FacesContext context, AbstractCalendar calendar)
{
-// TODO: refactor this
-
- /*
- UICalendar calendar = (UICalendar) component;
- String dayStyleClass = (String) calendar.getAttributes().get(
- "dayStyleClass");
- if (dayStyleClass != null && dayStyleClass.length() != 0) {
- return new JSReference(dayStyleClass);
- }*/
-
- return null;
+ String dayStyleClass = calendar.getDayStyleClass();
+ return ((dayStyleClass != null && dayStyleClass.trim().length() != 0)) ?
new JSReference(dayStyleClass) : null;
}
public Map<String, Object> getLabels(FacesContext facesContext,
AbstractCalendar calendar) {
@@ -375,12 +363,11 @@
return null;
}
- public Map<String, Object> getPreparedDefaultTime(AbstractCalendar calendar) {
- /*
- Date date = component.getFormattedDefaultTime();
+ public Map<String, Object> getPreparedDefaultTime(AbstractCalendar
abstractCalendar) {
+ Date date = abstractCalendar.getFormattedDefaultTime();
Map<String, Object> result = new HashMap<String, Object>();
if (date != null) {
- Calendar calendar = component.getCalendar();
+ Calendar calendar = abstractCalendar.getCalendar();
calendar.setTime(date);
int hours = calendar.get(Calendar.HOUR_OF_DAY);
int minutes = calendar.get(Calendar.MINUTE);
@@ -390,8 +377,7 @@
result.put(MINUTES_VALUE, minutes);
}
}
- return result; */
- return null;
+ return result;
}
public ScriptOptions createCalendarScriptOption(FacesContext facesContext,
UIComponent component) throws IOException {
@@ -439,7 +425,8 @@
AbstractCalendar calendar = (AbstractCalendar)component;
ScriptOptions scriptOptions = createCalendarScriptOption(facesContext,
calendar);
- JSFunction function = new JSFunction("new rf.ui.Calendar",
calendar.getClientId(facesContext), scriptOptions);
+ //new RichFaces.ui.Calendar(id, locale, options, markups);
+ JSFunction function = new JSFunction("new RichFaces.ui.Calendar",
calendar.getClientId(facesContext), "", scriptOptions, "");
StringBuffer scriptBuffer = new StringBuffer();
scriptBuffer.append(function.toScript()).append(".load()");
writer.write(scriptBuffer.toString());
Modified: sandbox/trunk/ui/calendar/ui/src/main/templates/calendar.template.xml
===================================================================
--- sandbox/trunk/ui/calendar/ui/src/main/templates/calendar.template.xml 2010-10-21
09:18:29 UTC (rev 19634)
+++ sandbox/trunk/ui/calendar/ui/src/main/templates/calendar.template.xml 2010-10-21
12:50:44 UTC (rev 19635)
@@ -29,7 +29,6 @@
<cdk:class>org.richfaces.renderkit.html.CalendarRenderer</cdk:class>
<cdk:superclass>org.richfaces.renderkit.CalendarRendererBase</cdk:superclass>
<cdk:renderer-type>org.richfaces.CalendarRenderer</cdk:renderer-type>
- <cdk:resource-dependency library="org.richfaces"
name="base-component.reslib" />
</cc:interface>
<cc:implementation>
<span id="#{clientId}" class="rf-ca
#{component.attributes['styleClass']}" cdk:passThroughWithExclusions="id
class">