Metawidget
“UI Generation done right”
http://metawidget.org
Metawidget UI Generation done right http://metawidget.org What we - - PowerPoint PPT Presentation
Metawidget UI Generation done right http://metawidget.org What we will cover A common requirement Current practices A better way Common Requirement An everyday problem Most enterprise applications require many different data
“UI Generation done right”
http://metawidget.org
An everyday problem
Which one are you using?
Visual Form Designers
UI Languages
<h:form> <h:inputText value=”#{foo.name}”/> <rich:inputSpinner value=”#{foo.age}”/> </h:form>
Is this you? ✘ Time consuming ✘ Duplicating definitions, error prone: ✘ Too laborious to do properly:
<h:inputText value=”#{foo.name}” maxlength=”30”/> public String getName(); public int getAge(); <h:inputText value=”#{foo.name}”/> <rich:inputSpinner value=”#{foo.age}”/>
Code Generators
Is this you? ✘ Static code generation
✘ Generic UI
✘ Dictate the architecture
Metawidget Designed to address each of these shortcomings
✔ Uses your existing architecture
✔ Doesn't try and 'own' the entire UI
✔ No static code generation
✔ Automatically applies constraints
✔ No duplicated definitions
✔ No time at all
Doesn't 'own' the UI
Doesn't 'own' the UI
Doesn't 'own' the UI
Questions?
WidgetProcessor WidgetProcessor
Uses your existing architecture
Inspector Inspector WidgetBuilder WidgetBuilder Metawidget Metawidget ask to inspect return inspection ask for widget return widget Layout Layout ask to process return processed widget ask to layout laid out
... ...
Uses your existing architecture
Inspector Inspector WidgetBuilder WidgetBuilder Metawidget Metawidget ask to inspect return inspection ask for widget return widget
... ...
Uses your existing architecture
Inspector Inspector WidgetBuilder WidgetBuilder Metawidget Metawidget JavaBean JavaBean ask to inspect return inspection ask for widget return widget
... ...
Uses your existing architecture
Inspector Inspector WidgetBuilder WidgetBuilder Metawidget Metawidget JPA JPA ask to inspect return inspection ask for widget return widget
... ...
Uses your existing architecture
Inspector Inspector WidgetBuilder WidgetBuilder Metawidget Metawidget Composite Inspector Composite Inspector ask to inspect return inspection ask for widget return widget
... ...
Uses your existing architecture
Inspector Inspector WidgetBuilder WidgetBuilder Metawidget Metawidget Composite Inspector Composite Inspector JPA JPA JavaBean JavaBean ask to inspect return inspection ask for widget return widget
... ...
Uses your existing architecture
Inspector Inspector WidgetBuilder WidgetBuilder Metawidget Metawidget Composite Inspector Composite Inspector JPA JPA Bean Validation Bean Validation JavaBean JavaBean ask to inspect return inspection ask for widget return widget
= no duplicate definitions from other layers = supports multiple/mixing back-end architectures
... ...
Uses your existing architecture
Inspector Inspector WidgetBuilder WidgetBuilder Metawidget Metawidget Composite Inspector Composite Inspector JSF JSF JPA JPA Bean Validation Bean Validation JavaBean JavaBean ask to inspect return inspection ask for widget return widget
= automatically applies proper constraints
... ...
Uses your existing architecture
Inspector Inspector WidgetBuilder WidgetBuilder Metawidget Metawidget Composite Inspector Composite Inspector Composite WidgetBuilder Composite WidgetBuilder JPA JPA Bean Validation Bean Validation JavaBean JavaBean ask to inspect return inspection ask for widget return widget
... ...
Uses your existing architecture
Inspector Inspector WidgetBuilder WidgetBuilder Metawidget Metawidget ICEfaces ICEfaces RichFaces RichFaces JSF JSF Composite Inspector Composite Inspector Composite WidgetBuilder Composite WidgetBuilder JPA JPA Bean Validation Bean Validation JavaBean JavaBean ask to inspect return inspection ask for widget return widget
= new widgets can be swapped in en masse = supports multiple/mixing widget libraries
Uses your existing architecture
WidgetProcessor WidgetProcessor Layout Layout Metawidget Metawidget ask to process return processed widget ask to layout laid out ...
Uses your existing architecture
WidgetProcessor WidgetProcessor Layout Layout Metawidget Metawidget Data Binding Data Binding Validators Validators Converters Converters ask to process return processed widget ask to layout laid out ...
Uses your existing architecture
WidgetProcessor WidgetProcessor Layout Layout Metawidget Metawidget Table Layout Table Layout Data Binding Data Binding Validators Validators Converters Converters ask to process return processed widget ask to layout laid out ...
Uses your existing architecture
WidgetProcessor WidgetProcessor Layout Layout Metawidget Metawidget Table Layout Table Layout Heading Decorator Heading Decorator Data Binding Data Binding Validators Validators Converters Converters ask to process return processed widget ask to layout laid out ...
Uses your existing architecture
WidgetProcessor WidgetProcessor Layout Layout Metawidget Metawidget Heading Decorator Heading Decorator RichFaces Tab Decorator RichFaces Tab Decorator Data Binding Data Binding Validators Validators Converters Converters ask to process return processed widget ask to layout laid out
= automatic consistency across forms
Table Layout Table Layout ...
Acid Test: Retrofitting an existing app