did-you-know? rent-now

Amazon no longer offers textbook rentals. We do!

did-you-know? rent-now

Amazon no longer offers textbook rentals. We do!

We're the #1 textbook rental company. Let us show you why.

9780321426727

Eclipse Building Commercial-Quality Plug-ins

by ;
  • ISBN13:

    9780321426727

  • ISBN10:

    032142672X

  • Edition: 2nd
  • Format: Paperback
  • Copyright: 2006-03-22
  • Publisher: Addison-Wesley Professional
  • View Upgraded Edition
  • Purchase Benefits
  • Free Shipping Icon Free Shipping On Orders Over $35!
    Your order must be $35 or more to qualify for free economy shipping. Bulk sales, PO's, Marketplace items, eBooks and apparel do not qualify for this offer.
  • eCampus.com Logo Get Rewarded for Ordering Your Textbooks! Enroll Now
List Price: $59.99 Save up to $6.00
  • Digital
    $53.99
    Add to Cart

    DURATION
    PRICE

Supplemental Materials

What is included with this book?

Summary

"I'm often asked, 'What are the best books about Eclipse?' Number one on my list, every time, is Eclipse: Building Commercial-Quality Plug-ins. I find it to be the clearest and most relevant book about Eclipse for the real-world software developer. Other Eclipse books focus on the internal Eclipse architecture or on repeating the Eclipse documentation, whereas this book is laser focused on the issues and concepts that matter when you're trying to build a product." -- Bjorn Freeman-Benson Director, Open Source Process, Eclipse Foundation"As the title suggests, this massive tome is intended as a guide to best practices for writing Eclipse plug-ins. I think in that respect it succeeds handily. Before you even think about distributing a plug-in you've written, read this book." -- Ernest Friedman-Hill Sheriff, JavaRanch.com"Eclipse: Building Commercial-Quality Plug-ins was an invaluable training aid for all of our team members. In fact, training our team without the use of this book as a base would have been virtually impossible. It is now required reading for all our developers and helped us deliver a brand-new, very complex product on time and on budget thanks to the great job this book does of explaining the process of building plug-ins for Eclipse." -- Bruce Gruenbaum"This is easily one of the most useful books I own. If you are new to developing Eclipse plug-ins, it is a 'must-have' that will save you lots of time and effort. You will find lots of good advice in here, especially things that will help add a whole layer of professionalism and completeness to any plug-in. The book is very focused, well-structured, thorough, clearly written, and doesn't contain a single page of 'waffly page filler.' The diagrams explaining the relationships between the different components and manifest sections are excellent and aid in understanding how everything fits together. This book goes well beyond Actions, Views, and Editors, and I think everyone will benefit from the authors' experience. I certainly have." -- Tony Saveski"The authors of this seminal book have decades of proven experience with the most productive and robust software engineering technologies ever developed. Their experiences have now been well applied to the use of Eclipse for more effective Java development. A must-have for any serious software engineering professional!" -- Ed Klimas"Just wanted to also let you know this is an excellent book! Thanks for putting forth the effort to create a book that is easy to read and technical at the same time!" -- Brooke Hedrick"The key to developing great plug-ins for Eclipse is understanding where and how to extend the IDE, and that's what this book gives you. It is a must for serious plug-in developers, especially those building commercial applications. I wouldn't be without it." -- Brian Wilkerson"If you're looking for just one Eclipse plug-in development book that will be your guide, this is the one. While there are other books available on Eclipse, few dive as deep as Eclipse: Building Commercial-Quality Plug-ins." -- Simon ArcherEclipse has established itself as a dominant force in the application-development space. Key to the success of Eclipse is the ability of developers to extend its functionality using plug-ins.This new edition of Eclipse: Building Commercial-Quality Plug-ins is the definitive, start-to-finish guide to building commercial-quality Eclipse plug-ins, with an emphasis on adding the sophistication and polish that paying customers demand. The book provides both a quick introduction to using Eclipse for new users and a reference for experienced Eclipse users wishing to expand their knowledge and improve the quality of their Eclipse-based products.Revised to take advantage of pure Eclipse 3.1 and 3.2 APIs, this widely praised bestsell

