[aerogear-dev] Aerogear Forge Plugin

Richard Kennard richard at kennardconsulting.com
Fri Mar 1 05:10:10 EST 2013


Seb,

To translate what I'm talking about into your language, I note these two files contain a lot of duplication:

https://github.com/forge/scaffold-html5/blob/master/src/main/resources/scaffold/angularjs/views/includes/searchFormInput.html.ftl
https://github.com/forge/scaffold-html5/blob/master/src/main/resources/scaffold/angularjs/views/includes/basicPropertyDetail.html.ftl

Presumably they will contain *more* duplication once searchFormInput.html.ftl supports numbers, dates etc.

One of the main differences between them is the 'required' attribute. Are you planning to refactor these files further?

Regards,

Richard.

On 1/03/2013 8:39 PM, Sebastien Blanc wrote:
> Hi Richard,
> Thanks for the detailed feedback. Your "attribute required" use case is indeed interesting but I think this could be solved by following a convention, 
> I'm a big fan of Convention Over Configuration : I prefer having  a convention like "When processing search macro/template/partial attributes are not 
> required" rather than configure a bundle of XML files and implement Java classes.
> The two approaches are valid and even if we follow the coc way there must always be a way to override the convention.
> Seb
>
>
> On Thu, Feb 28, 2013 at 1:42 AM, Richard Kennard <richard at kennardconsulting.com <mailto:richard at kennardconsulting.com>> wrote:
>
>     Seb,
>
>     Thanks for putting that together. It appears we agree more than we disagree! To recap:
>
>     1. We agree 'inspecting metadata' needs to be orthogonal to 'widget building'. You are re-using Metawidget's Inspectors, which is great
>     2. We agree 'widget building' needs to be orthogonal to layout. Not just to avoid duplicating code, but also so you can make it pluggable (i.e. your
>     'custom.tpl')
>     3. We agree that layout needs to be orthogonal to the wider page (i.e. we do everything inside a 'div' or 'table' - neither of us are trying to render
>     everything from the 'html' tag down)
>
>     You decided FreeMarker was a good fit for #3, and I agree with you. I've implemented a FreemarkerLayout for the next version of Metawidget. I've blogged
>     about it and put together an example you can download here:
>
>     http://blog.kennardconsulting.com/2013/02/metawidget-meets-freemarker.html
>
>     So our main area of disagreement remains: is FreeMarker a good fit for #2?
>
>     I think not. Not because of FreeMarker's templating language per se, but because *FreeMarker returns strings*. This makes it hard to do meaningful
>     post-processing on the chosen widget before inserting it into the layout. There are many examples of why post-processing is important. Let me give
>     you one:
>
>     1. In the existing JSF scaffold, some fields are 'required' (i.e. not-null) fields. We add the JSF 'required' attribute to these widgets. You do
>     something
>     similar in your code:
>
>          <#if (property.required!"false") == "true"> required</#if>
>
>     However, we do this in a separate RequiredAttributeProcessor - not in the WidgetBuilder. The reason is, although we use RequiredAttributeProcessor on the
>     editing screen, we swap it out for the search screen. The search screen still needs to read the same metadata, and generate the same widgets, and lay out
>     in the same way, as the editing screen. But it does *not* want those widgets to be 'required', because search fields are optional.
>
>     Search screens are used in a different way to editing screens. So there is value in making 'required/not required' orthogonal to 'choice of widget'. We
>     don't want to duplicate the whole 'widget choosing' code just so we can relax the 'required' attribute.
>
>     Regards,
>
>     Richard.
>
>     On 27/02/2013 10:19 PM, Sebastien Blanc wrote:
>     > Richard,
>     > You are totally right by saying than maintaining a 500 characters long line will be a nightmare and the current implementation was just a first try.
>     > Vineet as started to factorize the code into macros, you can see it here :
>     > https://github.com/forge/scaffold-html5/blob/master/src/main/resources/scaffold/angularjs/views/includes/basicPropertyDetail.html.ftl
>     >
>     > But in the same time, we are working on an architecture that will have a single/common point of entry for the "widget choosing code" and we can plug
>     > whatever widget renderer template into it. To make this easier, I have created a simple project ,just for you ;) , to demonstrate the main concept.
>     >
>     > https://github.com/sebastienblanc/freemarkertests
>     >
>     > You will see the default renderer (renderer.tpl) and a custom renderer (custom.tpl). The testcases will use the same "widget selector" but their "own"
>     >  renderer. A custom widget renderer template can override all the widgets or only some of them, it is very flexible.
>     >
>     > Please feel free to provide any feedback.
>     >
>     > Best Regards,
>     > Seb
>     >
>     >
>     >
>     > On Tue, Feb 26, 2013 at 10:49 PM, Richard Kennard <richard at kennardconsulting.com <mailto:richard at kennardconsulting.com>
>     <mailto:richard at kennardconsulting.com <mailto:richard at kennardconsulting.com>>> wrote:
>     >
>     >     Seb,
>     >
>     >     Thank you for your feedback.
>     >
>     >     I'm afraid we'll need to agree to disagree that Freemarker is a good medium for implementing 'widget choosing' code. Your current implementation is
>     >     basically a single line that is 500 characters long. I fear this will become a rapidly worsening maintenance problem.
>     >
>     >     However you make a good point about using Freemarker for the layout. I will look at implementing a FreemarkerLayout into Metawidget.
>     >
>     >     Regards,
>     >
>     >     Richard.
>     >
>     >     On 26/02/2013 8:48 PM, Sebastien Blanc wrote:
>     >     >
>     >     >
>     >     > On Tue, Feb 26, 2013 at 10:40 AM, Richard Kennard <richard at kennardconsulting.com <mailto:richard at kennardconsulting.com>
>     <mailto:richard at kennardconsulting.com <mailto:richard at kennardconsulting.com>>
>     >     <mailto:richard at kennardconsulting.com <mailto:richard at kennardconsulting.com> <mailto:richard at kennardconsulting.com
>     <mailto:richard at kennardconsulting.com>>>> wrote:
>     >     >
>     >     >     Seb,
>     >     >
>     >     >     It sounds like there may be some convergence here. Your 'macros' library may end up looking very similar to Metawidget's existing HTML5
>     >     >     WidgetBuilder. And
>     >     >     your 'composition plugins' may end up similar to Metawidget's LayoutDecorators and Layouts.
>     >     >
>     >     >     I'd like to make sure you're not re-inventing the wheel here? Is your main driver that you prefer writing templates in Freemarker to Java
>     code?
>     >     >
>     >     >
>     >     > Absolutely :) ! A user should be able to read and understand a template / overload them and not forced to write a Java class, a mid-term
>     vision is
>     >     to be
>     >     > more and more polyglot.
>     >     > Seb
>     >     >
>     >     >
>     >     >     Regards.
>     >     >
>     >     >     Richard.
>     >     >
>     >     >     On 26/02/2013 8:31 PM, Sebastien Blanc wrote:
>     >     >     > Hi Richard,
>     >     >     > Thanks for your remarks and questions, see my comments inline.
>     >     >     >
>     >     >     > On Tue, Feb 26, 2013 at 10:06 AM, Richard Kennard <richard at kennardconsulting.com <mailto:richard at kennardconsulting.com>
>     <mailto:richard at kennardconsulting.com <mailto:richard at kennardconsulting.com>>
>     >     <mailto:richard at kennardconsulting.com <mailto:richard at kennardconsulting.com> <mailto:richard at kennardconsulting.com
>     <mailto:richard at kennardconsulting.com>>>
>     >     >     <mailto:richard at kennardconsulting.com <mailto:richard at kennardconsulting.com> <mailto:richard at kennardconsulting.com
>     <mailto:richard at kennardconsulting.com>> <mailto:richard at kennardconsulting.com <mailto:richard at kennardconsulting.com>
>     >     <mailto:richard at kennardconsulting.com <mailto:richard at kennardconsulting.com>>>>> wrote:
>     >     >     >
>     >     >     >     Hi Vineet,
>     >     >     >
>     >     >     >     Thanks for your detailed response.
>     >     >     >
>     >     >     >     I'm not opposed to the idea of a FreemarkerWidget (or VelocityWidget, or StringTemplateWidget). Indeed, the early versions of
>     Metawidget
>     >     looked
>     >     >     much like
>     >     >     >     you describe: a separate, pluggable inspection layer, then a Metawidget to render it.
>     >     >     >
>     >     >     >     However, we subsequently got a lot of feedback and did many interviews, adoption studies and case studies. This ultimately led to the
>     >     >     architecture of
>     >     >     >     pluggable WidgetBuilders, WidgetProcessors and Layouts. Let me give you 3 examples of the feedback we got:
>     >     >     >
>     >     >     >     1. Widget choice needs to be orthogonal to layout. If you look at your 'master.html.ftl' and 'detail.html.ftl' you have a lot of
>     duplicated
>     >     >     code between
>     >     >     >     them. Both templates contain <#if... #else to choose between a 'select' box and a 'text' box. This code is going to inflate rapidly
>     once you
>     >     >     add your
>     >     >     >     date
>     >     >     >     pickers, telephone numbers, URLs etc. to the mix. Worse, such code will need to be duplicated across both templates.
>     >     >     >
>     >     >     >
>     >     >     > Vineet is currently  factorizing all the duplicated code into Freemarker's Macros, this Macros library will be shared along the different
>     >     plugins.
>     >     >     >
>     >     >     >
>     >     >     >     2. Equally, layout needs to be orthogonal to the wider page. Say I decide I want to use tables with rows and columns, instead of a
>     div-based
>     >     >     layout.
>     >     >     >     Or say
>     >     >     >     I want to use different CSS classes to your 'control-group' and 'controls'. I will have to do it in both templates. But what is
>     *actually*
>     >     >     different
>     >     >     >     about
>     >     >     >     the templates is the choice of search buttons/results versus save/cancel buttons. So the 'middle bit' of each page needs to be
>     >     orthogonal. This
>     >     >     will get
>     >     >     >     worse as you add more templates, such as separate 'search', 'view' and 'edit' templates (see the JSF scaffold).
>     >     >     >
>     >     >     > With Forge 2.0 in mind, where Plugins/addons will be able to be dependent from each other, inherit from each other, we plan to end up with
>     >     some basic
>     >     >     > plugins which will offer a lot of flexibility to deliver "Composition plugins". We are also going to introduce a lot of convention over
>     >     >     configuration but
>     >     >     > with keeping in mind that the user can always override the conventions.
>     >     >     >
>     >     >     >
>     >     >     >     3. Developers like to use third-party widget libraries, and also in-house custom widget libraries. If I want to add RichFaces, or
>     >     PrimeFaces, or a
>     >     >     >     mixture
>     >     >     >     of both, I want to be able to do so in a way that is orthogonal to all of the above
>     >     >     >
>     >     >     >     So my concern would be that a FreemarkerWidget would tightly couple widget choice (WidgetBuilders) and layout, and not allow widget
>     >     processing
>     >     >     (which is
>     >     >     >     important for other reasons I haven't touched upon). Freemarker does, I agree, offer an attractive level of immedicay and
>     ease-of-editing
>     >     >     templates.
>     >     >     >     But I
>     >     >     >     wonder what your thoughts are on how it scales for some of the points above?
>     >     >     >
>     >     >     >
>     >     >     > "Scaling" will be partly solved by the new architecture explained above. For sure, there will always be situations where the user wants to
>     >     >     introduce his
>     >     >     > supra cool custom widget that don't fits without a lot of hacking but IMO that's beyond the scope of scaffolding. Scaffolding is just to
>     >     "boost up"
>     >     >     a new
>     >     >     > project, it's a one time action,  for sure, we can offer entry points for customization but we can't (or don't want to) cover all the
>     specific
>     >     >     situations.
>     >     >     >
>     >     >     > Regards,
>     >     >     > Seb
>     >     >     >
>     >     >     >
>     >     >     >     Regards,
>     >     >     >
>     >     >     >     Richard.
>     >     >     >
>     >     >     >     > On 22 February 2013 13:56, Vineet Reynolds Pereira <vpereira at redhat.com <mailto:vpereira at redhat.com> <mailto:vpereira at redhat.com
>     <mailto:vpereira at redhat.com>> <mailto:vpereira at redhat.com <mailto:vpereira at redhat.com>
>     >     <mailto:vpereira at redhat.com <mailto:vpereira at redhat.com>>> <mailto:vpereira at redhat.com <mailto:vpereira at redhat.com> <mailto:vpereira at redhat.com
>     <mailto:vpereira at redhat.com>>
>     >     >     <mailto:vpereira at redhat.com <mailto:vpereira at redhat.com> <mailto:vpereira at redhat.com <mailto:vpereira at redhat.com>>>>
>     <mailto:vpereira at redhat.com <mailto:vpereira at redhat.com> <mailto:vpereira at redhat.com <mailto:vpereira at redhat.com>> <mailto:vpereira at redhat.com
>     <mailto:vpereira at redhat.com>
>     >     <mailto:vpereira at redhat.com <mailto:vpereira at redhat.com>>>
>     >     >     >     <mailto:vpereira at redhat.com <mailto:vpereira at redhat.com> <mailto:vpereira at redhat.com <mailto:vpereira at redhat.com>>
>     <mailto:vpereira at redhat.com <mailto:vpereira at redhat.com> <mailto:vpereira at redhat.com <mailto:vpereira at redhat.com>>>>>> wrote:
>     >     >     >     >
>     >     >     >     >     Hi Richard,
>     >     >     >     >
>     >     >     >     >        I'm glad you brought this up, since we've been looking to provide feedback once we've finalized on our usage of the
>     Metawidget APIs.
>     >     >     By the way,
>     >     >     >     >     I'm the one responsible for the use (or abuse) of Metawidget in this manner.
>     >     >     >     >
>     >     >     >     >        The rationale behind the use of Metawidget inspectors alone, is mostly because we want to allow users to modify the generated
>     >     >     scaffold. One
>     >     >     >     of the
>     >     >     >     >     examples thrown around was to enable users to generate master-detail views instead of the plain CRUD forms generated by
>     Forge. Another
>     >     >     driving
>     >     >     >     factor
>     >     >     >     >     was the need to create or enable creation of scaffold generators for several JS frameworks including but not restricted to
>     AngularJS,
>     >     >     Backbone.js,
>     >     >     >     >     Aerogear etc. Furthermore, there is also a possibility of users needing to bring in plugins and extensions to these
>     frameworks, like
>     >     >     Angular-UI or
>     >     >     >     >     Backbone.Forms, since the base frameworks may not satisfy all needs. From my understanding of the Metawidget pipeline and
>     it's use
>     >     in the
>     >     >     Forge
>     >     >     >     Faces
>     >     >     >     >     and (the earlier) Aerogear scaffold plugins, this would have been possible if a metawidget were created for every use case
>     (one per
>     >     >     framework, per
>     >     >     >     >     widget-type). We attempted to bring in the use of templates written in a familiar templating langu!
>     >     >     >     >      age (like Freemarker/Velocity/StringTemplate) into the scaffold generation phase to make it easier for users to modify the
>     generated
>     >     >     scaffold.
>     >     >     >     This
>     >     >     >     >     is somewhat on the lines of what the Yeoman generators do.
>     >     >     >     >
>     >     >     >     >        Thanks to the APIs you've made available for the Metawidget pipeline, the inspection results could be processed before feeding
>     >     them to the
>     >     >     >     >     templates. Every scaffold plugin that could potentially be written, would more or less use this approach, with the sole
>     difference
>     >     being
>     >     >     in the
>     >     >     >     >     contents of the templates themselves. I hope this explains why I used the Inspectors alone, and not the
>     InspectionResultProcessors and
>     >     >     the rest of
>     >     >     >     >     the pipeline. The inspectors just fit in naturally into the Forge scaffold generation pipeline.
>     >     >     >     >
>     >     >     >     >        Based on the above, I personally think that a FreemarkerWidget (or VelocityWidget, or StringTemplateWidget) would be
>     something to
>     >     >     investigate.
>     >     >     >     >     This is of course a raw idea of mine, and I would like to see if it is possible to use such a metawidget in a type-safe
>     manner with the
>     >     >     ability to
>     >     >     >     >     configure the templates that it would consume. I'm not sure if creating such a widget would deviate from the intention behind the
>     >     Metawidget
>     >     >     >     project.
>     >     >     >     >
>     >     >     >     >        As a side note, I'd also like to point out that there has been interest in supporting various additional HTML5 form input
>     types
>     >     (telephone
>     >     >     >     >     numbers, URLs etc.) in the generated scaffold, and this would require extending the JPA/Bean Validation Inspectors in Metawidget.
>     >     >     >     >
>     >     >     >     >     Best regards,
>     >     >     >     >     Vineet
>     >     >     >     >
>     >     >     >     >     PS: CC'ing the forge-dev list.
>     >     >     >     >
>     >     >     >     >     ----- Original Message -----
>     >     >     >     >     > From: "Richard Kennard" <richard at kennardconsulting.com <mailto:richard at kennardconsulting.com>
>     <mailto:richard at kennardconsulting.com <mailto:richard at kennardconsulting.com>>
>     >     <mailto:richard at kennardconsulting.com <mailto:richard at kennardconsulting.com> <mailto:richard at kennardconsulting.com
>     <mailto:richard at kennardconsulting.com>>> <mailto:richard at kennardconsulting.com <mailto:richard at kennardconsulting.com>
>     >     <mailto:richard at kennardconsulting.com <mailto:richard at kennardconsulting.com>>
>     >     >     <mailto:richard at kennardconsulting.com <mailto:richard at kennardconsulting.com> <mailto:richard at kennardconsulting.com
>     <mailto:richard at kennardconsulting.com>>>> <mailto:richard at kennardconsulting.com <mailto:richard at kennardconsulting.com>
>     >     <mailto:richard at kennardconsulting.com <mailto:richard at kennardconsulting.com>> <mailto:richard at kennardconsulting.com
>     <mailto:richard at kennardconsulting.com> <mailto:richard at kennardconsulting.com <mailto:richard at kennardconsulting.com>>>
>     >     >     >     <mailto:richard at kennardconsulting.com <mailto:richard at kennardconsulting.com> <mailto:richard at kennardconsulting.com
>     <mailto:richard at kennardconsulting.com>> <mailto:richard at kennardconsulting.com <mailto:richard at kennardconsulting.com>
>     >     <mailto:richard at kennardconsulting.com <mailto:richard at kennardconsulting.com>>>>>>
>     >     >     >     >     > To: aerogear-dev at lists.jboss.org <mailto:aerogear-dev at lists.jboss.org> <mailto:aerogear-dev at lists.jboss.org
>     <mailto:aerogear-dev at lists.jboss.org>> <mailto:aerogear-dev at lists.jboss.org <mailto:aerogear-dev at lists.jboss.org>
>     >     <mailto:aerogear-dev at lists.jboss.org <mailto:aerogear-dev at lists.jboss.org>>> <mailto:aerogear-dev at lists.jboss.org
>     <mailto:aerogear-dev at lists.jboss.org> <mailto:aerogear-dev at lists.jboss.org <mailto:aerogear-dev at lists.jboss.org>>
>     >     >     <mailto:aerogear-dev at lists.jboss.org <mailto:aerogear-dev at lists.jboss.org> <mailto:aerogear-dev at lists.jboss.org
>     <mailto:aerogear-dev at lists.jboss.org>>>> <mailto:aerogear-dev at lists.jboss.org <mailto:aerogear-dev at lists.jboss.org>
>     >     <mailto:aerogear-dev at lists.jboss.org <mailto:aerogear-dev at lists.jboss.org>> <mailto:aerogear-dev at lists.jboss.org
>     <mailto:aerogear-dev at lists.jboss.org> <mailto:aerogear-dev at lists.jboss.org <mailto:aerogear-dev at lists.jboss.org>>>
>     >     >     >     <mailto:aerogear-dev at lists.jboss.org <mailto:aerogear-dev at lists.jboss.org> <mailto:aerogear-dev at lists.jboss.org
>     <mailto:aerogear-dev at lists.jboss.org>> <mailto:aerogear-dev at lists.jboss.org <mailto:aerogear-dev at lists.jboss.org>
>     >     <mailto:aerogear-dev at lists.jboss.org <mailto:aerogear-dev at lists.jboss.org>>>>>
>     >     >     >     >     > Sent: Thursday, February 21, 2013 5:17:29 AM
>     >     >     >     >     > Subject: Re: [aerogear-dev] Aerogear Forge Plugin
>     >     >     >     >     >
>     >     >     >     >     > Seb,
>     >     >     >     >     >
>     >     >     >     >     > This looks very cool. I see you have used parts of Metawidget for
>     >     >     >     >     > some of the implementation? I'd love to hear your thoughts on how it
>     >     >     >     >     > went and/or any
>     >     >     >     >     > changes you'd like me to make to Metawidget. For example:
>     >     >     >     >     >
>     >     >     >     >     > 1. You have some code in Html5Scaffold that processes the inspection
>     >     >     >     >     > result returned by CompositeInspector. It does things like
>     >     >     >     >     > 'Canonicalize all numerical
>     >     >     >     >     > types in Java to "number" for HTML5 form input type support' and
>     >     >     >     >     > 'Extract simple type name of the relationship types'. Was there a
>     >     >     >     >     > reason you didn't factor
>     >     >     >     >     > this into a Metawidget InspectionResultProcessor
>     >     >     >     >     > (http://metawidget.org/doc/reference/en/html/ch02s03.html)?
>     >     >     >     >     > Specifically BaseInspectionResultProcessor has
>     >     >     >     >     > some methods to help?
>     >     >     >     >     >
>     >     >     >     >     > 2. You appear to be using FreeMarker templates rather than
>     >     >     >     >     > Metawidget's WidgetBuilders, WidgetProcessors and Layouts (see the
>     >     >     >     >     > existing Forge JSF scaffold,
>     >     >     >     >     > Forge GWT scaffold, and Forge Spring scaffold). Could I ask what the
>     >     >     >     >     > reasons were behind this?
>     >     >     >     >     >
>     >     >     >     >     > 3. I have recently implemented a pure client-side, pure run-time,
>     >     >     >     >     > AngularJS version of Metawidget. If you were interested in a
>     >     >     >     >     > non-static version of your
>     >     >     >     >     > scaffold, perhaps you could give it a try?
>     >     >     >     >     > http://blog.kennardconsulting.com/2013/01/metawidget-meets-jquery-ui-and-angularjs.html
>     >     >     >     >     >
>     >     >     >     >     > Regards,
>     >     >     >     >     >
>     >     >     >     >     > Richard.
>     >     >     >     >     >
>     >     >     >     >     > On 20/02/2013 11:49 PM, Jay Balunas wrote:
>     >     >     >     >     > > Wow!!!  Really awesome work guys!!!
>     >     >     >     >     > >
>     >     >     >     >     > > On Feb 15, 2013, at 11:15 AM, Sebastien Blanc wrote:
>     >     >     >     >     > >
>     >     >     >     >     > >> Hi all !
>     >     >     >     >     > >> I'm pleased to announce that the first version of the Aerogear
>     >     >     >     >     > >> Scaffold Plugin for forge is available !
>     >     >     >     >     > >> It's still an alpha but thanks to the excellent work and help from
>     >     >     >     >     > >> Vineet we have a working plugin :
>     >     >     >     >     > >>
>     >     >     >     >     > >> - CRUD Scaffolding based on your entities.
>     >     >     >     >     > >> - One-to-one , many-to-one relation supported.
>     >     >     >     >     > >> - AngularJS and bootstrap responsive based.
>     >     >     >     >     > >> - Aerogear Pipe and Store used.
>     >     >     >     >     > >>
>     >     >     >     >     > >> There is still a lot to do but you can already play with it, a
>     >     >     >     >     > >> quickstart is available here and you should be able to create
>     >     >     >     >     > >> your first Aerogear App in
>     >     >     >     >     > >> 5 minutes ;) https://gist.github.com/sebastienblanc/4961324
>     >     >     >     >     > >>
>     >     >     >     >     > >> An example of a generated application can also be found here :
>     >     >     >     >     > >> https://github.com/sebastienblanc/scaffoldtester , please review
>     >     >     >     >     > >> the generated code (at
>     >     >     >     >     > >> least the JS and HTML) and report it to me and I will update the
>     >     >     >     >     > >> templates accordingly.
>     >     >     >     >     > >>
>     >     >     >     >     > >> Next steps are :
>     >     >     >     >     > >> - Integrate Search feature (using the DataStore filter facilities)
>     >     >     >     >     > >> - Integrate Aerogear Pagination (although generic pagination is
>     >     >     >     >     > >> present now)
>     >     >     >     >     > >> - Integrate jQueryMobile (will probably be another plugin)
>     >     >     >     >     > >>
>     >     >     >     >     > >> Enjoy !
>     >     >     >     >     > >>
>     >     >     >     >     > >> Seb
>     >     >     >     >     > >>
>     >     >     >     >     > >> _______________________________________________
>     >     >     >     >     > >> aerogear-dev mailing list
>     >     >     >     >     > >> aerogear-dev at lists.jboss.org <mailto:aerogear-dev at lists.jboss.org> <mailto:aerogear-dev at lists.jboss.org
>     <mailto:aerogear-dev at lists.jboss.org>> <mailto:aerogear-dev at lists.jboss.org <mailto:aerogear-dev at lists.jboss.org>
>     >     <mailto:aerogear-dev at lists.jboss.org <mailto:aerogear-dev at lists.jboss.org>>> <mailto:aerogear-dev at lists.jboss.org
>     <mailto:aerogear-dev at lists.jboss.org> <mailto:aerogear-dev at lists.jboss.org <mailto:aerogear-dev at lists.jboss.org>>
>     >     >     <mailto:aerogear-dev at lists.jboss.org <mailto:aerogear-dev at lists.jboss.org> <mailto:aerogear-dev at lists.jboss.org
>     <mailto:aerogear-dev at lists.jboss.org>>>> <mailto:aerogear-dev at lists.jboss.org <mailto:aerogear-dev at lists.jboss.org>
>     >     <mailto:aerogear-dev at lists.jboss.org <mailto:aerogear-dev at lists.jboss.org>> <mailto:aerogear-dev at lists.jboss.org
>     <mailto:aerogear-dev at lists.jboss.org> <mailto:aerogear-dev at lists.jboss.org <mailto:aerogear-dev at lists.jboss.org>>>
>     >     >     >     <mailto:aerogear-dev at lists.jboss.org <mailto:aerogear-dev at lists.jboss.org> <mailto:aerogear-dev at lists.jboss.org
>     <mailto:aerogear-dev at lists.jboss.org>> <mailto:aerogear-dev at lists.jboss.org <mailto:aerogear-dev at lists.jboss.org>
>     >     <mailto:aerogear-dev at lists.jboss.org <mailto:aerogear-dev at lists.jboss.org>>>>> <mailto:aerogear-dev at lists.jboss.org
>     <mailto:aerogear-dev at lists.jboss.org> <mailto:aerogear-dev at lists.jboss.org <mailto:aerogear-dev at lists.jboss.org>>
>     >     >     <mailto:aerogear-dev at lists.jboss.org <mailto:aerogear-dev at lists.jboss.org> <mailto:aerogear-dev at lists.jboss.org
>     <mailto:aerogear-dev at lists.jboss.org>>> <mailto:aerogear-dev at lists.jboss.org <mailto:aerogear-dev at lists.jboss.org>
>     >     <mailto:aerogear-dev at lists.jboss.org <mailto:aerogear-dev at lists.jboss.org>> <mailto:aerogear-dev at lists.jboss.org
>     <mailto:aerogear-dev at lists.jboss.org> <mailto:aerogear-dev at lists.jboss.org <mailto:aerogear-dev at lists.jboss.org>>>>
>     >     >     >     <mailto:aerogear-dev at lists.jboss.org <mailto:aerogear-dev at lists.jboss.org> <mailto:aerogear-dev at lists.jboss.org
>     <mailto:aerogear-dev at lists.jboss.org>> <mailto:aerogear-dev at lists.jboss.org <mailto:aerogear-dev at lists.jboss.org>
>     >     <mailto:aerogear-dev at lists.jboss.org <mailto:aerogear-dev at lists.jboss.org>>> <mailto:aerogear-dev at lists.jboss.org
>     <mailto:aerogear-dev at lists.jboss.org> <mailto:aerogear-dev at lists.jboss.org <mailto:aerogear-dev at lists.jboss.org>>
>     >     >     <mailto:aerogear-dev at lists.jboss.org <mailto:aerogear-dev at lists.jboss.org> <mailto:aerogear-dev at lists.jboss.org
>     <mailto:aerogear-dev at lists.jboss.org>>>>>>
>     >     >     >     >     > >> https://lists.jboss.org/mailman/listinfo/aerogear-dev
>     >     >     >     >     > >
>     >     >     >     >     > >
>     >     >     >     >     > >
>     >     >     >     >     > > _______________________________________________
>     >     >     >     >     > > aerogear-dev mailing list
>     >     >     >     >     > > aerogear-dev at lists.jboss.org <mailto:aerogear-dev at lists.jboss.org> <mailto:aerogear-dev at lists.jboss.org
>     <mailto:aerogear-dev at lists.jboss.org>> <mailto:aerogear-dev at lists.jboss.org <mailto:aerogear-dev at lists.jboss.org>
>     >     <mailto:aerogear-dev at lists.jboss.org <mailto:aerogear-dev at lists.jboss.org>>> <mailto:aerogear-dev at lists.jboss.org
>     <mailto:aerogear-dev at lists.jboss.org> <mailto:aerogear-dev at lists.jboss.org <mailto:aerogear-dev at lists.jboss.org>>
>     >     >     <mailto:aerogear-dev at lists.jboss.org <mailto:aerogear-dev at lists.jboss.org> <mailto:aerogear-dev at lists.jboss.org
>     <mailto:aerogear-dev at lists.jboss.org>>>> <mailto:aerogear-dev at lists.jboss.org <mailto:aerogear-dev at lists.jboss.org>
>     >     <mailto:aerogear-dev at lists.jboss.org <mailto:aerogear-dev at lists.jboss.org>> <mailto:aerogear-dev at lists.jboss.org
>     <mailto:aerogear-dev at lists.jboss.org> <mailto:aerogear-dev at lists.jboss.org <mailto:aerogear-dev at lists.jboss.org>>>
>     >     >     <mailto:aerogear-dev at lists.jboss.org <mailto:aerogear-dev at lists.jboss.org> <mailto:aerogear-dev at lists.jboss.org
>     <mailto:aerogear-dev at lists.jboss.org>> <mailto:aerogear-dev at lists.jboss.org <mailto:aerogear-dev at lists.jboss.org>
>     >     <mailto:aerogear-dev at lists.jboss.org <mailto:aerogear-dev at lists.jboss.org>>>>>
>     >     >     >     >     > > https://lists.jboss.org/mailman/listinfo/aerogear-dev
>     >     >     >     >     >
>     >     >     >     >     > _______________________________________________
>     >     >     >     >     > aerogear-dev mailing list
>     >     >     >     >     > aerogear-dev at lists.jboss.org <mailto:aerogear-dev at lists.jboss.org> <mailto:aerogear-dev at lists.jboss.org
>     <mailto:aerogear-dev at lists.jboss.org>> <mailto:aerogear-dev at lists.jboss.org <mailto:aerogear-dev at lists.jboss.org>
>     >     <mailto:aerogear-dev at lists.jboss.org <mailto:aerogear-dev at lists.jboss.org>>> <mailto:aerogear-dev at lists.jboss.org
>     <mailto:aerogear-dev at lists.jboss.org> <mailto:aerogear-dev at lists.jboss.org <mailto:aerogear-dev at lists.jboss.org>>
>     >     >     <mailto:aerogear-dev at lists.jboss.org <mailto:aerogear-dev at lists.jboss.org> <mailto:aerogear-dev at lists.jboss.org
>     <mailto:aerogear-dev at lists.jboss.org>>>> <mailto:aerogear-dev at lists.jboss.org <mailto:aerogear-dev at lists.jboss.org>
>     >     <mailto:aerogear-dev at lists.jboss.org <mailto:aerogear-dev at lists.jboss.org>> <mailto:aerogear-dev at lists.jboss.org
>     <mailto:aerogear-dev at lists.jboss.org> <mailto:aerogear-dev at lists.jboss.org <mailto:aerogear-dev at lists.jboss.org>>>
>     >     >     <mailto:aerogear-dev at lists.jboss.org <mailto:aerogear-dev at lists.jboss.org> <mailto:aerogear-dev at lists.jboss.org
>     <mailto:aerogear-dev at lists.jboss.org>> <mailto:aerogear-dev at lists.jboss.org <mailto:aerogear-dev at lists.jboss.org>
>     >     <mailto:aerogear-dev at lists.jboss.org <mailto:aerogear-dev at lists.jboss.org>>>>>
>     >     >     >     >     > https://lists.jboss.org/mailman/listinfo/aerogear-dev
>     >     >     >     >     >
>     >     >     >     >
>     >     >     >     > _______________________________________________
>     >     >     >     >     aerogear-dev mailing list
>     >     >     >     > aerogear-dev at lists.jboss.org <mailto:aerogear-dev at lists.jboss.org> <mailto:aerogear-dev at lists.jboss.org
>     <mailto:aerogear-dev at lists.jboss.org>> <mailto:aerogear-dev at lists.jboss.org <mailto:aerogear-dev at lists.jboss.org>
>     >     <mailto:aerogear-dev at lists.jboss.org <mailto:aerogear-dev at lists.jboss.org>>> <mailto:aerogear-dev at lists.jboss.org
>     <mailto:aerogear-dev at lists.jboss.org> <mailto:aerogear-dev at lists.jboss.org <mailto:aerogear-dev at lists.jboss.org>>
>     >     >     <mailto:aerogear-dev at lists.jboss.org <mailto:aerogear-dev at lists.jboss.org> <mailto:aerogear-dev at lists.jboss.org
>     <mailto:aerogear-dev at lists.jboss.org>>>> <mailto:aerogear-dev at lists.jboss.org <mailto:aerogear-dev at lists.jboss.org>
>     >     <mailto:aerogear-dev at lists.jboss.org <mailto:aerogear-dev at lists.jboss.org>> <mailto:aerogear-dev at lists.jboss.org
>     <mailto:aerogear-dev at lists.jboss.org> <mailto:aerogear-dev at lists.jboss.org <mailto:aerogear-dev at lists.jboss.org>>>
>     >     >     <mailto:aerogear-dev at lists.jboss.org <mailto:aerogear-dev at lists.jboss.org> <mailto:aerogear-dev at lists.jboss.org
>     <mailto:aerogear-dev at lists.jboss.org>> <mailto:aerogear-dev at lists.jboss.org <mailto:aerogear-dev at lists.jboss.org>
>     >     <mailto:aerogear-dev at lists.jboss.org <mailto:aerogear-dev at lists.jboss.org>>>>>
>     >     >     >     > https://lists.jboss.org/mailman/listinfo/aerogear-dev
>     >     >     >     >
>     >     >     >     >
>     >     >     >     >
>     >     >     >     >
>     >     >     >     > _______________________________________________
>     >     >     >     > aerogear-dev mailing list
>     >     >     >     > aerogear-dev at lists.jboss.org <mailto:aerogear-dev at lists.jboss.org> <mailto:aerogear-dev at lists.jboss.org
>     <mailto:aerogear-dev at lists.jboss.org>> <mailto:aerogear-dev at lists.jboss.org <mailto:aerogear-dev at lists.jboss.org>
>     >     <mailto:aerogear-dev at lists.jboss.org <mailto:aerogear-dev at lists.jboss.org>>> <mailto:aerogear-dev at lists.jboss.org
>     <mailto:aerogear-dev at lists.jboss.org> <mailto:aerogear-dev at lists.jboss.org <mailto:aerogear-dev at lists.jboss.org>>
>     >     <mailto:aerogear-dev at lists.jboss.org <mailto:aerogear-dev at lists.jboss.org> <mailto:aerogear-dev at lists.jboss.org
>     <mailto:aerogear-dev at lists.jboss.org>>>>
>     >     >     >     > https://lists.jboss.org/mailman/listinfo/aerogear-dev
>     >     >     >
>     >     >     > _______________________________________________
>     >     >     >     aerogear-dev mailing list
>     >     >     > aerogear-dev at lists.jboss.org <mailto:aerogear-dev at lists.jboss.org> <mailto:aerogear-dev at lists.jboss.org
>     <mailto:aerogear-dev at lists.jboss.org>> <mailto:aerogear-dev at lists.jboss.org <mailto:aerogear-dev at lists.jboss.org>
>     >     <mailto:aerogear-dev at lists.jboss.org <mailto:aerogear-dev at lists.jboss.org>>> <mailto:aerogear-dev at lists.jboss.org
>     <mailto:aerogear-dev at lists.jboss.org> <mailto:aerogear-dev at lists.jboss.org <mailto:aerogear-dev at lists.jboss.org>>
>     >     <mailto:aerogear-dev at lists.jboss.org <mailto:aerogear-dev at lists.jboss.org> <mailto:aerogear-dev at lists.jboss.org
>     <mailto:aerogear-dev at lists.jboss.org>>>>
>     >     >     > https://lists.jboss.org/mailman/listinfo/aerogear-dev
>     >     >     >
>     >     >     >
>     >     >     >
>     >     >     >
>     >     >     > _______________________________________________
>     >     >     > aerogear-dev mailing list
>     >     >     > aerogear-dev at lists.jboss.org <mailto:aerogear-dev at lists.jboss.org> <mailto:aerogear-dev at lists.jboss.org
>     <mailto:aerogear-dev at lists.jboss.org>> <mailto:aerogear-dev at lists.jboss.org <mailto:aerogear-dev at lists.jboss.org>
>     <mailto:aerogear-dev at lists.jboss.org <mailto:aerogear-dev at lists.jboss.org>>>
>     >     >     > https://lists.jboss.org/mailman/listinfo/aerogear-dev
>     >     >
>     >     > _______________________________________________
>     >     >     aerogear-dev mailing list
>     >     > aerogear-dev at lists.jboss.org <mailto:aerogear-dev at lists.jboss.org> <mailto:aerogear-dev at lists.jboss.org
>     <mailto:aerogear-dev at lists.jboss.org>> <mailto:aerogear-dev at lists.jboss.org <mailto:aerogear-dev at lists.jboss.org>
>     <mailto:aerogear-dev at lists.jboss.org <mailto:aerogear-dev at lists.jboss.org>>>
>     >     > https://lists.jboss.org/mailman/listinfo/aerogear-dev
>     >     >
>     >     >
>     >     >
>     >     >
>     >     > _______________________________________________
>     >     > aerogear-dev mailing list
>     >     > aerogear-dev at lists.jboss.org <mailto:aerogear-dev at lists.jboss.org> <mailto:aerogear-dev at lists.jboss.org <mailto:aerogear-dev at lists.jboss.org>>
>     >     > https://lists.jboss.org/mailman/listinfo/aerogear-dev
>     >
>     >     _______________________________________________
>     >     aerogear-dev mailing list
>     > aerogear-dev at lists.jboss.org <mailto:aerogear-dev at lists.jboss.org> <mailto:aerogear-dev at lists.jboss.org <mailto:aerogear-dev at lists.jboss.org>>
>     > https://lists.jboss.org/mailman/listinfo/aerogear-dev
>     >
>     >
>     >
>     >
>     > _______________________________________________
>     > aerogear-dev mailing list
>     > aerogear-dev at lists.jboss.org <mailto:aerogear-dev at lists.jboss.org>
>     > https://lists.jboss.org/mailman/listinfo/aerogear-dev
>
>     _______________________________________________
>     aerogear-dev mailing list
>     aerogear-dev at lists.jboss.org <mailto:aerogear-dev at lists.jboss.org>
>     https://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



More information about the aerogear-dev mailing list