WebApp controlled Parrot AR Drone with Vaadin and Spring Boot

Post on 01-Jul-2015

470 views 3 download

description

EclipseCon 2014 presentation about using Vaadin and SpringBoot to remote control Parrot AR Drone over a web application.

Transcript of WebApp controlled Parrot AR Drone with Vaadin and Spring Boot

slogan

Je zult maar letter wezen. Goed, ik ben niet ontevredet. Maar het valt niet mee in deze zeventiger jaren tot het vaderlandse alfabet te behoren. Foto-zetterijen wringen je steeds in steeds ingevikkelder. Je zult maar letter wezen. Goed, ik ben

Je zult maar letter wezen. Goed, ik ben niet ontevredet. Maar het valt niet mee in deze zeventiger jaren tot het vaderlandse alfabet te behoren. Foto-zetterijen wringen je steeds in steeds ingevikkelder. Je zult maar letter wezen. Goed, ik ben

Je zult maar letter wezen. Goed, ik ben niet ontevredet. Maar het valt niet mee in deze zeventiger jaren tot het vaderlandse alfabet te behoren. Foto-zetterijen wringen je steeds in steeds ingevikkelder. Je zult maar letter wezen. Goed, ik ben

Je zult maar letter wezen. Goed, ik ben niet ontevredet. Maar het valt niet mee in deze zeventiger jaren tot het vaderlandse alfabet te behoren. Foto-zetterijen wringen je steeds in steeds ingevikkelder. Je zult maar letter wezen. Goed, ik ben Je zult maar letter wezen. Goed, ik ben niet ontevredet. Maar het valt niet mee in deze zeventiger jaren tot het vaderlandse alfabet te behoren. Foto-zetterijen wringen je steeds in steeds ingevikkelder. Je zult maar letter wezen. Goed, ik ben

WebApp controlled Parrot AR Drone with Vaadin and Spring Boot

@peter_lehto Vaadin Expert & Trainer

What is Vaadin?

Integrating with

Spring Boot

QA

How to get

started?

Drone

User interface framework for rich

web applications

htmljava

> [] + [];>

> [] + {};> [object Object]

> {} + [];> 0

> {} + {};> NaN

> NaN == NaN;> false

> typeof NaN;> number

> var foo = [0];> foo == !foo;> true

Developer

Productivity

Rich

UX

User Interface Components

How does Vaadin work, really?

JogDial jogDial = new JogDial(Size.MEDIUM);!TextField x = new TextField();TextField y = new TextField();

JogDial jogDial = new JogDial(Size.MEDIUM);!TextField x = new TextField();TextField y = new TextField();!jogDial.addMoveListener(e -> { x.setValue(e.getX()); y.setValue(e.getY());});

JogDial jogDial = new JogDial(Size.MEDIUM);!TextField x = new TextField();TextField y = new TextField();!jogDial.addMoveListener(e -> { x.setValue(e.getX()); y.setValue(e.getY());});!layout.addComponents(x, y, jogDial);

• Loader page • CSS Theme • Images • JavaScript

135k

Compressed & reduced Thin client

• x=-0.5, y=0.5 • jogDial moved !314 bytes

JogDial jogDial = new JogDial(Size.MEDIUM);!TextField x = new TextField();TextField y = new TextField();!jogDial.addMoveListener(e -> { x.setValue(e.getX()); y.setValue(e.getY());});!layout.addComponents(x, y, jogDial);

• moveCap(-0.5,0.5) • x.value=-0.5

y.value=0.5 !351 bytes

• x=-0.5, y=0.5• jogDial moved!314

Integration with

Single point of focus

Easily customizableNon-functional requirementsA tool for getting started quickly

<parent>! <groupId>org.springframework.boot</groupId>! <artifactId>spring-boot-starter-parent</artifactId>! <version>1.1.8.RELEASE</version>!</parent>!!<dependencies>! <dependency>! <groupId>org.springframework.boot</groupId>! <artifactId>spring-boot-starter-web</artifactId>! </dependency>! <dependency>! <groupId>org.vaadin.spring</groupId>! <artifactId>spring-boot-vaadin</artifactId>! </dependency>!</dependencies>

