| /************************************************************** |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| *************************************************************/ |
| |
| |
| #ifndef __com_sun_star_uno_XAggregation_idl__ |
| #define __com_sun_star_uno_XAggregation_idl__ |
| |
| #ifndef __com_sun_star_uno_XInterface_idl__ |
| #include <com/sun/star/uno/XInterface.idl> |
| #endif |
| |
| //============================================================================= |
| |
| module com { module sun { module star { module uno { |
| |
| //============================================================================= |
| /** Objects which implement this interface can become aggregates of |
| a delegator. |
| |
| <p>That means if an object "A" aggregates "B", "A" can provide all |
| or some of the interfaces of "B". Whenever the method |
| <member>XInterface::queryInterface()</member> |
| is called on either of the objects, the call will be forwarded |
| to object "A". Object "A" now can determine whether to use the |
| interfaces of "A" or "B" or neither. Actually, any number of |
| aggregates can be used, even nested ones (aggregated objects which are |
| delegators by themselves). |
| |
| <p>The following rules are to be observed: |
| <ol> |
| <li>All calls to <member>XInterface::acquire()</member> |
| which are made before the delegator was set (using the method |
| <member>XAggregation::setDelegator()</member>) must not be taken back |
| (using the method <member>XInterface::release()</member>) |
| before the delegation is removed by calling |
| <code>xAggregation->setDelegator(NULL)</code>. |
| |
| <li>The constructor of a delegator has to increment its |
| own reference count by calling its method |
| <member>XInterface::acquire()</member> |
| before it sets itself to any aggregate using the method |
| <member>XAggregation::setDelegator()</member>. After that |
| call it has to reset its own reference count without the |
| destructor getting called. |
| |
| <li>The destructor of a delegator has to reset the delegator in |
| its aggregated objects by calling their method |
| <member>XAggregation::setDelegator()</member> with |
| <const>NULL</const> before it releases its reference to |
| its aggregated objects. |
| </ol> |
| |
| @deprecated |
| Aggregation will no longer be supported as a high-level concept of UNO. |
| You may still have the option to implement an UNO object consisting of |
| several single objects in your specific programming language, though this |
| depends on your programming language. |
| */ |
| published interface XAggregation: com::sun::star::uno::XInterface |
| { |
| //------------------------------------------------------------------------- |
| /** sets the object to which all calls to the method |
| <member>XInterface::queryInterface()</member> |
| have to be forwarded. @ |
| |
| @param xDelegator |
| specifies the object which handles the calls to |
| <member>XInterface::queryInterface()</member>. |
| If <var>xDelegator</var> is <const>NULL</const>, the delegator is |
| removed and thus the object becomes its own delegator and has |
| to handle calls to the method |
| <member>XInterface::queryInterface()</member> |
| itself. |
| |
| @see XAggregation::queryAggregation |
| */ |
| void setDelegator( [in] com::sun::star::uno::XInterface pDelegator ); |
| |
| //------------------------------------------------------------------------- |
| /** is similar to <member>XInterface::queryInterface()</member>, |
| but it is to be processed directly without being forwarded to the |
| delegator. @ |
| |
| <p>This method is only called from within an implementation of |
| <member>XInterface::queryInterface()</member> |
| or <member>XAggregation::queryAggregation()</member>. This method |
| is to be called by the delegator if it does not implement the |
| interface itself. An object which got aggregated cannot depend |
| on getting its own interface when it calls the method |
| <member>XInterface::queryInterface()</member>. |
| |
| @see XAggregation::setDelegator |
| */ |
| any queryAggregation( [in] type aType ); |
| |
| }; |
| |
| //============================================================================= |
| |
| }; }; }; }; |
| |
| #endif |