You are viewing a plain text version of this content. The canonical link for it is here.
Posted to adffaces-commits@incubator.apache.org by ma...@apache.org on 2006/11/06 10:45:04 UTC

svn commit: r471687 - in /incubator/adffaces/branches/stable-06-nov/trinidad: trinidad-api/src/main/java/org/apache/myfaces/trinidad/validator/ trinidad-api/src/main/xrts/org/apache/myfaces/trinidad/resource/ trinidad-build/src/main/resources/META-INF/...

Author: matzew
Date: Mon Nov  6 02:45:03 2006
New Revision: 471687

URL: http://svn.apache.org/viewvc?view=rev&rev=471687
Log:
merged dateRestrictionValidator to november branch

Added:
    incubator/adffaces/branches/stable-06-nov/trinidad/trinidad-demo/src/main/webapp/convertValidate/clientDateRestrictionValidate.jspx
    incubator/adffaces/branches/stable-06-nov/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/util/JsonUtils.java
    incubator/adffaces/branches/stable-06-nov/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/validator/DateRestrictionValidator.java
Modified:
    incubator/adffaces/branches/stable-06-nov/trinidad/trinidad-api/src/main/java/org/apache/myfaces/trinidad/validator/DateRestrictionValidator.java
    incubator/adffaces/branches/stable-06-nov/trinidad/trinidad-api/src/main/xrts/org/apache/myfaces/trinidad/resource/MessageBundle.xrts
    incubator/adffaces/branches/stable-06-nov/trinidad/trinidad-build/src/main/resources/META-INF/maven-faces-plugin/validators/trinidad/DateRestriction.xml
    incubator/adffaces/branches/stable-06-nov/trinidad/trinidad-demo/src/main/webapp/WEB-INF/faces-config.xml
    incubator/adffaces/branches/stable-06-nov/trinidad/trinidad-demo/src/main/webapp/convertValidate/index.jspx
    incubator/adffaces/branches/stable-06-nov/trinidad/trinidad-impl/src/main/javascript/META-INF/adf/jsLibs/ColorFormat.js
    incubator/adffaces/branches/stable-06-nov/trinidad/trinidad-impl/src/main/javascript/META-INF/adf/jsLibs/CoreFormat.js

Modified: incubator/adffaces/branches/stable-06-nov/trinidad/trinidad-api/src/main/java/org/apache/myfaces/trinidad/validator/DateRestrictionValidator.java
URL: http://svn.apache.org/viewvc/incubator/adffaces/branches/stable-06-nov/trinidad/trinidad-api/src/main/java/org/apache/myfaces/trinidad/validator/DateRestrictionValidator.java?view=diff&rev=471687&r1=471686&r2=471687
==============================================================================
--- incubator/adffaces/branches/stable-06-nov/trinidad/trinidad-api/src/main/java/org/apache/myfaces/trinidad/validator/DateRestrictionValidator.java (original)
+++ incubator/adffaces/branches/stable-06-nov/trinidad/trinidad-api/src/main/java/org/apache/myfaces/trinidad/validator/DateRestrictionValidator.java Mon Nov  6 02:45:03 2006
@@ -172,18 +172,8 @@
 
     if (value != null)
     {
-      TimeZone tz = null;
-      RequestContext rctx = RequestContext.getCurrentInstance();
-      if (rctx != null)
-      {
-        tz = rctx.getTimeZone();
-      }
-      else
-      {
-        tz = TimeZone.getDefault();
-      }
-      Calendar calendar = Calendar.getInstance(tz);
-      calendar.setTime(_getDateValue(value));
+      Calendar calendar = getCalendar();
+      calendar.setTime(getDateValue(value));
       Date convertedDate = calendar.getTime();
       
       String weekday = _dayMap.get(calendar.get(Calendar.DAY_OF_WEEK));
@@ -352,13 +342,30 @@
     return converter;
   }
 
+  
+  protected Calendar getCalendar()
+  {
+    TimeZone tz = null;
+    RequestContext rctx = RequestContext.getCurrentInstance();
+    if (rctx != null)
+    {
+      tz = rctx.getTimeZone();
+    }
+    else
+    {
+      tz = TimeZone.getDefault();
+    }
+    return Calendar.getInstance(tz);
+
+  }
+  
   /**
    * Parses the already converted value to a <code>java.util.Date</code>.
    * @param value converted value
    * @return fulltyped <code>java.util.Date</code>
    * @throws IllegalArgumentException
    */