Maven POM hierarchy

Dependencies as @BeanAnnotation based configuration

Embedded web server

@Configuration@ComponentScan@EnableAutoConfiguration@EnableTouchKitServletpublic class Application {! public static void main(String[] args) { SpringApplication.run(Application.class, args).start(); }! @Bean DroneTemplate provideTemplate(TaskExecutor taskExecutor, DroneStateChangeCallback[] callbacks) throws UnknownHostException { return new DroneTemplate(taskExecutor, callbacks); }! @Bean Drone provideDrone() { return new Drone(); }}

@VaadinUI / @TouchkitUI

@EventBus for View/UI/App@UIScope

Spring managed beans

slogan

Je zult maar letter wezen. Goed, ik ben niet ontevredet. Maar het valt niet mee in deze zeventiger jaren tot het vaderlandse alfabet te behoren. Foto-zetterijen wringen je steeds in steeds ingevikkelder. Je zult maar letter wezen. Goed, ik ben

Je zult maar letter wezen. Goed, ik ben niet ontevredet. Maar het valt niet mee in deze zeventiger jaren tot het vaderlandse alfabet te behoren. Foto-zetterijen wringen je steeds in steeds ingevikkelder. Je zult maar letter wezen. Goed, ik ben

Je zult maar letter wezen. Goed, ik ben niet ontevredet. Maar het valt niet mee in deze zeventiger jaren tot het vaderlandse alfabet te behoren. Foto-zetterijen wringen je steeds in steeds ingevikkelder. Je zult maar letter wezen. Goed, ik ben

Je zult maar letter wezen. Goed, ik ben niet ontevredet. Maar het valt niet mee in deze zeventiger jaren tot het vaderlandse alfabet te behoren. Foto-zetterijen wringen je steeds in steeds ingevikkelder. Je zult maar letter wezen. Goed, ik ben Je zult maar letter wezen. Goed, ik ben niet ontevredet. Maar het valt niet mee in deze zeventiger jaren tot het vaderlandse alfabet te behoren. Foto-zetterijen wringen je steeds in steeds ingevikkelder. Je zult maar letter wezen. Goed, ik ben

@TouchKitUI@Theme("drone")public class DroneUI extends UI implements InitializingBean, DisposableBean { @Autowired private DroneTemplate service;! @Autowired private ControlPanel controlPanel;! @Autowired private GaugePanel gaugePanel;! …}

@Target({java.lang.annotation.ElementType.TYPE})@Retention(java.lang.annotation.RetentionPolicy.RUNTIME)@Documented@VaadinComponent@UIScopepublic @interface TouchKitUI { String path() default "";}

@Target({java.lang.annotation.ElementType.TYPE})@Retention(java.lang.annotation.RetentionPolicy.RUNTIME)@Documented@VaadinComponent@UIScopepublic @interface TouchKitUI { String path() default "";}

@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Import({TouchKitServletConfiguration.class, PingServletConfiguration.class})public @interface EnableTouchKitServlet {}

EventBus for loose coupling

Subscribe / UnsubscribeScoped events

UI.access Runnable for threads

slogan

Je zult maar letter wezen. Goed, ik ben niet ontevredet. Maar het valt niet mee in deze zeventiger jaren tot het vaderlandse alfabet te behoren. Foto-zetterijen wringen je steeds in steeds ingevikkelder. Je zult maar letter wezen. Goed, ik ben

Je zult maar letter wezen. Goed, ik ben niet ontevredet. Maar het valt niet mee in deze zeventiger jaren tot het vaderlandse alfabet te behoren. Foto-zetterijen wringen je steeds in steeds ingevikkelder. Je zult maar letter wezen. Goed, ik ben

