SlideShare a Scribd company logo
The GWT bet ... Luc Claes CTO ContactOffice.com Google Developer Day 2007
Coming from the country of… …  please forgive my (broken) English !
Agenda ContactOffice ? Reengineering the interface Selecting a framework Google Web Toolkit (GWT) ? [email_address] beta.contactoffice.com
ContactOffice ? Collaborative & Messaging Web Application  Founded in 1999 by 4 Belgian serial internet entrepreneurs
How big ? 1 million registrations 350.000 active accounts  (Feb 07) 250.000 paying accounts Global, 6 languages Profitable since 2003
Collaboration & Messaging WebApp Calendar (+ RSS) Contacts, To Do, Notes, Bookmarks (+ RSS), Synchro ... Groups Organiser Mail (+ RSS),  IMAP4 & POP3(s), SMTP, Webmail, Antivirus & AntiSpam, SMS, Fax, Alerts & Chat State-of-the-art Messaging  Web upload or WebDAV RSS & Vod/Podcasts,  Public sharing Documents Repository Forum, Wiki,  Bulletin Board,  Phone Calls, ... Collaboration
Everything can be shared  with users and groups! Sophisticated Access Right Model at user level  Applications : Individual user, Families,  Associations, Companies, Departments,  All kinds of teams, ...
ASP & Licence Models Hosted, Security, SLA Personalised, Private Label versions SSO : REST, XML-RPC, CAS, RSA ClearTrust, ... API : XML-RPC
Some happy customers
Technologies Back-end : Pure Java (POJOs only) Object Oriented Database Core business logic + various 'satellites' Web, SMTP c/s, POP3 c/s, IMAP4 c/s, WebDAV c/s, Synchro, Web services, … Built for scalability Web Clients  : Web 1.0 (HTML + JS + CSS) ~2000 JSP pages Pocket Explorer + Symbian Wap (WML) Voice XML (prototype)
Reengineering the interface Goal: Interface upgrade to current standards Weakness: Obsolete Client Architecture (thousands of JSP files) Strength: The 1999 Server Architecture (POJOs + OODB) is still state-of-the-art HTML + JavaScript + Frames Desktop like, Web 2.0 style,  Drag & Drop,  W idgets, ...
Selecting a framework / technology Many good solutions Own framework ? Cost of supporting what others might be doing well ? Ajax vs Flash ? OpenLazslo, Adobe Flex Xml + script syntax,  server-side lock-in, … SilverLight, JavaFX, good ol' Applets ? Ultra lightweight client + server-side Java ?  echo2, zk, thinwire...  Do they scale well ? Existing JS frameworks ? Dojo, Prototype, YUI, ... JavaScript language… JavaScript ? ?
JavaScript ? Powerful constructs Functions as 1st class objects, closures Prototype vs. Class Metaprogramming Ubiquitous dictionaries Dynamic typing but… JavaScript ? ?
The JavaScript nightmare (Very) dynamic language On the fly variables declarations Weak typing eval() Interesting IDEs operations are 'impossible'  (refactoring, smart searches, real-time compilation / syntax check, …) Readability ? Imprecise scoping, encapsulation Run-time errors detection only Even worse: the DOM + the browsers quirks… How to handle efficiently tens of Klocs, multiple developers ? Requires an  extremely  strict discipline (rules set, conventions) for a team
GWT ?  What is GWT ? G oogle  W eb  T oolkit GWT is a Google framework for building AJAX apps in the Java language Fully Open Source (Apache 2 Licence) Java --> JavaScript translation No plugin, no jvm Just 1 year old JavaScript GoogleWeb ToolKit ?
Google Web Toolkit ?  Some features Performances: Aggressive caching, code optimization, compression Clean backend integration: Efficient Java RPC mechanism (or JSON) Portability: Generates platform-specific code (IE 6+, 'old' Mozilla, Firefox, Opera, Safari) Native Java S cript is still reachable: JSNI  (JavaScript Native Interface) i18n But...  Java knowledge required for UI designers CSS only is not realistic JavaScript Google Web Toolkit ?
Google Web Toolkit ?  Java ? Java 1.4 (1.5 coming 'soon') Subset of java.lang.* and java.util.* emulated No introspection, no dynamic class loading Collections Optimizing Java    JavaScript compiler Dead code elimination Deferred binding No  if (mozilla) { … }  code Relatively rich UI library Widgets Panels Some missing pieces… JavaScript Google Web Toolkit ?
GWT & Software Engineering  'Industrial' software engineering Tools ! Tools! Tools ! IDEs: Eclipse integration, JetBrains GWT Studio,  GWT Designer, VistaFei, … Debugging (GWT hosted mode) Testing (junit) Refactoring Java SCCS Smart searches, navigation, auto-complete, quick fix, …  Compile time vs. Runtime errors detection **** JavaScript Google Web ToolKit ?
CO enhancements to GWT MV(C) framework THE  key factor for a successful large-scale development Necessary for event driven interfaces (the A in  A JAX) Side effect : eases collaboration between UI  and software developers Drag & Drop Attractive look & feel  Contextual menus Marquee selection Draggable splitters, Rich Text Edit  (available in GWT 1.4) Data grid Enhanced dialogs, property pages EditableLabel, ProgressBar, … Lesson: nothing was made 'impossible' by GWT design choices ! JavaScript Google Web Toolkit ContactOffice Enhancements
CO-GWT – Some figures ~ 1.2 man x year ~ 35000 lines of Java code (estimated target: 50 KLOC) ~ 250 files ~ 500 classes ~ 5000 Kbytes original JavaScript (ouch !) ~ 900 Kbytes compressed JavaScript (GWT 1.4: 680 Kbytes !) ~ 270 Kbytes gziped Aggressive caching mechanism JavaScript Google Web Toolkit ContactOffice
Development Workflow (Front-end) Software Engineer UI RPC, Model Raw UI design (Model interfacing, panels, widgets, …). Custom widgets CSS Enhanced UI design, non-CSS attributes, Formatting… SVN sandbox RPC, Model, (naive) view enhancements UI enhancements i18n (GWT) Help Manuals I18n
M odel -  V iew -  R emoting Remoting Model View notify Synchronous call Add listener xxxService xxxServiceAsync DTOs Shared between front-end and back-end Asynchronous call with command piggybacking Front-end only AbstractModel ModelObject ModelFolder abstractions Asynchronous call AsyncCallback
'Tip of the Day': Enhanced AsyncCallback Throbber handling Generic RPC exceptions handling Commands piggybacking public   class  COAsyncCallback  implements  AsyncCallback { … public  COAsyncCallback(AsyncCallback callback, Command onSuccessCommand) {
'Tip of the Day' (2) public   void  save(Command chainCommand) { getCalendarService().saveEvent(this, new  COAsyncCallback( new  GetEventDetailsCallback(), chainCommand)); } public   static   void  showCreationDialog(Event event) { event.save( new  ShowDialogCommand(event)); } private static class  ShowDialogCommand  implements  Command { private final  Event m_event ; public  ShowDialogCommand(Event event) { m_event = event; } public   void  execute() { new  EventPropertiesDialog(m_event).showCentered(); } } EventPropertiesDialog.java (View) : Event.java (Model) : Create an  event  object in the back-end, then edit its properties
Current Interface http://www.contactoffice.com
New GWT based Interface http://beta.contactoffice.com Indication of new + total number of items in lists Navigation repeated on left Help and extra information Dashboard giving quick access to main features
New GWT based Interface Horizontal splitter COMenuBar extends MenuBar Frame
New GWT based Interface - TreeView StackPanel TreeView 'Tree' based Composite Drag & drop source and target Contextual menus Close relationship with 'ModelFolder' and 'ModelObject'
New GWT based Interface - ListView Marquee selection Click to sort Multiselect, select range, (un) Select all Data grid, logical scrolling Close relationship with 'ModelFolder' and 'ModelObject' Drag & drop source Special keys handling Sortable columns Contextual menus
Enhanced Dialogs PropertyPageDialogBox extends CODialogBox extends DialogBox Property Page Modal or modeless Resizeable or fixed Close icon Property pages framework (validation, (de)activation, …) Specific listeners DialogRow Widget
Contextual menus MenuBar in PopupPanel Display is easy Invocation is hard  (right-click portability issues…)
Drag & Drop D&D engine handles: Regular D&D Marquee selection Splitters (Rectangular) drag sources & drop targets Could be hidden in widgets implementation Multi-select JavaScript Google Web Toolkit ContactOffice Enhancements
Legacy pages integration Legacy page (jsp) New page (GWT)
New calendar D&D event Access group & member's calendars Resizeable & overlap
Back-end (1) RemoteServiceServlet (GWT) GWTServlet AbstractHandler MailHandler MailServices … Instantiates (on each RPC invocation) CalendarHandler CalendarServices … HTTP request/session User credentials DB Transactions handling RemoteService (GWT) Actual RPC implementation ~ Invokes the Business Logic
Back-end (2) Straightforward integration Super-clean with a Java POJO back-end Fast migration path from DWR ~ 5000 specific lines of code, 13 classes/interfaces Front-end / back-end software versions synchronization needed!
TODO Usability !!! Bug fixes… Missing tools Forums, Tasks, Groups management Customization Dynamic CSS evaluation JSPs… not that easy in hosted mode. Compile time vs. Run time customization ? Safari & Opera portability Context menus … JavaScript Google Web Toolkit ContactOffice
Beta Launched http://beta.contactoffice.com
Questions?
Contact Us! [email_address] www.contactoffice.com blog.contactoffice.com

More Related Content

PPT
HTML5: An Introduction To Next Generation Web Development
PDF
JavaScript Libraries (Ajax Exp 2006)
PDF
Projects Valhalla, Loom and GraalVM at virtual JavaFest 2020 in Kiev, Ukraine...
PDF
Devfest09 Cschalk Gwt
PDF
The curious Life of JavaScript - Talk at SI-SE 2015
PDF
PDF
Rich internet application development using the dojo toolkit
PDF
GR8Conf 2011: Adopting Grails
HTML5: An Introduction To Next Generation Web Development
JavaScript Libraries (Ajax Exp 2006)
Projects Valhalla, Loom and GraalVM at virtual JavaFest 2020 in Kiev, Ukraine...
Devfest09 Cschalk Gwt
The curious Life of JavaScript - Talk at SI-SE 2015
Rich internet application development using the dojo toolkit
GR8Conf 2011: Adopting Grails

What's hot (20)

PDF
Apache Cordova 4.x
PDF
Building Real-World Dojo Web Applications
PDF
Professional Frontend Engineering
PDF
[English version] JavaFX and Web Integration
PDF
WebRTC Live Q&A Session #5 - JavaScript Promises and WebRTC Interoperability ...
PDF
HTML5 & CSS3 refresher for mobile apps
KEY
Drupal 6 JavaScript and jQuery
PPTX
JavaFX Versus HTML5 - JavaOne 2014
PPT
Dojo - from web page to web apps
PPTX
GWT HJUG Presentation
PDF
Dojo (QCon 2007 Slides)
PPTX
CiklumJavaSat15112011:Andrew Mormysh-GWT features overview
PPT
Visual studio.net
PPTX
XPages and Java (DanNotes 50th conference, November 2013)
PDF
Dive Into HTML5
PDF
blueMarine photographic workflow with Java
PDF
Up to Speed on HTML 5 and CSS 3
PPTX
Java 9 Module System Introduction
PDF
HTML5 Intoduction for Web Developers
PDF
Brave new world of HTML5 - Interlink Conference Vancouver 04.06.2011
Apache Cordova 4.x
Building Real-World Dojo Web Applications
Professional Frontend Engineering
[English version] JavaFX and Web Integration
WebRTC Live Q&A Session #5 - JavaScript Promises and WebRTC Interoperability ...
HTML5 & CSS3 refresher for mobile apps
Drupal 6 JavaScript and jQuery
JavaFX Versus HTML5 - JavaOne 2014
Dojo - from web page to web apps
GWT HJUG Presentation
Dojo (QCon 2007 Slides)
CiklumJavaSat15112011:Andrew Mormysh-GWT features overview
Visual studio.net
XPages and Java (DanNotes 50th conference, November 2013)
Dive Into HTML5
blueMarine photographic workflow with Java
Up to Speed on HTML 5 and CSS 3
Java 9 Module System Introduction
HTML5 Intoduction for Web Developers
Brave new world of HTML5 - Interlink Conference Vancouver 04.06.2011
Ad

Viewers also liked (6)

PPT
State of the City August 2007
PPTX
ACS Rubber Division
PPT
Teste Slide Share
PPT
Oh&S Computers
PPT
Constitution Day
PPTX
Cruise holidays presentation
State of the City August 2007
ACS Rubber Division
Teste Slide Share
Oh&S Computers
Constitution Day
Cruise holidays presentation
Ad

Similar to Google Dev Day2007 (20)

PDF
Brice Leblevennec @ FOWA Feb 07
PPTX
GWT = easy AJAX
PPT
SF JUG - GWT Can Help You Create Amazing Apps - 2009-10-13
PPT
PDF
GWT - Building Rich Internet Applications Using OO Tools
PPT
Google Web Toolkit Introduction - eXo Platform SEA
ODP
Google Web toolkit
ODP
Building Ajax apps with the Google Web Toolkit
PDF
Javaland 2014 / GWT architectures and lessons learned
PPT
GWT Training - Session 1/3
PDF
Gwt Presentation
PPT
GWT is Smarter Than You
PPT
Google Web Toolkits
PPTX
Gwt overview & getting started
PPT
Introduction to Google Web Toolkit
PPTX
Gwt session
PPTX
Google web toolkit ( Gwt )
PPTX
Gwt session
PPT
GWT Introduction for Eclipse Day
Brice Leblevennec @ FOWA Feb 07
GWT = easy AJAX
SF JUG - GWT Can Help You Create Amazing Apps - 2009-10-13
GWT - Building Rich Internet Applications Using OO Tools
Google Web Toolkit Introduction - eXo Platform SEA
Google Web toolkit
Building Ajax apps with the Google Web Toolkit
Javaland 2014 / GWT architectures and lessons learned
GWT Training - Session 1/3
Gwt Presentation
GWT is Smarter Than You
Google Web Toolkits
Gwt overview & getting started
Introduction to Google Web Toolkit
Gwt session
Google web toolkit ( Gwt )
Gwt session
GWT Introduction for Eclipse Day

Recently uploaded (20)

PPTX
Unilever_Financial_Analysis_Presentation.pptx
PPTX
4.5.1 Financial Governance_Appropriation & Finance.pptx
PDF
Spending, Allocation Choices, and Aging THROUGH Retirement. Are all of these ...
PDF
Bladex Earnings Call Presentation 2Q2025
PDF
ABriefOverviewComparisonUCP600_ISP8_URDG_758.pdf
PDF
Topic Globalisation and Lifelines of National Economy.pdf
PPTX
Antihypertensive_Drugs_Presentation_Poonam_Painkra.pptx
PDF
ADVANCE TAX Reduction using traditional insurance
PDF
Bitcoin Layer August 2025: Power Laws of Bitcoin: The Core and Bubbles
DOCX
marketing plan Elkhabiry............docx
PDF
discourse-2025-02-building-a-trillion-dollar-dream.pdf
PDF
Q2 2025 :Lundin Gold Conference Call Presentation_Final.pdf
PPTX
Globalization-of-Religion. Contemporary World
PPTX
Introduction to Essence of Indian traditional knowledge.pptx
PDF
Mathematical Economics 23lec03slides.pdf
PPTX
social-studies-subject-for-high-school-globalization.pptx
PDF
NAPF_RESPONSE_TO_THE_PENSIONS_COMMISSION_8 _2_.pdf
PDF
Why Ignoring Passive Income for Retirees Could Cost You Big.pdf
PPTX
What is next for the Fractional CFO - August 2025
PPTX
Session 14-16. Capital Structure Theories.pptx
Unilever_Financial_Analysis_Presentation.pptx
4.5.1 Financial Governance_Appropriation & Finance.pptx
Spending, Allocation Choices, and Aging THROUGH Retirement. Are all of these ...
Bladex Earnings Call Presentation 2Q2025
ABriefOverviewComparisonUCP600_ISP8_URDG_758.pdf
Topic Globalisation and Lifelines of National Economy.pdf
Antihypertensive_Drugs_Presentation_Poonam_Painkra.pptx
ADVANCE TAX Reduction using traditional insurance
Bitcoin Layer August 2025: Power Laws of Bitcoin: The Core and Bubbles
marketing plan Elkhabiry............docx
discourse-2025-02-building-a-trillion-dollar-dream.pdf
Q2 2025 :Lundin Gold Conference Call Presentation_Final.pdf
Globalization-of-Religion. Contemporary World
Introduction to Essence of Indian traditional knowledge.pptx
Mathematical Economics 23lec03slides.pdf
social-studies-subject-for-high-school-globalization.pptx
NAPF_RESPONSE_TO_THE_PENSIONS_COMMISSION_8 _2_.pdf
Why Ignoring Passive Income for Retirees Could Cost You Big.pdf
What is next for the Fractional CFO - August 2025
Session 14-16. Capital Structure Theories.pptx

Google Dev Day2007

  • 1. The GWT bet ... Luc Claes CTO ContactOffice.com Google Developer Day 2007
  • 2. Coming from the country of… … please forgive my (broken) English !
  • 3. Agenda ContactOffice ? Reengineering the interface Selecting a framework Google Web Toolkit (GWT) ? [email_address] beta.contactoffice.com
  • 4. ContactOffice ? Collaborative & Messaging Web Application Founded in 1999 by 4 Belgian serial internet entrepreneurs
  • 5. How big ? 1 million registrations 350.000 active accounts (Feb 07) 250.000 paying accounts Global, 6 languages Profitable since 2003
  • 6. Collaboration & Messaging WebApp Calendar (+ RSS) Contacts, To Do, Notes, Bookmarks (+ RSS), Synchro ... Groups Organiser Mail (+ RSS), IMAP4 & POP3(s), SMTP, Webmail, Antivirus & AntiSpam, SMS, Fax, Alerts & Chat State-of-the-art Messaging Web upload or WebDAV RSS & Vod/Podcasts, Public sharing Documents Repository Forum, Wiki, Bulletin Board, Phone Calls, ... Collaboration
  • 7. Everything can be shared with users and groups! Sophisticated Access Right Model at user level Applications : Individual user, Families, Associations, Companies, Departments, All kinds of teams, ...
  • 8. ASP & Licence Models Hosted, Security, SLA Personalised, Private Label versions SSO : REST, XML-RPC, CAS, RSA ClearTrust, ... API : XML-RPC
  • 10. Technologies Back-end : Pure Java (POJOs only) Object Oriented Database Core business logic + various 'satellites' Web, SMTP c/s, POP3 c/s, IMAP4 c/s, WebDAV c/s, Synchro, Web services, … Built for scalability Web Clients : Web 1.0 (HTML + JS + CSS) ~2000 JSP pages Pocket Explorer + Symbian Wap (WML) Voice XML (prototype)
  • 11. Reengineering the interface Goal: Interface upgrade to current standards Weakness: Obsolete Client Architecture (thousands of JSP files) Strength: The 1999 Server Architecture (POJOs + OODB) is still state-of-the-art HTML + JavaScript + Frames Desktop like, Web 2.0 style, Drag & Drop, W idgets, ...
  • 12. Selecting a framework / technology Many good solutions Own framework ? Cost of supporting what others might be doing well ? Ajax vs Flash ? OpenLazslo, Adobe Flex Xml + script syntax, server-side lock-in, … SilverLight, JavaFX, good ol' Applets ? Ultra lightweight client + server-side Java ? echo2, zk, thinwire... Do they scale well ? Existing JS frameworks ? Dojo, Prototype, YUI, ... JavaScript language… JavaScript ? ?
  • 13. JavaScript ? Powerful constructs Functions as 1st class objects, closures Prototype vs. Class Metaprogramming Ubiquitous dictionaries Dynamic typing but… JavaScript ? ?
  • 14. The JavaScript nightmare (Very) dynamic language On the fly variables declarations Weak typing eval() Interesting IDEs operations are 'impossible' (refactoring, smart searches, real-time compilation / syntax check, …) Readability ? Imprecise scoping, encapsulation Run-time errors detection only Even worse: the DOM + the browsers quirks… How to handle efficiently tens of Klocs, multiple developers ? Requires an extremely strict discipline (rules set, conventions) for a team
  • 15. GWT ? What is GWT ? G oogle W eb T oolkit GWT is a Google framework for building AJAX apps in the Java language Fully Open Source (Apache 2 Licence) Java --> JavaScript translation No plugin, no jvm Just 1 year old JavaScript GoogleWeb ToolKit ?
  • 16. Google Web Toolkit ? Some features Performances: Aggressive caching, code optimization, compression Clean backend integration: Efficient Java RPC mechanism (or JSON) Portability: Generates platform-specific code (IE 6+, 'old' Mozilla, Firefox, Opera, Safari) Native Java S cript is still reachable: JSNI (JavaScript Native Interface) i18n But... Java knowledge required for UI designers CSS only is not realistic JavaScript Google Web Toolkit ?
  • 17. Google Web Toolkit ? Java ? Java 1.4 (1.5 coming 'soon') Subset of java.lang.* and java.util.* emulated No introspection, no dynamic class loading Collections Optimizing Java  JavaScript compiler Dead code elimination Deferred binding No if (mozilla) { … } code Relatively rich UI library Widgets Panels Some missing pieces… JavaScript Google Web Toolkit ?
  • 18. GWT & Software Engineering 'Industrial' software engineering Tools ! Tools! Tools ! IDEs: Eclipse integration, JetBrains GWT Studio, GWT Designer, VistaFei, … Debugging (GWT hosted mode) Testing (junit) Refactoring Java SCCS Smart searches, navigation, auto-complete, quick fix, … Compile time vs. Runtime errors detection **** JavaScript Google Web ToolKit ?
  • 19. CO enhancements to GWT MV(C) framework THE key factor for a successful large-scale development Necessary for event driven interfaces (the A in A JAX) Side effect : eases collaboration between UI and software developers Drag & Drop Attractive look & feel Contextual menus Marquee selection Draggable splitters, Rich Text Edit (available in GWT 1.4) Data grid Enhanced dialogs, property pages EditableLabel, ProgressBar, … Lesson: nothing was made 'impossible' by GWT design choices ! JavaScript Google Web Toolkit ContactOffice Enhancements
  • 20. CO-GWT – Some figures ~ 1.2 man x year ~ 35000 lines of Java code (estimated target: 50 KLOC) ~ 250 files ~ 500 classes ~ 5000 Kbytes original JavaScript (ouch !) ~ 900 Kbytes compressed JavaScript (GWT 1.4: 680 Kbytes !) ~ 270 Kbytes gziped Aggressive caching mechanism JavaScript Google Web Toolkit ContactOffice
  • 21. Development Workflow (Front-end) Software Engineer UI RPC, Model Raw UI design (Model interfacing, panels, widgets, …). Custom widgets CSS Enhanced UI design, non-CSS attributes, Formatting… SVN sandbox RPC, Model, (naive) view enhancements UI enhancements i18n (GWT) Help Manuals I18n
  • 22. M odel - V iew - R emoting Remoting Model View notify Synchronous call Add listener xxxService xxxServiceAsync DTOs Shared between front-end and back-end Asynchronous call with command piggybacking Front-end only AbstractModel ModelObject ModelFolder abstractions Asynchronous call AsyncCallback
  • 23. 'Tip of the Day': Enhanced AsyncCallback Throbber handling Generic RPC exceptions handling Commands piggybacking public class COAsyncCallback implements AsyncCallback { … public COAsyncCallback(AsyncCallback callback, Command onSuccessCommand) {
  • 24. 'Tip of the Day' (2) public void save(Command chainCommand) { getCalendarService().saveEvent(this, new COAsyncCallback( new GetEventDetailsCallback(), chainCommand)); } public static void showCreationDialog(Event event) { event.save( new ShowDialogCommand(event)); } private static class ShowDialogCommand implements Command { private final Event m_event ; public ShowDialogCommand(Event event) { m_event = event; } public void execute() { new EventPropertiesDialog(m_event).showCentered(); } } EventPropertiesDialog.java (View) : Event.java (Model) : Create an event object in the back-end, then edit its properties
  • 26. New GWT based Interface http://beta.contactoffice.com Indication of new + total number of items in lists Navigation repeated on left Help and extra information Dashboard giving quick access to main features
  • 27. New GWT based Interface Horizontal splitter COMenuBar extends MenuBar Frame
  • 28. New GWT based Interface - TreeView StackPanel TreeView 'Tree' based Composite Drag & drop source and target Contextual menus Close relationship with 'ModelFolder' and 'ModelObject'
  • 29. New GWT based Interface - ListView Marquee selection Click to sort Multiselect, select range, (un) Select all Data grid, logical scrolling Close relationship with 'ModelFolder' and 'ModelObject' Drag & drop source Special keys handling Sortable columns Contextual menus
  • 30. Enhanced Dialogs PropertyPageDialogBox extends CODialogBox extends DialogBox Property Page Modal or modeless Resizeable or fixed Close icon Property pages framework (validation, (de)activation, …) Specific listeners DialogRow Widget
  • 31. Contextual menus MenuBar in PopupPanel Display is easy Invocation is hard (right-click portability issues…)
  • 32. Drag & Drop D&D engine handles: Regular D&D Marquee selection Splitters (Rectangular) drag sources & drop targets Could be hidden in widgets implementation Multi-select JavaScript Google Web Toolkit ContactOffice Enhancements
  • 33. Legacy pages integration Legacy page (jsp) New page (GWT)
  • 34. New calendar D&D event Access group & member's calendars Resizeable & overlap
  • 35. Back-end (1) RemoteServiceServlet (GWT) GWTServlet AbstractHandler MailHandler MailServices … Instantiates (on each RPC invocation) CalendarHandler CalendarServices … HTTP request/session User credentials DB Transactions handling RemoteService (GWT) Actual RPC implementation ~ Invokes the Business Logic
  • 36. Back-end (2) Straightforward integration Super-clean with a Java POJO back-end Fast migration path from DWR ~ 5000 specific lines of code, 13 classes/interfaces Front-end / back-end software versions synchronization needed!
  • 37. TODO Usability !!! Bug fixes… Missing tools Forums, Tasks, Groups management Customization Dynamic CSS evaluation JSPs… not that easy in hosted mode. Compile time vs. Run time customization ? Safari & Opera portability Context menus … JavaScript Google Web Toolkit ContactOffice
  • 40. Contact Us! [email_address] www.contactoffice.com blog.contactoffice.com