You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by sv...@apache.org on 2005/05/11 07:28:00 UTC

svn commit: r169590 - /myfaces/trunk/src/components/org/apache/myfaces/custom/date/HtmlDateRenderer.java /myfaces/trunk/src/components/org/apache/myfaces/custom/date/HtmlInputDate.java /myfaces/trunk/src/components/org/apache/myfaces/custom/date/HtmlInputDateTag.java

Author: svieujot
Date: Tue May 10 22:27:59 2005
New Revision: 169590

URL: http://svn.apache.org/viewcvs?rev=169590&view=rev
Log:
inputDate : partial fix for MYFACES-234

Modified:
    myfaces/trunk/src/components/org/apache/myfaces/custom/date/HtmlDateRenderer.java
    myfaces/trunk/src/components/org/apache/myfaces/custom/date/HtmlInputDate.java
    myfaces/trunk/src/components/org/apache/myfaces/custom/date/HtmlInputDateTag.java

Modified: myfaces/trunk/src/components/org/apache/myfaces/custom/date/HtmlDateRenderer.java
URL: http://svn.apache.org/viewcvs/myfaces/trunk/src/components/org/apache/myfaces/custom/date/HtmlDateRenderer.java?rev=169590&r1=169589&r2=169590&view=diff
==============================================================================
--- myfaces/trunk/src/components/org/apache/myfaces/custom/date/HtmlDateRenderer.java (original)
+++ myfaces/trunk/src/components/org/apache/myfaces/custom/date/HtmlDateRenderer.java Tue May 10 22:27:59 2005
@@ -39,50 +39,6 @@
 import org.apache.myfaces.util.MessageUtils;
 
 /**
- * $Log$
- * Revision 1.14  2004/12/27 04:11:11  mmarinschek
- * Data Table stores the state of facets of children; script tag is rendered with type attribute instead of language attribute, popup works better as a column in a data table
- *
- * Revision 1.13  2004/12/24 13:21:51  matzew
- * organized imports
- *
- * Revision 1.12  2004/12/10 02:15:19  svieujot
- * New popupCalendar attribute, and implements UserRoleAware.
- *
- * Revision 1.11  2004/12/09 12:54:26  svieujot
- * Changes to check for submitted-value first
- *
- * Revision 1.10  2004/12/09 05:13:02  svieujot
- * Mark potential bugs where we use the backing bean's value, and do not check for submitted value
- *
- * Revision 1.9  2004/10/13 11:50:57  matze
- * renamed packages to org.apache
- *
- * Revision 1.8  2004/10/04 17:47:55  svieujot
- * Bugfix for bug 1039797 (Missing setter in HtmlInputDateTag), and add User Role support to InputDate.
- *
- * Revision 1.7  2004/07/30 13:09:04  svieujot
- * Render numbers as 2 digits
- *
- * Revision 1.6  2004/07/30 02:59:00  svieujot
- * Enable disabled attribute
- *
- * Revision 1.5  2004/07/26 02:00:05  svieujot
- * Change structure to keep the data entered by the user even if they can't be converted
- *
- * Revision 1.4  2004/07/21 20:34:13  svieujot
- * Add error handling
- *
- * Revision 1.3  2004/07/18 03:08:23  svieujot
- * inputDate : add a type="date|time|both" similar as f:convertDateTime
- *
- * Revision 1.2  2004/07/17 21:03:05  svieujot
- * Clean code
- *
- * Revision 1.1  2004/07/17 20:52:53  svieujot
- * First version of an x:inputDate component
- *
- * 
  * @author Sylvain Vieujot (latest modification by $Author$)
  * @version $Revision$ $Date$
  */
@@ -100,11 +56,11 @@
     private static final String ID_MINUTES_POSTFIX = ".minutes";
     private static final String ID_SECONDS_POSTFIX = ".seconds";
     
