Sorry, I meant for those questions to be an aspect of rhetoric instead of 
trying to write out some sort of requirement idea or issue.

Whatever the case, your answer #3 is interesting... why use a custom type with 
encoding/decoding when the current SQL Date, Time, and Timestamp do so just 
fine (as long as you use it's default toString and valueOf methods, with 
TimeZone adjustment because the server will do that because we don't 
distinguish between user input and system generated text). It might actually be 
helpful to change how system generated object Strings are done, ie those not 
meant for human consumption, and for dates/times we could use an absolute 
measure (like the millis from epoch) so that we don't have to know which 
timezone the user is in to find the right record in the database.

I'm not sure if that's a good idea, but thought I'd throw it out there...

-David


On May 13, 2010, at 10:18 AM, Adrian Crum wrote:

> 1. I don't know that it is official - it's more common sense: If code exists 
> to convert an object from one type to another, why write more code that does 
> the same thing?
> 
> 2. I don't know. We would have to look for similar code.
> 
> 3. The best thing to do would be to use stronger data typing. An HTTP (or 
> URL) parameter should be a type - instead of using a String. If we had a type 
> for that, then all kinds of convenient behavior could be attached to it (like 
> encoding/decoding, etc).
> 
> -Adrian
> 
> On 5/13/2010 9:09 AM, David E Jones wrote:
>> 
>> Which brings up some questions:
>> 
>> 1. is there an "official" way to convert types that should be used 
>> everywhere (I think that's what you're saying)?
>> 2. how many things are not using that?
>> 3. does the official way handle Object ->  String conversions for human 
>> versus machine (ie HTTP parameter) use?
>> 
>> -David
>> 
>> 
>> On May 13, 2010, at 8:54 AM, Adrian Crum wrote:
>> 
>>> Just an observation, not commenting on this commit specifically:
>>> 
>>> The conversion to String should use the ObjectType.simpleTypeConvert(...) 
>>> method - there are a lot of conversions being missed in this code.
>>> 
>>> -Adrian
>>> 
>>> On 5/13/2010 1:32 AM, jone...@apache.org wrote:
>>>> Author: jonesde
>>>> Date: Thu May 13 08:32:09 2010
>>>> New Revision: 943843
>>>> 
>>>> URL: http://svn.apache.org/viewvc?rev=943843&view=rev
>>>> Log:
>>>> Made widget link parameter treatment more consistent; before if you 
>>>> specified a paramaeter name without a from-field then it wouldn't convert 
>>>> the object according to locale; now it does the same thing no matter where 
>>>> the object comes from (ie explicit from-field or implied by the parameter 
>>>> name); this fixes a timeZone inconsistency that causes links with 
>>>> time/timestamp parameters to not work
>>>> 
>>>> Modified:
>>>>     ofbiz/trunk/framework/widget/src/org/ofbiz/widget/WidgetWorker.java
>>>> 
>>>> Modified: 
>>>> ofbiz/trunk/framework/widget/src/org/ofbiz/widget/WidgetWorker.java
>>>> URL: 
>>>> http://svn.apache.org/viewvc/ofbiz/trunk/framework/widget/src/org/ofbiz/widget/WidgetWorker.java?rev=943843&r1=943842&r2=943843&view=diff
>>>> ==============================================================================
>>>> --- ofbiz/trunk/framework/widget/src/org/ofbiz/widget/WidgetWorker.java 
>>>> (original)
>>>> +++ ofbiz/trunk/framework/widget/src/org/ofbiz/widget/WidgetWorker.java 
>>>> Thu May 13 08:32:09 2010
>>>> @@ -30,6 +30,7 @@ import javax.servlet.ServletContext;
>>>>  import javax.servlet.http.HttpServletRequest;
>>>>  import javax.servlet.http.HttpServletResponse;
>>>> 
>>>> +import org.ofbiz.base.util.Debug;
>>>>  import org.ofbiz.base.util.StringUtil;
>>>>  import org.ofbiz.base.util.UtilDateTime;
>>>>  import org.ofbiz.base.util.UtilGenerics;
>>>> @@ -316,44 +317,41 @@ public class WidgetWorker {
>>>>          public String getValue(Map<String, Object>   context) {
>>>>              if (this.value != null) {
>>>>                  return this.value.expandString(context);
>>>> -            } else if (this.fromField != null&&   
>>>> this.fromField.get(context) != null) {
>>>> -                Object retVal = this.fromField.get(context);
>>>> +            }
>>>> +
>>>> +            Object retVal = null;
>>>> +            if (this.fromField != null&&   this.fromField.get(context) != 
>>>> null) {
>>>> +                retVal = this.fromField.get(context);
>>>> +            } else {
>>>> +                retVal = context.get(this.name);
>>>> +            }
>>>> +
>>>> +            if (retVal != null) {
>>>> +                TimeZone timeZone = (TimeZone) context.get("timeZone");
>>>> +                if (timeZone == null) timeZone = TimeZone.getDefault();
>>>> 
>>>> -                if (retVal != null) {
>>>> -                    TimeZone timeZone = (TimeZone) 
>>>> context.get("timeZone");
>>>> -                    if (timeZone == null) timeZone = 
>>>> TimeZone.getDefault();
>>>> -
>>>> -                    String returnValue = null;
>>>> -                    // format string based on the user's time zone (not 
>>>> locale because these are parameters)
>>>> -                    if (retVal instanceof Double || retVal instanceof 
>>>> Float || retVal instanceof BigDecimal) {
>>>> -                        returnValue = retVal.toString();
>>>> -                    } else if (retVal instanceof java.sql.Date) {
>>>> -                        DateFormat df = 
>>>> UtilDateTime.toDateFormat(UtilDateTime.DATE_FORMAT, timeZone, null);
>>>> -                        returnValue = df.format((java.util.Date) retVal);
>>>> -                    } else if (retVal instanceof java.sql.Time) {
>>>> -                        DateFormat df = 
>>>> UtilDateTime.toTimeFormat(UtilDateTime.TIME_FORMAT, timeZone, null);
>>>> -                        returnValue = df.format((java.util.Date) retVal);
>>>> -                    } else if (retVal instanceof java.sql.Timestamp) {
>>>> -                        DateFormat df = 
>>>> UtilDateTime.toDateTimeFormat(UtilDateTime.DATE_TIME_FORMAT, timeZone, 
>>>> null);
>>>> -                        returnValue = df.format((java.util.Date) retVal);
>>>> -                    } else if (retVal instanceof java.util.Date) {
>>>> -                        DateFormat df = 
>>>> UtilDateTime.toDateTimeFormat("EEE MMM dd hh:mm:ss z yyyy", timeZone, 
>>>> null);
>>>> -                        returnValue = df.format((java.util.Date) retVal);
>>>> -                    } else {
>>>> -                        returnValue = retVal.toString();
>>>> -                    }
>>>> -                    return returnValue;
>>>> +                String returnValue = null;
>>>> +                // format string based on the user's time zone (not 
>>>> locale because these are parameters)
>>>> +                if (retVal instanceof Double || retVal instanceof Float 
>>>> || retVal instanceof BigDecimal) {
>>>> +                    returnValue = retVal.toString();
>>>> +                } else if (retVal instanceof java.sql.Date) {
>>>> +                    DateFormat df = 
>>>> UtilDateTime.toDateFormat(UtilDateTime.DATE_FORMAT, timeZone, null);
>>>> +                    returnValue = df.format((java.util.Date) retVal);
>>>> +                } else if (retVal instanceof java.sql.Time) {
>>>> +                    DateFormat df = 
>>>> UtilDateTime.toTimeFormat(UtilDateTime.TIME_FORMAT, timeZone, null);
>>>> +                    returnValue = df.format((java.util.Date) retVal);
>>>> +                } else if (retVal instanceof java.sql.Timestamp) {
>>>> +                    DateFormat df = 
>>>> UtilDateTime.toDateTimeFormat(UtilDateTime.DATE_TIME_FORMAT, timeZone, 
>>>> null);
>>>> +                    returnValue = df.format((java.util.Date) retVal);
>>>> +                } else if (retVal instanceof java.util.Date) {
>>>> +                    DateFormat df = UtilDateTime.toDateTimeFormat("EEE 
>>>> MMM dd hh:mm:ss z yyyy", timeZone, null);
>>>> +                    returnValue = df.format((java.util.Date) retVal);
>>>>                  } else {
>>>> -                    return null;
>>>> +                    returnValue = retVal.toString();
>>>>                  }
>>>> +                return returnValue;
>>>>              } else {
>>>> -                // as a last chance try finding a context field with the 
>>>> key of the name field
>>>> -                Object obj = context.get(this.name);
>>>> -                if (obj != null) {
>>>> -                    return obj.toString();
>>>> -                } else {
>>>> -                    return null;
>>>> -                }
>>>> +                return null;
>>>>              }
>>>>          }
>>>>      }
>>>> 
>>>> 
>>>> 
>> 
>> 

Reply via email to