/**************************************************************
 * 
 * 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_AsyncJob_idl__
#define __com_sun_star_task_AsyncJob_idl__

#ifndef __com_sun_star_task_XAsyncJob_idl__
#include <com/sun/star/task/XAsyncJob.idl>
#endif

#ifndef __com_sun_star_util_XCloseable_idl__
#include <com/sun/star/util/XCloseable.idl>
#endif

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

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

//============================================================================
/** represent an asynchronous job, which can be executed by the global <type>JobExecutor</type>
    instance.

    @see Job

	@since OpenOffice 1.1.2
 */
published service AsyncJob
{
    //------------------------------------------------------------------------
    /** used to initialize and execute this job.
     */
    interface com::sun::star::task::XAsyncJob;

    //------------------------------------------------------------------------
    /** should be supported to handle environment termination gracefully.
     */
    [optional] interface com::sun::star::util::XCloseable;
};

}; }; }; };

#endif