-  private static Date _getDateValue(
+  protected static Date getDateValue(
       Object value) throws IllegalArgumentException
     {
       if (value instanceof Date)

Modified: incubator/adffaces/branches/stable-06-nov/trinidad/trinidad-api/src/main/xrts/org/apache/myfaces/trinidad/resource/MessageBundle.xrts
URL: http://svn.apache.org/viewvc/incubator/adffaces/branches/stable-06-nov/trinidad/trinidad-api/src/main/xrts/org/apache/myfaces/trinidad/resource/MessageBundle.xrts?view=diff&rev=471687&r1=471686&r2=471687
==============================================================================
--- incubator/adffaces/branches/stable-06-nov/trinidad/trinidad-api/src/main/xrts/org/apache/myfaces/trinidad/resource/MessageBundle.xrts (original)
+++ incubator/adffaces/branches/stable-06-nov/trinidad/trinidad-api/src/main/xrts/org/apache/myfaces/trinidad/resource/MessageBundle.xrts Mon Nov  6 02:45:03 2006
@@ -177,7 +177,7 @@
   <resource
      key="org.apache.myfaces.trinidad.validator.DateRestrictionValidator.MONTH">Date is not in a valid month.</resource>
   <resource
-    key="org.apache.myfaces.trinidad.validator.DateRestrictionValidator.MONTH_detail">The date entered, "{1}", is inside the month {2}.</resource>
+    key="org.apache.myfaces.trinidad.validator.DateRestrictionValidator.MONTH_detail">The date entered, "{1}", is in an invalid month.</resource>
 
   <!-- Date outside date range error               -->
   <!-- {0} the label that identifies the component -->
@@ -186,7 +186,7 @@
   <!-- {3} represents the maximum allowed date     -->
   <resource key="org.apache.myfaces.trinidad.validator.DateRestrictionValidator.WEEKDAY">Date is not within a valid weekday.</resource>
 
-  <resource key="org.apache.myfaces.trinidad.validator.DateRestrictionValidator.WEEKDAY_detail">The date entered, "{1}", is a {2} and therefor not valid.</resource>
+  <resource key="org.apache.myfaces.trinidad.validator.DateRestrictionValidator.WEEKDAY_detail">The date entered, "{1}", is an invalid day of the week.</resource>
 
   <!-- Number exceeds number range error               -->
   <!-- {0} the label that identifies the component -->

Modified: incubator/adffaces/branches/stable-06-nov/trinidad/trinidad-build/src/main/resources/META-INF/maven-faces-plugin/validators/trinidad/DateRestriction.xml
URL: http://svn.apache.org/viewvc/incubator/adffaces/branches/stable-06-nov/trinidad/trinidad-build/src/main/resources/META-INF/maven-faces-plugin/validators/trinidad/DateRestriction.xml?view=diff&rev=471687&r1=471686&r2=471687
==============================================================================
--- incubator/adffaces/branches/stable-06-nov/trinidad/trinidad-build/src/main/resources/META-INF/maven-faces-plugin/validators/trinidad/DateRestriction.xml (original)
+++ incubator/adffaces/branches/stable-06-nov/trinidad/trinidad-build/src/main/resources/META-INF/maven-faces-plugin/validators/trinidad/DateRestriction.xml Mon Nov  6 02:45:03 2006
@@ -1,29 +1,31 @@
 <?xml version="1.0" ?>
-<!--
-  Copyright 2006 The Apache Software Foundation.
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
--->
+<!--
+  Copyright 2006 The Apache Software Foundation.
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
 <faces-config version="1.2" xmlns="http://java.sun.com/xml/ns/javaee"
               xmlns:tr="http://myfaces.apache.org/trinidad"
               xmlns:mfp="http://myfaces.apache.org/maven-faces-plugin">
   <validator>
-    <description><![CDATA[Validate that the date entered is within a given range.]]></description>
+    <description><![CDATA[Validate that the date entered is within a given restriction.]]></description>
     <display-name>validateDateRestriction</display-name>
     <validator-id>org.apache.myfaces.trinidad.DateRestriction</validator-id>
-    <validator-class>org.apache.myfaces.trinidad.validator.DateRestrictionValidator</validator-class>
+    <validator-class>org.apache.myfaces.trinidadinternal.validator.DateRestrictionValidator</validator-class>
     <property>
-      <description><![CDATA[the .]]>
+      <description><![CDATA[Specify the month which are invalid for your use case.
+           The attribute takes a whitespace delimited list of months.
+           Possible values are jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec.]]>
       </description>
       <property-name>invalidMonths</property-name>
       <property-class>java.lang.String[]</property-class>
@@ -31,7 +33,9 @@
     </property>
     
     <property>
-      <description><![CDATA[the .]]>
+      <description><![CDATA[Specify the weekdays which are invalid for your use case.
+           The attribute takes whitespace delimited list of weekdays.
+           Possible values are sun, mon, tue, wed, thu, fri, sat.]]>
       </description>
       <property-name>invalidDaysOfWeek</property-name>
       <property-class>java.lang.String[]</property-class>
@@ -39,16 +43,39 @@
     </property>
     
     <property>
-      <description><![CDATA[the .]]>
+      <description><![CDATA[To specifiy a concrete List of Dates, use the invalidDays attribute and wire it
+           to a DateListProvider implementation. This returns a list of dates, which are invalid.]]>
       </description>
       <property-name>invalidDays</property-name>
       <property-class>org.apache.myfaces.trinidad.model.DateListProvider</property-class>
-      <property-extension/>
+      <property-extension>
+        <mfp:property-metadata>
+          <mfp:preferred>true</mfp:preferred>
+        </mfp:property-metadata>
+      </property-extension>
     </property>
-    
+
     <property>
       <description><![CDATA[<p>
            The detail error message to be used for constructing faces messages,
+           when input value exceeds the <code>invalidMonths</code> value
+           set.
+          </p>
+          <p>
+           <strong>
+            Parameters:
+           </strong>
+           <ul>
+            <li>
+             {0} the label that identifies the component
+            </li>
+            <li>
+             {1} value entered by the user
+            </li>
+            <li>
+             {2} the invalid month
+            </li>
+           </ul>
           </p>]]>
       </description>
       <property-name>messageDetailInvalidMonths</property-name>
@@ -59,9 +86,28 @@
         </mfp:property-metadata>
       </property-extension>
     </property>
+
     <property>
       <description><![CDATA[<p>
            The detail error message to be used for constructing faces messages,
+           when input value is less than the set <code>invalidDaysOfWeek</code>
+           value.
+          </p>
+          <p>
+           <strong>
+            Parameters:
+           </strong>
+           <ul>
+            <li>
+             {0} the label that identifies the component
+            </li>
+            <li>
+             {1} value entered by the user
+            </li>
+            <li>
+             {2} the invalid weekday
+            </li>
+           </ul>
           </p>]]>
       </description>
       <property-name>messageDetailInvalidDaysOfWeek</property-name>
@@ -72,9 +118,28 @@
         </mfp:property-metadata>
       </property-extension>
     </property>
+    
     <property>
       <description><![CDATA[<p>
            The detail error message to be used for constructing faces messages,
+           when input value is less than the set <code>invalidDate</code>
+           value.
+          </p>
+          <p>
+           <strong>
+            Parameters:
+           </strong>
+           <ul>
+            <li>
+             {0} the label that identifies the component
+            </li>
+            <li>
+             {1} value entered by the user
+            </li>
+            <li>
+             {2} the invalid date
+            </li>
+           </ul>
           </p>]]>
       </description>
       <property-name>messageDetailInvalidDays</property-name>
@@ -89,8 +154,33 @@
     <validator-extension>
       <mfp:tag-name>tr:validateDateRestriction</mfp:tag-name>
       <mfp:tag-class>org.apache.myfaces.trinidadinternal.taglib.validator.ValidateDateRestrictionTag</mfp:tag-class>
+      <mfp:long-description><![CDATA[<html:p>
+
+        Validate that the date is valid with some given restrictions.
+</html:p>]]></mfp:long-description>
+      <mfp:example>
+        <mfp:source-code>
+        <![CDATA[<tr:inputDate id="days" value="#{bean.date}"
+                                  label="Select a date, but check possible holidays first">
+                <tr:convertDateTime pattern="yyyy-MM-dd"/>
+                <tr:validateDateRestriction  invalidDays="#{bean.date.nationalHolidays}" />
+              </tr:inputDate>
+              
+              <tr:inputDate id="month" value="#{bean.date}"
+                                  label="Select a date, but not within November or December">
+                <tr:convertDateTime pattern="yyyy-MM-dd"/>
+                <tr:validateDateRestriction  invalidMonths="Nov Dec" />
+              </tr:inputDate>
+              
+              <tr:inputDate id="daysOfWeek" value="#{bean.date}"
+                                  label="Select a date, but not a Monday">
+                <tr:convertDateTime pattern="yyyy-MM-dd"/>
+                <tr:validateDateRestriction  invalidDaysOfWeek="Mon"/>
+              </tr:inputDate>]]>
+     </mfp:source-code>
+      </mfp:example>
       <mfp:author>Matthias Wessendorf</mfp:author>
       <mfp:uix2-local-name>validateDateTimeRange</mfp:uix2-local-name>
     </validator-extension>
   </validator>
-</faces-config>
+</faces-config>
\ No newline at end of file

Modified: incubator/adffaces/branches/stable-06-nov/trinidad/trinidad-demo/src/main/webapp/WEB-INF/faces-config.xml
URL: http://svn.apache.org/viewvc/incubator/adffaces/branches/stable-06-nov/trinidad/trinidad-demo/src/main/webapp/WEB-INF/faces-config.xml?view=diff&rev=471687&r1=471686&r2=471687
==============================================================================
--- incubator/adffaces/branches/stable-06-nov/trinidad/trinidad-demo/src/main/webapp/WEB-INF/faces-config.xml (original)
+++ incubator/adffaces/branches/stable-06-nov/trinidad/trinidad-demo/src/main/webapp/WEB-INF/faces-config.xml Mon Nov  6 02:45:03 2006
@@ -1852,6 +1852,12 @@
     </navigation-case>
 
     <navigation-case>
+      <from-outcome>clientDateRestrictionValidate</from-outcome>
+      <to-view-id>/convertValidate/clientDateRestrictionValidate.jspx</to-view-id>
+      <redirect/>
+    </navigation-case>
+
+    <navigation-case>
       <from-outcome>convertValidateDemos</from-outcome>
       <to-view-id>/convertValidate/index.jspx</to-view-id>
       <redirect/>

Added: incubator/adffaces/branches/stable-06-nov/trinidad/trinidad-demo/src/main/webapp/convertValidate/clientDateRestrictionValidate.jspx
URL: http://svn.apache.org/viewvc/incubator/adffaces/branches/stable-06-nov/trinidad/trinidad-demo/src/main/webapp/convertValidate/clientDateRestrictionValidate.jspx?view=auto&rev=471687
==============================================================================
--- incubator/adffaces/branches/stable-06-nov/trinidad/trinidad-demo/src/main/webapp/convertValidate/clientDateRestrictionValidate.jspx (added)
+++ incubator/adffaces/branches/stable-06-nov/trinidad/trinidad-demo/src/main/webapp/convertValidate/clientDateRestrictionValidate.jspx Mon Nov  6 02:45:03 2006
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="iso-8859-1" standalone="yes" ?>
+<!--
+  Copyright 2006 The Apache Software Foundation.
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+-->
+<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.0"
+          xmlns:f="http://java.sun.com/jsf/core"
+          xmlns:tr="http://myfaces.apache.org/trinidad"
+          xmlns:trdemo="http://myfaces.apache.org/trinidaddemo">
+  <jsp:directive.page contentType="text/html;charset=utf-8"/>
+  <f:view>
+    <tr:document title="Client-side Date Restriction Validator">
+        <tr:form usesUpload="true">
+          <tr:panelPage>
+            <tr:messages/>
+            <f:facet name="navigationGlobal">
+              <tr:navigationPane hint="buttons">
+                <tr:commandNavigationItem text="Converters and Validators"
+                                    action="convertValidateDemos"
+                                    immediate="true"/>
+              </tr:navigationPane>
+            </f:facet>
+           <tr:panelHeader text="Client-side Date Restriction Validator">
+            <tr:outputText styleClass="AFInstructionText"
+                           value="In the following examples, the date Restriction validator runs on the client, avoiding a round trip."/>
+            <tr:spacer height="10"/>
+            <tr:panelHeader text="Client Validators"/>
+            <tr:spacer height="10"/>
+            <tr:panelFormLayout>
+
+              <tr:inputDate id="month" value="#{dateRestrictionValidator.testInvalidMonth}"
+                                  label="Select a date!">
+                <f:facet name="help">
+                  <tr:outputText value="November/December dates are not allowed here!"/>
+                </f:facet>
+                <tr:convertDateTime pattern="yyyy-MM-dd"/>
+                <tr:validateDateRestriction  invalidMonths="Nov Dec" />
+              </tr:inputDate>
+              
+              <tr:inputDate id="daysOfWeek" value="#{dateRestrictionValidator.testInvalidDaysOfWeek}"
+                                  label="Select a date!">
+                <f:facet name="help">
+                  <tr:outputText value="Please no Mondays...!"/>
+                </f:facet>
+                <tr:convertDateTime pattern="yyyy-MM-dd"/>
+                <tr:validateDateRestriction  invalidDaysOfWeek="Mon"/>
+              </tr:inputDate>
+
+            </tr:panelFormLayout>
+           </tr:panelHeader>
+            <tr:panelButtonBar>
+              <tr:commandButton text="Submit"/>
+            </tr:panelButtonBar>
+          </tr:panelPage>
+        </tr:form>
+    </tr:document>
+  </f:view>
+</jsp:root>
\ No newline at end of file

Modified: incubator/adffaces/branches/stable-06-nov/trinidad/trinidad-demo/src/main/webapp/convertValidate/index.jspx
URL: http://svn.apache.org/viewvc/incubator/adffaces/branches/stable-06-nov/trinidad/trinidad-demo/src/main/webapp/convertValidate/index.jspx?view=diff&rev=471687&r1=471686&r2=471687
==============================================================================
--- incubator/adffaces/branches/stable-06-nov/trinidad/trinidad-demo/src/main/webapp/convertValidate/index.jspx (original)
+++ incubator/adffaces/branches/stable-06-nov/trinidad/trinidad-demo/src/main/webapp/convertValidate/index.jspx Mon Nov  6 02:45:03 2006
@@ -33,6 +33,7 @@
               <tr:panelGroupLayout layout="vertical">
                 <tr:commandLink text="client converters and validators" action="clientConvert"/>
                 <tr:commandLink text="converters and validators" action="convertValidate"/>
+                <tr:commandLink text="client Date Restriction Validator" action="clientDateRestrictionValidate" />
                 <tr:commandLink text="Date Restriction Validator" action="dateRestrictionValidate" />
                 <tr:commandLink text="message customization on validators and converters" action="messageCustomization"/>
               </tr:panelGroupLayout>

Added: incubator/adffaces/branches/stable-06-nov/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/util/JsonUtils.java
URL: http://svn.apache.org/viewvc/incubator/adffaces/branches/stable-06-nov/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/util/JsonUtils.java?view=auto&rev=471687
==============================================================================
--- incubator/adffaces/branches/stable-06-nov/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/util/JsonUtils.java (added)
+++ incubator/adffaces/branches/stable-06-nov/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/util/JsonUtils.java Mon Nov  6 02:45:03 2006
@@ -0,0 +1,474 @@
+package org.apache.myfaces.trinidadinternal.util;
+/*
+ * Copyright 2006 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import java.awt.Color;
+import java.io.IOException;
+import java.lang.reflect.Array;
+import java.util.Collection;
+import java.util.Date;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.myfaces.trinidadinternal.convert.GenericConverterFactory;
+
+/**
+ * Utilities for writing out JSON notation strings inside XML attribute or text.
+ * @author Apache Trinidad team
+ */
+public final class JsonUtils
+{
+
+  static public void writeObject(
+      StringBuilder out,
+      Object        attrValue,
+      boolean       escapeXML) throws IOException
+    {
+      if (attrValue == null)
+      {
+        out.append("null");
+      }
+      else
+      {
+        if (attrValue instanceof CharSequence)
+        {
+          writeString(out, ((CharSequence)attrValue), escapeXML);
+          return;
+        }
+
+        Class valueClass = attrValue.getClass();
+        if (Boolean.class == valueClass)
+        {
+          writeBoolean(out, ((Boolean)attrValue).booleanValue());
+          return;
+        }
+        else if (Integer.class == valueClass)
+        {
+          writeInt(out, ((Integer)attrValue).intValue());
+          return;
+        }
+        else if (Character.class == valueClass)
+        {
+          writeChar(out, ((Character)attrValue).charValue(), escapeXML);
+          return;
+        }
+        else if (valueClass.isArray())
+        {
+          out.append('[');
+
+          int length = Array.getLength(attrValue);
+
+          for (int i = 0; i < length; i++)
+          {
+            writeObject(out, Array.get(attrValue, i), escapeXML);
+
+            if ( i != (length - 1))
+              out.append(',');
+          }
+
+          out.append(']');
+          return;
+        }
+        
+        GenericConverterFactory converter =
+          GenericConverterFactory.getCurrentInstance();
+        if (Byte.class == valueClass)
+        {
+          writeByte(out, ((Byte)attrValue).byteValue());
+        }
+        else if (converter.isConvertible(attrValue, Date.class))
+        {
+          Date date = (Date) converter.convert(attrValue, Date.class);
+          writeDate(out, date);
+        }
+        else if (Double.class == valueClass)
+        {
+          writeDouble(out, ((Double)attrValue).doubleValue());
+        }
+        else if (Float.class == valueClass)
+        {
+          writeFloat(out, ((Float)attrValue).floatValue());
+        }
+        else if (Long.class == valueClass)
+        {
+          writeLong(out, ((Long)attrValue).longValue());
+        }
+        else if (Short.class == valueClass)
+        {
+          writeShort(out, ((Short)attrValue).shortValue());
+        }
+        else if (converter.isConvertible(attrValue, Number.class))
+        {
+          Number num = (Number) converter.convert(attrValue, Number.class);
+          writeDouble(out, num.doubleValue());
+        }
+        else if (Map.class.isAssignableFrom(valueClass))
+        {
+          writeMap(out, ((Map)attrValue), escapeXML);
+        }
+        else if (Collection.class.isAssignableFrom(valueClass))
+        {
+          writeCollection(out, ((Collection)attrValue), escapeXML);
+        }
+        else if (Color.class == valueClass)
+        {
+          writeColor(out, ((Color)attrValue));
+        }
+      }
+    }
+
+    /**
+     * Encodes a boolean in JavaScript Object Notation.
+     *
+     * @param out           the output buffer
+     * @param value         the boolean value
+     */
+    static public void writeBoolean(
+      StringBuilder out,
+      boolean      value) throws IOException
+    {
+      out.append(value);
+    }
+
+    /**
+     * Encodes a byte in JavaScript Object Notation.
+     *
+     * @param out           the output buffer
+     * @param value         the byte value
+     */
+    static public void writeByte(
+      StringBuilder out,
+      byte         value) throws IOException
+    {
+      out.append(value);
+    }
+
+    /**
+     * Encodes a char in JavaScript Object Notation.
+     *
+     * @param out           the output buffer
+     * @param value         the char value
+     */
+    static public void writeChar(
+      StringBuilder out,
+      char         value,
+      boolean      escapeXML) throws IOException
+    {
+      out.append('\'');
+      _escapeChar(out, value, escapeXML);
+      out.append('\'');
+    }
+
+    /**
+     * Encodes a Collection in JavaScript Object Notation.
+     *
+     * @param out           the output buffer
+     * @param value         the List value
+     */
+    static public void writeCollection(
+      StringBuilder out,
+      Collection   value,
+      boolean      escapeXML) throws IOException
+    {
+      if (value == null)
+      {
+        out.append("null");
+      }
+      else if (value.isEmpty())
+      {
+        out.append("[]");
+      }
+      else
+      {
+        out.append("[");
+        for (Iterator iter = value.iterator();
+             iter.hasNext();)
+        {
+          Object item = iter.next();
+          writeObject(out, item, escapeXML);
+          if (iter.hasNext())
+            out.append(',');
+        }
+        out.append(']');
+      }
+    }
+
+    static public void writeDate(StringBuilder out, Date value) throws IOException
+    {
+      out.append("new Date("+value.getTime()+")");
+    }
+
+    static public void writeColor(StringBuilder out, Color color) throws IOException
+    {
+      if(color.getAlpha() == 0)
+      {
+        out.append("null");
+      }
+      else
+      {
+        out.append("new TrColor(");
+        out.append(color.getRed());
+        out.append(",");
+        out.append(color.getGreen());
+        out.append(",");
+        out.append(color.getBlue());
+        out.append(")");
+      }
+    }
+
+    /**
+     * Encodes a double in JavaScript Object Notation.
+     *
+     * @param out           the output buffer
+     * @param value         the double value
+     */
+    static public void writeDouble(
+      StringBuilder out,
+      double       value) throws IOException
+    {
+      out.append(value);
+    }
+
+    /**
+     * Encodes a float in JavaScript Object Notation.
+     *
+     * @param out           the output buffer
+     * @param value         the float value
+     */
+    static public void writeFloat(
+      StringBuilder out,
+      float        value) throws IOException
+    {
+      out.append(value);
+    }
+
+    /**
+     * Encodes a long in JavaScript Object Notation.
+     *
+     * @param out           the output buffer
+     * @param value         the long value
+     */
+    static public void writeLong(
+      StringBuilder out,
+      long         value) throws IOException
+    {
+      out.append(value);
+    }
+
+    /**
+     * Encodes a int in JavaScript Object Notation.
+     *
+     * @param out           the output buffer
+     * @param value         the int value
+     */
+    static public void writeInt(
+      StringBuilder out,
+      int          value) throws IOException
+    {
+      out.append(value);
+    }
+
+    /**
+     * Encodes a short in JavaScript Object Notation.
+     *
+     * @param out           the output buffer
+     * @param value         the short value
+     */
+    static public void writeShort(
+      StringBuilder out,
+      short        value) throws IOException
+    {
+      out.append(value);
+    }
+
+    /**
+     * Encodes a String in JavaScript Object Notation.
+     *
+     * @param out           the output buffer
+     * @param value         the String value
+     */
+    static public void writeString(
+      StringBuilder out,
+      CharSequence  value,
+      boolean       escapeXML) throws IOException
+    {
+      if (value == null)
+      {
+        out.append("null");
+      }
+      else
+      {
+        // escape chars as necessary
+
+        out.append('\'');
+
+        for (int i=0; i < value.length(); i++)
+        {
+          char ch = value.charAt(i);
+          _escapeChar(out, ch, escapeXML);
+        }
+
+        out.append('\'');
+      }
+    }
+
+    /**
+     * Encodes a Map in JavaScript Object Notation.
+     *
+     * @param out           the output buffer
+     * @param map           the Map value
+     */
+    static public void writeMap(
+      StringBuilder out,
+      Map          map,
+      boolean      escapeXML) throws IOException
+    {
+      if (map == null)
+      {
+        out.append("null");
+      }
+      else if (map.isEmpty())
+      {
+        out.append("{}");
+      }
+      else
+      {
+        out.append("{");
+        Set entries = map.entrySet();
+        for (Iterator iter = entries.iterator();
+             iter.hasNext();)
+        {
+          Map.Entry entry = (Map.Entry)iter.next();
+          Object rawKey = entry.getKey();
+          if(rawKey == null)
+            throw new IllegalArgumentException("Javascript does not support null keys");
+          String key = rawKey.toString(); 
+          Object value = entry.getValue();
+          writeString(out, key, escapeXML);
+          out.append(':');
+          writeObject(out, value, escapeXML);
+          if (iter.hasNext())
+            out.append(',');
+        }
+        out.append('}');
+      }
+    }
+
+  
+
+  /**
+   * prevent object creation
+   *
+   */
+  private JsonUtils()
+  {
+  }
+  
+  /**
+   * Encodes a char in JavaScript Object Notation.
+   *
+   * @param out           the output buffer
+   * @param value         the char value
+   */
+  static private void _escapeChar(
+    StringBuilder out,
+    char         value,
+    boolean      escapeXML)
+  {
+    switch (value)
+    {
+      // Escapes needed for XML
+      case '&':
+        if (escapeXML)
+          out.append("&amp;");
+        else
+          out.append('&');
+        break;
+      case '<':
+        if (escapeXML)
+          out.append("&lt;");
+        else
+          out.append('<');
+        break;
+      case '>':
+        if (escapeXML)
+          out.append("&gt;");
+        else
+          out.append('>');
+        break;
+
+      // Double quote
+      case '\"':
+        if (escapeXML)
+          out.append("\\&quot;");
+        else
+          out.append("\\\"");
+        break;
+      // Apostrophe
+      case '\'':
+        out.append("\\\'");
+        break;
+      // Backslash
+      case '\\':
+        out.append("\\\\");
+        break;
+      case '\b':
+        out.append("\\b");
+        break;
+      case '\f':
+        out.append("\\f");
+        break;
+      case '\n':
+        out.append("\\n");
+        break;
+      case '\r':
+        out.append("\\r");
+        break;
+      case '\t':
+        out.append("\\t");
+        break;
+      default:
+        if (value >= 32 && value < 128)
+        {
+          // no escaping necessary
+          out.append(value);
+        }
+        else
+        {
+          String hex = Integer.toHexString(value);
+
+          if (value > 0x00FF)
+          {
+            // use unicode escaping
+            out.append("\\u");
+            if (value < 0x1000)
+              out.append('0');
+            out.append(hex);
+          }
+          else
+          {
+            // use hex escaping
+            out.append("\\x");
+            if (value < 0x10)
+              out.append('0');
+            out.append(hex);
+          }
+        }
+        break;
+    }
+  }
+}
\ No newline at end of file

Added: incubator/adffaces/branches/stable-06-nov/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/validator/DateRestrictionValidator.java
URL: http://svn.apache.org/viewvc/incubator/adffaces/branches/stable-06-nov/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/validator/DateRestrictionValidator.java?view=auto&rev=471687
==============================================================================
--- incubator/adffaces/branches/stable-06-nov/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/validator/DateRestrictionValidator.java (added)
+++ incubator/adffaces/branches/stable-06-nov/trinidad/trinidad-impl/src/main/java/org/apache/myfaces/trinidadinternal/validator/DateRestrictionValidator.java Mon Nov  6 02:45:03 2006
@@ -0,0 +1,215 @@
+package org.apache.myfaces.trinidadinternal.validator;
+/*
+* Copyright 2006 The Apache Software Foundation.
+*
+* Licensed under the Apache License, Version 2.0 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+*
+*     http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+import java.io.IOException;
+import java.util.Calendar;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.faces.validator.ValidatorException;
+import javax.faces.application.FacesMessage;
+import javax.faces.context.FacesContext;
+import javax.faces.component.UIComponent;
+
+import org.apache.myfaces.trinidad.util.MessageFactory;
+import org.apache.myfaces.trinidad.validator.ClientValidator;
+import org.apache.myfaces.trinidadinternal.convert.GenericConverterFactory;
+import org.apache.myfaces.trinidadinternal.ui.laf.base.xhtml.XhtmlLafUtils;
+import org.apache.myfaces.trinidadinternal.util.JsonUtils;
+
+/**
+ * @author Matthias Wessendorf
+ *
+ */
+public class DateRestrictionValidator extends org.apache.myfaces.trinidad.validator.DateRestrictionValidator
+                                       implements ClientValidator
+{
+  public DateRestrictionValidator()
+  {
+    super();
+    _initJsDateMap();
+  }
+
+  @Override
+  public void validate(
+    FacesContext context,
+    UIComponent  component,
+    Object       value) throws ValidatorException
+  {
+    if (value == null)
+      return;
+    
+    if (!(value instanceof Date))
+    {
+      GenericConverterFactory fac = GenericConverterFactory.getCurrentInstance();
+      value = fac.convert(value, Date.class);
+    }
+    super.validate(context, component, value);
+  }
+  
+  public Collection<String> getClientImportNames()
+  {
+    return _IMPORT_NAMES;
+  }
+
+  public String getClientScript(
+   FacesContext context,
+   UIComponent component)
+  {
+    return null;
+  }
+
+
+  /**
+   * @todo this should have not_in_range messages, not just max and min!
+   * @todo Format these numbers properly.
+   */
+  public String getClientValidation(
+    FacesContext context,
+    UIComponent component)
+  {
+    String[] weekdaysValue = getInvalidDaysOfWeek();
+    String weekdaysValues = null;
+    StringBuilder sb1 = new StringBuilder();
+    
+    String[] monthValue = getInvalidMonths();
+    String monthValues = null;
+    StringBuilder sb2 = new StringBuilder();
+    monthValues = sb2.toString();
+
+    try
+    {
+      JsonUtils.writeObject(sb1, weekdaysValue, false);
+      weekdaysValues = sb1.toString();
+      JsonUtils.writeObject(sb2, monthValue, false);
+      monthValues = sb2.toString();
+    }
+    catch (IOException e)
+    {
+      weekdaysValues  = "null";
+      monthValues  = "null";
+    }
+
+    return _getTrDateRestrictionValidator(context, component, WEEKDAY_MESSAGE_ID, MONTH_MESSAGE_ID, VALIDATOR_ID, weekdaysValues, monthValues);
+  }
+  
+  
+  public String getClientLibrarySource(
+   FacesContext context)
+  {
+    return null;
+  }
+  
+  private static String _getTrDateRestrictionValidator(
+      FacesContext context,
+      UIComponent component,
+      String weekId,
+      String monthId,
+      String defaultId,
+      String weekdaysValues,
+      String monthValues)
+  {
+    StringBuffer outBuffer = new StringBuffer(250);
+    outBuffer.append("new TrDateRestrictionValidator(");
+
+    FacesMessage weekMessage =
+      MessageFactory.getMessage(context, weekId,
+                                  new Object[]{"{0}", "{1}", "{2}"});
+
+    outBuffer.append("{WV:'");
+    outBuffer.append(XhtmlLafUtils.escapeJS(weekMessage.getDetail()));
+
+    outBuffer.append("',WV_S:'");
+    outBuffer.append(XhtmlLafUtils.escapeJS(weekMessage.getSummary()));    
+
+    FacesMessage monthMessage =
+      MessageFactory.getMessage(context, monthId,
+                                  new Object[]{"{0}", "{1}", "{2}"});
+
+    outBuffer.append("',MV:'");
+    outBuffer.append(XhtmlLafUtils.escapeJS(monthMessage.getDetail()));
+    outBuffer.append("',MV_S:'");
+    outBuffer.append(XhtmlLafUtils.escapeJS(monthMessage.getSummary()));  
+    
+    FacesMessage defaultMessage =
+      MessageFactory.getMessage(context, defaultId,
+                                  new Object[]{"{0}", "{1}"});
+
+    outBuffer.append("',D:'");
+    outBuffer.append(XhtmlLafUtils.escapeJS(defaultMessage.getDetail())); 
+    outBuffer.append("',D_S:'");
+    outBuffer.append(XhtmlLafUtils.escapeJS(defaultMessage.getSummary()));
+    outBuffer.append("'},null,0,");
+    outBuffer.append(weekdaysValues);
+    outBuffer.append(',');
+    outBuffer.append(monthValues);
+    outBuffer.append(',');
+    outBuffer.append(_getMapAsJson(_jsWeekDays));
+    outBuffer.append(',');
+    outBuffer.append(_getMapAsJson(_jsMonths));
+    outBuffer.append(")");
+
+    return outBuffer.toString();
+  }
+  
+  private static String _getMapAsJson(Map map)
+  {
+    StringBuilder sb = new StringBuilder();
+    try
+    {
+      JsonUtils.writeMap(sb, map, false);
+    }
+    catch (IOException e)
+    {
+      sb.append("null");
+    }
+    return sb.toString();
+  }
+  
+  private void _initJsDateMap()
+  {
+    _jsWeekDays = new HashMap<Integer, String>();
+    _jsWeekDays.put(Calendar.SUNDAY-1, "sun");
+    _jsWeekDays.put(Calendar.MONDAY-1, "mon");
+    _jsWeekDays.put(Calendar.TUESDAY-1, "tue");
+    _jsWeekDays.put(Calendar.WEDNESDAY-1, "wed");
+    _jsWeekDays.put(Calendar.THURSDAY-1, "thu");
+    _jsWeekDays.put(Calendar.FRIDAY-1, "fri");
+    _jsWeekDays.put(Calendar.SATURDAY-1, "sat");
+    
+    _jsMonths = new HashMap<Integer, String>();
+    _jsMonths.put(Calendar.JANUARY, "jan");
+    _jsMonths.put(Calendar.FEBRUARY, "feb");
+    _jsMonths.put(Calendar.MARCH, "mar");
+    _jsMonths.put(Calendar.APRIL, "apr");
+    _jsMonths.put(Calendar.MAY, "may");
+    _jsMonths.put(Calendar.JUNE, "jun");
+    _jsMonths.put(Calendar.JULY, "jul");
+    _jsMonths.put(Calendar.AUGUST, "aug");
+    _jsMonths.put(Calendar.SEPTEMBER, "sep");
+    _jsMonths.put(Calendar.OCTOBER, "oct");
+    _jsMonths.put(Calendar.NOVEMBER, "nov");
+    _jsMonths.put(Calendar.DECEMBER, "dec");
+  }
+  
+  private static final Collection<String> _IMPORT_NAMES = Collections.singletonList( "TrNumberConverter()" );
+  private static Map<Integer, String> _jsMonths = null;
+  private static Map<Integer, String> _jsWeekDays = null;
+}
\ No newline at end of file

Modified: incubator/adffaces/branches/stable-06-nov/trinidad/trinidad-impl/src/main/javascript/META-INF/adf/jsLibs/ColorFormat.js
URL: http://svn.apache.org/viewvc/incubator/adffaces/branches/stable-06-nov/trinidad/trinidad-impl/src/main/javascript/META-INF/adf/jsLibs/ColorFormat.js?view=diff&rev=471687&r1=471686&r2=471687
==============================================================================
--- incubator/adffaces/branches/stable-06-nov/trinidad/trinidad-impl/src/main/javascript/META-INF/adf/jsLibs/ColorFormat.js (original)
+++ incubator/adffaces/branches/stable-06-nov/trinidad/trinidad-impl/src/main/javascript/META-INF/adf/jsLibs/ColorFormat.js Mon Nov  6 02:45:03 2006
@@ -14,6 +14,176 @@
  * limitations under the License.
  */
 
+/**
+ * Construct a TrColorConverter with the specifed color pattern.
+ */
+function TrColorConverter(
+  pattern,
+  allowsTransparent,
+  msg_summary,
+  msg_detail,
+  patternsString)
+{
+  // for debugging
+  this._class = "TrColorConverter";
+  this._allowsTransparent = allowsTransparent;  
+  this._msg_summary = msg_summary; 
+  this._msg_detail = msg_detail;
+  this._patternsString = patternsString;     
+  
+  if (pattern != null)
+  {
+    if (typeof(pattern) == "string" ) 
+      pattern = [pattern];
+  }
+
+  this._pattern = pattern;
+}
+
+TrColorConverter.prototype = new TrConverter();
+TrColorConverter.prototype.getAsString = function(
+  formatColor)
+{
+  //pu: Return undefined string for an undefined Color.
+  if (formatColor == null)
+    return null;
+
+  // return localized transparent text for transparent color
+  if (formatColor.alpha == 0)
+    return _cfTrans;
+
+  var stringHolder = new Object();
+  stringHolder.value ="";
+  
+  var pattern = this._pattern;
+  if (typeof pattern != "string")
+    pattern = pattern[0];
+    
+  _cfoDoClumping(pattern,
+              _cfoSubformat,
+              formatColor,
+              stringHolder);
+  
+  return stringHolder.value;
+}
+
+/**
+ * Parses a String into a Color using the current object's pattern.  If the
+ * parsing fails, undefined will be returned.
+ */
+TrColorConverter.prototype.getAsObject  = function(
+  parseString,
+  label)
+{
+  // The following are from the javadoc for Number and DateTimeConverter, same applies to color....
+  // If the specified String is null, return a null. Otherwise, trim leading and trailing whitespace before proceeding.
+  // If the specified String - after trimming - has a zero length, return null.
+  if (parseString == null)
+    return null;
+    
+  parseString = TrUIUtils.trim(parseString);
+  if (parseString.length == 0)
+    return null
+
+  // return transparent color for localized transparent text
+  if (this._allowsTransparent && _cfTrans == parseString)
+    return new TrColor(0,0,0,0);
+     
+  var facesMessage = _createFacesMessage( this._msg_summary,
+                                          this._msg_detail,
+                                          label,
+                                          parseString,
+                                          this._patternsString);
+  
+  var pattern = this._pattern;                                       
+  if (typeof pattern == "string")
+  {
+    return this._rgbColorParseImpl(parseString,
+                              pattern,
+                              facesMessage);
+  }
+  else
+  { 
+    var i;
+    for (i = 0; i < pattern.length; i++)
+    {
+      try{
+        var color = this._rgbColorParseImpl(parseString,
+                                     pattern[i],
+                                     facesMessage);
+        return color;
+      }
+      catch (e)
+      {
+        // if we're not on the last pattern try the next one, 
+        // but if we're on the last pattern, throw the exception
+        if ( i == pattern.length-1)
+          throw e;
+      }
+    }
+  }
+}
+
+TrColorConverter.prototype._rgbColorParseImpl  = function(
+  parseString,
+  parsePattern,
+  msg)
+{
+  var parseContext = new Object();
+  parseContext.currIndex = 0;
+  parseContext.parseString = parseString;
+  parseContext.parseException = new TrConverterException(msg);
+  
+  var parsedColor = new TrColor(0x00, 0x00, 0x00);
+
+  // parse the color
+  if (_cfoDoClumping(parsePattern,
+                  _cfoSubParse,
+                  parseContext,
+                  parsedColor))
+  {
+    if (parseString.length != parseContext.currIndex)
+    {
+      throw parseContext.parseException;
+    }
+
+    return parsedColor;
+  }
+  else
+  {
+    // failure
+    throw parseContext.parseException;
+  }
+}
+
+function TrColor(
+  red,
+  green,
+  blue,
+  alpha)
+{
+  // for debugging
+  this._class = "TrColor";
+  
+  if (alpha == null)
+    alpha = 0xff;
+
+  this.red   = (red & 0xff);
+  this.green = (green & 0xff);
+  this.blue  = (blue & 0xff);
+  this.alpha = (alpha & 0xff);
+}
+
+TrColor.prototype.toString = function()
+{
+  return "rgba(" + this.red + 
+         "," + this.green + 
+         "," + this.blue + 
+         "," + this.alpha + ")";
+}
+
+
+
 
 // External variables used:
 //  _cfTrans    - the localized text for transparent colors
@@ -150,6 +320,7 @@
   stringHolder
   )
 {    
+
   // string to append to the toString
   var appendString = null;
   
@@ -447,172 +618,4 @@
   }
   
   return stringNumber;
-}
-
-/**
- * Construct a TrColorConverter with the specifed color pattern.
- */
-function TrColorConverter(
-  pattern,
-  allowsTransparent,
-  msg_summary,
-  msg_detail,
-  patternsString)
-{
-  // for debugging
-  this._class = "TrColorConverter";
-  this._allowsTransparent = allowsTransparent;  
-  this._msg_summary = msg_summary; 
-  this._msg_detail = msg_detail;
-  this._patternsString = patternsString;     
-  
-  if (pattern != null)
-  {
-    if (typeof(pattern) == "string" ) 
-      pattern = [pattern];
-  }
-
-  this._pattern = pattern;
-}
-
-TrColorConverter.prototype = new TrConverter();
-TrColorConverter.prototype.getAsString = function(
-  formatColor)
-{
-  //pu: Return undefined string for an undefined Color.
-  if (formatColor == null)
-    return null;
-
-  // return localized transparent text for transparent color
-  if (formatColor.alpha == 0)
-    return _cfTrans;
-
-  var stringHolder = new Object();
-  stringHolder.value ="";
-  
-  var pattern = this._pattern;
-  if (typeof pattern != "string")
-    pattern = pattern[0];
-    
-  _cfoDoClumping(pattern,
-              _cfoSubformat,
-              formatColor,
-              stringHolder);
-  
-  return stringHolder.value;
-}
-
-/**
- * Parses a String into a Color using the current object's pattern.  If the
- * parsing fails, undefined will be returned.
- */
-TrColorConverter.prototype.getAsObject  = function(
-  parseString,
-  label)
-{
-  // The following are from the javadoc for Number and DateTimeConverter, same applies to color....
-  // If the specified String is null, return a null. Otherwise, trim leading and trailing whitespace before proceeding.
-  // If the specified String - after trimming - has a zero length, return null.
-  if (parseString == null)
-    return null;
-    
-  parseString = TrUIUtils.trim(parseString);
-  if (parseString.length == 0)
-    return null
-
-  // return transparent color for localized transparent text
-  if (this._allowsTransparent && _cfTrans == parseString)
-    return new TrColor(0,0,0,0);
-     
-  var facesMessage = _createFacesMessage( this._msg_summary,
-                                          this._msg_detail,
-                                          label,
-                                          parseString,
-                                          this._patternsString);
-  
-  var pattern = this._pattern;                                       
-  if (typeof pattern == "string")
-  {
-    return this._rgbColorParseImpl(parseString,
-                              pattern,
-                              facesMessage);
-  }
-  else
-  { 
-    var i;
-    for (i = 0; i < pattern.length; i++)
-    {
-      try{
-        var color = this._rgbColorParseImpl(parseString,
-                                     pattern[i],
-                                     facesMessage);
-        return color;
-      }
-      catch (e)
-      {
-        // if we're not on the last pattern try the next one, 
-        // but if we're on the last pattern, throw the exception
-        if ( i == pattern.length-1)
-          throw e;
-      }
-    }
-  }
-}
-
-TrColorConverter.prototype._rgbColorParseImpl  = function(
-  parseString,
-  parsePattern,
-  msg)
-{
-  var parseContext = new Object();
-  parseContext.currIndex = 0;
-  parseContext.parseString = parseString;
-  parseContext.parseException = new TrConverterException(msg);
-  
-  var parsedColor = new TrColor(0x00, 0x00, 0x00);
-
-  // parse the color
-  if (_cfoDoClumping(parsePattern,
-                  _cfoSubParse,
-                  parseContext,
-                  parsedColor))
-  {
-    if (parseString.length != parseContext.currIndex)
-    {
-      throw parseContext.parseException;
-    }
-
-    return parsedColor;
-  }
-  else
-  {
-    // failure
-    throw parseContext.parseException;
-  }
-}
-
-function TrColor(
-  red,
-  green,
-  blue,
-  alpha)
-{
-  // for debugging
-  this._class = "TrColor";
-  
-  if (alpha == null)
-    alpha = 0xff;
-
-  this.red   = (red & 0xff);
-  this.green = (green & 0xff);
-  this.blue  = (blue & 0xff);
-  this.alpha = (alpha & 0xff);
-}
-
-TrColor.prototype.toString = function()
-{
-  return "rgba(" + this.red + 
-         "," + this.green + 
-         "," + this.blue + 
-         "," + this.alpha + ")";
 }

