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@apache.org> wrote:



On Tue, Jul 2, 2013 at 5:57 PM, Summers Pittman <supittma@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 :)

 
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 list
aerogear-dev@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/aerogear-dev


_______________________________________________
aerogear-dev mailing list
aerogear-dev@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/aerogear-dev



_______________________________________________
aerogear-dev mailing list
aerogear-dev@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/aerogear-dev