-    protected boolean isDisabled(FacesContext facesContext, UIComponent uiComponent) {
-        if( !UserRoleUtils.isEnabledOnUserRole(uiComponent) )
+    protected boolean isDisabled(FacesContext facesContext, HtmlInputDate inputDate) {
+        if( !UserRoleUtils.isEnabledOnUserRole(inputDate) )
             return false;
 
-        return ((HtmlInputDate)uiComponent).isDisabled();
+        return inputDate.isDisabled();
     }
     
     public void encodeEnd(FacesContext facesContext, UIComponent uiComponent) throws IOException {
@@ -118,33 +74,35 @@
         String type = inputDate.getType();
         String clientId = uiComponent.getClientId(facesContext);
 
-        boolean disabled = isDisabled(facesContext, uiComponent);
+        boolean disabled = isDisabled(facesContext, inputDate);
+		boolean readonly = inputDate.isReadonly();
 
         ResponseWriter writer = facesContext.getResponseWriter();
 
         HtmlRendererUtils.writePrettyLineSeparator(facesContext);
 
         if( ! type.equals("time")){
-	        encodeInputDay(uiComponent, writer, clientId, userData, disabled);
-	        encodeInputMonth(uiComponent, writer, clientId, userData, currentLocale, disabled);
-	        encodeInputYear(uiComponent, writer, clientId, userData, disabled);
+	        encodeInputDay(inputDate, writer, clientId, userData, disabled, readonly);
+	        encodeInputMonth(inputDate, writer, clientId, userData, currentLocale, disabled, readonly);
+	        encodeInputYear(inputDate, writer, clientId, userData, disabled, readonly);
 	        
-	        if( inputDate.isPopupCalendar() && ! disabled )
+	        if( inputDate.isPopupCalendar() && ! disabled && ! readonly )
 	            encodePopupCalendarButton(facesContext, writer, clientId, currentLocale);
         }
         if( type.equals("both") ){
             writer.write(" ");
         }
         if( ! type.equals("date")){
-	        encodeInputHours(uiComponent, writer, clientId, userData, disabled);
+	        encodeInputHours(uiComponent, writer, clientId, userData, disabled, readonly);
 	        writer.write(":");
-	        encodeInputMinutes(uiComponent, writer, clientId, userData, disabled);
+	        encodeInputMinutes(uiComponent, writer, clientId, userData, disabled, readonly);
 	        writer.write(":");
-	        encodeInputSeconds(uiComponent, writer, clientId, userData, disabled);
+	        encodeInputSeconds(uiComponent, writer, clientId, userData, disabled, readonly);
         }
     }
     
-    private static void encodeInputField(UIComponent uiComponent, ResponseWriter writer, String id, String value, int size, boolean disabled)  throws IOException {
+    private static void encodeInputField(UIComponent uiComponent, ResponseWriter writer, String id,
+			String value, int size, boolean disabled, boolean readonly)  throws IOException {
         writer.startElement(HTML.INPUT_ELEM, uiComponent);
         HtmlRendererUtils.renderHTMLAttributes(writer, uiComponent, HTML.UNIVERSAL_ATTRIBUTES);
         HtmlRendererUtils.renderHTMLAttributes(writer, uiComponent, HTML.EVENT_HANDLER_ATTRIBUTES);
@@ -153,6 +111,9 @@
 		if (disabled) {
 		    writer.writeAttribute(HTML.DISABLED_ATTR, Boolean.TRUE, null);
 		}
+		if( readonly ) {
+			writer.writeAttribute(HTML.READONLY_ATTR, Boolean.TRUE, null);
+		}
 
 		writer.writeAttribute(HTML.ID_ATTR, id, null);
 		writer.writeAttribute(HTML.NAME_ATTR, id, null);
@@ -164,13 +125,13 @@
 		writer.endElement(HTML.INPUT_ELEM);
     }
     
-    private static void encodeInputDay(UIComponent uiComponent, ResponseWriter writer, String clientId, UserData userData, boolean disabled)
-            throws IOException {
-        encodeInputField(uiComponent, writer, clientId + ID_DAY_POSTFIX, userData.getDay(), 2, disabled);
+    private static void encodeInputDay(UIComponent uiComponent, ResponseWriter writer, String clientId,
+			UserData userData, boolean disabled, boolean readonly) throws IOException {
+        encodeInputField(uiComponent, writer, clientId + ID_DAY_POSTFIX, userData.getDay(), 2, disabled, readonly);
     }
 
     private static void encodeInputMonth(UIComponent uiComponent, ResponseWriter writer, String clientId, UserData userData, Locale currentLocale,
-            boolean disabled) throws IOException {
+            boolean disabled, boolean readonly) throws IOException {
         writer.startElement(HTML.SELECT_ELEM, uiComponent);
         writer.writeAttribute(HTML.ID_ATTR, clientId + ID_MONTH_POSTFIX, null);
         writer.writeAttribute(HTML.NAME_ATTR, clientId + ID_MONTH_POSTFIX, null);
@@ -206,20 +167,24 @@
         writer.endElement(HTML.SELECT_ELEM);
     }
 
-    private static void encodeInputYear(UIComponent uiComponent, ResponseWriter writer, String clientId, UserData userData, boolean disabled) throws IOException {
-        encodeInputField(uiComponent, writer, clientId + ID_YEAR_POSTFIX, userData.getYear(), 4, disabled);
+    private static void encodeInputYear(UIComponent uiComponent, ResponseWriter writer, String clientId,
+			UserData userData, boolean disabled, boolean readonly) throws IOException {
+        encodeInputField(uiComponent, writer, clientId + ID_YEAR_POSTFIX, userData.getYear(), 4, disabled, readonly);
     }
     
-    private static void encodeInputHours(UIComponent uiComponent, ResponseWriter writer, String clientId, UserData userData, boolean disabled) throws IOException {
-        encodeInputField(uiComponent, writer, clientId + ID_HOURS_POSTFIX, userData.getHours(), 2, disabled);
+    private static void encodeInputHours(UIComponent uiComponent, ResponseWriter writer, String clientId,
+			UserData userData, boolean disabled, boolean readonly) throws IOException {
+        encodeInputField(uiComponent, writer, clientId + ID_HOURS_POSTFIX, userData.getHours(), 2, disabled, readonly);
     }
     
-    private static void encodeInputMinutes(UIComponent uiComponent, ResponseWriter writer, String clientId, UserData userData, boolean disabled) throws IOException {
-        encodeInputField(uiComponent, writer, clientId + ID_MINUTES_POSTFIX, userData.getMinutes(), 2, disabled);
+    private static void encodeInputMinutes(UIComponent uiComponent, ResponseWriter writer, String clientId,
+			UserData userData, boolean disabled, boolean readonly) throws IOException {
+        encodeInputField(uiComponent, writer, clientId + ID_MINUTES_POSTFIX, userData.getMinutes(), 2, disabled, readonly);
     }
     
-    private static void encodeInputSeconds(UIComponent uiComponent, ResponseWriter writer, String clientId, UserData userData, boolean disabled) throws IOException {
-        encodeInputField(uiComponent, writer, clientId + ID_SECONDS_POSTFIX, userData.getSeconds(), 2, disabled);
+    private static void encodeInputSeconds(UIComponent uiComponent, ResponseWriter writer, String clientId,
+			UserData userData, boolean disabled, boolean readonly) throws IOException {
+        encodeInputField(uiComponent, writer, clientId + ID_SECONDS_POSTFIX, userData.getSeconds(), 2, disabled, readonly);
     }
     
     private void encodePopupCalendarButton(FacesContext facesContext, ResponseWriter writer, String clientId, Locale currentLocale) throws IOException{
@@ -249,10 +214,11 @@
     public void decode(FacesContext facesContext, UIComponent uiComponent) {
         RendererUtils.checkParamValidity(facesContext, uiComponent, HtmlInputDate.class);
         
-        if( isDisabled(facesContext, uiComponent) ) // For safety, do not set the submited value if the component is disabled.
+        HtmlInputDate inputDate = (HtmlInputDate) uiComponent;
+		
+        if( isDisabled(facesContext, inputDate) ) // For safety, do not set the submited value if the component is disabled.
             return;
 
-        HtmlInputDate inputDate = (HtmlInputDate) uiComponent;
         Locale currentLocale = facesContext.getViewRoot().getLocale();
         UserData userData = (UserData) inputDate.getSubmittedValue();
         if( userData == null )

Modified: myfaces/trunk/src/components/org/apache/myfaces/custom/date/HtmlInputDate.java
URL: http://svn.apache.org/viewcvs/myfaces/trunk/src/components/org/apache/myfaces/custom/date/HtmlInputDate.java?rev=169590&r1=169589&r2=169590&view=diff
==============================================================================
--- myfaces/trunk/src/components/org/apache/myfaces/custom/date/HtmlInputDate.java (original)
+++ myfaces/trunk/src/components/org/apache/myfaces/custom/date/HtmlInputDate.java Tue May 10 22:27:59 2005
@@ -39,6 +39,7 @@
     private static final String DEFAULT_RENDERER_TYPE = "org.apache.myfaces.Date";
     private static final boolean DEFAULT_DISABLED = false;
     
+	private Boolean _readonly = null;
     private String _enabledOnUserRole = null;
     private String _visibleOnUserRole = null;
     
@@ -88,7 +89,17 @@
     public void setPopupCalendar(boolean popupCalendar){
         this._popupCalendar = Boolean.valueOf(popupCalendar);
     }
-	
+
+    public boolean isReadonly(){
+        if (_readonly != null) return _readonly.booleanValue();
+        ValueBinding vb = getValueBinding("readonly");
+        Boolean v = vb != null ? (Boolean)vb.getValue(getFacesContext()) : null;
+        return v != null ? v.booleanValue() : false;
+    }
+    public void setReadonly(boolean readonly){
+        _readonly = Boolean.valueOf(readonly);
+    }
+
     public void setEnabledOnUserRole(String enabledOnUserRole){
         _enabledOnUserRole = enabledOnUserRole;
     }
@@ -123,14 +134,15 @@
     }
 	
     public Object saveState(FacesContext context) {
-        Object values[] = new Object[7];
+        Object values[] = new Object[8];
         values[0] = super.saveState(context);
         values[1] = _type;
         values[2] = _popupCalendar;
         values[3] = _userData;
         values[4] = _disabled;
-        values[5] = _enabledOnUserRole;
-        values[6] = _visibleOnUserRole;
+		values[5] = _readonly;
+        values[6] = _enabledOnUserRole;
+        values[7] = _visibleOnUserRole;
         return values;
     }
 
@@ -141,8 +153,9 @@
         _popupCalendar = (Boolean)values[2];
         _userData = (UserData)values[3];
         _disabled = (Boolean)values[4];
-        _enabledOnUserRole = (String)values[5];
-        _visibleOnUserRole = (String)values[6];
+		_readonly = (Boolean)values[5];
+        _enabledOnUserRole = (String)values[6];
+        _visibleOnUserRole = (String)values[7];
     }
     
     public static class UserData implements Serializable {

Modified: myfaces/trunk/src/components/org/apache/myfaces/custom/date/HtmlInputDateTag.java
URL: http://svn.apache.org/viewcvs/myfaces/trunk/src/components/org/apache/myfaces/custom/date/HtmlInputDateTag.java?rev=169590&r1=169589&r2=169590&view=diff
==============================================================================
--- myfaces/trunk/src/components/org/apache/myfaces/custom/date/HtmlInputDateTag.java (original)
+++ myfaces/trunk/src/components/org/apache/myfaces/custom/date/HtmlInputDateTag.java Tue May 10 22:27:59 2005
@@ -22,9 +22,7 @@
 
 /**
  * @author Sylvain Vieujot (latest modification by $Author$)
- * @version $Revision$ $Date$ $Log:
- *          HtmlInputCalendarTag.java,v $
- *  
+ * @version $Revision$ $Date$
  */
 public class HtmlInputDateTag extends HtmlInputTextTagBase {
     public String getComponentType() {