Vaadin
              7
 today and tomorrow

                      @joonaslehtinen
                      Vaadin, Founder
v0.1
2001

        v3
       2002


         Open
        Source
v4
 2006


Ajax

         v5
        2007
v6
2009   7
Vaadin today and tomorrow
934 tickets closed during 16 months of
development

Oldest ticket created 3/2008
Newest ticket 2/2013

3939 commits made by 23 authors
93 % by 6 persons

> 1 000 000 lines of code touched
Vaadin today and tomorrow
Vaadin today and tomorrow
https://github.com/
vaadin/dashboard-
demo
Vaadin today and tomorrow
Vaadin today and tomorrow
Vaadin today and tomorrow
Renewed
             JS
      Sass
                         from Inside
         HTML5
                  +=    UI
                  GWT

                        RPC
Complete                State   Field

stack
Vaadin today and tomorrow
Vaadin today and tomorrow
Vaadin today and tomorrow
Vaadin today and tomorrow
Vaadin today and tomorrow
Vaadin today and tomorrow
Vaadin today and tomorrow
Vaadin today and tomorrow
Vaadin today and tomorrow
Vaadin today and tomorrow
7
Favorite picks
Vaadin += GWT
Vaadin today and tomorrow
Vaadin today and tomorrow
Vaadin today and tomorrow
GWT
Compatible
Server
                    Pr
             od      Op
                        t
          -
                 im
                                               r
    uc
                                             fo
       ti     ize
            df                             d
 vit
                                     ize
y      or
                                  tim
                               e rol
                                Op
                                  t-



                            s d ont
                             i C
                               ien
                             Cl
Architecture
Vaadin today and tomorrow
Vaadin today and tomorrow
Vaadin today and tomorrow
Vaadin today and tomorrow
Vaadin today and tomorrow
Vaadin today and tomorrow
Vaadin today and tomorrow
New Windowing API
Vaadin today and tomorrow
public class Vaadin6App extends Application {

	   public void init() {
	   	 setMainWindow(createWindow());
	   }

	   public Window getWindow(String name) {
	   	 Window window = super.getWindow(name);
	   	 if (window == null) {
	   	 	 window = createWindow();
	   	 	 window.setName(name);
	   	 	 addWindow(window);
	   	 }
	   	 return window;
	   }

	   private Window createWindow() {
	   	 Window window = new Window("Vaadin 6 Application");
	   	 window.addComponent(new TextField("What is your name"));
	   	 window.addComponent(new Button("Do not push me"));
	   	 return window;
	   }

}
@Title("Vaadin 7 Application")
public class Vaadin7uiUI extends UI {

	   public void init(VaadinRequest request) {
	   	 addComponent(new TextField("What is your name"));
	   	 addComponent(new Button("Do not push me"));
	   }

}
Built-in high level
View management
Sass
Variables & functions




                        Demo
Mixins




         Demo
Redesigned
Forms
public class Employee {
	 String firstName;
	 String lastName;
	 double salary;
                                        6
	 Date birthDate;
      // Getters, setters, …
}

Form form = new Form();
form.setItemDataSource(
   new BeanItem<Employee>(employee));
Vaadin today and tomorrow
Vaadin today and tomorrow
form.setFormFieldFactory(new FormFieldFactory() {

	 	 	 public Field createField(Item item, Object propertyId,
	 	 	 	 	 Component uiContext) {

	   	   	   	   if ("birthDate".equals(propertyId)) {
                                                                 6
	   	   	   	   	 DateField df = new DateField();
	   	   	   	   	 df.setResolution(DateField.RESOLUTION_DAY);
	   	   	   	   	 return df;
	   	   	   	   }

                // ..

	   	   	 	 return DefaultFieldFactory.createFieldByPropertyType(item
	   	   	 	 	 	 .getItemProperty(propertyId).getType());
	   	   	 }
	   	   });
