SlideShare una empresa de Scribd logo
1 de 41
Descargar para leer sin conexión
Chicago, October 19 - 22,
2010
Griffon for the Enterprise
James Williams – BT/Ribbit
About Me
• Co-creator of Griffon
• Creator of SwingXBuilder
• Sofware Engineer at BT/Ribbit
Griffon Team and Contributors
●
Andres Almiray
●
Danno Ferrin
●
Josh Reed
●
Jim Shingler
• Hamlet D'Arcy
• Nick Zhu
Agenda
●
Overview of Griffon
●
Griffon MVC
●
Plugins and Addons
●
Application Packaging
●
Griffon Competitors
●
Sample Applications and Demos
●
Summary
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
Structure of a Griffon Application
Structure of a Griffon Application
Yes, all of em.
Griffon MVC
Provides a separation of concerns
●
Models
●
Views
●
Controllers
Griffon Lifecycle
●
Bootstrap
●
Initialize
●
Startup
●
Shutdown
●
Stop
Plugins and Addons
Extend existing features in Griffon applications
• Plugins
• Addons
Provide features like
• UI toolkits
• Databases
• XMPP/REST/RPC
• Testing
• Layout Managers
• Bling
Services and Dependency Injection
Griffon has supports the following
• Guice
• Spring
• First-class services when DI is not needed
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
Griffon's Competitors
●
Apache Pivot
●
Eclipse RCP
●
Netbeans Platform
●
Many wannabes
Apache Pivot
Rapid application framework including:
• WTK user interface elements
• Web libraries
• Charts
• LOTS of XML
• Base footprint: Unknown but very small
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>
Eclipse RCP
Rapid application framework including:
• Eclipse Runtime
• SWT
• JFace
• Workbench
• Plugins
• Base footprint: 12MB
Netbeans Platform
Toolkit powering Netbeans providing:
• Java Swing
• OSGI or Netbeans Modules
• Advanced multi-Window system
• Base footprint: 7-8.5MB
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
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
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>
Demo
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
What is MongoDB?
●
Document-oriented database
• Documents can be nested
• Supports MapReduce
• Used by NYT, SourceForge, foursquare, and others
• Libraries for many programming languages
Demo
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())
}
}
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')
}
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
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
How Websockets work
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
Demo
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
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)})
}
}
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
NeoeEdit
●
Lightweight BSD licensed text editor
●
Similar to JEdit
• Built using Java and Swing
• Keyword syntax highlighting
Live coding
Stock Tracker App
●
Ported from Apache Pivot to Griffon
●
Reads stock information from Yahoo! Finance
●
Track changes in stock information in real-time
Demo
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.
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/
Q&A

Más contenido relacionado

La actualidad más candente

Develop a Quick and Dirty Web interface to your database: for the DBA and oth...
Develop a Quick and Dirty Web interface to your database: for the DBA and oth...Develop a Quick and Dirty Web interface to your database: for the DBA and oth...
Develop a Quick and Dirty Web interface to your database: for the DBA and oth...
Gabriel Villa
 

La actualidad más candente (20)

React native: building native iOS apps with javascript
React native: building native iOS apps with javascriptReact native: building native iOS apps with javascript
React native: building native iOS apps with javascript
 
Headless Drupal: A modern approach to (micro)services and APIs
Headless Drupal: A modern approach to (micro)services and APIsHeadless Drupal: A modern approach to (micro)services and APIs
Headless Drupal: A modern approach to (micro)services and APIs
 
Develop a Quick and Dirty Web interface to your database: for the DBA and oth...
Develop a Quick and Dirty Web interface to your database: for the DBA and oth...Develop a Quick and Dirty Web interface to your database: for the DBA and oth...
Develop a Quick and Dirty Web interface to your database: for the DBA and oth...
 
Drupal 8 deeper dive
Drupal 8 deeper diveDrupal 8 deeper dive
Drupal 8 deeper dive
 
