You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by Dmitry Gusev <dm...@gmail.com> on 2008/10/17 10:44:16 UTC

Request for introducing java.util.Date type coercion out-of-the-box

It would be great to implement Date type coertion out-of-the-box through it
milliseconds representation.

Currently I have to contribute the coertion to my app module:

    public static void
contributeTypeCoercer(Configuration<CoercionTuple<Long, Date>>
configuration) {
        Coercion<Long, Date> coercion = new Coercion<Long, Date>() {
            public Date coerce(Long input) {
                Calendar calendar = Calendar.getInstance();
                calendar.setTimeInMillis(input);
                return calendar.getTime();
            }
        };

        configuration.add(new CoercionTuple<Long, Date>(Long.class,
Date.class,
                coercion));
    }


Passing parameters to pagelink component example:

<t:pagelink t:id="edit" page="curriculum/holidays/edit"
context="holiday.date.time">Edit</t:pagelink>

---

public class Holiday {
...
    public Date getDate() {
        return date;
    }
    public void setDate(Date date) {
        this.date = date;
    }
...
}

---

And on the Edit page activation/deactivation methods looks like:

    public void onActivate(Date date) {
        this.date = date;
        // ...
    }

    public Date onPassivate() {
        return date;
    }

---

Having Date type coercion support out-of-the-box will let me pass Date
parameters directly (without invoking Date.getTime() on the actual parameter
instance).



<de...@tapestry.apache.org>--
С уважением,
Дмитрий Гусев

Re: Request for introducing java.util.Date type coercion out-of-the-box

Posted by Dmitry Gusev <dm...@gmail.com>.
On Fri, Oct 17, 2008 at 18:20, Howard Lewis Ship <hl...@gmail.com> wrote:

> Date conversions in Java are hugely ugly.


But this doesn't make java.util.Date to be unused, isn't it? We're still use
Date type whether its ugly or not.


> Are you sure there isn't a
> time zone issue involved with this coercion?


According to Javadoc (see below) it always returns the same value for all
timezones, since its GMT.

    /**
     * Returns the number of milliseconds since January 1, 1970, 00:00:00
GMT
     * represented by this <tt>Date</tt> object.
     *
     * @return  the number of milliseconds since January 1, 1970, 00:00:00
GMT
     *          represented by this date.
     */
    public long getTime() {
        return getTimeImpl();
    }

Are you sure you want to
> see a large number in your URL rather than something that looks like a
> Date?


Making java.util.Date looks like a date (i.e. 01/02/2008) will confuse -- is
this January, 2nd or February 1st? Introducing special chars to URL (/, :, '
', +, etc.) will cause it to be escaped.

So I don't see any other options rather than numbers, do you? I'd like to
see your choise -- how're you doing this? I mean, you're using Dates, don't
you?

The number, whether it ugly or not, it uniform. And what it the URL? Its
Uniform Resource Locator, and its GET parameters are just a transport, so
let them be uniform too. Thats my point of view.

Am I missed somethig?


>
>
> On Fri, Oct 17, 2008 at 1:44 AM, Dmitry Gusev <dm...@gmail.com>
> wrote:
> > It would be great to implement Date type coertion out-of-the-box through
> it
> > milliseconds representation.
> >
> > Currently I have to contribute the coertion to my app module:
> >
> >    public static void
> > contributeTypeCoercer(Configuration<CoercionTuple<Long, Date>>
> > configuration) {
> >        Coercion<Long, Date> coercion = new Coercion<Long, Date>() {
> >            public Date coerce(Long input) {
> >                Calendar calendar = Calendar.getInstance();
> >                calendar.setTimeInMillis(input);
> >                return calendar.getTime();
> >            }
> >        };
> >
> >        configuration.add(new CoercionTuple<Long, Date>(Long.class,
> > Date.class,
> >                coercion));
> >    }
> >
> >
> > Passing parameters to pagelink component example:
> >
> > <t:pagelink t:id="edit" page="curriculum/holidays/edit"
> > context="holiday.date.time">Edit</t:pagelink>
> >
> > ---
> >
> > public class Holiday {
> > ...
> >    public Date getDate() {
> >        return date;
> >    }
> >    public void setDate(Date date) {
> >        this.date = date;
> >    }
> > ...
> > }
> >
> > ---
> >
> > And on the Edit page activation/deactivation methods looks like:
> >
> >    public void onActivate(Date date) {
> >        this.date = date;
> >        // ...
> >    }
> >
> >    public Date onPassivate() {
> >        return date;
> >    }
> >
> > ---
> >
> > Having Date type coercion support out-of-the-box will let me pass Date
> > parameters directly (without invoking Date.getTime() on the actual
> parameter
> > instance).
> >
> >
> >
> > <de...@tapestry.apache.org>--
> > С уважением,
> > Дмитрий Гусев
> >
>
>
>
> --
> Howard M. Lewis Ship
>
> Creator Apache Tapestry and Apache HiveMind
>



-- 
С уважением,
Дмитрий Гусев

Re: Request for introducing java.util.Date type coercion out-of-the-box

Posted by Howard Lewis Ship <hl...@gmail.com>.
Date conversions in Java are hugely ugly.  Are you sure there isn't a
time zone issue involved with this coercion?  Are you sure you want to
see a large number in your URL rather than something that looks like a
Date?

On Fri, Oct 17, 2008 at 1:44 AM, Dmitry Gusev <dm...@gmail.com> wrote:
> It would be great to implement Date type coertion out-of-the-box through it
> milliseconds representation.
>
> Currently I have to contribute the coertion to my app module:
>
>    public static void
> contributeTypeCoercer(Configuration<CoercionTuple<Long, Date>>
> configuration) {
>        Coercion<Long, Date> coercion = new Coercion<Long, Date>() {
>            public Date coerce(Long input) {
>                Calendar calendar = Calendar.getInstance();
>                calendar.setTimeInMillis(input);
>                return calendar.getTime();
>            }
>        };
>
>        configuration.add(new CoercionTuple<Long, Date>(Long.class,
> Date.class,
>                coercion));
>    }
>
>
> Passing parameters to pagelink component example:
>
> <t:pagelink t:id="edit" page="curriculum/holidays/edit"
> context="holiday.date.time">Edit</t:pagelink>
>
> ---
>
> public class Holiday {
> ...
>    public Date getDate() {
>        return date;
>    }
>    public void setDate(Date date) {
>        this.date = date;
>    }
> ...
> }
>
> ---
>
> And on the Edit page activation/deactivation methods looks like:
>
>    public void onActivate(Date date) {
>        this.date = date;
>        // ...
>    }
>
>    public Date onPassivate() {
>        return date;
>    }
>
> ---
>
> Having Date type coercion support out-of-the-box will let me pass Date
> parameters directly (without invoking Date.getTime() on the actual parameter
> instance).
>
>
>
> <de...@tapestry.apache.org>--
> С уважением,
> Дмитрий Гусев
>



-- 
Howard M. Lewis Ship

Creator Apache Tapestry and Apache HiveMind