[gradebook2-dev] gb2 and dynamic localization

John Bush john.bush at rsmart.com
Wed Apr 27 10:12:21 PDT 2011


Please see https://jira.sakaiproject.org/browse/GRBK-933 for a summary
of this work.  Right now its available in the following branch:
https://source.sakaiproject.org/contrib/gradebook2/branches/GRBK-933

I welcome feedback and code review as you have time.

Thanks!

On Mon, Apr 18, 2011 at 10:16 AM, Thomas Amsler <tpamsler at ucdavis.edu> wrote:
> This looks good. Great Job! In order for us to merge your work into
> trunk, we need a patch. So it's up to you if you want to create a
> branch or work on a trunk copy. So please create a GRBK tickeet and
> provide as much information as possible. Also please document the
> architecture changes. Once the JIRA and the patch is ready, we can
> perform a code review.
>
> Thank you.
>
> -- Thomas
>
> On Mon, Apr 18, 2011 at 9:52 AM, John Bush <john.bush at rsmart.com> wrote:
>> Ok I have everything working now.  See my little demo here:
>> http://www.youtube.com/watch?v=xmUVDDGYTdk
>>
>> It will show you how it works and briefly go over the design.
>> Hopefully, this is of general interest to gb2 users.  What would the
>> next steps be towards integrating this work into gb2 core.  Perhaps, a
>> JIRA and branch where I can submit the changes for a code review ?
>>
>> On Fri, Apr 15, 2011 at 3:53 PM, Thomas Amsler <tpamsler at ucdavis.edu> wrote:
>>> Good find. GWT is pretty amazing. I am looking forward to seeing your solution.
>>> -- Thomas
>>>
>>> On Thu, Apr 14, 2011 at 11:53 PM, John Bush <john.bush at rsmart.com> wrote:
>>>> ok, this is getting more interesting, apparently GWT deferfed binding
>>>> has a way to plug a java code generator into the framework.  If I'm
>>>> understanding this correctly, that means the calls to
>>>> GWT.create(I18nConstants.class) I could catch and generate the Impl
>>>> using the GeneratorContext, which appears to be a reflection
>>>> implementation of sorts.  Ok, GWT is freakin cool.
>>>>
>>>> I think this might actually work.  So basically I catch these create()
>>>> calls with one of these generators, and then generate a impl that
>>>> makes calls the dictionary which avoid having to maintain anything
>>>> other than the interface.  Then I just make a server side component
>>>> that builds up the javascript to populate the Dictionary.  Very cool,
>>>> I think this might work, will try it out tomorrow.
>>>>
>>>> see http://code.google.com/webtoolkit/doc/latest/DevGuideCodingBasicsDeferred.html
>>>>
>>>>
>>>> On Thu, Apr 14, 2011 at 11:09 PM, John Bush <john.bush at rsmart.com> wrote:
>>>>> Ok, missed this email, but just confirmed the bytecode manipulation
>>>>> and reflection are not part of the GWT client side support. So that
>>>>> rules out any fancy stuff and confirms my dislike for javascript, but
>>>>> I digress...
>>>>>
>>>>> I tried implementing the I18nConstants interface to delegate to the
>>>>> Dictionary and confirmed this works:
>>>>>
>>>>> public class I18nConstantsImpl implements I18nConstants {
>>>>>    Dictionary i18n;
>>>>>    public I18nConstantsImpl(){
>>>>>         i18n = Dictionary.getDictionary("I18nConstants");
>>>>>
>>>>>
>>>>>    }
>>>>>    public String actionActor() {
>>>>>        return i18n.get("actionActor");
>>>>>    }
>>>>>
>>>>>    public String actionDateFieldLabel() {
>>>>>        return i18n.get("actionActor");
>>>>>    }
>>>>>
>>>>> Then in the host html file, which is GradebookApplication.html you
>>>>> need to define the Dictionary like this:
>>>>>
>>>>>        <script>var I18nConstants = {
>>>>>     actionActor: "gwt rocks",
>>>>>         actionDateFieldLabel: "gwt rocks",
>>>>>         actionDescriptionFieldLabel:"gwt rocks",
>>>>>         actionDetails: "gwt rocks",
>>>>>         actionEntityFieldLabel: "gwt rocks"
>>>>>
>>>>> That's the bit I would replace with a call back to the server.  The
>>>>> issue is without bytecode or reflection dynamically implementing the
>>>>> I18nConstants interface is not going to be possible which would
>>>>> require devs to maintain the interface and impl, which I don't like.
>>>>> Need to think about this a little more, unless others have any idea. I
>>>>> really would like to avoid a giant refactor that doesn't  seem
>>>>> friendly, and would lead me to just push back on the requirements that
>>>>> are causing me to evaluate this in the first place.
>>>>>
>>>>>
>>>>>
>>>>> On Thu, Apr 14, 2011 at 7:29 PM, Thomas Amsler <tpamsler at ucdavis.edu> wrote:
>>>>>> See inline comments bellow:
>>>>>>
>>>>>> On Thu, Apr 14, 2011 at 5:27 PM, John Bush <john.bush at rsmart.com> wrote:
>>>>>>> I've been looking into a way to make gb2 integrate with the new
>>>>>>> dynamic loading of bundle data available in 2.8.  See
>>>>>>> https://jira.sakaiproject.org/browse/SAK-18678.
>>>>>>>
>>>>>>> I see GWT has another method other than the I18nConstants approach
>>>>>>> that allows for server side localization:
>>>>>>> http://google-web-toolkit.googlecode.com/svn/javadoc/latest/com/google/gwt/i18n/client/Dictionary.html
>>>>>>
>>>>>> Do you just want to use this approach on the server side? You mention
>>>>>> above " ...allows for server side localization".
>>>>>>
>>>>>>>
>>>>>>> >From looking at the code switching this out touch almost everything.
>>>>>>
>>>>>> We could try a refactor and see how bad it is.
>>>>>>
>>>>>>> So here's my crazy idea.
>>>>>>>
>>>>>>> Use javassist or some other byte code library to get around the fact
>>>>>>> that this call can't really be extended:
>>>>>>> (I18nMessages) GWT.create(I18nMessages.class);
>>>>>>>
>>>>>> Whatever tool/library you use, it would have to be able to build
>>>>>> within the GWT JRE emulation subset:
>>>>>>
>>>>>> http://code.google.com/webtoolkit/doc/latest/RefJreEmulation.html
>>>>>>
>>>>>>
>>>>>>> So basically I'd augment the class that GWT is generating and throw
>>>>>>> away what it does and instead delegate all the calls to the
>>>>>>> Dictionary, which can then look them up from the server.
>>>>>>>
>>>>>>> Crazy or possible, what do you think?  Going to play around with it a
>>>>>>> little tomorrow.
>>>>>>>
>>>>>>> --
>>>>>>> John Bush
>>>>>>> 602-490-0470
>>>>>>> _______________________________________________
>>>>>>> gradebook2-dev mailing list
>>>>>>> gradebook2-dev at collab.sakaiproject.org
>>>>>>> http://collab.sakaiproject.org/mailman/listinfo/gradebook2-dev
>>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> John Bush
>>>>> 602-490-0470
>>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> John Bush
>>>> 602-490-0470
>>>>
>>>
>>
>>
>>
>> --
>> John Bush
>> 602-490-0470
>>
>



-- 
John Bush
602-490-0470


More information about the gradebook2-dev mailing list