blueMarinephotographic workflow with Java
or Why You Should Really Ship
Swing Applications
Fabrizio GiudiciSenior Java Architect
www.javapolis.com
Overall Presentation Goal
Talk about issues withJava Rich Client Applications
A real project perspective
Enumerate and introduce solutions
www.javapolis.com
Speaker’s Qualifications
Senior Java Architect with 12 years of Java experience
Project leading, mentoring, teaching Member of JUG Milano, NetBeans Dream
Team Speaker at JavaPolis, Jazoon, JavaOne,
Jini Meeting Writer for NetBeans Magazine, Mokabyte Blogger at Java.Net
www.javapolis.com
Java is mature forRich Desktop Applications.
Just look beyond Swing.
www.javapolis.com
Java is mature forRich Desktop Applications.
Just look beyond Swing.
(beyond - not in another direction)
www.javapolis.com
The blueMarine project
Whole photographic workflow Be creative with technology Be open - more than some scripting APIs
FLOSS is not (only) a matter of freedom... ... but of better stuff
Do special things for special communities e.g. amateur astrophotographers, birdwatchers, ...
It all started in 2003
DEMO
Splash
www.javapolis.com
Java for Desktop Readiness Phases
Phase -1: prior 2005 Slow, poorly integrated, ugly L&F
Phase 0: 2005 JDK 5 spreads, “Extreme GUI Makeover” starts
Phase +1: 2006-2007 JDK 6, Aerith, SwingLabs matures TimingFramework, Nimbus, Filthy Rich Clients
Phase +2: 2008 Add NetBeans RCP: Filthy Rich Platform Clients Ready for complex applications - anyone?
www.javapolis.com
Java for Desktop Readiness Phases
Phase -1: prior 2005 Slow, poorly integrated, ugly L&F
Phase 0: 2005 JDK 5 spreads, “Extreme GUI Makeover” starts
Phase +1: 2006-2007 JDK 6, Aerith, SwingLabs matures TimingFramework, Nimbus, Filthy Rich Clients
Phase +2: 2008 Add NetBeans RCP: Filthy Rich Platform Clients Ready for complex applications - anyone?
blueMarine 0.8
died here
www.javapolis.com
Java for Desktop Readiness Phases
Phase -1: prior 2005 Slow, poorly integrated, ugly L&F
Phase 0: 2005 JDK 5 spreads, “Extreme GUI Makeover” starts
Phase +1: 2006-2007 JDK 6, Aerith, Swing TimingFramework, Nimbus, Filthy Rich Clients
Phase +2: 2008 Add NetBeans RCP: Filthy Rich Platform Clients Ready for complex applications - anyone?
blueMarine 0.8
died here
blueMarine 0.9
reborn here
www.javapolis.com
Problems
www.javapolis.com
Solutions
www.javapolis.com
If you can just remember four points...
NetBeans RCP NetBeans Visual Library SwingLabs NASA World Wind for Java
www.javapolis.com
OpenBlueSky
Where generic stuff spins off blueMarine Can be used for other applications Consolidated stuff will be submitted for
standard APIs enhancement
www.javapolis.com
References
weblogs.java.net/blog/fabriziogiudici bluemarine.tidalwave.it openbluesky.dev.java.net mistral.tidalwave.it forceten.tidalwave.it
www.javapolis.com
References
www.netbeans.org/features/platform www.netbeans.org/community/magazine graph.netbeans.org www.swinglabs.org timingframework.dev.java.net worldwind.arc.nasa.gov/java quaqua.dev.java.net nimbus.dev.java.net personales.ya.com/nimrod
www.javapolis.com
NetBeans RCP
www.javapolis.com
Question
What do you expect from a (desktop) framework?
20
Desktop frameworks
Solid foundation to base your application APIs working together, well tested Service discovery and provider Plugin support Messaging infrastructure (via events) Integrated help system And more
21
Swing is not a framework
Missing sophisticated components date picker, tree+table, etc...
Neither service discovery nor providers No plugins No messaging (only simple listeners) Threading issues JSR-296 (Swing Application Framework) not
good for large applications
22
What is NetBeans RCP?
NetBeansNetBeans IDE
NetBeans RCP{
23
What is NetBeans RCP?
NetBeansNetBeans IDE
NetBeans RCP{
24
What is NetBeans RCP?
NetBeansNetBeans IDE
NetBeans RCP{Your Desktop Application
25
NetBeans RCP
You start with a skeleton application You populate it
panels, views actions, menus, toolbars etc..
Often declaratively Based on Swing
You can integrate third parties' components You can control the Look&Feel
26
Most important NetBeans RCP APIs
Actions DataObjects Dialogs Explorer FileSystem Lookup
Modules Nodes Options Progress Visual Library Windowing/docking
DEMO
Explorers, Viewers, Actions
28
Lookup
Plays a fundamental role in many APIs Repository for a bag of objects Locator for services
Service service = Lookup.getDefault().lookup(Service.class);
Fires events “Global” lookup can be used as a simple
“event bus”
29
DataObject represents a file-based entity
30
You can extend DataObject
31
Lookup holds “capabilities”
32
A Node “represents” a DataObject
33
A Node has “capabilities” too
34
Representing set of selected (etc) Nodes
\
35
A View renders Nodes
36
An Action can be automatically enabled
37
Some points
You don't need to always use everything E.g. just Nodes, no DataObjects Can use them “incrementally”
NetBeans RCP keeps objects in sync E.g. updating a DataObject bound → Nodes E.g. Nodes bound to the same DataObject
38
NetBeans RCP stuff can be extended
What about a “cover flow” view? Use JOGL for fast 3D Just extend and create a new View TimingFramework for animating stuff
DEMO
CoverFlowView
40
Update Centers
NetBeans components (.nbm) can be added / removed on the fly can declare dependencies can be versioned can add actions, menus, toolbars
Pretty good for plugins (See demo in a few minutes)
www.javapolis.com
NetBeans Visual Library
42
NetBeans Visual Library
Support for graph-oriented modeling Nodes Arcs Routing Interaction
Can be creatively used Whiteboard paradigm Use interactivity: touch, drag, change objects
PS Can be used with plain Swing apps
add screenshotfrom UML or MIDPdesigner
DEMO
LightTable
www.javapolis.com
GeoSpatial Components
www.javapolis.com
JXMapViewer
A generic 2D, tile-based map renderer See Joshua Marinacci's blog Retrieves tiles from the web (or locally) Part of Swing-WS (SwingLabs) Can stick objects
to the map
Hint: integrate it with the Visual Library
DEMO
GeoViewer
47
NASA World Wind for Java
Java version of NASA World Wind 3D software that renders the Earth NASA terrain imagery Other data sets can be plugged in
if legal stuff is ok... Based on JOGL
DEMO
GeoViewer 3D
www.javapolis.com
Java Imaging APIs
www.javapolis.com
Java Imaging APIs
Many options (and dispersive?) Java2D, JAI, ImageJ, JMagick, JHLabs, ...
Some too difficult Wild behaviour and performance differences Parallel Computing is a must
Multi Core Small, local mini-grids Massive Grid Computing
There's not a global community
www.javapolis.com
Mistral: fix 'em up
Imaging meta-framework Multiple APIs can
be used together Simplifies APIs Supports multicore,
Jini, Sun Grid
52
Open Problems for blueMarine
Java still misses something on the desktop e.g. video streaming, USB support Can be worked around with JNI/JNA Java 7 is not too far
Some NB RCP stuff not fully customizable Better integration NB RCP ↔ SwingLabs Compliance to Apple HIG Linux + JOGL issues No JAI native support for Mac OS X
www.javapolis.com
A final point
54
Be efficient with innovation
“Cool stuff„ often means complexity Go quickly from idea to prototype Integrate easily others' stuff NIH isn't a killer-idea, but an idea-killer
Build cool demonstrators ... and cool applications soon after
(stay tuned for some new cool stuff)
www.javapolis.com
Concluding statement
Most showstoppers are history now.
www.javapolis.com
Concluding statement
Most showstoppers are history now.You CAN ship destkop apps.
www.javapolis.com
Concluding statement
Most showstoppers are history now.You CAN ship destkop apps.
There's a world beyond Swing.
www.javapolis.com
Concluding statement
Most showstoppers are history now.You CAN ship destkop apps.
There's a world beyond Swing.(SwingLabs, NetBeans RCP, etc...)
www.javapolis.com
Concluding statement
Most showstoppers are history now.You CAN ship destkop apps.
There's a world beyond Swing.(SwingLabs, NetBeans RCP, etc...)
Be creative. Mix 'em up.
Q&AView JavaPolis talks @ www.parleys.com
Thank you for your attention
Top Related