/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
 * This file is part of the LibreOffice project.
 *
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
 *
 * This file incorporates work covered by the following license notice:
 *
 *   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 .
 */
#ifndef __com_sun_star_report_XReportDefinition_idl__
#define __com_sun_star_report_XReportDefinition_idl__

#include <com/sun/star/report/XReportComponent.idl>
#include <com/sun/star/report/XFunctionsSupplier.idl>
#include <com/sun/star/view/PaperOrientation.idl>
#include <com/sun/star/container/NoSuchElementException.idl>
#include <com/sun/star/style/GraphicLocation.idl>
#include <com/sun/star/view/PaperFormat.idl>
#include <com/sun/star/util/XCloseable.idl>
#include <com/sun/star/ui/XUIConfigurationManagerSupplier.idl>
#include <com/sun/star/document/XDocumentSubStorageSupplier.idl>
#include <com/sun/star/frame/XModel.idl>
#include <com/sun/star/document/XViewDataSupplier.idl>
#include <com/sun/star/frame/XLoadable.idl>
#include <com/sun/star/embed/XVisualObject.idl>
#include <com/sun/star/document/XStorageBasedDocument.idl>
#include <com/sun/star/awt/Size.idl>
#include <com/sun/star/util/XModifiable2.idl>
#include <com/sun/star/document/XEventBroadcaster.idl>
#include <com/sun/star/lang/DisposedException.idl>
#include <com/sun/star/style/XStyleFamiliesSupplier.idl>