Author Biography

Eric Clayberg is Senior Vice President for Product Development for Instantiations, Inc. Eric is a easoned software technologist, product developer, entrepreneur, and manager. He has a B.S. from MIT, an MBA from Harvard, and has cofounded two successful software companies, ObjectShare and Instantiations.

Dan Rubel is Chief Technology Officer for Instantiations, Inc. He is an entrepreneur and an expert in the design and application of OO technologies. Dan is the primary architect and product manager for several successful commercial products. He has a B.S. from Bucknell and is a cofounder of Instantiations.



Table of Contents

Foreword xxxi
Skip McGaughey
Foreword xxxiii
Simon Archer
Preface xxxv
Using Eclipse Tools
1(64)
Getting Started
1(2)
Getting Eclipse
1(2)
Installation
3(1)
The Eclipse Workbench
3(11)
Perspectives, views, and editors
5(6)
Actions
11(3)
Setting Up Your Environment
14(5)
Workbench preferences
15(2)
Java preferences
17(1)
Importing and exporting preferences
18(1)
Creating a Project
19(7)
Using the new Java Project wizard
19(3)
.classpath and .project files
22(2)
Using the Java Package wizard
24(1)
Using the Java Class wizard
24(2)
Navigating
26(2)
Open Type dialog
26(1)
Type Hierarchy view
27(1)
Go to Line
27(1)
Outline view
27(1)
Searching
28(6)
File Search
28(2)
Java Search
30(1)
Other Search menu options
31(1)
Working sets
32(2)
Writing Code
34(14)
Java editor
34(5)
Templates
39(2)
Refactoring
41(3)
Local history
44(2)
File extension associations
46(2)
Team Development Using CVS
48(6)
Getting started with CVS
49(1)
Checking out a project from CVS
50(1)
Synchronizing with the repository
51(1)
Comparing and replacing resources
52(1)
CVS label decorators
53(1)
Running Applications
54(4)
Launching Java applications
55(1)
Launch configurations
56(2)
Introduction to Debugging
58(3)
Setting breakpoints
58(2)
Using the Debug view
60(1)
Using the Variables view
60(1)
Using the Expressions view
60(1)
Introduction to Testing
61(2)
Creating test cases
61(1)
Running test cases
62(1)
Summary
63(2)
A Simple Plug-in Example
65(36)
The Favorites Plug-in
65(1)
Creating a Plug-in Project
66(5)
New Plug-in Project wizard
66(1)
Define the plug-in
67(2)
Define the view
69(2)
Reviewing the Generated Code
71(10)
The Plug-in manifests
71(6)
The Plug-in class
77(1)
The Favorites view
78(3)
Building a Product
81(5)
Building manually
81(2)
Building with Apache Ant
83(3)
Installing and Running the Product
86(2)
Debugging the Product
88(2)
Creating a configuration
88(1)
Selecting plug-ins and fragments
89(1)
Launching the Runtime Workbench
90(1)
PDE Views
90(2)
The Plug-in Registry view
90(1)
The Plug-ins view
91(1)
The Plug-in Dependencies view
91(1)
Writing Plug-in Tests
92(6)
Test preparation
92(1)
Creating a Plug-in test project
92(1)
Creating a Plug-in test
93(4)
Running a Plug-in test
97(1)
Uninstalling the Favorites plug-in
98(1)
Summary
98(3)
Eclipse Infrastructure
101(26)
Structural Overview
101(3)
Plug-in structure
102(2)
Workspace
104(1)
Plug-in Directory or JAR file
104(3)
Link files
105(1)
Hybrid approach
106(1)
Plug-in Manifest
107(7)
Plug-in declaration
108(2)
Plug-in runtime
110(1)
Plug-in dependencies
110(2)
Extensions and extension points
112(2)
Plug-in Class
114(5)
Startup and shutdown
114(1)
Early plug-in startup
114(1)
Static plug-in resources
115(1)
Plug-in preferences
116(1)
Plug-in configuration files
116(2)
Plugin and AbstractUIPlugin
118(1)
Plug-in Model
119(3)
Platform
119(1)
Plug-ins and Bundles
120(1)
Plug-in extension registry
121(1)
Logging
122(2)
Status objects
123(1)
The Error Log view
124(1)
Eclipse Plug-ins
124(1)
Summary
125(2)
The Standard Widget Toolkit
127(58)
SWT History and Goals
127(3)
SWT Widgets
130(40)
Simple stand-alone example
130(3)
Widget lifecycle
133(1)
Widget events
134(2)
Abstract widget classes
136(4)
Top-level classes
140(3)
Useful widgets
143(23)
Menus
166(4)
Layout Management
170(10)
FillLayout
170(1)
RowLayout
171(3)
GridLayout
174(3)
FormLayout
177(3)
Resource Management
180(1)
Colors
180(1)
Fonts
181(1)
Images
181(1)
Summary
181(4)
Face Viewers
185(22)
List-Oriented Viewers
185(18)
Label providers
186(1)
Content providers
187(2)
Viewer sorters
189(1)
Viewer filters
189(1)
Structured Viewer class
190(2)
ListViewer class
192(3)
TableViewer class
195(4)
TreeViewer class
199(4)
Text Viewers
203(3)
Summary
206(1)
Actions
207(52)
Action versus IActionDelegate
207(2)
Workbench Window Actions
209(15)
Defining a workbench window menu
209(3)
Groups in a menu
212(1)
Defining a menu item and toolbar button
212(2)
Action images
214(1)
Insertion points
215(1)
Creating an action delegate
216(3)
Manually testing the new action
219(1)
Adding a test for the new action
220(2)
Discussion
222(2)
Object Actions
224(13)
Defining an object-based action
224(3)
Action filtering and enablement
227(6)
IObjectActionDelegate
233(1)
Creating an object-based submenu
234(1)
Manually testing the new action
235(1)
Adding a test for the new action
235(2)
View Actions
237(7)
Defining a view context submenu
237(1)
Defining a view context menu action
238(2)
IViewActionDelegate
240(1)
Defining a view toolbar action
240(1)
Defining a view pull-down submenu and action
241(1)
Manually testing the new actions
242(1)
Adding tests for the new actions
242(1)
View context menu identifiers
242(2)
Editor Actions
244(7)
Defining an editor context menu
245(1)
Defining an editor context action
246(1)
IEditorActionDelegate
246(1)
Defining an editor top-level menu
247(1)
Defining an editor top-level action
248(1)
Defining an editor toolbar action
249(1)
Adding tests for the new actions
250(1)
Editor context menu identifiers
250(1)
Key Bindings
251(5)
Categories
252(1)
Commands
252(1)
Key bindings
252(3)
Associating commands with actions
255(1)
Keyboard accessibility
255(1)
RFRS Considerations
256(1)
Global action labels (RFRS 5.3.5.1)
257(1)
Summary
257(2)
Views
259(66)
View Declaration
261(2)
Declaring a view category
261(1)
Declaring a view
262(1)
View Part
263(20)
View methods
263(1)
View controls
264(1)
View model
265(11)
Content provider
276(1)
Label provider
277(1)
Viewer sorter
278(3)
Viewer filters
281(1)
View selection
282(1)
View Actions
283(22)
Model actions
283(1)
Context menu
283(4)
Toolbar buttons
287(1)
Pull-down menu
287(1)
Keyboard actions
288(1)
Global actions
289(1)
Clipboard actions
290(4)
Drag-and-drop support
294(7)
Inline editing
301(4)
Linking the View
305(3)
Selection provider
305(1)
Adaptable objects
306(1)
Selection listener
306(1)
Opening an editor
307(1)
Saving View State
308(6)
Saving local view information
308(3)
Saving global view information
311(3)
Testing
314(1)
Image Caching
315(1)
Auto-sizing Table Columns
316(3)
RFRS Considerations
319(4)
Views for navigation (RFRS 3.5.15)
319(1)
Views save immediately (RFRS 3.5.16)
320(1)
View initialization (RFRS 3.5.17)
320(1)
View global actions (RFRS 3.5.18)
320(1)
Persist view state (RFRS 3.5.19)
321(1)
Register context menus (RFRS 5.3.5.8)
321(1)
Action filters for views (RFRS 5.3.5.9)
322(1)
Summary
323(2)
Editors
325(50)
Editor Declaration
326(4)
Editor Part
330(14)
Editor methods
330(1)
Editor controls
331(4)
Editor model
335(6)
Content provider
341(1)
Label provider
342(2)
Editing
344(6)
Cell editors
344(1)
Cell modifiers
345(2)
Change listeners
347(1)
Cell validators
348(1)
Editing versus selecting
349(1)
Editor Lifecycle
350(4)
Dirty editors
351(1)
Switching pages
352(1)
Saving content
353(1)
Editor Actions
354(15)
Context menu
354(3)
Editor contributor
357(5)
Undo/Redo
362(7)
Clipboard actions
369(1)
Linking the Editor
369(1)
RFRS Considerations
369(5)
Using an editor to edit or browse (RFRS 3.5.9)
370(1)
Editor lifecycle (RFRS 3.5.10)
370(1)
Accessing global actions (RFRS 3.5.11)
371(1)
Closing when the object is deleted (RFRS 3.5.12)
371(1)
Synchronize external changes (RFRS 3.5.14)
372(1)
Registering editor menus (RFRS 5.3.5.2)
372(1)
Editor action filters (RFRS 5.3.5.3)
373(1)
Unsaved editor modifications (RFRS 5.3.5.4)
373(1)
Prefix dirty resources (RFRS 5.3.5.5)
373(1)
Editor outline view (RFRS 5.3.5.6)
374(1)
Synchronize with outline view (RFRS 5.3.5.7)
374(1)
Summary
374(1)
Resource Change Tracking
375(14)
IResourceChangeListener
375(4)
IResourceChangeEvent
376(1)
IResourceDelta
377(2)
Processing Change Events
379(3)
Batching Change Events
382(1)
Progress Monitor
383(4)
IProgressMonitor
383(1)
Classes for displaying progress
384(1)
Workbench window status bar
385(1)
IProgressService
386(1)
Delayed Changed Events
387(1)
Summary
388(1)
Perspectives
389(16)
Creating a Perspective
389(7)
Perspective extension point
390(2)
Perspective factories
392(3)
IPageLayout
395(1)
Enhancing an Existing Perspective
396(7)
Adding views and placeholders
398(2)
Adding shortcuts
400(2)
Adding action sets
402(1)
RFRS Considerations
403(1)
Create for long-lived tasks (RFRS 5.3.5.10)
403(1)
Extend existing perspectives (RFRS 5.3.5.11)
404(1)
Add actions to window menu (RFRS 5.3.5.15)
404(1)
Summary
404(1)
Dialogs and Wizards
405(46)
Dialogs
405(25)
SWT dialogs versus JFace dialogs
406(1)
Common SWT dialogs
406(1)
Common JFace dialogs
407(3)
Creating a JFace dialog
410(2)
Dialog units
412(1)
Initial dialog location and size
413(1)
Resizable dialogs
414(2)
Favorites view filter dialog
416(4)
Details dialog
420(8)
Opening a dialog---finding a parent shell
428(2)
Wizards
430(19)
IWizard
431(2)
IWizardPage
433(1)
IWizardContainer
434(1)
Nested wizards
435(1)
Launching a wizard
435(4)
Wizard example
439(2)
Dialog settings
441(1)
Page content based on selection
441(6)
Page content based on previous page
447(2)
RFRS Considerations
449(1)
Wizard look and feel (RFRS 3.5.2)
449(1)
Open new file in editor (RFRS 3.5.6)
449(1)
New project switches perspective (RFRS 3.5.7)
449(1)
Show new object (RFRS 3.5.8)
450(1)
One-page wizard buttons (RFRS 5.3.5.13)
450(1)
Summary
450(1)
Preference Pages
451(26)
Creating a Preference Page
451(2)
Preference Page APIs
453(14)
FieldEditorPreferencePage
455(1)
Field editors
456(4)
PreferencePage
460(1)
Favorites preference page
461(2)
Validation
463(1)
Nested preference pages
464(2)
Tabbed preference pages
466(1)
Preference APIs
467(7)
Default preferences
468(1)
Accessing preferences
469(2)
Specifying default values programmatically
471(1)
Specifying default values in a file
472(1)
Hooking up the Favorites view
473(1)
Listening for preference changes
474(1)
RFRS Considerations
474(1)
Preferences dialog use (RFRS 3.5.25)
475(1)
Summary
475(2)
Properties
477(20)
Creating Properties
477(4)
FavoriteItem properties
478(1)
Resource properties
479(2)
Displaying Properties in the Properties Dialog
481(8)
Declaring a Property page
481(4)
Creating a resource Property page
485(2)
Creating a Favorities item resource page
487(1)
Opening the Properties dialog
488(1)
Displaying Properties in the Properties View
489(4)
Properties view API
490(2)
Favorite properties in the Properties view
492(1)
Property Pages Reused as Preference Pages
493(2)
RFRS Considerations
495(1)
Properties views for quick access (RFRS 3.5.21)
495(1)
Summary
495(2)
Builders, Markers, and Natures
497(42)
Builders
499(13)
Declaring a builder
499(3)
IncrementalProjectBuilder
502(7)
Derived resources
509(1)
Associating a builder with a project
509(3)
Invoking builders
512(1)
Markers
512(13)
Marker types
513(2)
Creating and deleting markers
515(2)
Marker attributes
517(3)
Marker resolution---quick fix
520(5)
Finding markers
525(1)
Natures
525(10)
Declaring a nature
526(2)
Associating builders and natures
528(1)
IProjectNature
529(1)
Required natures
530(1)
Conflicting natures
531(1)
Nature image
531(1)
Associating a nature with a project
532(3)
RFRS Considerations
535(2)
Use builders to convert resources (RFRS 3.8.1)
535(1)
Do not replace existing builders (RFRS 3.8.3)
535(1)
Do not misuse the term ``build'' (RFRS 5.3.8.1)
535(1)
Mark created resources as ``derived'' (RFRS 5.3.8.2)
536(1)
Respond to clean-build requests (RFRS 5.3.8.3)
536(1)
Use IResourceProxy when possible (RFRS 5.3.8.4)
537(1)
Builders must be added by natures (RFRS 5.3.8.5)
537(1)
Summary
537(2)
Implementing Help
539(36)
Using Help
539(3)
Implementing Help
542(10)
Creating a new help project
543(4)
Plug-in manifest files
547(1)
Table of contents (toc) files
548(3)
Creating HTML content
551(1)
Context-Sensitive Help (F1)
552(8)
Associating context IDs with items
553(2)
IWorkbenchHelpSystem API
555(1)
Creating context-sensitive help content
556(1)
Context extension point
557(3)
Marker help
560(1)
Accessing Help Programmatically
560(3)
Opening a specific help page
561(1)
Opening a Web page
562(1)
Cheat Sheets
563(7)
Using a cheat sheet
563(2)
Creating a simple cheat sheet
565(3)
Adding cheat sheet actions
568(2)
RFRS Considerations
570(4)
Provide help through help system (RFRS 3.7.2)
570(1)
Provide all help via the help system (RFRS 5.3.7.1)
571(1)
Context help activated using F1 (RFRS 5.3.7.2)
571(1)
Implement active help (RFRS 5.3.7.3)
572(1)
Use of stand-alone help (RFRS 5.3.7.4)
572(1)
Use of additional documentation (RFRS 5.3.7.5)
572(1)
Provide an overview of tasks flow (RFRS 5.3.5.34)
573(1)
Illustrate only one task (RFRS 5.3.5.35)
573(1)
Provide help link with each step (RFRS 5.3.5.36)
573(1)
Summary
574(1)
Internationalization
575(20)
Externalizing the Plug-in Manifest
576(2)
Externalizing Plug-in Strings
578(9)
Using Fragments
587(7)
New Fragment Project wizard
588(3)
Fragment manifest file
591(2)
Fragment project contents
593(1)
Summary
594(1)
Creating New Extension Points
595(24)
The Extension Point Mechanism
595(2)
Defining an Extension Point
597(10)
Creating an extension point
597(2)
Creating an extension point schema
599(2)
Extension point elements and attributes
601(4)
Extension point element grammar
605(2)
Code Behind an Extension Point
607(7)
Parsing extension information
607(2)
Constructing proxies
609(2)
Creating executable extensions
611(2)
Cleanup
613(1)
Extension Point Documentation
614(1)
Using the Extension Point
615(2)
RFRS Considerations
617(1)
Document extension points (RFRS 3.10.5)
617(1)
Log errors (RFRS 5.3.10.1)
618(1)
Summary
618(1)
Features, Branding, and Updates
619(32)
Feature Projects
620(11)
Creating a new feature project
621(2)
Feature manifest files
623(1)
Feature manifest editor
624(7)
Branding
631(6)
The about.html file
632(1)
The about.ini file
633(2)
Product branding
635(2)
Update Sites
637(10)
Creating an update site project
637(2)
The site.xml file
639(3)
The update Web site
642(1)
Revisiting the feature manifest
643(1)
Accessing the update site
643(4)
RFRS Considerations
647(1)
Do not override product branding (RFRS 3.1.8)
647(1)
Branded feature visibility (RFRS 5.3.1.9)
647(1)
Include attribution information (RFRS 5.3.1.10)
647(1)
about.html file contents (RFRS 5.3.1.11)
648(1)
Splash screen restrictions (RFRS 5.3.1.12)
648(1)
Summary
648(3)
Building a Product
651(58)
A Brief Introduction to Ant
651(20)
Build projects
651(1)
Build targets
652(1)
Build tasks
653(4)
Build properties
657(7)
<antcall> task
664(2)
macrodef
666(2)
Headless Ant
668(1)
Ant extensions
669(2)
Building the Favorites Product
671(36)
Auto-generated build script
671(5)
Refactoring the Favorites build script
676(13)
Compiling during the build process
689(2)
Single versus multiple binaries
691(1)
Editing with different versions of Eclipse
692(1)
Building against different versions of Eclipse
693(8)
Classpath tools
701(2)
Building against Eclipse 3.0
703(2)
Retargeting source code
705(1)
Version checking
705(2)
Building for internationalization
707(1)
Summary
707(2)
Advanced Topics
709(42)
Advanced Search---Reference Projects
710(1)
Accessing Internal Code
711(3)
Eclipse newsgroup
711(1)
Bugzilla---Eclipse bug tracking system
712(1)
Options for accessing internal code
712(1)
How Eclipse is different
713(1)
Related plug-ins
713(1)
Using fragments
714(1)
Adapters
714(4)
IAdaptable
714(1)
Using adapters
715(1)
Adapter factory
715(3)
IWorkbenchAdapter
718(1)
Opening a Browser or Creating an Email
718(5)
IWorkbenchBrowserSupport
718(2)
LaunchURL
720(1)
OpenEmailAction
720(3)
Types Specified in an Extension Point
723(4)
Parameterized types
724(2)
Referencing a class in a different plug-in
726(1)
Modifying Eclipse to Find Part Identifiers
727(5)
Modifying the Eclipse base
727(2)
Creating the global action
729(2)
Testing the new utility
731(1)
Submitting the change to Eclipse
731(1)
Label Decorators
732(7)
Declaring a label decorator
733(1)
ILightweightLabelDecorator
734(2)
Decorative label decorators
736(1)
IDecoratorManager
737(2)
Background Tasks---Jobs API
739(3)
Plug-in ClassLoaders
742(5)
Early Startup
747(1)
Managing early startup
747(1)
Disabling early startup
748(1)
Rich Client Platform
748(1)
Conclusion
749(2)
Appendix A Eclipse Plug-ins and Resources
751(14)
Plug-ins
751(9)
CodePro AnalytiX and CodePro PlusPak
751(2)
EclipseProfiler
753(1)
EclipseUML
754(1)
MyEclipse Enterprise Workbench
755(2)
WindowBuilder Pro
757(2)
XMLBuddy
759(1)
Resources
760(5)
Eclipse.org
760(2)
Eclipse Plug-in Central
762(1)
Eclipse plug-in site
762(1)
Eclipse wiki wiki
762(1)
EclipseCon
762(1)
ANTLR plug-in for Eclipse
762(1)
Bugzilla plug-in
762(1)
Coloring editor
762(1)
Eclipse Easter eggs
763(1)
IBM Alphaworks on Eclipse
763(1)
IBM Eclipse research
763(1)
PHP plug-in for Eclipse
763(1)
QNX's Momentics
763(1)
QuickShare: XP programming for Eclipse
763(1)
Sangam: XP programming for Eclipse
763(2)
Appendix B Ready for Rational Software
765(2)
Index 767

