blob: 9b2db116e1949411ab7525c04e80df9bd7612cbb [file] [log] [blame]
/**************************************************************
*
* 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 OOX_XLS_CONNECTIONSBUFFER_HXX
#define OOX_XLS_CONNECTIONSBUFFER_HXX
#include "oox/helper/refvector.hxx"
#include "oox/xls/workbookhelper.hxx"
namespace oox {
namespace xls {
// ============================================================================
const sal_Int32 BIFF12_CONNECTION_UNKNOWN = 0;
const sal_Int32 BIFF12_CONNECTION_ODBC = 1;
const sal_Int32 BIFF12_CONNECTION_DAO = 2;
const sal_Int32 BIFF12_CONNECTION_FILE = 3;
const sal_Int32 BIFF12_CONNECTION_HTML = 4;
const sal_Int32 BIFF12_CONNECTION_OLEDB = 5;
const sal_Int32 BIFF12_CONNECTION_TEXT = 6;
const sal_Int32 BIFF12_CONNECTION_ADO = 7;
const sal_Int32 BIFF12_CONNECTION_DSP = 8;
// ============================================================================
/** Special properties for data connections representing web queries. */
struct WebPrModel
{
typedef ::std::vector< ::com::sun::star::uno::Any > TablesVector;
TablesVector maTables; /// Names or indexes of the web query tables.
::rtl::OUString maUrl; /// Source URL to refresh the data.
::rtl::OUString maPostMethod; /// POST method to query data.
::rtl::OUString maEditPage; /// Web page showing query data (for XML queries).
sal_Int32 mnHtmlFormat; /// Plain text, rich text, or HTML.
bool mbXml; /// True = XML query, false = HTML query.
bool mbSourceData; /// True = import XML source data referred by HTML table.
bool mbParsePre; /// True = parse preformatted sections (<pre> tag).
bool mbConsecutive; /// True = join consecutive delimiters.
bool mbFirstRow; /// True = use column withs of first row for entire <pre> tag.
bool mbXl97Created; /// True = web query created with Excel 97.
bool mbTextDates; /// True = read date values as text, false = parse dates.
bool mbXl2000Refreshed; /// True = refreshed with Excel 2000 or newer.
bool mbHtmlTables; /// True = HTML tables, false = entire document.
explicit WebPrModel();
};
// ----------------------------------------------------------------------------
/** Common properties of an external data connection. */
struct ConnectionModel
{
typedef ::std::auto_ptr< WebPrModel > WebPrModelPtr;
WebPrModelPtr mxWebPr; /// Special settings for web queries.
::rtl::OUString maName; /// Unique name of this connection.
::rtl::OUString maDescription; /// User description of this connection.
::rtl::OUString maSourceFile; /// URL of a source data file.
::rtl::OUString maSourceConnFile; /// URL of a source connection file.
::rtl::OUString maSsoId; /// Single sign-on identifier.
sal_Int32 mnId; /// Unique connection identifier.
sal_Int32 mnType; /// Data source type.
sal_Int32 mnReconnectMethod; /// Reconnection method.
sal_Int32 mnCredentials; /// Credentials method.
sal_Int32 mnInterval; /// Refresh interval in minutes.
bool mbKeepAlive; /// True = keep connection open after import.
bool mbNew; /// True = new connection, never updated.
bool mbDeleted; /// True = connection has been deleted.
bool mbOnlyUseConnFile; /// True = use maSourceConnFile, ignore mnReconnectMethod.
bool mbBackground; /// True = background refresh enabled.
bool mbRefreshOnLoad; /// True = refresh connection on import.
bool mbSaveData; /// True = save cached data with connection.
bool mbSavePassword; /// True = save password in connection string.
explicit ConnectionModel();
WebPrModel& createWebPr();
};
// ----------------------------------------------------------------------------
/** An external data connection (database, web query, etc.). */
class Connection : public WorkbookHelper
{
public:
explicit Connection( const WorkbookHelper& rHelper, sal_Int32 nConnId = -1 );
/** Imports connection settings from the connection element. */
void importConnection( const AttributeList& rAttribs );
/** Imports web query settings from the webPr element. */
void importWebPr( const AttributeList& rAttribs );
/** Imports web query table settings from the tables element. */
void importTables( const AttributeList& rAttribs );
/** Imports a web query table identifier from the m, s, or x element. */
void importTable( const AttributeList& rAttribs, sal_Int32 nElement );
/** Imports connection settings from the CONNECTION record. */
void importConnection( SequenceInputStream& rStrm );
/** Imports web query settings from the WEBPR record. */
void importWebPr( SequenceInputStream& rStrm );
/** Imports web query table settings from the WEBPRTABLES record. */
void importWebPrTables( SequenceInputStream& rStrm );
/** Imports a web query table identifier from the PCITEM_MISSING, PCITEM_STRING, or PCITEM_INDEX record. */
void importWebPrTable( SequenceInputStream& rStrm, sal_Int32 nRecId );
/** Imports connection settings from the DBQUERY record. */
void importDbQuery( BiffInputStream& rStrm );
/** Imports connection settings from the QUERYTABLESETTINGS record. */
void importQueryTableSettings( BiffInputStream& rStrm );
/** Returns the unique connection identifier. */
inline sal_Int32 getConnectionId() const { return maModel.mnId; }
/** Returns the source data type of the connection. */
inline sal_Int32 getConnectionType() const { return maModel.mnType; }
/** Returns read-only access to the connection model data. */
const ConnectionModel& getModel() const { return maModel; }
private:
ConnectionModel maModel;
};
typedef ::boost::shared_ptr< Connection > ConnectionRef;
// ============================================================================
class ConnectionsBuffer : public WorkbookHelper
{
public:
explicit ConnectionsBuffer( const WorkbookHelper& rHelper );
/** Creates a new empty connection. */
Connection& createConnection();
/** Creates a new empty connection with a valid but unused identifier. */
Connection& createConnectionWithId();
/** Maps all connections by their identifier. */
void finalizeImport();
/** Returns a data connection by its unique identifier. */
ConnectionRef getConnection( sal_Int32 nConnId ) const;
private:
/** Inserts the passed connection into the map according to its identifier. */
void insertConnectionToMap( const ConnectionRef& rxConnection );
private:
typedef RefVector< Connection > ConnectionVector;
typedef RefMap< sal_Int32, Connection > ConnectionMap;
ConnectionVector maConnections;
ConnectionMap maConnectionsById;
sal_Int32 mnUnusedId;
};
// ============================================================================
} // namespace xls
} // namespace oox
#endif