/**************************************************************
 *
 * 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_script_XInvocation_idl__
#define __com_sun_star_script_XInvocation_idl__

#ifndef __com_sun_star_uno_XInterface_idl__
#include <com/sun/star/uno/XInterface.idl>
#endif

#ifndef __com_sun_star_beans_XIntrospectionAccess_idl__
#include <com/sun/star/beans/XIntrospectionAccess.idl>
#endif

#ifndef __com_sun_star_lang_IllegalArgumentException_idl__
#include <com/sun/star/lang/IllegalArgumentException.idl>
#endif

#ifndef __com_sun_star_script_CannotConvertException_idl__
#include <com/sun/star/script/CannotConvertException.idl>
#endif

#ifndef __com_sun_star_reflection_InvocationTargetException_idl__
#include <com/sun/star/reflection/InvocationTargetException.idl>
#endif

#ifndef __com_sun_star_beans_UnknownPropertyException_idl__
#include <com/sun/star/beans/UnknownPropertyException.idl>
#endif


//=============================================================================

 module com {  module sun {  module star {  module script {

//=============================================================================
/** gives access to an object's methods and properties.
	Container access is available through
	<type scope="com::sun::star::container">XIndexContainer</type>,
	<type scope="com::sun::star::container">XNameContainer</type> and
	<type scope="com::sun::star::container">XEnumerationAccess</type>.
	</p>
 */
published interface XInvocation: com::sun::star::uno::XInterface
{
	//-------------------------------------------------------------------------
	/** returns the introspection from this object or <NULL/>
		if the object does not provide this information.
	 */
	com::sun::star::beans::XIntrospectionAccess getIntrospection();

	//-------------------------------------------------------------------------
	/** provides access to methods exposed by an object.

		@param aParams all parameters; pure out params are undefined in sequence,
					   the value has to be ignored by the callee
		@param aOutParamIndex This sequence contains the indices of all parameters
						that are specified as out or inout.
		@param aOutParam This sequence contains the values of all parameters that
						are specified as out or inout and corresponds with the
						indices provided by the aOutParamIndex sequence.

						Example: aOutParamIndex == { 1, 4 } means that
						aOutParam[0] contains the out value of the aParams[1]
						parameter and aOutParam[1] contains the out value of
						the aParams[4] parameter.
	 */
	any invoke( [in] string aFunctionName,
			 [in] sequence<any> aParams,
			 [out] sequence<short> aOutParamIndex,
			 [out] sequence<any> aOutParam )
			raises( com::sun::star::lang::IllegalArgumentException,
					com::sun::star::script::CannotConvertException,
					com::sun::star::reflection::InvocationTargetException );

	//-------------------------------------------------------------------------
	/** sets a value to the property with the specified name.

		<p> If the underlying object implements an
		<type scope="com::sun::star::container">XNameContainer</type>,
		then this method will insert the value if there is no such
		<var>aPropertyName</var>.

		</p>
	 */
	void setValue( [in] string aPropertyName,
			 [in] any aValue )
			raises( com::sun::star::beans::UnknownPropertyException,
					com::sun::star::script::CannotConvertException,
					com::sun::star::reflection::InvocationTargetException );

	//-------------------------------------------------------------------------
	/** returns the value of the property with the specified name.

		@param aPropertyName
			specifies the name of the property.
	 */
	any getValue( [in] string aPropertyName )
			raises( com::sun::star::beans::UnknownPropertyException );

	//-------------------------------------------------------------------------
	/** returns <TRUE/> if the method with the specified name exists, else <FALSE/>.

		<p>This optimizes the calling sequence
		( <member>XInvocation::hasMethod</member>,
		<member>XInvocation::invoke</member> )!</p>

				@param aName
					specifies the name of the method.
	 */
	boolean hasMethod( [in] string aName );

	//-------------------------------------------------------------------------
	/** returns <TRUE/> if the property with the specified name exists, else <FALSE/>.

				<p>This optimizes the calling sequence
				( <member>XInvocation::hasProperty</member>,
				<member>XInvocation::getValue</member> ) or

				( <member>XInvocation::hasProperty</member>,
				<member>XInvocation::setValue</member> )!

					@param aName
				specifies the name of the property.
	 */
	boolean hasProperty( [in] string aName );

};

//=============================================================================

}; }; }; };

#endif