7
	 	 GridLayout form = new GridLayout(2,2) {

	   	   	    TextField   firstName = new TextField("First name");
	   	   	    TextField   lastName = new TextField("Last name");
	   	   	    TextField   salary = new TextField("Salary");
	   	   	    DateField   birthDate = new DateField("Birth date");

	   	   	    {
	   	   	    	   birthDate.setResolution(Resolution.DAY);
	   	   	    	   setSpacing(true);
	   	   	    	   addComponent(firstName);
	   	   	    	   addComponent(lastName);
	   	   	    	   addComponent(birthDate);
	   	   	    	   addComponent(salary);
	   	   	    }
	   	   };

	 	 BeanFieldGroup<Employee> fieldGroup = new BeanFieldGroup<Employee>(Employee.class);
	 	 fieldGroup.bindMemberFields(form);
	 	 fieldGroup.setItemDataSource(new BeanItem<Employee>(employee));
public class Person {

    @Size(min = 5, max = 50)
    private String name;

    @Min(0)
    @Max(100)
    private int age;

    // + constructor + setters + getters
}
“Joonas Lehtinen”



       presentation
                           Component
       model




                       firstName = “Joonas”
Demo                  lastName = “Lehtinen”
RPC
State
Widget
                                        6
                     Paintable
          Variable
client   Changes


server
                                 UIDL


                 Component
Widget
                                7
                Connector

       client
                            State
       server
                RPC


                Component
Demo
public interface ButtonRpc extends ServerRpc {
                             public void click(MouseEventDetails details);
                         }




                                                               private ButtonRpc rpc = new ButtonRpc() {
                                                                  public void click(
private ButtonRpc rpc =
                                                                    MouseEventDetails details) {
RpcProxy.create(ButtonRpc.class, this);
                                                                        // do stuff
                                                                  }
public void onClick(ClickEvent event) {
                                                               };
  rpc.click(
     new MouseEventDetails(event));
                                                               public Button() {
}
                                                                 registerRpc(rpc);
                                                               }




                                    client              server
JavaScript
Add-ons
Publish API from Java

getPage().getJavaScript().addCallback("myCallback",
	 new JavaScriptCallback() {
	 	 public void call(JSONArray arguments) throws JSONException {
	 	 	 // Do something with the arguments
	 	 }
	 });
	 	

Use from JavaScript

window.myCallback('foo', 100);
Widget implementation in JavaScript

window.com_example_MyWidget = function() {
	 var element = $(this.getWidgetElement());
	
    // Draw a plot for any server-side (plot data) state change
	 this.onStateChange = function() {
	 	 $.plot(element, this.getState().series, {grid: {clickable: true}});
	 }

      // Communicate local events back to server-side component
	    element.bind('plotclick', function(event, point, item) {
	    	 if (item) {
        	 var onPlotClick = this.getCallback("plotClick");
	    	 	 onPlotClick(item.seriesIndex, item.dataIndex);
	    	 }
	    });
}
Server-side Java API for Widget

public class MyWidget extends AbstractJavaScriptComponent {

	   public MyWidget() {
	   	 registerCallback("plotClick", new JavaScriptCallback() {
	   	 	 public void call(JSONArray arguments) throws JSONException {
	   	 	 	 // Do something with the event
	   	 	 }
	   	 });
	   }

	   public static class MyWidgetState extends ComponentState {
	   	 public List<List<List<Double>>> plotSeriesData =
	   	 	 	 new ArrayList<List<List<Double>>>();
	   	 // getters & setters
	   }

}
HTML5
<!DOCTYPE html>
Lighter DOM   Minimized reflows


  6.8



  7.0
Vaadin today and tomorrow
Vaadin today and tomorrow
IE8 (norm)
Vaadin today and tomorrow
Roadmap
Vaadin Framework 7.1
 • Server push
   • Based on Atmosphere Framework
   • Web sockets, long polling and polling
 • Calendar (now under Apache 2.0 license)
 • Limited IE 10 support without touch
 • CSS string inject
 • Renewed debug console features
    ◦ Redesigned UI/UX for debug window
    ◦ Optimize widgetset
 • Arithmetics for SASS
 • Packaging CSS for add-ons without a widgetset
Vaadin today and tomorrow
Vaadin Charts
 • 1.1 version to be released in May, 2013
   • New charts:
     • Funnel
     • Box plot
     • Waterfall
     • Bubble
     • Error bars
   • Different coloring of a graph above and below a threshold
   • Pinch zooming and panning for touch devices
