Professional Documents
Culture Documents
Agenda
Notes about the speaker Past Goals Provided features and tools Present Balance of experience Analysis Future Plans for future releases OpenOffice.org Google Summer Of Code projects
Working on StarOffice/OpenOffice.org since 1995 Application Framework (formerly sfx2 module) Object embedding (sot, so3) New UNO based Application Framework Now working as a Software Engineering Manager Application Framework Programmability (API/SDK/UNO) OpenOffice.org Application Framework Project Lead Member of OOo Engineering Steering Committee
OpenOffice.org Programmability
Past
Provide an API to access the whole functionality of OpenOffice.org that allows developers to use it in their own applications. Enable users to extend OpenOffice.org with own components that bring new functionality to the program. Make internal implementations of existing functionality in OpenOffice.org replaceable by other components that work better or differently. Make componentization of OpenOffice.org possible
Creation of applications that connect to an instance of OpenOffice.org and use its functionality Writing macros or scripts with OpenOffice.org Basic or Scripting Framework Using predefined service provider APIs to bring new components into OpenOffice.org Document import or export filters Content providers Calc Add-Ins Data Connectors Add-Ons
Direct support for programming languages C++ Java Python OpenOffice.org Basic Support for Scripting Languages through Scripting Framework; currently JavaScript, BeanShell OLE Automation Bridge to support VB, Delphi etc. CLI UNO Bridge to support .NET (C#, VB.NET etc.)
Complete reference documentation of the whole API OpenOffice.org Developers Guide Programming Examples for all supported languages Development environment for C++ and Java UNO Runtime Environment libraries and documentation Creation of UNO packages for easy deployment
OpenOffice.org Programmability
Present
Many developers showed up on our lists, starting a lot of interesting discussions Several Add-Ons (both open and closed source) have been created Customer projects have been enabled by additional components Books have been written about OpenOffice.org Basic macro development OpenOffice.org itself benefits from UNO APIs by becoming more componentized
Developers didn't use the provided documentation as much as we expected Many of those who used it still had a lot of questions People still fight with the SDK Component development, especially development of Add-Ons, didn't happen to the extent we hoped Macro development is done mostly by experts
We have many very flexible and powerful APIs, but at the expense of missing type safety API uses a lot of generic interfaces API uses Any parameters and return values quite often This causes a lot of typechecks and interface negotiations (queryInterface) at runtime It makes the code harder to write and read People (especially Basic developers) very often think in objects, not in interfaces
The SDK environment for the creation of UNO components is not very convenient many developers don't like shells and makefiles They miss the conveniences of modern IDEs Creation of components (especially Add-Ons) requires a lot of unproductive routine work provide code for component registration and instantiation hacking of XML configuration files
The documentation is huge and detailed but it's hard to get in It lacks introductory parts (primers) to language bindings and most important topics It's hard to access or explore the functionality of an object using the UNOIDL reference Basic is not well supported by it at all Especially Basic developers ask for documentation in their native language
Conclusion
OpenOffice.org Programmability
Future
Multiple inheritance for UNO interfaces New Style Services with constructors Type safe methods to get and set attributes
createInstance method of the Service Manager > can have defined parameters with defined types, not a sequence < any > as the createInstanceWithArguments method of the Service Manager
Interface attributes
Typesafe access by typed get/setMethod instead of any-based get/setPropertyValue methods Clean up concepts of interface and implementation by making clear that attributes belong to the interface and not to the service definition
Interface negotiations
create a new multiple-inheritance interface from them > implement the new interface as new style service, but support old ones in queryInterface calls of this object > add all of the mandatory properties of the corresponding old style service as attributes to the interface of the new style service
packed and deployed without any user action > User edits this skeleton, only concentrating on his problem domain
Integrate the code generator into popular IDEs as a component wizard For Java: switch to ANT For C++: ???
Microsoft Developer Studio Other IDEs: ??? Open for contributions, help, suggestions...
Java/C++/CLI development
> > > >
component wizard using code generator code completion in editor (needs more rich interfaces) build/deploy/debug in IDE integration of IDL reference into IDE
Scripting Framework
> deploy Java macros into documents and packages
Advanced toolbar controls (strings, lists, numerical items) Typed toolbar entries (void, integer, string, list etc.) Statusbar integration for Add-Ons Titles for toolbars Template based contexts
Precondition for component downloads: signing Cooperation: licencing of components Finally: download and update components
Documentation plans
More examples in all languages, showing best practice Advertise code snippet database Work with community to get more primer style documentation
Exception handling Support constructors in Basic Would people accept static typing to get code completion? Extend object browsing capability
> show methods, interfaces > link to UNOIDL reference
1 API project (Grammer Checker API) 1 external tooling project (ODT-export for JasperReports) 1 Calc non-coding project (Validation of results) 2 Programmability projects 2 Coding projects, both delivered as UNO components
> prepare OOo text documents for Word export > tabbed windowing interface for OOo
Data about the project: Andrzej Wytyczak-Partyka Experienced C++ developer No knowledge in OpenOffice.org development Total time of 9 weeks for familiarizing with UNO based development, knowing and understanding the relevant APIs, development of component. Mentoring based on dev-list of Framework project done by Andreas Schlns (API project co-lead)
Data about the project: Fintan Fairmichael No knowledge in OpenOffice.org development No prior knowledge about NetBeans Total time of 9 weeks for familiarizing with UNOIDL and tooling familarizing with NetBeans and NetBeans plugins development of plugin Mentoring done by Jrgen Schmidt (API project lead)
Data about the project: Cedric Bosdonnat No knowledge in OpenOffice.org development Good knowledge about Eclipse Total time of 9 weeks for familiarizing with UNOIDL and tooling development of plugin Mentoring done by Jrgen Schmidt (API project lead)
Community resources
http://api.openoffice.org http://udk.openoffice.org dev@api.openoffice.org dev@udk.openoffice.org http://codesnippets.services.openoffice.org