/*************************************************************************
 *
 *  $RCSfile: XTypeDetection.idl,v $
 *
 *  $Revision: 1.4 $
 *
 *  last change: $Author: mi $ $Date: 2002/10/03 13:04:12 $
 *
 *  The Contents of this file are made available subject to the terms of
 *  either of the following licenses
 *
 *         - GNU Lesser General Public License Version 2.1
 *         - Sun Industry Standards Source License Version 1.1
 *
 *  Sun Microsystems Inc., October, 2000
 *
 *  GNU Lesser General Public License Version 2.1
 *  =============================================
 *  Copyright 2000 by Sun Microsystems, Inc.
 *  901 San Antonio Road, Palo Alto, CA 94303, USA
 *
 *  This library is free software; you can redistribute it and/or
 *  modify it under the terms of the GNU Lesser General Public
 *  License version 2.1, as published by the Free Software Foundation.
 *
 *  This library is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 *  Lesser General Public License for more details.
 *
 *  You should have received a copy of the GNU Lesser General Public
 *  License along with this library; if not, write to the Free Software
 *  Foundation, Inc., 59 Temple Place, Suite 330, Boston,
 *  MA  02111-1307  USA
 *
 *
 *  Sun Industry Standards Source License Version 1.1
 *  =================================================
 *  The contents of this file are subject to the Sun Industry Standards
 *  Source License Version 1.1 (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.openoffice.org/license.html.
 *
 *  Software provided under this License is provided on an "AS IS" basis,
 *  WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
 *  WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
 *  MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
 *  See the License for the specific provisions governing your rights and
 *  obligations concerning the Software.
 *
 *  The Initial Developer of the Original Code is: Sun Microsystems, Inc.
 *
 *  Copyright: 2000 by Sun Microsystems, Inc.
 *
 *  All Rights Reserved.
 *
 *  Contributor(s): _______________________________________
 *
 *
 ************************************************************************/
#ifndef __com_sun_star_document_XTypeDetection_idl__
#define __com_sun_star_document_XTypeDetection_idl__

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

#ifndef __com_sun_star_beans_PropertyValue_idl__
#include <com/sun/star/beans/PropertyValue.idl>
#endif

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

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

//============================================================================
/** support "flat" and "deep" type detection of a given document

    <p>
    A "flat" detection means specifying the document format by using
    the URL and some configuration data only. That will perform but produce
    may invalid results if e.g., the extension of the document is wrong.
    A "deep" detection means looking into the document stream to be right
    which format it supports. Of course that includes a "flat" detection before.
    The combination of both ones should produce stable results everytime.
    </p>

    @see TypeDetection
 */
interface XTypeDetection: com::sun::star::uno::XInterface
{
	//-------------------------------------------------------------------------
    /** make a "flat" detection by using the URL of the document

		<p>
        It use given URL in combination with the internal configuration of well known
        types only to specify the format of given document.
		</p>

        @param URL
            specify the document by name

        @returns
            an internal type name which represent the detected format
            <br>
            or an empty value for unknown ones
	 */
    string queryTypeByURL( [in] string URL );

	//-------------------------------------------------------------------------
    /** make a "deep" detection or optional a "flat" detection by using a
        <type>MediaDescriptor</type>

		<p>
        Instead of <member>XTypeDetection::queryTypeByURL()</member> this function
        use a <type>MediaDescriptor</type> to specify the document for detection.
        Such descriptor hold different informations about the document.
        He will be passed to any part of made detection process and every part
        can change it to actualize it.
        The property <member>MediaDescriptor::URL</member> should be set on
        this descriptor as minimum. It specifies the location of the document.
        If this parameter is missing another one is required: <member>MediaDescriptor::InputStream</member>.
        This can be usefull to prevent operaton against multiple opening of the stream
        and perform the operation. If this stream isn't already included the detection
        will open it (if allowed!) and add it to the descriptor so it will be available for
        all following parts.
        A combination of both parameters can be usefull to perform the operation
        and make results more stable; but only one of them is required.
        Of course its possible to specify more document properties (e.g.
        <member>MediaDescriptor::ReadOnly</member>).
        <br>
        As an additional feature it's possible to suppress "deep" detection by using argument
        <var>AllowDeep</var>.
		</p>

        @param Descriptor
            means the <type>MediaDescriptor</type> which specify the ressource for detection

        @param AllowDeep
            if it is set to <TRUE/> a "deep" detection will be follow a "flat" detection
            <br>
            if it is set to <FALSE/> a "flat" detection will be made only

        @returns
            an internal type name which represent the detected format
            <br>
            or an empty value for unknown ones
	 */
    string queryTypeByDescriptor(
        [inout] sequence< com::sun::star::beans::PropertyValue > Descriptor,
        [in] boolean AllowDeep );
};

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

}; }; }; };

#endif