Modified: incubator/adffaces/branches/stable-06-nov/trinidad/trinidad-impl/src/main/javascript/META-INF/adf/jsLibs/CoreFormat.js
URL: http://svn.apache.org/viewvc/incubator/adffaces/branches/stable-06-nov/trinidad/trinidad-impl/src/main/javascript/META-INF/adf/jsLibs/CoreFormat.js?view=diff&rev=471687&r1=471686&r2=471687
==============================================================================
--- incubator/adffaces/branches/stable-06-nov/trinidad/trinidad-impl/src/main/javascript/META-INF/adf/jsLibs/CoreFormat.js (original)
+++ incubator/adffaces/branches/stable-06-nov/trinidad/trinidad-impl/src/main/javascript/META-INF/adf/jsLibs/CoreFormat.js Mon Nov  6 02:45:03 2006
@@ -93,24 +93,30 @@
   label
 )
 {
-
-  // This should probably do more than call decimalParse!
-  // the following line is needed because what's being passed
-  // into the validator is a number, and _decimalParse expects a string.
-  numberString = "" + value;
-  try
-  {
-    return _decimalParse(numberString, 
-                       this._messages,
-                       this._maxPrecision,
-                       this._maxScale,
-                       this._maxValue,
-                       this._minValue,
-                       label);
+  string = "" + value;
+  numberValue = parseFloat(string);
+  
+  if(numberValue >= this._minValue && numberValue <= this._maxValue)
+  {
+    return string;
   }
-  catch (e)
+  else
   {
-    throw new TrValidatorException(e.getFacesMessage());
+    if(numberValue>this._maxValue)
+    {
+      facesMessage = _createFacesMessage(this._messages[(TrNumberConverter.LV+ '_S')],
+                                       this._messages[TrNumberConverter.LV],
+                                        label,
+                                        string);
+    }
+    else
+    {
+      facesMessage = _createFacesMessage(this._messages[(TrNumberConverter.MV+ '_S')],
+                                       this._messages[TrNumberConverter.MV],
+                                        label,
+                                        string);
+    }
+    throw new TrConverterException(facesMessage);
   }
 }
 
@@ -139,9 +145,6 @@
 )
 {
 
-  // This should probably do more than call decimalParse!
-  // the following line is needed because what's being passed
-  // into the validator is a number, and _decimalParse expects a string.
   string = "" + value;
   length = string.length;
   
@@ -202,6 +205,81 @@
   
 }
 
