Your SlideShare is downloading. ×
Griffon for the Enterprise
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Introducing the official SlideShare app

Stunning, full-screen experience for iPhone and Android

Text the download link to your phone

Standard text messaging rates apply

Griffon for the Enterprise

4,258
views

Published on

Presented at SpringOne2GX 2010 …

Presented at SpringOne2GX 2010
October 21, 2010
Chicago, IL

Published in: Technology, Education

1 Comment
3 Likes
Statistics
Notes
No Downloads
Views
Total Views
4,258
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
57
Comments
1
Likes
3
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Chicago, October 19 - 22, 2010 Griffon for the Enterprise James Williams – BT/Ribbit
  • 2. About Me • Co-creator of Griffon • Creator of SwingXBuilder • Sofware Engineer at BT/Ribbit
  • 3. Griffon Team and Contributors ● Andres Almiray ● Danno Ferrin ● Josh Reed ● Jim Shingler • Hamlet D'Arcy • Nick Zhu
  • 4. Agenda ● Overview of Griffon ● Griffon MVC ● Plugins and Addons ● Application Packaging ● Griffon Competitors ● Sample Applications and Demos ● Summary
  • 5. What is Griffon? ● Open source desktop rapid development framework ● Leverages Java Swing and the Groovy language ● Apache 2 Licensed ● Extensible using Plugins and Add-ons ● Brings a Grails-inspired experience to the desktop
  • 6. Structure of a Griffon Application
  • 7. Structure of a Griffon Application Yes, all of em.
  • 8. Griffon MVC Provides a separation of concerns ● Models ● Views ● Controllers
  • 9. Griffon Lifecycle ● Bootstrap ● Initialize ● Startup ● Shutdown ● Stop
  • 10. Plugins and Addons Extend existing features in Griffon applications • Plugins • Addons Provide features like • UI toolkits • Databases • XMPP/REST/RPC • Testing • Layout Managers • Bling
  • 11. Services and Dependency Injection Griffon has supports the following • Guice • Spring • First-class services when DI is not needed
  • 12. Application Packaging ● Can easily be deployed as – Fat JARs or collection of JARs – Java WebStart – Applets – Zip file ● The Installer plugin can also provide the following – OS specific executables – Izpack – JSmooth
  • 13. Griffon's Competitors ● Apache Pivot ● Eclipse RCP ● Netbeans Platform ● Many wannabes
  • 14. Apache Pivot Rapid application framework including: • WTK user interface elements • Web libraries • Charts • LOTS of XML • Base footprint: Unknown but very small
  • 15. Code Sample <Window title="Hello WTKX!" maximized="true" xmlns:wtkx="http://pivot.apache.org/wtkx" xmlns="org.apache.pivot.wtk"> <content> <Label text="Hello WTKX!" styles="{font:'Arial bold 24', color:'#ff0000', horizontalAlignment:'center', verticalAlignment:'center'}"/> </content> </Window>
  • 16. Eclipse RCP Rapid application framework including: • Eclipse Runtime • SWT • JFace • Workbench • Plugins • Base footprint: 12MB
  • 17. Netbeans Platform Toolkit powering Netbeans providing: • Java Swing • OSGI or Netbeans Modules • Advanced multi-Window system • Base footprint: 7-8.5MB
  • 18. Dependency Handling in Griffon ● Gradle is built in under the covers providing ● Compile, Test, and Runtime dependency ● Integration with Maven repositories ● Integration with Griffon plugin repositories ● No OSGI support yet
  • 19. Using Eclipse UIs in Griffon WindowsBuilder Pro • A GUI designer product from Instantiations • Recently released as a free product • Provides a competitor to Netbeans Matisse • Creates human-editable code • Generated UIs can be dropped into a Griffon app
  • 20. Using Netbeans Matisse with Griffon Netbeans Matisse ... • Uses GroupLayout for the UIs • Code is not humanly editable • No alternate LayoutManagers • griffon generate-view-script <Qualified UI class name>
  • 21. Demo
  • 22. Use Case #1 - Databases Scenario: Create a database viewer application Requirements: • Use MongoDB • Have the ability to do basic functions like: – CRUD operations – Simple and advanced query – Retrieve DB statistics
  • 23. What is MongoDB? ● Document-oriented database • Documents can be nested • Supports MapReduce • Used by NYT, SourceForge, foursquare, and others • Libraries for many programming languages
  • 24. Demo
  • 25. Code Sample jxtitledPanel(title:'Settings', border:new DropShadowBorder(Color.BLACK,15), constraints:'w 30%, h 100%') { jxtaskPaneContainer() { taskPane(id:'conxPane', title:'Connections', layout:new MigLayout()) { scrollPane() { panel(id:'conxIcons', layout: new MigLayout()) } button(text:'Add', constraints:'newline, cell 0 1 ', ...) button(text:'Remove', constraints:'cell 0 1') } taskPane(id:'dbPane', title:'Databases', layout:new MigLayout()) taskPane(id:'collPane', title:'Collections', layout:new MigLayout()) } }
  • 26. Code Sample package griffonmongo import net.miginfocom.swing.MigLayout frame (title:'Add a Connection', id:'conx', size:[200,200], layout:new MigLayout()) { label(text:'Name') textField(id:'txtName', columns:15, constraints:'wrap') label(text:'Host') textField(id:'txtHost', columns:15, constraints:'wrap') label(text:'Port') textField(id:'txtPort', columns:4, constraints:'wrap') button('Add') button('Cancel') }
  • 27. Use Case #2 – Websockets / Net Comms Scenario: Use websockets for communication in a chat and slideware app Requirements: • Use WebSockets • Provide simple chat functions • Allow controlling slideware app with Websockets
  • 28. What are Web Sockets? Web Sockets ... • Address the issues of long polling • Supported natively by Chrome, Opera, and Firefox • Enabled with Flash in non-compliant browsers • Enable bi-directional communication between – Web sites – Web Services
  • 29. How Websockets work
  • 30. Griffon Talk Android App ● Had to play nice with websockets ● Needed to display information about the current slide ● Needed to control the presentation via Wifi ● Had to be Android Cupcake (1.5) compatible
  • 31. Demo
  • 32. Code Sample def listener = [ processToken:{aEvent, aToken -> def json = new JSONObject(aToken.toString()) switch(json.getString("operation")) { ... case "broadcast": def sender = json.getString("user") def msg = json.getString("data") model.msgEventList.add("$sender: $msg") break } }, processOpened:{aEvent -> println aEvent}, processPacket:{evt, pkt -> }] as WebSocketClientTokenListener
  • 33. Code Sample scrollPane(id:'screenshot', constraints:'w 700px , h 100%') panel (layout:new MigLayout(), constraints:'w 200px, h 100%') { scrollPane(id:'scroll', constraints:'h 90%, w 200px, wrap'){ jxlist(model:model.msgModel, highlighters: [HighlighterFactory.createSimpleStriping()]) } panel (layout:new MigLayout(), constraints:'w 200px'){ comboBox(id:'cbox', items:['Send Message', 'Send Question'], constraints:'wrap') textArea(id:'msgText', columns:15, lineWrap:true, constraints:'wrap') button(text:'Send', actionPerformed:{ controller.sendMessage(msgText?.text)}) } }
  • 34. Use Case #3 – Converting an app Scenario: A legacy application that has fallen into disrepair Requirements: • Most original functionality must be preserved • A total rewrite has to be optional
  • 35. NeoeEdit ● Lightweight BSD licensed text editor ● Similar to JEdit • Built using Java and Swing • Keyword syntax highlighting
  • 36. Live coding
  • 37. Stock Tracker App ● Ported from Apache Pivot to Griffon ● Reads stock information from Yahoo! Finance ● Track changes in stock information in real-time
  • 38. Demo
  • 39. Summary ● UI designer support ● Work incrementally with your assets. ● Griffon has a small footprint. ● Extensible with plugins and addons ● You don't have to give up your favorite GUI designer.
  • 40. Links ● Griffon project: http://griffon.codehaus.org • Code samples: http://github.com/jwill/SpringOne2GXDemos • jWebSocket: http://jwebsocket.org/ • websocket4j: https://launchpad.net/websocket4j • NeoeEdit: http://code.google.com/p/neoeedit/
  • 41. Q&A