Metawidgetmetawidget.sourceforge.net/media/presentation/Meta... · A better way Uses your existing...

35
Metawidget “UI Generation done right” http://metawidget.org

Transcript of Metawidgetmetawidget.sourceforge.net/media/presentation/Meta... · A better way Uses your existing...

Page 1: Metawidgetmetawidget.sourceforge.net/media/presentation/Meta... · A better way Uses your existing architecture - your existing annotations, XML files, business rules - your existing

Metawidget“UI Generation done right”

http://metawidget.org

Page 2: Metawidgetmetawidget.sourceforge.net/media/presentation/Meta... · A better way Uses your existing architecture - your existing annotations, XML files, business rules - your existing

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

......

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

......

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

......

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

......

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

......

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

......

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

......

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

......

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

......

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

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

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

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

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

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

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

A better way

Acid Test:

Retrofittingan existing app