Vaadin today and tomorrow
Vaadin today and tomorrow
Vaadin today and tomorrow
Vaadin today and tomorrow
Vaadin today and tomorrow
Vaadin today and tomorrow
Vaadin today and tomorrow
Vaadin TouchKit
  • 3.0 version to be released in April
    • Vaadin 7 support
    • New components:
      • URLField
      • Datefield
      • Combobox

  • Preparing WP8 support
Vaadin TestBench
  • 3.1 adds headless mode
    in May
Vaadin CDI
  • Alpha to be released in the end of March
  • Apache 2.0 License
Vaadin JPAContainer
  • License changed to Apache 2.0
  • Vaadin 7 compatible version released in March
?   joonas@vaadin.com
      vaadin.com/joonas
        @joonaslehtinen

More Related Content

PDF
Vaadin 7 Today and Tomorrow
PDF
PDF
Vaadin7 modern-web-apps-in-java
PDF
Vaadin 7
PDF
Vaadin 7
PDF
Applet 2 container and action_listener
ODP
Jersey Guice AOP
PPTX
Surface flingerservice(서피스플링거서비스초기화)
Vaadin 7 Today and Tomorrow
Vaadin7 modern-web-apps-in-java
Vaadin 7
Vaadin 7
Applet 2 container and action_listener
Jersey Guice AOP
Surface flingerservice(서피스플링거서비스초기화)

What's hot (20)

PDF
03 - Qt UI Development
PDF
Sustaining Test-Driven Development
PDF
Samsung WebCL Prototype API
PDF
Construire une application JavaFX 8 avec gradle
PDF
#JavaFX.forReal() - ElsassJUG
PDF
안드로이드 데이터 바인딩
PPTX
classes & objects in cpp overview
DOCX
Final_Project
PDF
Conf soat tests_unitaires_Mockito_jUnit_170113
PDF
T3chFest2016 - Uso del API JavaScript de Photoshop para obtener fotos HDTR
PDF
Dagger & rxjava & retrofit
PDF
OpenGL SC 2.0 Quick Reference
PPTX
Beginning direct3d gameprogrammingcpp02_20160324_jintaeks
PDF
Refactor to Reactive With Spring 5 and Project Reactor
DOC
Create a Customized GMF DnD Framework
PDF
My way to clean android v2 English DroidCon Spain
PDF
JJUG CCC 2011 Spring
PDF
The Ring programming language version 1.7 book - Part 85 of 196
PDF
The Ring programming language version 1.6 book - Part 73 of 189
PDF
Testing Android apps based on Dagger and RxJava
03 - Qt UI Development
Sustaining Test-Driven Development
Samsung WebCL Prototype API
Construire une application JavaFX 8 avec gradle
#JavaFX.forReal() - ElsassJUG
안드로이드 데이터 바인딩
classes & objects in cpp overview
Final_Project
Conf soat tests_unitaires_Mockito_jUnit_170113
T3chFest2016 - Uso del API JavaScript de Photoshop para obtener fotos HDTR
Dagger & rxjava & retrofit
OpenGL SC 2.0 Quick Reference
Beginning direct3d gameprogrammingcpp02_20160324_jintaeks
Refactor to Reactive With Spring 5 and Project Reactor
Create a Customized GMF DnD Framework
My way to clean android v2 English DroidCon Spain
JJUG CCC 2011 Spring
The Ring programming language version 1.7 book - Part 85 of 196
The Ring programming language version 1.6 book - Part 73 of 189
Testing Android apps based on Dagger and RxJava
Ad

Similar to Vaadin today and tomorrow (20)

