/**************************************************************
 * 
 * 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_task_XRestartManager_idl__
#define __com_sun_star_task_XRestartManager_idl__

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

#ifndef __com_sun_star_task_XInteractionHandler_idl__
#include <com/sun/star/task/XInteractionHandler.idl>
#endif

#ifndef __com_sun_star_uno_Exception_idl__
#include <com/sun/star/uno/Exception.idl>
#endif

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

module com {  module sun {  module star {  module task {

//=============================================================================
/** allows to try to restart the office.

    @since OpenOffice 3.3
*/
published interface XRestartManager : com::sun::star::uno::XInterface
{
    //------------------------------------------------------------------------
    /** let the office restart asynchronously
        @param xInteractionHandler
            the <type scope="com::sun::star::task">InteractionHandler</type>
            service implementation, that is used in case a problem is detected
            during requesting the restart.

        @throws com::sun::star::uno::Exception
            to notify the caller about possible failures
	*/
    void requestRestart(
        [in] com::sun::star::task::XInteractionHandler xInteractionHandler )
            raises( com::sun::star::uno::Exception );

    //------------------------------------------------------------------------
    /** allows to get info whether the restart has been requested and provide
        the initialization status.

        <p>
        The office has to call this method just before the main loop has been
        started, with the <TRUE/> as argument, so that the implementation
        knows that the office is initialized. If the method returns <TRUE/>,
        the office should restart without starting the main loop.
        </p>

        @param bInitialized
            specifies whether the office process is initialized already,
            if the caller does not have this information, he should provide
            <FALSE/>.

        @returns
            <TRUE/> if the office restart has been requested,
            <FALSE/> otherwise

        @throws com::sun::star::uno::Exception
            to notify the caller about possible failures
	*/
    boolean isRestartRequested(
        [in] boolean bInitialized )
            raises( com::sun::star::uno::Exception );
};

}; }; }; };

#endif