module com {  module sun {  module star {  module sdbc {
published interface XConnection;
};};};};

 module com {  module sun {  module star {  module report {

     interface XSection;
     interface XGroups;

/** identifies a XReportComponent as being a (sub-) report.

    <p>This interface does not really provide an own functionality, it is only for easier
    runtime identification of report components.</p>

    <p>A report fulfills several tasks, like storing the structure of its
    report components and it provides the
    event environment for its contained elements.</p>

    @see XReportComponent
 */
interface XReportDefinition
{
    /** allows the access to the model embedded in the database storage.
    */
    interface com::sun::star::frame::XModel;

    /** offers a simple way to initialize a component.
    */
    interface com::sun::star::frame::XLoadable;

    /** represents common visualization functionality for the embedded report.
    */
    interface com::sun::star::embed::XVisualObject;

    /** allows to initialize the document with a storage.
    */
    interface com::sun::star::document::XStorageBasedDocument;

    /** gives access to some properties describing all open views to a document.
    */
    interface com::sun::star::document::XViewDataSupplier;

    /** allows to close the document.
    */
    interface com::sun::star::util::XCloseable;

    /** allows to retrieve the user interface configuration manager related to an object.
    */
    interface com::sun::star::ui::XUIConfigurationManagerSupplier;

    interface com::sun::star::document::XDocumentSubStorageSupplier;

    /** provides access to the collection of style families.

        <p>A spreadsheet document contains 2 families of styles:
        "PageStyles" and "CellStyles".</p>
     */
    interface com::sun::star::style::XStyleFamiliesSupplier;

    /** a storable document should provide information about his modify state

        <p>
        With this interface it's possible too, to reset the modify state.
        That can be necessary to prevent code against problem during closing
        of the document without saving any changes.
        </p>
     */
    interface com::sun::star::util::XModifiable2;

    /** allows the creation of sub reports.
    */
    interface XReportComponent;

    /** gives access to functions defined in the report definition.
    */
    interface XFunctionsSupplier;

    /** makes it possible to register listeners which are called whenever
        a document event occurs.
        This is a workaround due to the fact that this interface can not be directly inherited from com::sun::star::document::XEventBroadcaster
        because the methods addEventListener and removeEventListener are already defined in com::sun::star::lang::XComponent.
        A queryInterface call is still supported to the com::sun::star::document::XEventBroadcaster interface.
     */
    com::sun::star::document::XEventBroadcaster getEventBroadcaster()
        raises( ::com::sun::star::lang::DisposedException,
                ::com::sun::star::uno::Exception );

    /** returns a sequence of the currently supported output formats.
    */
    sequence<string> getAvailableMimeTypes()
        raises( ::com::sun::star::lang::DisposedException,
                ::com::sun::star::uno::Exception );


    /** Represents the output format (media (mime) type) of the resulting document when executing this report.
    */
    [attribute,bound] string MimeType
    {
        set raises (com::sun::star::lang::IllegalArgumentException);
    };

    /** Represents the title of the report in print preview.
    */
    [attribute,bound] string Caption;

    /** Specifies whether groups in a multi column report are kept together.
        @see com.sun.star.report.GroupKeepTogether
    */
    [attribute,bound] short GroupKeepTogether
    {
        set raises (com::sun::star::lang::IllegalArgumentException);
    };

    /** Represents the location of the page header.
        @see ReportPrintOption
    */
    [attribute,bound] short PageHeaderOption;

    /** Represents the location of the page footer.
        @see ReportPrintOption
    */
    [attribute,bound] short PageFooterOption;


    /** is the command which should be executed, the type of command depends
    on the CommandType.
    <p>In case of a #CommandType of CommandType::COMMAND,
    means in case the #Command specifies an SQL statement, the inherited
    com::sun::star::sdbc::RowSet::EscapeProcessing
    becomes relevant:<br/>
    It then can be to used to specify whether the SQL statement should be analyzed on the
    client side before sending it to the database server.<br/>
    The default value for com::sun::star::sdbc::RowSet::EscapeProcessing
    is `TRUE`. By switching it to `FALSE`, you can pass backend-specific SQL statements,
    which are not standard SQL, to your database.</p>


    @see com::sun::star::sdb::CommandType
    */
    [attribute,bound] string Command;

    /** specifies the type of the command to be executed to retrieve a result set.

        <p>#Command needs to be interpreted depending on the value of this property.</p>

        <p>This property is only meaningful together with the #Command
        property, thus either <em>both</em> or <em>none</em> of them are present.</p>

        @see com::sun::star::sdb::CommandType
     */
    [attribute,bound] long CommandType;

    /** specifies an additional filter to optionally use.

        <p>The Filter string has to form a SQL WHERE-clause, <em>without</em> the WHERE-string itself.</p>

        <p>If a #DataSourceName, #Command and #CommandType
        are specified, a RowSet can be created with this information. If the results provided by the
        row set are to be additionally filtered, the Filter property can be used.</p>

        <p>Note that the Filter property does not make sense if a ResultSet has been specified
        in the DataAccessDescriptor.</p>

        @see com::sun::star::sdb::RowSet
        @see ResultSet
    */
    [attribute,bound] string Filter;

    /** specifies if the #Command should be analyzed on the client side before sending it
        to the database server.

        <p>The default value of this property is `TRUE`. By switching it to `FALSE`, you can pass
        backend-specific SQL statements, which are not standard SQL, to your database.</p>

        <p>This property is usually present together with the #Command and
        #CommandType properties, and is evaluated if and only if #CommandType
        equals CommandType::COMMAND.</p>
    */
    [attribute,bound] boolean EscapeProcessing;

    /** specifies the active connection which is used to create the resulting report.
    */
    [attribute,bound] com::sun::star::sdbc::XConnection ActiveConnection
    {
        set raises (com::sun::star::lang::IllegalArgumentException);
    };

    /** is the name of the datasource to use, this could be a named datasource
        or the URL of a data access component.
     */
    [attribute,bound] string DataSourceName;

    /** Defines that the report header is on.
        Default is `FALSE`.
    */
    [attribute,bound] boolean ReportHeaderOn;

    /** Defines that the report footer is on.
        Default is `FALSE`.
    */
    [attribute,bound] boolean ReportFooterOn;

    /** Defines that the page header is on.
        Default is `TRUE`.
    */
    [attribute,bound] boolean PageHeaderOn;

    /** Defines that the page footer is on.
        Default is `TRUE`.
    */
    [attribute,bound] boolean PageFooterOn;

    /** Represents the groups of the report.
    */
    [attribute,readonly] com::sun::star::report::XGroups Groups;

    /** returns the report header if the #ReportHeaderOn is `TRUE`.
        @throws com::sun::star::container::NoSuchElementException
            If the report has the report header disabled.
        @see XSection
    */
    [attribute,readonly] com::sun::star::report::XSection ReportHeader
    {
        get raises (com::sun::star::container::NoSuchElementException);
    };

    /** returns the page header if the #PageHeaderOn is `TRUE`.
        @throws com::sun::star::container::NoSuchElementException
            If the report has the page header disabled.
        @see XSection
    */
    [attribute,readonly] com::sun::star::report::XSection PageHeader
    {
        get raises (com::sun::star::container::NoSuchElementException);
    };

    /** returns the detail section.
        @see XSection
    */
    [attribute,readonly] com::sun::star::report::XSection Detail;

    /** returns the page footer if the #PageFooterOn is `TRUE`.
        @throws com::sun::star::container::NoSuchElementException
            If the report has the page footer disabled.
        @see XSection
    */
    [attribute,readonly] com::sun::star::report::XSection PageFooter
    {
        get raises (com::sun::star::container::NoSuchElementException);
    };

    /** returns the report footer if the #ReportFooterOn is `TRUE`.
        @throws com::sun::star::container::NullPointerException
            If the report has the report footer disabled.
        @see XSection
    */
    [attribute,readonly] com::sun::star::report::XSection ReportFooter
    {
        get raises (com::sun::star::container::NoSuchElementException);
    };
};


}; }; }; };

#endif

/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
