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

Summers Pittman supittma at redhat.com
Tue Jul 2 11:57:46 EDT 2013


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.  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 ;)
>
> 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 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/20130702/88277315/attachment.html 


More information about the aerogear-dev mailing list