Hi Yuan,
Unfortunately, the mere mention of a need for something does not imply
its current availability :-) I wrote the Activities and Places doc and
really should have left GIN out of it for the time being. The root
issue is that GIN does not have a way to createMeA(Foo.class), as such
a method might impede the GWT compiler's ability to do whole program
optimization as it does today.
Thus, the only way to implement ActivityMapper.getActivity() or
PlaceHistoryMapper.getPlace() using GIN would be to return an instance
of an Activity or Place that has previously been instantiated by GIN
and injected into to the mapper class. In other words, each Activity
and Place would have to be a singleton, much like Presenter and Place
are in the gwt-presenter framework. But in GWT 2.1, Activity and Place
are designed to be disposable, not singletons, which leaves us with
the need for "if (place instanceof SomePlace) return new
SomePlace()..." It seems like it would be possible to create
SomeActivityFactory and SomePlaceFactory classes bound as singletons
in GIN gwt-presenter style, which in turn provide newly-created
instances of SomeActivity and SomePlace, but that requires lots of
boilerplate code...
As for the onerous chain of if statements (which is sounding less
onerous all the while), it could be created at compile time using a
GWT generator, just as GWT's PlaceHistoryMapperGenerator generates a
sub-class of AbstractPlaceHistoryMapper using @WithTokenizers from
your PlaceHistoryMapper interface. The advantage of creating your own
PlaceHistoryMapper base class and generator would be the ability to
pass a ClientFactory or factory-managed objects to newly constructed
Places. That is, the generated code could do
if (token.startsWith("SomePlace"))
return new SomePlace(clientFactory, token);
else if (token.startsWith("AnotherPlace"))
return new AnotherPlace(clientFactory, token);
...
Hope that helps someone...
The GWT team is working hard to make this easier in a future point release.
/dmc
On Thu, Oct 21, 2010 at 3:09 AM, Yuan <[email protected]> wrote:
> can't use gin at ActivityMapper? somehower, on the HelloMVP
> AppActivityMapper,
> it says
>
> public Activity getActivity(Place place) {
> // This is begging for GIN
> if (place instanceof HelloPlace)
> return new HelloActivity((HelloPlace) place,
> clientFactory);
> else if (place instanceof GoodbyePlace)
> return new GoodbyeActivity((GoodbyePlace) place,
> clientFactory);
>
> return null;
> }
>
> On Oct 20, 3:22 pm, Thomas Broyer <[email protected]> wrote:
>> On 20 oct, 11:42, Sebastian Beigel <[email protected]> wrote:
>>
>> > Hi,
>>
>> > I'm looking at 2.1 (RC1) for the first time right now and I try to
>> > refactor the hellomvp sample to use GIN.
>>
>> > Unfortunately, I have some problems with the places -> activities
>> > mapping. The doc says "A better way to implement the chain of nested
>> > ifs would be with a GIN module." and the code is commented "Map each
>> > Place to its corresponding Activity. This would be a great use for
>> > GIN.".
>>
>> > I agree, but I don't really know how to do this mapping :) Has anyone
>> > refactored this code to use GIN?
>>
>> You just can't actually. What could work is using a Ginjector as the
>> factory of a PlaceHistoryMapperWithFactory, but for ActivityMapper
>> this is not possible (it could be by adding a code generator using a
>> factory of activity factories, similar to the factory of place
>> tokenizers (which are kind of factories for places) for
>> PlaceHistoryMapperWithFactory).
>> I wrote an code generator for ActivityMapper some time ago <http://gwt-
>> code-reviews.appspot.com/845802/show> it won't do what you're asking
>> for but could probably be used as a basis for it. But you'd first have
>> to decide how to model a "factory of activities" that would be
>> returned by your "Ginjector as a factory for
>> ActivityMapperWithFactory".
>
> --
> You received this message because you are subscribed to the Google Groups
> "Google Web Toolkit" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to
> [email protected].
> For more options, visit this group at
> http://groups.google.com/group/google-web-toolkit?hl=en.
>
>
--
David Chandler
Developer Programs Engineer, Google Web Toolkit
http://googlewebtoolkit.blogspot.com/
--
You received this message because you are subscribed to the Google Groups
"Google Web Toolkit" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/google-web-toolkit?hl=en.