Foreword by Jonathan Schwartzxv
Foreword by Jan Chalupaxvii
Prefacexix
About the Authors and Contributorsxxvii
AcknowledgmentsxxxiChapter 1: Getting Started with the NetBeans Platform1
1.1Setting Up the IDE1
1.2NetBeans IDE Basics3
Chapter 2: The Benefits of Modular Programming 11
2.1Distributed Development11
2.2Modular Applications 13
2.3A Modular Programming Manifesto15
2.4Using NetBeans to Do Modular Programming19
Chapter 3: Modular Architecture23
3.1ModulesThe Assembly Units of a Modular Application 23
3.2Types of Modules24
3.3Module Lifecycle29
3.4Groups of Modules33
Chapter 4: Loosely Coupled Communication 39
4.1Registration and Discovery39
4.2MetaInf Services41
4.3The Global Lookup43
4.4Writing an Extension Point46
Chapter 5: Lookup49
5.1Objects That Own Lookups53
5.2Lookup as a Communication Mechanism55
5.3Lookups and Proxying58
5.4Lookup and Selection62
5.5Writing Lookup-Sensitive Actions63
5.6Tracking the Global Selection64
5.7Legacy Variants of the Lookup Pattern in NetBeans APIs65
5.8Common Lookup Patterns66
Chapter 6: Filesystems69
6.1FileSystems and FileObjects70
6.2What Kinds of FileSystems Will I Be Dealing With?71
6.3Layering72
6.4XML Filesystems73
6.5Declarative Registration II: The System Filesystem74
6.6Getting from FileObjects to Java Objects88
6.7Browsing the System Filesystem96
6.8Conclusions96
Chapter 7: Threading, Listener Patterns, and MIME Lookup103
7.1Creating the Modules and SPI104
7.2Implementing ListModelProvider107
7.3Providing a UI Component123
7.4Using the Pseudo Navigator132
7.5Conclusion: PseudoNavigatorWhat's Wrong with This Picture?132
Chapter 8: The Window System135
8.1What the Window System Does137
8.2Classes in the Window System API139
8.3Using TopComponent141
8.4Persisting State across Sessions145
8.5Window System Persistence Data147
8.6Creating Editor-Style (Nondeclarative) TopComponents152
8.7Advanced Window System Configuration: Defining Your Own Modes153
8.8Using TopComponent Groups158
Chapter 9: Nodes, Explorer Views, Actions, and Presenters163
9.1The Nodes API164
9.2The Explorer API177
9.3Actions190
9.4Node Properties199
9.5Nodes and DataObjects: Creating a System Filesystem Browser203
9.6Epilogue: Of Nodes, Property Sheets, and User Interface Design205
Chapter 10: DataObjects and DataLoaders207
10.1DataObjects: Where Do They Come From?210
10.2Adding Support for a New File Type212
10.3Using Custom File Types Internally234
10.4Serialized Objects and the System Filesystem235
Chapter 11: Graphical User Interfaces237
11.1Introduction237
11.2Creating a New GUI Form240
11.3Placing and Aligning a Component in a Form240
11.4Setting Component Size and Resizability242
11.5Specifying Component Behavior and Appearance244
11.6Generating Event Listening and Handling Methods244
11.7Customizing Generated Code247
11.8Building an Explorer View Visually 249
11.9Previewing a Form250
11.10Using Custom Beans in the Form Editor250
11.11Using Different Layout Managers251
Chapter 12: Multiview Editors253
12.1Introduction253
12.2Getting Started255
12.3Understanding Multiview Editors256
12.4Creating the Editors Infrastructure257
12.5Creating the Source View261
12.6Creating the Visual View269
12.7Finishing the Sample271
Chapter 13: Syntax Highlighting273
13.1Introduction273
13.2Preparing to Create Syntax Highlighting274
13.3Creating Token IDs275
13.4Creating a Lexical Analyzer277
13.5Extending the Options Window281
13.6Registering the Syntax Highlighting in the Layer File284
13.7Finishing Up286
Chapter 14: Code Completion287
14.1Introduction287
14.2Understanding Code Completion289
14.3Code Completion Query Types291
14.4Preparing to Work with the CompletionProvider Interface291
14.5Implementing a CompletionProvider293
14.6Implementing a CompletionItem296
14.7Adding a Filter to the CompletionProvider300
14.8Adding Documentation to the Code Completion Box304
14.9Adding a Tooltip to the Code Completion Box305
Chapter 15: Component Palettes307
15.1Introduction307
15.2Adding Items to a Palette313
15.3Dragging and Dropping Palette Items323
15.4Adding Supporting Features to a Palette331
15.5Creating a Palette for a Text-Based Editor344
Chapter 16: Hyperlinks355
16.1Introduction355
16.2Preparing to Work with the HyperlinkProvider Class357
16.3Hyperlinks in Manifest Files359
Chapter 17: Annotations367
17.1Introduction367
17.2Preparing to Create an Error Annotation368
17.3Creating an Error Annotation368
17.4Preparing to Use an Error Annotation376
17.5Using an Error Annotation377
17.6Finishing Up383
Chapter 18: Options Windows385
18.1Introduction385
18.2Looking at the Options Window Extension Files389
18.3Creating a Primary Panel393
18.4Adding Settings to the Options Window396
Chapter 19: Web Frameworks399
19.1Introduction399
19.2Preparing to Work with the WebFrameworkProvider Class404
19.3Providing a Framework Configuration Panel406
19.4Creating a Source Structure413
19.5Letting the User Select a Library in the Frameworks Panel423
19.6Project Properties Dialog Box and Web Frameworks424
19.7Finishing Up427
Chapter 20: Web Services429
20.1Introduction429
20.2Creating and Testing a Web Service Client430
20.3Integrating the Web Service Client435
Chapter 21: JavaHelp Documentation441
21.1Creating a Help Set442
21.2Removing the IDE's Help Sets446
21.3Branding the Help Set's Default Texts449
Chapter 22Update Centers453
22.1Introduction453
22.2Adding the IDE's Update Center Functionality454
22.3Creating and Distributing an Autoupdate Descriptor456
22.4Distributing the URL to the Autoupdate Descriptor458
22.5Downloading NBM Files from an Update Center461
22.6Publishing Updates to Existing Modules462
Chapter 23: Use Case 1: NetBeans Module Development463
23.1Introduction463
23.2Calling the External Tool465
23.3Handling the Output476
23.4Configuring the Tool491
23.5Formatting and Converting Files496
23.6Controlling the Conversion505
Chapter 24: Use Case 2: Rich Unger on Application Development521
24.1Introduction521
24.2Getting Started522
24.3Creating Support for the audio/wav MIME Type526
24.4Encapsulating Audio Data in the WavDataObject530
24.5Creating a Component for Viewing WAV Files533
24.6Converting WAV Editor to Multiview535
24.7Creating an API for Plugging in Additional Views542
24.8Implementing Your Own API to Provide a New View544
Chapter A: Advanced Module System Techniques551
A.1Hiding Implementation Details551
A.2Design for Extensibility553
A.3Splitting API and Implementation555
A.4Do I Really Need Cyclic Dependency?559
A.5Crossing the Informational Divide563
A.6Restricting Access to Friends565
A.7Having Public as Well as Friend API566
A.8A Final Word on Modularity568
Chapter B: Common Idioms and Code Patterns in NetBeans569
B.1Things You Do Differently in NetBeans Than in Plain Swing Code569
B.2Things That Represent Files571
B.3Working with Lookup573
B.4Projects573
Chapter C: Performance575
C.1Responsiveness versus Performance577
C.2Performance Tips for Module Authors578
C.3Writing Modules That Are Good Citizens579
Index583