How to Simplify Building
Rich Clients in the Java™
Programming Language [Link]/javaone/sf
Jaroslav Tulach, Sun Microsystems
Rich Unger, Nuance
André Eickler, Nokia
SM
1 | 2004 JavaOne Conference | Session TS-1694
Write Rich Desktop Apps
While Saving Time and Money
Learn how to write and assemble rich
client Java™ technology-based desktop
applications while reusing many
developer-years invested in development
of the NetBeans™ platform
SM
2 | 2004 JavaOne Conference | Session TS-1694
Agenda
• The need for rich desktop clients
• Benefits of modular architecture
• Branding and customization
• Case Study—V-Builder
─ Reusing existing components
• Case Study—NetAct desktop
─ NetBeans platform as an ideal
J2EE™ platform client
SM
3 | 2004 JavaOne Conference | Session TS-1694
The Need for Rich Desktop Clients
• Web will not
do it all
─ Real-time
interaction
(dealing, monitoring)
─ Integration with
OS (sound, etc.)
• 100% Java technology counts
─ Ease of administration and distribution
─ Plain JFC/Swing may be too plain
• NetBeans Platform
─ The engine behind NetBeans IDE
SM
4 | 2004 JavaOne Conference | Session TS-1694
Demo
Small Introduction to NetBeans
IDE and Platform
SM
5 | 2004 JavaOne Conference | Session TS-1694
Costs Savings
The advantages of reusing NetBeans platform
• Avoid reinventing the wheel
─ Windowing, Menu, Toolbars, etc.
─ Modularization, Branding, Localization
• Concentrate on guts only
─ Write business logic, reuse the framework
• Assemble Applications from Components
─ A lot of existing components on [Link]
─ Designed in modular way
SM
6 | 2004 JavaOne Conference | Session TS-1694
Modularity of Components
Its importance for good UI application
• Discipline: Developers write cleaner code
• Final assembly of application is independent
• Solutions tailored to customer needs
• Much tighter UI tasks flow
Module
Module
Module
Module
Module
Application
Application
Application
Platform
SM
= UI task flow
7 | 2004 JavaOne Conference | Session TS-1694
Modularity in NetBeans
Modify your application to be NetBeans IDE module
• Module is any JAR file with enhanced manifest
Manifest-Version: 1.0
OpenIDE-Module: [Link]/1
OpenIDE-Module-Specification-Version: 1.13
• What is this good for?
─ Identification of each library
─ Version specification
─ Dependencies
SM
8 | 2004 JavaOne Conference | Session TS-1694
Modularity in NetBeans
Dependencies between modules
OpenIDE-Module-Specification-Version: 1.13
OpenIDE-Module-Provides: EditorImpl
OpenIDE-Module-Module-Dependencies:
[Link]/1 > 1.3,
[Link] > 4.32
OpenIDE-Module-Requires: SpellImpl
• Types of modules
─ Regular
─ Autoload
─ Eager
SM
9 | 2004 JavaOne Conference | Session TS-1694
Modularity in NetBeans
Module Enablement and ClassLoader Hierarchy
• Dependencies influence runtime classpath
• A module can turn other modules on
[Link]/1
Provides: EditorImpl [Link]
Requires: SpellImpl Provides: SpellImpl
Autoload
[Link]/1
[Link]
SM
10 | 2004 JavaOne Conference | Session TS-1694
Cooperation of Modules
Composition of UI Elements
• Menu, toolbar elements
─ Get merged together by the NetBeans framework
• Windows layout
• Registration solved by Layers
<folder name="Menu" >
<folder name="File" >
<file name="[Link]" >
<attr instanceCreate=
"[Link]" />
</file>
</folder>
</folder>
SM
11 | 2004 JavaOne Conference | Session TS-1694
Cooperation of Modules
Composition of Menu <folder name="Menu/File">
<file name="[Link]" />
<file name="[Link]" />
<file name="[Link]" />
<file name="[Link]" />
<file name="[Link]" />
<file name="[Link]" />
</folder>
<folder name="Menu/File">
<file name="[Link]" />
<file name="[Link]" />
</folder>
<folder name="Menu/File">
<attr name="[Link]/[Link]" boolvalue="true" />
<attr name="[Link]/[Link]" boolvalue="true" />
<attr name="[Link]/[Link]" />
<attr name="[Link]/[Link]" />
</folder>
Windows, Toolbars, etc. work in the same way
SM
12 | 2004 JavaOne Conference | Session TS-1694
Cooperation of Modules
Exposing module state
• A module owns a Window, another an action
• Windows can have associated Context
• Selected window defines the global context
• UI Elements update its state according to it
• What is inside context?
─ Anything important ([Link], etc.)
• What operations context need to support?
─ Changes of its content
─ Observability
SM
13 | 2004 JavaOne Conference | Session TS-1694
Cooperation of Modules
Exposing Window State
class MyWindow
extends [Link] {
private JEditorPane pane;
public [Link] getLookup () {
return [Link]([Link]())
}
}
SM
14 | 2004 JavaOne Conference | Session TS-1694
Cooperation of Modules
Querying and Listening to State
import [Link];
class MyInsertAction extends AbstractAction {
public void actionPerformed (ActionEvent ev) {
Lookup lkp = [Link]();
Document doc = [Link] ([Link]);
if (doc != null) {
[Link] (0, null, "Hello world!");
}
}
}
In similar way one can listen to changes in Lookup
using LookupListener.
SM
15 | 2004 JavaOne Conference | Session TS-1694
Cooperation of Modules
Generic Viewer—Explorer
• Presentation of tree hierarchies
─ Not only tree view, but many others
• Each Node has its own context
─ Can be queried and observed
• Modules can contribute to the hierarchy
SM
16 | 2004 JavaOne Conference | Session TS-1694
Branding and Customization
• Sun products are branded, L10N and A11Y
• Customization by selection of modules
• Overriding or masking resources
─ <file name="[Link]" />
─ <file name="Open.instance_hidden" />
SM
17 | 2004 JavaOne Conference | Session TS-1694
Rich Unger
The Need for Rich Desktop Clients
Benefits of Modular Architecture
Branding and Customization
Case Study—V-Builder
Case Study—NetAct Desktop
SM
18 | 2004 JavaOne Conference | Session TS-1694
What Is V-Builder?
Voice User Interface (VUI) IDE
• Design telephone conversations
between a human and a computer
• Edit many file types
─ Call-flow design
─ Prompt (.wav)
─ Grammar (linguistic regular expression)
─ VoiceXML
• Run the application using vocal or
textual interactions
SM
19 | 2004 JavaOne Conference | Session TS-1694
What Is V-Builder?
SM
20 | 2004 JavaOne Conference | Session TS-1694
Challenges
• 5 developers
• IDEs not our core competency
─ VUI experts, not GUI experts
• High customer expectations
─ Source control
─ Syntax coloring/completion
─ Easy enough for non-programmers (and yet, speech
recognition is very complicated)
SM
21 | 2004 JavaOne Conference | Session TS-1694
Solution:
Netbeans Platform
Gives You
Free Stuff
SM
22 | 2004 JavaOne Conference | Session TS-1694
Source Control (VCS)
• Use [Link]
instead of [Link]
─ Similar API
─ Wraps access in redirection layer
• Free support for multiple source
control systems
─ CVS
─ Subversion
─ SourceSafe
─ ClearCase
─ PVCS
SM
23 | 2004 JavaOne Conference | Session TS-1694
XML Editor
Declare a new MIME type
[Link]:
protected MultiDataObject createMultiObject
(FileObject primaryFile) {
return new XMLDataObject(primaryFile, this);
}
protected FileObject findPrimaryFile(FileObject fo) {
if ([Link]())
return null;
if ([Link]().equals(
"application/voicexml+xml"))
return fo;
return null;
}
SM
24 | 2004 JavaOne Conference | Session TS-1694
XML Editor
SM
25 | 2004 JavaOne Conference | Session TS-1694
Source Editor
GSL Files—a text file with a unique syntax
• Declare an [Link] subclass
(for completion and coloring)
• Add an EditorSupport cookie
SM
26 | 2004 JavaOne Conference | Session TS-1694
Context-Sensitive Help
Uses JavaHelpTM API
public HelpCtx getHelpCtx() {
return new HelpCtx([Link]);
}
SM
27 | 2004 JavaOne Conference | Session TS-1694
Other Stuff...
• Update Center
• Templates
• Wizards
• Task list
• ANSI terminal
• ... And on, and on...
SM
28 | 2004 JavaOne Conference | Session TS-1694
Demo
Nuance V-Builder
SM
29 | 2004 JavaOne Conference | Session TS-1694
André Eickler
The Need for Rich Desktop Clients
Benefits of Modular Architecture
Branding and Customization
Case Study—V-Builder
Case Study—NetAct Desktop
SM
30 | 2004 JavaOne Conference | Session TS-1694
What Is NetAct?
Nokia’s product for managing mobile networks
• Manages thousands of network elements,
tens of network element types, tens of vendors
• Contains configuration, monitoring,
reporting, planning, ...
BTS BSC
HLR/AuC
MSC/VLR EIR/SMSC
SS7 Mobile ISP
Network Operator Services Application
SGSN Servers
CC&B router/firewall
Charging
GPRS Gateway NMS
Border Gateway backbone Corporate
Customer
Application
Servers
Inter-PLMN GGSN router/firewall
network
Lawful Interception Internet
Gateway (LIG)
SM
31 | 2004 JavaOne Conference | Session TS-1694
What Are NetAct’s UI Challenges?
Seamless integration of large numbers
of management tools
• More than 70 user interface applications
in Nokia’s product (plus other vendor’s
applications)
• Daily management procedures easily
involve ten or more graphical tools
• Procedures vary largely between
network operators
SM
32 | 2004 JavaOne Conference | Session TS-1694
What Is NetAct’s Solution?
NetAct Desktop = NetBeans + J2EE + Navigation
• NetBeans Platform
─ Module concept, window system, ...
─ JFC/Swing compatibility (porting existing
Uis, third-party software)
• J2EE platform client support
─ Java Web Start software support
─ ...
• Navigation goodies
─ ExtensibleNode
─ Bookmarks
SM
33 | 2004 JavaOne Conference | Session TS-1694
Screenshot
SM
34 | 2004 JavaOne Conference | Session TS-1694
Java Web Start Software Support
Integration with NetBeans module system
• Module discovery servlet
─ Find all deployed NetBeans modules on a server
─ Dynamically generate JNLP file
• Classpath workaround
─ Java Web Start breaks NetBeans’ module system
by making all downloaded classes visible
─ All files in module jars get prefixed by a directory
to make them “invisible”
─ E.g., class "[Link]"
becomes
"enode/org/netbeans/api/enode/[Link]"
─ Special classloader resolves access to classes
SM
35 | 2004 JavaOne Conference | Session TS-1694
[Link]
Extensible Node
Simple pluggable navigation feature
• Modules declare actions offered for
particular nodes as part of their Layer file:
<folder name="ExtensibleNode" >
<folder name="Actions" >
<folder name="Network Element">
<file name=
"[Link]"/>
</folder>
</folder>
</folder>
• Other modules can use ExtensibleNode to
display popup menus with all declared actions
─ E.g., network elements displayed in
any module will offer the “reset” action
SM
36 | 2004 JavaOne Conference | Session TS-1694
[Link]
Bookmarks
Web-style navigation for NetBeans platform
• Forward/backward navigation between
tool states
public interface NavigationEvent {
public void restoreState();
public TopComponent getTopComponent();
}
SM
37 | 2004 JavaOne Conference | Session TS-1694
[Link]
Bookmarks
• Bookmarking tool states as keyboard
shortcut, “Bookmarks” menu, toolbar entries
public interface BookmarkProvider {
public Bookmark createBookmark();
}
public interface Bookmark
extends [Link], [Link] {
public String getName();
public void invoke();
}
SM
38 | 2004 JavaOne Conference | Session TS-1694
Demo
NetAct Desktop
SM
39 | 2004 JavaOne Conference | Session TS-1694
NetBeans Has All You Need to Efficiently
Develop Integrated Rich Clients
Visit [Link]
Visit [Link]
Visit [Link]
The NetBeans Day
Tuesday in Yerba Buena Theater
Meet NetBeans on BOFs and sessions
Building Great Looking Swing Apps, 1237
Wednesday 11:00 AM
What’s New With NetBeans IDE?, 3204
Wednesday 9:45 AM
Integrating Ant and NetBeans, 1598
Wednesday 8:30 PM
Meet the NetBeans™ Development Team, 2730
Wednesday 7:30 PM
40
Get free stuff from the Nokia booth, 1415
SM
| 2004 JavaOne Conference | Session TS-1694
Q&A
André Eickler, Nokia
Jaroslav Tulach, Sun Microsystems
Rich Unger, Nuance
SM
41 | 2004 JavaOne Conference | Session TS-1694
How to Simplify Building
Rich Clients in the Java™
Programming Language [Link]/javaone/sf
Jaroslav Tulach, Sun Microsystems
Rich Unger, Nuance
André Eickler, Nokia
SM
42 | 2004 JavaOne Conference | Session TS-1694