[aerogear-dev] [Java Sender] Message Fluent API / Builder / DSL ...

Sebastien Blanc scm.blanc at gmail.com
Wed Jul 3 09:15:24 EDT 2013


Speaking more about implementation details , do you think this is a good
approach (don't like very much the code duplication between the builder and
the object but like the result)
http://javarevisited.blogspot.fr/2012/06/builder-design-pattern-in-java-example.html?


On Wed, Jul 3, 2013 at 10:10 AM, Sebastien Blanc <scm.blanc at gmail.com>wrote:

> Ok,
> Progress will be tracked here https://issues.jboss.org/browse/AGPUSH-135
>
>
> On Tue, Jul 2, 2013 at 6:14 PM, Matthias Wessendorf <matzew at apache.org>wrote:
>
>>
>>
>>
>> On Tue, Jul 2, 2013 at 5:57 PM, Summers Pittman <supittma at redhat.com>wrote:
>>
>>>  On 07/02/2013 09:13 AM, Sebastien Blanc wrote:
>>>
>>> Hi Folks,
>>> As you know we have a Java Sender Library that can be used by any
>>> backend application that want to send messages to the Unified Message Push
>>> Server (https://github.com/aerogear/aerogear-unified-push-java-client).
>>> The format is quite open and flexible as Matthias described it here :
>>> https://gist.github.com/matzew/b21c1404cc093825f0fb
>>>  We can divide the creation of a message in 2 main parts :
>>>
>>>  - The  "signalling" part : list of client identifiers / specific
>>> devices etc ...
>>> - The "core" message containing actually the information we want to push
>>>
>>>  Both are passed as Map and are finally converted into JSON.
>>> Here an example of how a "core" message is build :
>>>
>>>  Map categories = new HashMap();
>>> categories.put("lead", "version="+leadVersion++);
>>> Map json = new HashMap();
>>> json.put("id", lead.getId());
>>> json.put("messageType", "pushed_lead");
>>> json.put("name", lead.getName());
>>> json.put("location", lead.getLocation());
>>> json.put("phone", lead.getPhoneNumber());
>>> json.put("simple-push", categories);
>>> json.put("sound" ,"default");
>>> json.put("alert" ,"A new lead has been created");
>>>
>>>
>>>  Even the format is open, we could "assist" a bit the developer in
>>> building the message. For that we have different options :
>>> - Propose a simple Message object containing the message "API" :
>>>
>>>  Message message = new Message();
>>> message.setClientIdentifiers("jake","maria");
>>> message.enableSound();//by default use "default" or we could do message.enableSound("boing")
>>> message.setAlert("Watch out!);
>>> message.setAttribute("customAttribute","yo"); // custom simple strings
>>> message.setAttribute("customStructure",myObject); // passing objects
>>>
>>>
>>>  - Propose a Message Builder (following the Builder Pattern) to propose
>>> a more fluent API :
>>>
>>>  Message message = new Message().builder()
>>>   .clientIdentifiers("jake","maria")
>>>   .enableSound()
>>>   .alert("AAAAHHH!")
>>>   .attribute("customAttribute","yo")
>>>   .attribute("customStructure",myObject)
>>>   .build()
>>>
>>>
>>>  - Same as above but more DSL focused (not sure about this one ;) )
>>>
>>> Message message = MessageDSL.to("jake","maria").withSound() //etc ...
>>>
>>>
>>>  So, beside that we have to discuss what we want allow to pass to the
>>> message API : only Strings and simple Maps ? Full Objects that will be
>>> JSONified ?
>>>
>>> +1 to Strings and Simple Maps.
>>>
>>
>> +1 on that too.
>>
>> See here too :)
>>
>> http://developer.android.com/reference/com/google/android/gcm/server/Message.Builder.html#addData(java.lang.String,
>> java.lang.String)
>>
>>
>>
>>> JSONIfying full objects can be error prone/tricky sometimes so -.5 to
>>> that.
>>> I don't hate it would rather just not give people that gun to shoot
>>> themselves with so soon ;)
>>>
>>
>> I am for Strings and Simple Maps as well
>>
>>
>>>
>>>
>>>  Do we want also to separate the "signalling" part from the "core" part
>>> when building a message ?
>>>
>>>  Inputs and comments more than welcome !
>>>
>>> I like the Builder.  It is very simple, very neutral, and very exact.
>>>
>>>
>>>  Seb
>>>
>>>
>>>
>>> _______________________________________________
>>> aerogear-dev mailing listaerogear-dev at lists.jboss.orghttps://lists.jboss.org/mailman/listinfo/aerogear-dev
>>>
>>>
>>>
>>> _______________________________________________
>>> aerogear-dev mailing list
>>> aerogear-dev at lists.jboss.org
>>> https://lists.jboss.org/mailman/listinfo/aerogear-dev
>>>
>>
>>
>>
>> --
>> Matthias Wessendorf
>>
>> blog: http://matthiaswessendorf.wordpress.com/
>> sessions: http://www.slideshare.net/mwessendorf
>> twitter: http://twitter.com/mwessendorf
>>
>> _______________________________________________
>> aerogear-dev mailing list
>> aerogear-dev at lists.jboss.org
>> https://lists.jboss.org/mailman/listinfo/aerogear-dev
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/aerogear-dev/attachments/20130703/728dd483/attachment-0001.html 


More information about the aerogear-dev mailing list