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

#include <unotools/configitem.hxx>
class MappingArray;

//-----------------------------------------------------------------------------
#define COLUMN_COUNT 				31
#define IDENTIFIER_POS				0
#define AUTHORITYTYPE_POS			1
#define AUTHOR_POS                  2
#define TITLE_POS                   3
#define YEAR_POS                    4
#define ISBN_POS                    5
#define BOOKTITLE_POS               6
#define CHAPTER_POS                 7
#define EDITION_POS                 8
#define EDITOR_POS                  9
#define HOWPUBLISHED_POS            10
#define INSTITUTION_POS             11
#define JOURNAL_POS                 12
#define MONTH_POS                   13
#define NOTE_POS                    14
#define ANNOTE_POS                  15
#define NUMBER_POS                  16
#define ORGANIZATIONS_POS           17
#define PAGES_POS                   18
#define PUBLISHER_POS               19
#define ADDRESS_POS                 20
#define SCHOOL_POS                  21
#define SERIES_POS                  22
#define REPORTTYPE_POS              23
#define VOLUME_POS                  24
#define URL_POS                     25
#define CUSTOM1_POS                 26
#define CUSTOM2_POS                 27
#define CUSTOM3_POS                 28
#define CUSTOM4_POS                 29
#define CUSTOM5_POS                 30
//-----------------------------------------------------------------------------
struct StringPair
{
	rtl::OUString 	sRealColumnName;
	rtl::OUString  	sLogicalColumnName;
};
//-----------------------------------------------------------------------------
struct Mapping
{
	rtl::OUString 		sTableName;
	rtl::OUString		sURL;
	sal_Int16			nCommandType;
	StringPair 			aColumnPairs[COLUMN_COUNT];

	Mapping() :
		nCommandType(0){}
};
//-----------------------------------------------------------------------------
struct BibDBDescriptor
{
	rtl::OUString 	sDataSource;
	rtl::OUString  	sTableOrQuery;
	sal_Int32 		nCommandType;
};
//-----------------------------------------------------------------------------

class BibConfig : public utl::ConfigItem
{
	rtl::OUString 	sDataSource;
	rtl::OUString 	sTableOrQuery;
	sal_Int32 		nTblOrQuery;

	rtl::OUString 	sQueryField;
	rtl::OUString 	sQueryText;
	MappingArray*				pMappingsArr;
    long 			nBeamerSize;
	long 			nViewSize;
    sal_Bool        bShowColumnAssignmentWarning;

	rtl::OUString 				aColumnDefaults[COLUMN_COUNT];

	com::sun::star::uno::Sequence<rtl::OUString> GetPropertyNames();
public:
	BibConfig();
	~BibConfig();

	virtual void	Commit();
    virtual void            Notify( const com::sun::star::uno::Sequence<rtl::OUString>& aPropertyNames);

	BibDBDescriptor			GetBibliographyURL();
	void					SetBibliographyURL(const BibDBDescriptor& rDesc);

	const Mapping* 			GetMapping(const BibDBDescriptor& rDesc) const;
	void					SetMapping(const BibDBDescriptor& rDesc, const Mapping* pMapping);

	const rtl::OUString&	GetDefColumnName(sal_uInt16 nIndex) const
											{return aColumnDefaults[nIndex];}


	void					setBeamerSize(long nSize) {SetModified(); nBeamerSize = nSize;}
	long					getBeamerSize()const {return nBeamerSize;}
	void					setViewSize(long nSize) {SetModified(); nViewSize = nSize;}
	long					getViewSize() {return nViewSize;}

	const rtl::OUString&	getQueryField() const {return sQueryField;}
	void					setQueryField(const rtl::OUString& rSet) {SetModified(); sQueryField = rSet;}

	const rtl::OUString&	getQueryText() const {return sQueryText;}
	void					setQueryText(const rtl::OUString& rSet) {SetModified(); sQueryText = rSet;}

    sal_Bool                IsShowColumnAssignmentWarning() const
                                { return bShowColumnAssignmentWarning;}
    void                    SetShowColumnAssignmentWarning(sal_Bool bSet)
                                { bShowColumnAssignmentWarning = bSet;}
};
/* -----------------------------20.11.00 11:47--------------------------------

 ---------------------------------------------------------------------------*/
class DBChangeDialogConfig_Impl
{
	com::sun::star::uno::Sequence<rtl::OUString> aSourceNames;
public:
	DBChangeDialogConfig_Impl();
	~DBChangeDialogConfig_Impl();

    const com::sun::star::uno::Sequence<rtl::OUString>& GetDataSourceNames();

};
#endif