PDF
Lecture: Vaadin Overview
PDF
PDF
Vaadin 7 CN
PDF
Vaadin 7
PDF
Vaadin 7 by Joonas Lehtinen
PDF
Vaadin - Rich Web Applications in Server-side Java without Plug-ins or JavaSc...
PDF
Vaadin, Rich Web Apps in Server-Side Java without Plug-ins or JavaScript: Joo...
PDF
Vaadin 7.2
PDF
Remote controlling Parrot AR Drone with Spring Boot & Vaadin (JavaCro15)
PDF
The spring 32 update final
PDF
Hybrid applications
PDF
Rich Internet Applications con JavaFX e NetBeans
PDF
Designing a JavaFX Mobile application
KEY
Modular Web Applications With Netzke
PDF
Vaadin Introduction, 7.3 edition
PDF
GWT Enterprise Edition
PDF
GQuery a jQuery clone for Gwt, RivieraDev 2011
PDF
Unit 07: Design Patterns and Frameworks (2/3)
PDF
Riena onrap econ-2011
PDF
JavaCro'14 - Building interactive web applications with Vaadin – Peter Lehto
Lecture: Vaadin Overview
Vaadin 7 CN
Vaadin 7
Vaadin 7 by Joonas Lehtinen
Vaadin - Rich Web Applications in Server-side Java without Plug-ins or JavaSc...
Vaadin, Rich Web Apps in Server-Side Java without Plug-ins or JavaScript: Joo...
Vaadin 7.2
Remote controlling Parrot AR Drone with Spring Boot & Vaadin (JavaCro15)
The spring 32 update final
Hybrid applications
Rich Internet Applications con JavaFX e NetBeans
Designing a JavaFX Mobile application
Modular Web Applications With Netzke
Vaadin Introduction, 7.3 edition
GWT Enterprise Edition
GQuery a jQuery clone for Gwt, RivieraDev 2011
Unit 07: Design Patterns and Frameworks (2/3)
Riena onrap econ-2011
JavaCro'14 - Building interactive web applications with Vaadin – Peter Lehto
Ad

More from Joonas Lehtinen (19)

PDF
Web Components for Java Developers
PDF
Vaadin Components @ Angular U
PDF
Vaadin & Web Components
PDF
Vaadin Components
PDF
Hybrid webinar
PDF
Vaadin intro
PDF
Vaadin intro at GWT.create conference
PDF
Notes on architecture
PDF
Vaadin roadmap-devoxx-2013
PDF
Beoynd Vaadin 7
PDF
Hackathon - Building vaadin add on components
PDF
Migration from vaadin 6 to vaadin 7 devoxx france 2013
PDF
Desingning reusable web components
PDF
Vaadin 7 what next
PDF
Client-Server Hybrid Apps with Vaadin
PDF
Building i pad apps in pure java with vaadin
PDF
Vaadin += GWT
PDF
Desingning reusable web components
PDF
Html5 with Vaadin and Scala
Web Components for Java Developers
Vaadin Components @ Angular U
Vaadin & Web Components
Vaadin Components
Hybrid webinar
Vaadin intro
Vaadin intro at GWT.create conference
Notes on architecture
Vaadin roadmap-devoxx-2013
Beoynd Vaadin 7
Hackathon - Building vaadin add on components
Migration from vaadin 6 to vaadin 7 devoxx france 2013
Desingning reusable web components
Vaadin 7 what next
Client-Server Hybrid Apps with Vaadin
Building i pad apps in pure java with vaadin
Vaadin += GWT
Desingning reusable web components
Html5 with Vaadin and Scala

