![Page 2: Metawidgetmetawidget.sourceforge.net/media/presentation/Meta... · A better way Uses your existing architecture - your existing annotations, XML files, business rules - your existing](https://reader035.vdocuments.mx/reader035/viewer/2022070813/5f0d2cd17e708231d4390a71/html5/thumbnails/2.jpg)
What we will cover
● A common requirement
● Current practices
● A better way
![Page 3: Metawidgetmetawidget.sourceforge.net/media/presentation/Meta... · A better way Uses your existing architecture - your existing annotations, XML files, business rules - your existing](https://reader035.vdocuments.mx/reader035/viewer/2022070813/5f0d2cd17e708231d4390a71/html5/thumbnails/3.jpg)
Common Requirement
Most enterprise applications require many different data entry forms,
either for collectingor displaying data
An everyday problem
![Page 4: Metawidgetmetawidget.sourceforge.net/media/presentation/Meta... · A better way Uses your existing architecture - your existing annotations, XML files, business rules - your existing](https://reader035.vdocuments.mx/reader035/viewer/2022070813/5f0d2cd17e708231d4390a71/html5/thumbnails/4.jpg)
Current practices Which one are you using?
● Visual Form Designers
● UI Languages
● Code Generators
![Page 5: Metawidgetmetawidget.sourceforge.net/media/presentation/Meta... · A better way Uses your existing architecture - your existing annotations, XML files, business rules - your existing](https://reader035.vdocuments.mx/reader035/viewer/2022070813/5f0d2cd17e708231d4390a71/html5/thumbnails/5.jpg)
Current practices Visual Form Designers
- Matisse- JBoss Visual Page Editor- etc
![Page 6: Metawidgetmetawidget.sourceforge.net/media/presentation/Meta... · A better way Uses your existing architecture - your existing annotations, XML files, business rules - your existing](https://reader035.vdocuments.mx/reader035/viewer/2022070813/5f0d2cd17e708231d4390a71/html5/thumbnails/6.jpg)
Current practices UI Languages
<h:form><h:inputText value=”#{foo.name}”/><rich:inputSpinner value=”#{foo.age}”/>
</h:form>
- HTML/CSS- Java Server Faces- etc
![Page 7: Metawidgetmetawidget.sourceforge.net/media/presentation/Meta... · A better way Uses your existing architecture - your existing annotations, XML files, business rules - your existing](https://reader035.vdocuments.mx/reader035/viewer/2022070813/5f0d2cd17e708231d4390a71/html5/thumbnails/7.jpg)
Current practices 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}”/>
![Page 8: Metawidgetmetawidget.sourceforge.net/media/presentation/Meta... · A better way Uses your existing architecture - your existing annotations, XML files, business rules - your existing](https://reader035.vdocuments.mx/reader035/viewer/2022070813/5f0d2cd17e708231d4390a71/html5/thumbnails/8.jpg)
Current practices Code Generators
- Naked Objects- seam-gen- etc
![Page 9: Metawidgetmetawidget.sourceforge.net/media/presentation/Meta... · A better way Uses your existing architecture - your existing annotations, XML files, business rules - your existing](https://reader035.vdocuments.mx/reader035/viewer/2022070813/5f0d2cd17e708231d4390a71/html5/thumbnails/9.jpg)
Current practices Is this you?
✘ Static code generation
- doesn't help much beyond early stages of development
✘ Generic UI- basic CRUD- isn't enough metadata to do as good a job as a human designer
✘ Dictate the architecture- if you build your app our way, we'll generate a UI for you
![Page 10: Metawidgetmetawidget.sourceforge.net/media/presentation/Meta... · A better way Uses your existing architecture - your existing annotations, XML files, business rules - your existing](https://reader035.vdocuments.mx/reader035/viewer/2022070813/5f0d2cd17e708231d4390a71/html5/thumbnails/10.jpg)
A better way Metawidget
Designed to address each of these
shortcomings
![Page 11: Metawidgetmetawidget.sourceforge.net/media/presentation/Meta... · A better way Uses your existing architecture - your existing annotations, XML files, business rules - your existing](https://reader035.vdocuments.mx/reader035/viewer/2022070813/5f0d2cd17e708231d4390a71/html5/thumbnails/11.jpg)
A better way
✔ Uses your existing architecture
- your existing annotations, XML files, business rules- your existing UI toolkit, third-party libraries, custom components- easy to mix technologies, or plug-in your own
✔ Doesn't try and 'own' the entire UI- only tries to generate the 'inside' of forms- doesn't hide your existing UI toolkit- just another widget in your toolbox
✔ No static code generation- inspects business objects at runtime
![Page 12: Metawidgetmetawidget.sourceforge.net/media/presentation/Meta... · A better way Uses your existing architecture - your existing annotations, XML files, business rules - your existing](https://reader035.vdocuments.mx/reader035/viewer/2022070813/5f0d2cd17e708231d4390a71/html5/thumbnails/12.jpg)
A better way
✔ Automatically applies constraints
- existing validation libraries, easy to add your own
✔ No duplicated definitions - reads names, types, constraints already defined in your architecture
✔ No time at all- once configured, changes to screens are free
![Page 13: Metawidgetmetawidget.sourceforge.net/media/presentation/Meta... · A better way Uses your existing architecture - your existing annotations, XML files, business rules - your existing](https://reader035.vdocuments.mx/reader035/viewer/2022070813/5f0d2cd17e708231d4390a71/html5/thumbnails/13.jpg)
A better wayDoesn't 'own' the UI
![Page 14: Metawidgetmetawidget.sourceforge.net/media/presentation/Meta... · A better way Uses your existing architecture - your existing annotations, XML files, business rules - your existing](https://reader035.vdocuments.mx/reader035/viewer/2022070813/5f0d2cd17e708231d4390a71/html5/thumbnails/14.jpg)
A better wayDoesn't 'own' the UI
![Page 15: Metawidgetmetawidget.sourceforge.net/media/presentation/Meta... · A better way Uses your existing architecture - your existing annotations, XML files, business rules - your existing](https://reader035.vdocuments.mx/reader035/viewer/2022070813/5f0d2cd17e708231d4390a71/html5/thumbnails/15.jpg)
A better wayDoesn't 'own' the UI
![Page 16: Metawidgetmetawidget.sourceforge.net/media/presentation/Meta... · A better way Uses your existing architecture - your existing annotations, XML files, business rules - your existing](https://reader035.vdocuments.mx/reader035/viewer/2022070813/5f0d2cd17e708231d4390a71/html5/thumbnails/16.jpg)
Conclusion
● Everyday requirement ● Unsatisfactory current practices
● A better way
![Page 17: Metawidgetmetawidget.sourceforge.net/media/presentation/Meta... · A better way Uses your existing architecture - your existing annotations, XML files, business rules - your existing](https://reader035.vdocuments.mx/reader035/viewer/2022070813/5f0d2cd17e708231d4390a71/html5/thumbnails/17.jpg)
Thank You!
Questions?
![Page 18: Metawidgetmetawidget.sourceforge.net/media/presentation/Meta... · A better way Uses your existing architecture - your existing annotations, XML files, business rules - your existing](https://reader035.vdocuments.mx/reader035/viewer/2022070813/5f0d2cd17e708231d4390a71/html5/thumbnails/18.jpg)
Appendix A
![Page 19: Metawidgetmetawidget.sourceforge.net/media/presentation/Meta... · A better way Uses your existing architecture - your existing annotations, XML files, business rules - your existing](https://reader035.vdocuments.mx/reader035/viewer/2022070813/5f0d2cd17e708231d4390a71/html5/thumbnails/19.jpg)
WidgetProcessorWidgetProcessor
A better wayUses your existing architecture
InspectorInspector WidgetBuilderWidgetBuilderMetawidgetMetawidget
ask to inspect
return inspection
ask for widget
return widget
LayoutLayout
ask to process
return processed widgetask to layout
laid out
![Page 20: Metawidgetmetawidget.sourceforge.net/media/presentation/Meta... · A better way Uses your existing architecture - your existing annotations, XML files, business rules - your existing](https://reader035.vdocuments.mx/reader035/viewer/2022070813/5f0d2cd17e708231d4390a71/html5/thumbnails/20.jpg)
......
A better wayUses your existing architecture
InspectorInspector WidgetBuilderWidgetBuilderMetawidgetMetawidget
ask to inspect
return inspection
ask for widget
return widget
![Page 21: Metawidgetmetawidget.sourceforge.net/media/presentation/Meta... · A better way Uses your existing architecture - your existing annotations, XML files, business rules - your existing](https://reader035.vdocuments.mx/reader035/viewer/2022070813/5f0d2cd17e708231d4390a71/html5/thumbnails/21.jpg)
......
A better wayUses your existing architecture
InspectorInspector WidgetBuilderWidgetBuilderMetawidgetMetawidgetJavaBeanJavaBean
ask to inspect
return inspection
ask for widget
return widget
![Page 22: Metawidgetmetawidget.sourceforge.net/media/presentation/Meta... · A better way Uses your existing architecture - your existing annotations, XML files, business rules - your existing](https://reader035.vdocuments.mx/reader035/viewer/2022070813/5f0d2cd17e708231d4390a71/html5/thumbnails/22.jpg)
......
A better wayUses your existing architecture
InspectorInspector WidgetBuilderWidgetBuilderMetawidgetMetawidgetJPAJPA
ask to inspect
return inspection
ask for widget
return widget
![Page 23: Metawidgetmetawidget.sourceforge.net/media/presentation/Meta... · A better way Uses your existing architecture - your existing annotations, XML files, business rules - your existing](https://reader035.vdocuments.mx/reader035/viewer/2022070813/5f0d2cd17e708231d4390a71/html5/thumbnails/23.jpg)
......
A better wayUses your existing architecture
InspectorInspector WidgetBuilderWidgetBuilderMetawidgetMetawidget
CompositeInspector
CompositeInspector
ask to inspect
return inspection
ask for widget
return widget
![Page 24: Metawidgetmetawidget.sourceforge.net/media/presentation/Meta... · A better way Uses your existing architecture - your existing annotations, XML files, business rules - your existing](https://reader035.vdocuments.mx/reader035/viewer/2022070813/5f0d2cd17e708231d4390a71/html5/thumbnails/24.jpg)
......
A better wayUses your existing architecture
InspectorInspector WidgetBuilderWidgetBuilderMetawidgetMetawidget
CompositeInspector
CompositeInspector
JPAJPA JavaBeanJavaBean
ask to inspect
return inspection
ask for widget
return widget
![Page 25: Metawidgetmetawidget.sourceforge.net/media/presentation/Meta... · A better way Uses your existing architecture - your existing annotations, XML files, business rules - your existing](https://reader035.vdocuments.mx/reader035/viewer/2022070813/5f0d2cd17e708231d4390a71/html5/thumbnails/25.jpg)
......
A better wayUses your existing architecture
InspectorInspector WidgetBuilderWidgetBuilderMetawidgetMetawidget
CompositeInspector
CompositeInspector
JPAJPA
Bean ValidationBean Validation
JavaBeanJavaBean
ask to inspect
return inspection
ask for widget
return widget
= no duplicate definitions from other layers= supports multiple/mixing back-end architectures
![Page 26: Metawidgetmetawidget.sourceforge.net/media/presentation/Meta... · A better way Uses your existing architecture - your existing annotations, XML files, business rules - your existing](https://reader035.vdocuments.mx/reader035/viewer/2022070813/5f0d2cd17e708231d4390a71/html5/thumbnails/26.jpg)
......
A better wayUses your existing architecture
InspectorInspector WidgetBuilderWidgetBuilderMetawidgetMetawidget
CompositeInspector
CompositeInspector JSFJSF
JPAJPA
Bean ValidationBean Validation
JavaBeanJavaBean
ask to inspect
return inspection
ask for widget
return widget
= automatically applies proper constraints
![Page 27: Metawidgetmetawidget.sourceforge.net/media/presentation/Meta... · A better way Uses your existing architecture - your existing annotations, XML files, business rules - your existing](https://reader035.vdocuments.mx/reader035/viewer/2022070813/5f0d2cd17e708231d4390a71/html5/thumbnails/27.jpg)
......
A better wayUses your existing architecture
InspectorInspector WidgetBuilderWidgetBuilderMetawidgetMetawidget
CompositeInspector
CompositeInspector
CompositeWidgetBuilder
CompositeWidgetBuilder
JPAJPA
Bean ValidationBean Validation
JavaBeanJavaBean
ask to inspect
return inspection
ask for widget
return widget
![Page 28: Metawidgetmetawidget.sourceforge.net/media/presentation/Meta... · A better way Uses your existing architecture - your existing annotations, XML files, business rules - your existing](https://reader035.vdocuments.mx/reader035/viewer/2022070813/5f0d2cd17e708231d4390a71/html5/thumbnails/28.jpg)
......
A better wayUses your existing architecture
InspectorInspector WidgetBuilderWidgetBuilderMetawidgetMetawidget
ICEfacesICEfaces
RichFacesRichFaces
JSFJSF
CompositeInspector
CompositeInspector
CompositeWidgetBuilder
CompositeWidgetBuilder
JPAJPA
Bean ValidationBean Validation
JavaBeanJavaBean
ask to inspect
return inspection
ask for widget
return widget
= new widgets can be swapped in en masse= supports multiple/mixing widget libraries
![Page 29: Metawidgetmetawidget.sourceforge.net/media/presentation/Meta... · A better way Uses your existing architecture - your existing annotations, XML files, business rules - your existing](https://reader035.vdocuments.mx/reader035/viewer/2022070813/5f0d2cd17e708231d4390a71/html5/thumbnails/29.jpg)
A better wayUses your existing architecture
WidgetProcessorWidgetProcessor LayoutLayoutMetawidgetMetawidget
ask to process
return processed widgetask to layout
laid out
...
![Page 30: Metawidgetmetawidget.sourceforge.net/media/presentation/Meta... · A better way Uses your existing architecture - your existing annotations, XML files, business rules - your existing](https://reader035.vdocuments.mx/reader035/viewer/2022070813/5f0d2cd17e708231d4390a71/html5/thumbnails/30.jpg)
A better wayUses your existing architecture
WidgetProcessorWidgetProcessor LayoutLayoutMetawidgetMetawidget
Data BindingData Binding
ValidatorsValidators
ConvertersConverters
ask to process
return processed widgetask to layout
laid out
...
![Page 31: Metawidgetmetawidget.sourceforge.net/media/presentation/Meta... · A better way Uses your existing architecture - your existing annotations, XML files, business rules - your existing](https://reader035.vdocuments.mx/reader035/viewer/2022070813/5f0d2cd17e708231d4390a71/html5/thumbnails/31.jpg)
A better wayUses your existing architecture
WidgetProcessorWidgetProcessor LayoutLayoutMetawidgetMetawidgetTableLayoutTableLayout
Data BindingData Binding
ValidatorsValidators
ConvertersConverters
ask to process
return processed widgetask to layout
laid out
...
![Page 32: Metawidgetmetawidget.sourceforge.net/media/presentation/Meta... · A better way Uses your existing architecture - your existing annotations, XML files, business rules - your existing](https://reader035.vdocuments.mx/reader035/viewer/2022070813/5f0d2cd17e708231d4390a71/html5/thumbnails/32.jpg)
A better wayUses your existing architecture
WidgetProcessorWidgetProcessor LayoutLayoutMetawidgetMetawidget
TableLayoutTableLayout
HeadingDecoratorHeading
Decorator
Data BindingData Binding
ValidatorsValidators
ConvertersConverters
ask to process
return processed widgetask to layout
laid out
...
![Page 33: Metawidgetmetawidget.sourceforge.net/media/presentation/Meta... · A better way Uses your existing architecture - your existing annotations, XML files, business rules - your existing](https://reader035.vdocuments.mx/reader035/viewer/2022070813/5f0d2cd17e708231d4390a71/html5/thumbnails/33.jpg)
A better wayUses your existing architecture
WidgetProcessorWidgetProcessor LayoutLayoutMetawidgetMetawidget
HeadingDecoratorHeading
Decorator
RichFaces TabDecorator
RichFaces TabDecorator
Data BindingData Binding
ValidatorsValidators
ConvertersConverters
ask to process
return processed widgetask to layout
laid out
= automatic consistency across forms
TableLayoutTableLayout
...
![Page 34: Metawidgetmetawidget.sourceforge.net/media/presentation/Meta... · A better way Uses your existing architecture - your existing annotations, XML files, business rules - your existing](https://reader035.vdocuments.mx/reader035/viewer/2022070813/5f0d2cd17e708231d4390a71/html5/thumbnails/34.jpg)
Appendix B
![Page 35: Metawidgetmetawidget.sourceforge.net/media/presentation/Meta... · A better way Uses your existing architecture - your existing annotations, XML files, business rules - your existing](https://reader035.vdocuments.mx/reader035/viewer/2022070813/5f0d2cd17e708231d4390a71/html5/thumbnails/35.jpg)
A better way
Acid Test:
Retrofittingan existing app