/**************************************************************
 * 
 * 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_document_AmbigousFilterRequest_idl__
#define __com_sun_star_document_AmbigousFilterRequest_idl__

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

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

module com { module sun { module star { module document {

//=============================================================================
/** should be used for interaction to handle states of ambigous filter detection

    <p>
    This exception indicates, that generic filter detection can't decide which of
    two filters is the right one. In this case an interaction will be made.
    Given URL can be used to decide between given two filters.
    Decision can be made e.g. by a dialog, on which the user must select one
    of these filters.
    A possible continuation of type <type>XInteractionFilterSelect</type>
    transport this decision back to source of started interaction.
    </p>

    @see XInteractionFilterSelect
*/
published exception AmbigousFilterRequest : ::com::sun::star::uno::Exception
{
	//-------------------------------------------------------------------------
    /** transport URL which couldn't be detected right
     */
    string URL;

	//-------------------------------------------------------------------------
    /** transport the pre selected filter
     */
    string SelectedFilter;

        //-------------------------------------------------------------------------
    /** transport the real detected filter, which stands in conflict to the pre selected one
     */
    string DetectedFilter;
};

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

}; }; }; };

#endif