Supplemental Materials

What is included with this book?

The New copy of this book will include any supplemental materials advertised. Please check the title of the book to determine if it should include any access cards, study guides, lab manuals, CDs, etc.

The Used, Rental and eBook copies of this book are not guaranteed to include any supplemental materials. Typically, only the book itself is included. This is true even if the title states it includes any access cards, study guides, lab manuals, CDs, etc.

Excerpts

When we were first exposed to Eclipse back in late 1999, we were struck by the magnitude of the problem IBM was trying to solve. IBM wanted to unify all its development environments on a single code base. At the time, the company was using a mix of technology composed of a hodgepodge of C/C++, Java, and Smalltalk. Many of IBM's most important tools, including the award-winning Visual-Age for Java IDE, were actually written in Smalltalk--a wonderful language for building sophisticated tools, but one that was rapidly losing market share to languages like Java. While IBM had one of the world's largest collections of Smalltalk developers, there wasn't a great deal of industry support for it outside of IBM, and there were very few independent software vendors (ISVs) qualified to create Smalltalk-based add-ons. Meanwhile, Java was winning the hearts and minds of developers world-wide with its promise of easy portability across a wide range of platforms, while providing the rich application programming interface (API) needed to build the latest generation of Web-based business applications. More important, Java was an object-oriented (OO) language, which meant that IBM could leverage the large body of highly skilled object-oriented developers it had built up over the years of creating Smalltalk-based tools. In fact, IBM took its premiere Object Technology International (OTI) group, which had been responsible for creating IBM's VisualAge Smalltalk and VisualAge Java environments (VisualAge Smalltalk was the first of the VisualAge brand family and VisualAge Java was built using it), and tasked the group with creating a highly extensible integrated development environment (IDE) construction set based in Java. Eclipse was the happy result. OTI was able to apply its highly evolved OO skills to produce an IDE unmatched in power, flexibility, and extensibility. The group was able to replicate most of the features that had made Smalltalk-based IDEs so popular the decade before, while simultaneously pushing the state of the art in IDE development ahead by an order of magnitude. The Java world had never seen anything as powerful or as compelling as Eclipse, and it now stands, with Microsoft's .NET, as one of the world's premier development environments. That alone makes Eclipse a perfect platform for developers wishing to get their tools out to as wide an audience as possible. The fact that Eclipse is completely free and open source is icing on the cake. An open, extensible IDE base that is available for free to anyone with a computer is a powerful motivator to the prospective tool developer. It certainly was to us. At Instantiations and earlier at ObjectShare, we had spent the better part of a decade as entrepreneurs focused on building add-on tools for various IDEs. We had started with building add-ons for Digitalk's Smalltalk/V, migrated to developing tools for IBM's VisualAge Smalltalk, and eventually ended up creating tools for IBM's VisualAge Java (including our award-winning VA Assist product and our jFactor product, one of the world's first Java refactoring tools). Every one of these environments provided a means to extend the IDE, but they were generally not well-documented and certainly not standardized in any way. Small market shares (relative to tools such as VisualBasic) and an eclectic user base also afflicted these environments and, by extension, us. As an Advanced IBM Business Partner, we were fortunate to have built a long and trusted relationship with the folks at IBM responsible for the creation of Eclipse. That relationship meant that we were in a unique position to be briefed on the technology and to start using it on a daily basis nearly a year and half before the rest of the world even heard about it. When IBM finally announced Eclipse to the world in mid-2001, our team at Instantiations had built some of the first demo applications IBM had to show. Later that year when IBM released

Rewards Program