Je zult maar letter wezen. Goed, ik ben niet ontevredet. Maar het valt niet mee in deze zeventiger jaren tot het vaderlandse alfabet te behoren. Foto-zetterijen wringen je steeds in steeds ingevikkelder. Je zult maar letter wezen. Goed, ik ben

Je zult maar letter wezen. Goed, ik ben niet ontevredet. Maar het valt niet mee in deze zeventiger jaren tot het vaderlandse alfabet te behoren. Foto-zetterijen wringen je steeds in steeds ingevikkelder. Je zult maar letter wezen. Goed, ik ben Je zult maar letter wezen. Goed, ik ben niet ontevredet. Maar het valt niet mee in deze zeventiger jaren tot het vaderlandse alfabet te behoren. Foto-zetterijen wringen je steeds in steeds ingevikkelder. Je zult maar letter wezen. Goed, ik ben

@TouchKitUI@Theme("drone")public class DroneUI extends UI implements InitializingBean, DisposableBean { … @Autowired private DroneEmergencyDialog emergencyDialog;! @Autowired private EventBus eventBus;! @Override public void afterPropertiesSet() throws Exception { eventBus.subscribe(this); }! @EventBusListenerMethod protected void onEmergencyEvent(DroneEmergencyEvent event) { this.access(() -> emergencyDialog.show(this)); }}

slogan

Je zult maar letter wezen. Goed, ik ben niet ontevredet. Maar het valt niet mee in deze zeventiger jaren tot het vaderlandse alfabet te behoren. Foto-zetterijen wringen je steeds in steeds ingevikkelder. Je zult maar letter wezen. Goed, ik ben

Je zult maar letter wezen. Goed, ik ben niet ontevredet. Maar het valt niet mee in deze zeventiger jaren tot het vaderlandse alfabet te behoren. Foto-zetterijen wringen je steeds in steeds ingevikkelder. Je zult maar letter wezen. Goed, ik ben

Je zult maar letter wezen. Goed, ik ben niet ontevredet. Maar het valt niet mee in deze zeventiger jaren tot het vaderlandse alfabet te behoren. Foto-zetterijen wringen je steeds in steeds ingevikkelder. Je zult maar letter wezen. Goed, ik ben

Je zult maar letter wezen. Goed, ik ben niet ontevredet. Maar het valt niet mee in deze zeventiger jaren tot het vaderlandse alfabet te behoren. Foto-zetterijen wringen je steeds in steeds ingevikkelder. Je zult maar letter wezen. Goed, ik ben Je zult maar letter wezen. Goed, ik ben niet ontevredet. Maar het valt niet mee in deze zeventiger jaren tot het vaderlandse alfabet te behoren. Foto-zetterijen wringen je steeds in steeds ingevikkelder. Je zult maar letter wezen. Goed, ik ben

<<WIFI-HOTSPOT>> 192.168.1.1 AR Parrot

Drone

<<WIFI-HOTSPOT>> 192.168.1.1 AR Parrot

Drone

<<JVM>> <<Embedded-Jetty>>

192.168.1.2

<<WIFI-HOTSPOT>> 192.168.1.1 AR Parrot

Drone

<<JVM>> <<Embedded-Jetty>>

192.168.1.2<<Embedded-Jetty>>

192.168.1.2 Vaadin UI

SpringBoot

<<WIFI-HOTSPOT>> 192.168.1.1 AR Parrot

Drone

<<JVM>> <<Embedded-Jetty>>

192.168.1.2<<Embedded-Jetty>>

192.168.1.2 Vaadin UI

SpringBoot

<<Browser>> (192.168.1.3)

User

<<VaadinUI>> DroneUI

<<VaadinUI>> DroneUI

<<Widget>> JogDial<<Widget>>

JogDial

<<Widget>> Gauge

<<Widget>> Gauge

<<Widget>> Gauge

<<VaadinUI>> DroneUI

<<Widget>> JogDial<<Widget>>

JogDial

<<Widget>> Gauge

<<Widget>> Gauge

