/**************************************************************
 *
 * 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_XInvocationAdapterFactory_idl__
#define __com_sun_star_script_XInvocationAdapterFactory_idl__

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

#ifndef __com_sun_star_script_XInvocation_idl__
#include <com/sun/star/script/XInvocation.idl>
#endif


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

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

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

/** Interface to create adapter objects giving a type to be supported and a
    an invocation interface incoming calls are delegated to.

    This interface is deprecated.  Use <type>XInvocationAdapterFactory2</type>.
    @deprecated
*/
published interface XInvocationAdapterFactory: com::sun::star::uno::XInterface
{
	//-------------------------------------------------------------------------
	/** Creates an adapter interface of given type for calling the given
		<type>XInvocation</type> interface.

		@param Invocation
               invocation interface being called on incoming adapter calls
		@param aType
               supported type of adapter

		@returns
                 adapter interface; this interface can be queried for
                 XInterface and given type
    */
	com::sun::star::uno::XInterface createAdapter( [in]XInvocation Invocation, [in]type aType );
};
//=============================================================================

}; }; }; };

#endif