Vaadin today and tomorrow

  • 1. Vaadin 7 today and tomorrow @joonaslehtinen Vaadin, Founder
  • 2. v0.1 2001 v3 2002 Open Source
  • 3. v4 2006 Ajax v5 2007
  • 6. 934 tickets closed during 16 months of development Oldest ticket created 3/2008 Newest ticket 2/2013 3939 commits made by 23 authors 93 % by 6 persons > 1 000 000 lines of code touched
  • 13. Renewed JS Sass from Inside HTML5 += UI GWT RPC Complete State Field stack
  • 30. Server Pr od Op t - im r uc fo ti ize df d vit ize y or tim e rol Op t- s d ont i C ien Cl
  • 41. public class Vaadin6App extends Application { public void init() { setMainWindow(createWindow()); } public Window getWindow(String name) { Window window = super.getWindow(name); if (window == null) { window = createWindow(); window.setName(name); addWindow(window); } return window; } private Window createWindow() { Window window = new Window("Vaadin 6 Application"); window.addComponent(new TextField("What is your name")); window.addComponent(new Button("Do not push me")); return window; } }
  • 42. @Title("Vaadin 7 Application") public class Vaadin7uiUI extends UI { public void init(VaadinRequest request) { addComponent(new TextField("What is your name")); addComponent(new Button("Do not push me")); } }
  • 44. Sass
  • 46. Mixins Demo
  • 48. public class Employee { String firstName; String lastName; double salary; 6 Date birthDate; // Getters, setters, … } Form form = new Form(); form.setItemDataSource( new BeanItem<Employee>(employee));
  • 51. form.setFormFieldFactory(new FormFieldFactory() { public Field createField(Item item, Object propertyId, Component uiContext) { if ("birthDate".equals(propertyId)) { 6 DateField df = new DateField(); df.setResolution(DateField.RESOLUTION_DAY); return df; } // .. return DefaultFieldFactory.createFieldByPropertyType(item .getItemProperty(propertyId).getType()); } });
  • 52. 7 GridLayout form = new GridLayout(2,2) { TextField firstName = new TextField("First name"); TextField lastName = new TextField("Last name"); TextField salary = new TextField("Salary"); DateField birthDate = new DateField("Birth date"); { birthDate.setResolution(Resolution.DAY); setSpacing(true); addComponent(firstName); addComponent(lastName); addComponent(birthDate); addComponent(salary); } }; BeanFieldGroup<Employee> fieldGroup = new BeanFieldGroup<Employee>(Employee.class); fieldGroup.bindMemberFields(form); fieldGroup.setItemDataSource(new BeanItem<Employee>(employee));
  • 53. public class Person { @Size(min = 5, max = 50) private String name; @Min(0) @Max(100) private int age; // + constructor + setters + getters }
  • 54. “Joonas Lehtinen” presentation Component model firstName = “Joonas” Demo lastName = “Lehtinen”
  • 56. Widget 6 Paintable Variable client Changes server UIDL Component
  • 57. Widget 7 Connector client State server RPC Component Demo
  • 58. public interface ButtonRpc extends ServerRpc { public void click(MouseEventDetails details); } private ButtonRpc rpc = new ButtonRpc() { public void click( private ButtonRpc rpc = MouseEventDetails details) { RpcProxy.create(ButtonRpc.class, this); // do stuff } public void onClick(ClickEvent event) { }; rpc.click( new MouseEventDetails(event)); public Button() { } registerRpc(rpc); } client server
  • 60. Publish API from Java getPage().getJavaScript().addCallback("myCallback", new JavaScriptCallback() { public void call(JSONArray arguments) throws JSONException { // Do something with the arguments } }); Use from JavaScript window.myCallback('foo', 100);
  • 61. Widget implementation in JavaScript window.com_example_MyWidget = function() { var element = $(this.getWidgetElement()); // Draw a plot for any server-side (plot data) state change this.onStateChange = function() { $.plot(element, this.getState().series, {grid: {clickable: true}}); } // Communicate local events back to server-side component element.bind('plotclick', function(event, point, item) { if (item) { var onPlotClick = this.getCallback("plotClick"); onPlotClick(item.seriesIndex, item.dataIndex); } }); }
  • 62. Server-side Java API for Widget public class MyWidget extends AbstractJavaScriptComponent { public MyWidget() { registerCallback("plotClick", new JavaScriptCallback() { public void call(JSONArray arguments) throws JSONException { // Do something with the event } }); } public static class MyWidgetState extends ComponentState { public List<List<List<Double>>> plotSeriesData = new ArrayList<List<List<Double>>>(); // getters & setters } }
  • 63. HTML5
  • 65. Lighter DOM Minimized reflows 6.8 7.0
  • 71. Vaadin Framework 7.1 • Server push • Based on Atmosphere Framework • Web sockets, long polling and polling • Calendar (now under Apache 2.0 license) • Limited IE 10 support without touch • CSS string inject • Renewed debug console features ◦ Redesigned UI/UX for debug window ◦ Optimize widgetset • Arithmetics for SASS • Packaging CSS for add-ons without a widgetset
  • 73. Vaadin Charts • 1.1 version to be released in May, 2013 • New charts: • Funnel • Box plot • Waterfall • Bubble • Error bars • Different coloring of a graph above and below a threshold • Pinch zooming and panning for touch devices
  • 81. Vaadin TouchKit • 3.0 version to be released in April • Vaadin 7 support • New components: • URLField • Datefield • Combobox • Preparing WP8 support
  • 82. Vaadin TestBench • 3.1 adds headless mode in May
  • 83. Vaadin CDI • Alpha to be released in the end of March • Apache 2.0 License
  • 84. Vaadin JPAContainer • License changed to Apache 2.0 • Vaadin 7 compatible version released in March
  • 85. ? joonas@vaadin.com vaadin.com/joonas @joonaslehtinen