<<Widget>> Gauge

<<Bean>> Drone

<<VaadinUI>> DroneUI

<<Widget>> JogDial<<Widget>>

JogDial

<<Widget>> Gauge

<<Widget>> Gauge

<<Widget>> Gauge

<<Bean>> DroneTemplate

<<Bean>> Drone

<<VaadinUI>> DroneUI

<<Widget>> JogDial<<Widget>>

JogDial

<<Widget>> Gauge

<<Widget>> Gauge

<<Widget>> Gauge

<<DroneStateCall…>> UIEventProducer

<<Bean>> DroneTemplate

<<Bean>> Drone

<<VaadinUI>> DroneUI

<<Widget>> JogDial<<Widget>>

JogDial

@Componentclass UIEventProducer implements DroneStateCallback {! @Autowired @EventBusScope(EventScope.APPLICATION) private EventBus eventBus;! @Override public void onDroneStateChanged(DroneState latestState) { if (latestState.isEmergency()) { eventBus.publish(this, new DroneEmergencyEvent()); } if (latestState.isBatteryTooLow()) { eventBus.publish(this, new DroneLowBatteryEvent()); }! eventBus.publish(this, new DroneBatteryEvent(this, latestState.getBattery()));! eventBus.publish(this, new DroneThetaEvent(this, latestState.getTheta()));! eventBus.publish(this, new DroneAltitudeEvent(this, latestState.getAltitude())); }}

Getting started

Klikkaa otsikkoa kolmesti ja kirjoita

teksti

vaadin.com/demostart.spring.iogithub.com/peholmst/vaadin4spring

github.com/vaadin/teleport

EclipseDownload Vaadin plugin from Marketplace

mvn archetype:generate -DarchetypeGroupId= com.vaadin -DarchetypeArtifactId= vaadin-archetype-application -DarchetypeVersion= 7.3.3

Maven

Download for Freevaadin.com/bookPDF, ePub, HTML

9 789529 319701

ISBN 978-952-93-1970-1

9 789529 319701

ISBN 978-952-93-1970-1

Vol 1 288 pages

Vol 2 434 pages

Lessons learned today

1. Finns smile, always 2. Vaadin is good for web apps, brings you great productivity 3. Boot kickstarts development and helps you all the way 4. If I catch you building your home pages with Vaadin + Boot

I’ll take you behind the sauna (a not-so-fun Finnish tradition)

slogan

Je zult maar letter wezen. Goed, ik ben niet ontevredet. Maar het valt niet mee in deze zeventiger jaren tot het vaderlandse alfabet te behoren. Foto-zetterijen wringen je steeds in steeds ingevikkelder. Je zult maar letter wezen. Goed, ik ben

Je zult maar letter wezen. Goed, ik ben niet ontevredet. Maar het valt niet mee in deze zeventiger jaren tot het vaderlandse alfabet te behoren. Foto-zetterijen wringen je steeds in steeds ingevikkelder. Je zult maar letter wezen. Goed, ik ben

Je zult maar letter wezen. Goed, ik ben niet ontevredet. Maar het valt niet mee in deze zeventiger jaren tot het vaderlandse alfabet te behoren. Foto-zetterijen wringen je steeds in steeds ingevikkelder. Je zult maar letter wezen. Goed, ik ben

Je zult maar letter wezen. Goed, ik ben niet ontevredet. Maar het valt niet mee in deze zeventiger jaren tot het vaderlandse alfabet te behoren. Foto-zetterijen wringen je steeds in steeds ingevikkelder. Je zult maar letter wezen. Goed, ik ben Je zult maar letter wezen. Goed, ik ben niet ontevredet. Maar het valt niet mee in deze zeventiger jaren tot het vaderlandse alfabet te behoren. Foto-zetterijen wringen je steeds in steeds ingevikkelder. Je zult maar letter wezen. Goed, ik ben

Questions, Comments?

@peter_lehto peter@vaadin.com

Vaadin Ltd