+function TrDateRestrictionValidator(
+  messages,
+  maxPrecision,
+  maxScale,
+  weekdaysValue,
+  monthValue,
+  weekdaysMap,
+  monthMap)
+{
+  this._messages = messages;
+  this._maxPrecision = maxPrecision;
+  this._maxScale = maxScale;
+  this._weekdaysValue = weekdaysValue;
+  this._monthValue = monthValue;
+  this._weekdaysMap = weekdaysMap;
+  this._monthMap = monthMap;
+
+  // for debugging
+  this._class = "TrDateRestrictionValidator";
+}
+
+// weekday value
+TrDateRestrictionValidator.WV = 'WV';
+// month value
+TrDateRestrictionValidator.MV  = 'MV';
+// default
+TrDateRestrictionValidator.D   = 'D';
+
+TrDateRestrictionValidator.prototype = new TrValidator();
+TrDateRestrictionValidator.prototype.validate  = function(
+  value,
+  label
+)
+{
+
+  submittedDay = value.getDay();
+  weekDaysArray = eval(this._weekdaysValue);
+  if(weekDaysArray)
+  {
+  	var dayString = this._weekdaysMap[submittedDay];
+  	for(var i = 0; i < weekDaysArray.length; ++i)
+  	{
+  		if(weekDaysArray[i].toLowerCase() == dayString)
+  		{
+        facesMessage = _createFacesMessage(this._messages[(TrDateRestrictionValidator.WV+ '_S')],
+                                       this._messages[TrDateRestrictionValidator.WV],
+                                        label,
+                                        ""+value,
+                                        dayString);
+        throw new TrConverterException(facesMessage);
+  		}
+  	}
+  }
+  
+  submittedMonth = value.getMonth();
+  monthArray = eval(this._monthValue);
+  if(monthArray)
+  {
+  	var monthString = this._monthMap[submittedMonth];
+  	for(var i = 0; i < monthArray.length; ++i)
+  	{
+  		if(monthArray[i].toLowerCase() == monthString)
+  		{
+        facesMessage = _createFacesMessage(this._messages[(TrDateRestrictionValidator.MV+ '_S')],
+                                       this._messages[TrDateRestrictionValidator.MV],
+                                        label,
+                                        ""+value,
+                                        monthString);
+        throw new TrConverterException(facesMessage);
+  		}
+  	}
+  }
+	return value;
+}
+
 function _decimalParse(
   numberString,
   messages,
@@ -269,38 +347,37 @@
       if (sepIndex != -1)
       {
         integerDigits = sepIndex;
-        fractionDigits = numberString.length - sepIndex -1;
+        fractionDigits = parseInt(numberString.length - parseInt(sepIndex -1));
       }
       
       var messageKey;
-      
-      if ((maxValue != (void 0)) &&
+      if ((maxValue != null) &&
           (result  > maxValue))
       {
         messageKey = TrNumberConverter.LV;
       }
-      else if ((minValue != (void 0)) &&
+      else if ((minValue != null) &&
                (result  < minValue))
       {
         messageKey = TrNumberConverter.MV;
       }
-      else if ((maxPrecision != (void 0)) &&
+      else if ((maxPrecision != null) &&
                (integerDigits  > maxPrecision))
       {
         messageKey = TrNumberConverter.LID;
       }
-      else if ((maxScale != (void 0)) &&
+
+      else if ((maxScale != null) &&
                (fractionDigits  > maxScale))
       {
         messageKey = TrNumberConverter.LFD;
       }
 
-      if (messageKey != (void 0))
+      if (messageKey != null)
       {
         var messages = messages;
-        
-        if ((messages == (void 0)) ||
-            (messages[messageKey] == (void 0)))
+        if ((messages == null) ||
+            (messages[messageKey] == null))
           throw  new TrConverterException(null, null, "Conversion failed, but no appropriate message found");  // default error format
         else
         {