Bug 46808

Stephan Bergmann sbergman at redhat.com
Fri Nov 16 00:17:01 PST 2012


On 11/16/2012 04:42 AM, José Guilherme Vanz wrote:
> I'm analizing some things new to do and I started to do this bug:
> https://bugs.freedesktop.org/show_bug.cgi?id=46808

A warning about that issue first:  Noel Grandin already did a lot of 
work there, transferred many old-style services to new-style.  What is 
left by now is probably mostly delicate corner cases, so what's left of 
this issue might have become a bit tough by now.

> Well, When I was working in some sources I found something like this:
> published service PropertySet
> {
>      interface com::sun::star::beans::XPropertySet;
>
>      [optional] interface com::sun::star::beans::XFastPropertySet;
>      [optional] interface com::sun::star::beans::XMultiPropertySet;
>      [optional] interface com::sun::star::beans::XPropertyAccess;
>      [optional] interface com::sun::star::beans::XPropertyState;
>
> };

This service description is somewhat special.  Normally, there is a 
single implementation for a service, and client code uses the service by 
instantiating a (the) implementation and calling its methods.  See, 
e.g., com.sun.star.uri.UriReferenceFactory, implemented in 
stoc/util/stocservices.component (resp. 
stoc/source/uriproc/UriReferenceFactory.cxx), and used via 
UriReferenceFactory::create in places like 
avmedia/source/framework/mediaitem.cxx.

com.sun.star.beans.PropertySet is more like documentation; it states 
that if a service (or even some arbitrary object) supports the notion of 
"properties," then it should implement the interfaces listed here.  In 
this case here, that is somewhat self-evident, and the service is of 
little value and not widely used anyway (I found just two .component 
files mentioning it, chart2/source/chartcore.copmonent and 
chart2/source/controller/chartcontroller.component).

> The bug's description guides to do something like that:
>
> service Foo { interface XBar; };
>
> Transform for:
>
> service Foo: XBar;
>
> In this case, what I do with [optional] when transform for new style?
> Where could I find more documentation of .idl files?

In general, when transferring an old-style service that includes 
optional interfaces to new style, one needs to decide whether to include 
those interfaces in the new-style service's (multiple-inheritance) 
interface as mandatory or optional.  For example, 
<http://cgit.freedesktop.org/libreoffice/core/commit/?id=d2c45d0460cf99aadde1aaec11e032f488fa277b> 
"fdo#46808, Adapt i18n::Transliteration UNO service to new style" 
changed com.sun.star.i18n.Transliteration from old-style

   service Transliteration {
     interface XTransliteration;
     [optional] interface XExtendedTransliteration;
   };

to new-style

   service Transliteration: XExtendedTransliteration;

as the implementation of the service implemented that additional 
XExtendedTransliteration (which inherits from XTransliteration, adding 
functionality that was found necessary over time) anyway.

For documentation on UNOIDL, see the Developer's Guide at 
<http://wiki.openoffice.org/wiki/Documentation/DevGuide/OpenOffice.org_Developers_Guide>.

Stephan


More information about the LibreOffice mailing list