Engage 2019 Software documentation is fun if you have the right tools: Introd...
Engage 2019 Software documentation is fun if you have the right tools: Introd...Engage 2019 Software documentation is fun if you have the right tools: Introd...
Engage 2019 Software documentation is fun if you have the right tools: Introd...
 
Front-End Tools and Workflows
Front-End Tools and WorkflowsFront-End Tools and Workflows
Front-End Tools and Workflows
 
Presentation1
Presentation1Presentation1
Presentation1
 
What's new and what's next in Electron & Chromium [2016]
What's new and what's next in Electron & Chromium [2016]What's new and what's next in Electron & Chromium [2016]
What's new and what's next in Electron & Chromium [2016]
 
React JS Belgium Touch Base - React, Flux, React Native
React JS Belgium Touch Base - React, Flux, React NativeReact JS Belgium Touch Base - React, Flux, React Native
React JS Belgium Touch Base - React, Flux, React Native
 
Deploying JEE to Heroku
Deploying JEE to HerokuDeploying JEE to Heroku
Deploying JEE to Heroku
 
Overview of modern software ecosystem for big data analysis
Overview of modern software ecosystem for big data analysisOverview of modern software ecosystem for big data analysis
Overview of modern software ecosystem for big data analysis
 
Javantura v4 - Android App Development in 2017 - Matej Vidaković
Javantura v4 - Android App Development in 2017 - Matej VidakovićJavantura v4 - Android App Development in 2017 - Matej Vidaković
Javantura v4 - Android App Development in 2017 - Matej Vidaković
 
Agile Tools for PHP
Agile Tools for PHPAgile Tools for PHP
Agile Tools for PHP
 
Creating a CI/CD Pipeline for a Java EE Application in the Cloud
Creating a CI/CD Pipeline for a Java EE Application in the CloudCreating a CI/CD Pipeline for a Java EE Application in the Cloud
Creating a CI/CD Pipeline for a Java EE Application in the Cloud
 
Ruby on rails
Ruby on railsRuby on rails
Ruby on rails
 
Building a Modern JavaScript Framework by James Milner
Building a Modern JavaScript Framework by James MilnerBuilding a Modern JavaScript Framework by James Milner
Building a Modern JavaScript Framework by James Milner
 
Docker based web hosting
Docker based web hostingDocker based web hosting
Docker based web hosting
 
Jhipster
JhipsterJhipster
Jhipster
 
Free the Functions with Fn project!
Free the Functions with Fn project!Free the Functions with Fn project!
Free the Functions with Fn project!
 
HTML5 on the AGL demo platform with Chromium and WAM (AGL AMM March 2021)
HTML5 on the AGL demo platform with Chromium and WAM (AGL AMM March 2021)HTML5 on the AGL demo platform with Chromium and WAM (AGL AMM March 2021)
HTML5 on the AGL demo platform with Chromium and WAM (AGL AMM March 2021)
 

Similar a Griffon for the Enterprise

DevOps for TYPO3 Teams and Projects
DevOps for TYPO3 Teams and ProjectsDevOps for TYPO3 Teams and Projects
DevOps for TYPO3 Teams and Projects
Fedir RYKHTIK
 
Building Real-World Dojo Web Applications
Building Real-World Dojo Web ApplicationsBuilding Real-World Dojo Web Applications
Building Real-World Dojo Web Applications
Andrew Ferrier
 
Programming for non tech entrepreneurs
Programming for non tech entrepreneursProgramming for non tech entrepreneurs
Programming for non tech entrepreneurs
Rodrigo Gil
 
Android application development
Android application developmentAndroid application development
Android application development
Linh Vi Tường
 
Dot net Online Training | .Net Training and Placement online
Dot net Online Training | .Net Training and Placement onlineDot net Online Training | .Net Training and Placement online
Dot net Online Training | .Net Training and Placement online
Garuda Trainings
 
Kandroid for nhn_deview_20131013_v5_final
Kandroid for nhn_deview_20131013_v5_finalKandroid for nhn_deview_20131013_v5_final
Kandroid for nhn_deview_20131013_v5_final
NAVER D2
 

Similar a Griffon for the Enterprise (20)

Enterprise Griffon
Enterprise GriffonEnterprise Griffon
Enterprise Griffon
 
DevOps for TYPO3 Teams and Projects
DevOps for TYPO3 Teams and ProjectsDevOps for TYPO3 Teams and Projects
DevOps for TYPO3 Teams and Projects
 
What is cool with Domino V10, Proton and Node.JS, and why would I use it in ...
What is cool with Domino V10, Proton and Node.JS, and why would I use it in ...What is cool with Domino V10, Proton and Node.JS, and why would I use it in ...
What is cool with Domino V10, Proton and Node.JS, and why would I use it in ...
 
Web app job and functions - TUGAIT 2017
Web app job and functions  - TUGAIT 2017Web app job and functions  - TUGAIT 2017
Web app job and functions - TUGAIT 2017
 
Building Real-World Dojo Web Applications
Building Real-World Dojo Web ApplicationsBuilding Real-World Dojo Web Applications
Building Real-World Dojo Web Applications
 
Day1 before getting_started
Day1 before getting_startedDay1 before getting_started
Day1 before getting_started
 
Guides To Analyzing WebKit Performance
Guides To Analyzing WebKit PerformanceGuides To Analyzing WebKit Performance
Guides To Analyzing WebKit Performance
 
Programming for non tech entrepreneurs
Programming for non tech entrepreneursProgramming for non tech entrepreneurs
Programming for non tech entrepreneurs
 
Netflix Open Source: Building a Distributed and Automated Open Source Program
Netflix Open Source:  Building a Distributed and Automated Open Source ProgramNetflix Open Source:  Building a Distributed and Automated Open Source Program
Netflix Open Source: Building a Distributed and Automated Open Source Program
 
Building a Distributed & Automated Open Source Program at Netflix
Building a Distributed & Automated Open Source Program at NetflixBuilding a Distributed & Automated Open Source Program at Netflix
Building a Distributed & Automated Open Source Program at Netflix
 
Android application development
Android application developmentAndroid application development
Android application development
 
Dot net Online Training | .Net Training and Placement online
Dot net Online Training | .Net Training and Placement onlineDot net Online Training | .Net Training and Placement online
Dot net Online Training | .Net Training and Placement online
 
Convert your Full Trust Solutions to the SharePoint Framework (SPFx)
Convert your Full Trust Solutions to the SharePoint Framework (SPFx)Convert your Full Trust Solutions to the SharePoint Framework (SPFx)
Convert your Full Trust Solutions to the SharePoint Framework (SPFx)
 
Kandroid for nhn_deview_20131013_v5_final
Kandroid for nhn_deview_20131013_v5_finalKandroid for nhn_deview_20131013_v5_final
Kandroid for nhn_deview_20131013_v5_final
 
Introduction to node.js aka NodeJS
Introduction to node.js aka NodeJSIntroduction to node.js aka NodeJS
Introduction to node.js aka NodeJS
 
Codecoon - A technical Case Study
Codecoon - A technical Case StudyCodecoon - A technical Case Study
Codecoon - A technical Case Study
 
From Containerization to Modularity
From Containerization to ModularityFrom Containerization to Modularity
From Containerization to Modularity
 
Dust.js
Dust.jsDust.js
Dust.js
 
PHPFrameworkDay 2020 - Different software evolutions from Start till Release ...
PHPFrameworkDay 2020 - Different software evolutions from Start till Release ...PHPFrameworkDay 2020 - Different software evolutions from Start till Release ...
PHPFrameworkDay 2020 - Different software evolutions from Start till Release ...
 
"Different software evolutions from Start till Release in PHP product" Oleksa...
"Different software evolutions from Start till Release in PHP product" Oleksa..."Different software evolutions from Start till Release in PHP product" Oleksa...
"Different software evolutions from Start till Release in PHP product" Oleksa...
 

Más de James Williams

Ratpack - Classy and Compact Groovy Web Apps
Ratpack - Classy and Compact Groovy Web AppsRatpack - Classy and Compact Groovy Web Apps
Ratpack - Classy and Compact Groovy Web Apps
James Williams
 
Creating Voice Powered Apps with Ribbit
Creating Voice Powered Apps with RibbitCreating Voice Powered Apps with Ribbit
Creating Voice Powered Apps with Ribbit
James Williams
 
Extending Groovys Swing User Interface in Builder to Build Richer Applications
Extending Groovys Swing User Interface in Builder to Build Richer ApplicationsExtending Groovys Swing User Interface in Builder to Build Richer Applications
Extending Groovys Swing User Interface in Builder to Build Richer Applications
James Williams
 
Boosting Your Testing Productivity with Groovy
Boosting Your Testing Productivity with GroovyBoosting Your Testing Productivity with Groovy
Boosting Your Testing Productivity with Groovy
James Williams
 

Más de James Williams (16)

Introduction to WebGL and Three.js
Introduction to WebGL and Three.jsIntroduction to WebGL and Three.js
Introduction to WebGL and Three.js
 
Intro to HTML5 Game Programming
Intro to HTML5 Game ProgrammingIntro to HTML5 Game Programming
Intro to HTML5 Game Programming
 
Ratpack - Classy and Compact Groovy Web Apps
Ratpack - Classy and Compact Groovy Web AppsRatpack - Classy and Compact Groovy Web Apps
Ratpack - Classy and Compact Groovy Web Apps
 
Introduction to Griffon
Introduction to GriffonIntroduction to Griffon
Introduction to Griffon
 
Game programming with Groovy
Game programming with GroovyGame programming with Groovy
Game programming with Groovy
 
Java development with MongoDB
Java development with MongoDBJava development with MongoDB
Java development with MongoDB
 
Porting legacy apps to Griffon
Porting legacy apps to GriffonPorting legacy apps to Griffon
Porting legacy apps to Griffon
 
Using MongoDB With Groovy
Using MongoDB With GroovyUsing MongoDB With Groovy
Using MongoDB With Groovy
 
Creating Voice Powered Apps with Ribbit
Creating Voice Powered Apps with RibbitCreating Voice Powered Apps with Ribbit
Creating Voice Powered Apps with Ribbit
 
Griffon: Swing just got fun again
Griffon: Swing just got fun againGriffon: Swing just got fun again
Griffon: Swing just got fun again
 
Griffon: Swing just got fun again
Griffon: Swing just got fun againGriffon: Swing just got fun again
Griffon: Swing just got fun again
 
Extending Groovys Swing User Interface in Builder to Build Richer Applications
Extending Groovys Swing User Interface in Builder to Build Richer ApplicationsExtending Groovys Swing User Interface in Builder to Build Richer Applications
Extending Groovys Swing User Interface in Builder to Build Richer Applications
 
Boosting Your Testing Productivity with Groovy
Boosting Your Testing Productivity with GroovyBoosting Your Testing Productivity with Groovy
Boosting Your Testing Productivity with Groovy
 
Griffon: Re-imaging Desktop Java Technology
Griffon: Re-imaging Desktop Java TechnologyGriffon: Re-imaging Desktop Java Technology
Griffon: Re-imaging Desktop Java Technology
 
Android Development
Android DevelopmentAndroid Development
Android Development
 
SVCC Intro to Grails
SVCC Intro to GrailsSVCC Intro to Grails
SVCC Intro to Grails
 

Último

Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
Joaquim Jorge
 

Último (20)

Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
Deploy with confidence: VMware Cloud Foundation 5.1 on next gen Dell PowerEdg...
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
Top 10 Most Downloaded Games on Play Store in 2024
Top 10 Most Downloaded Games on Play Store in 2024Top 10 Most Downloaded Games on Play Store in 2024
Top 10 Most Downloaded Games on Play Store in 2024
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsTop 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 

Griffon for the Enterprise

  • 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
  • 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
  • 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
  • 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