1*cdf0e10cSrcweir /*************************************************************************
2*cdf0e10cSrcweir  *
3*cdf0e10cSrcweir  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4*cdf0e10cSrcweir  *
5*cdf0e10cSrcweir  * Copyright 2000, 2010 Oracle and/or its affiliates.
6*cdf0e10cSrcweir  *
7*cdf0e10cSrcweir  * OpenOffice.org - a multi-platform office productivity suite
8*cdf0e10cSrcweir  *
9*cdf0e10cSrcweir  * This file is part of OpenOffice.org.
10*cdf0e10cSrcweir  *
11*cdf0e10cSrcweir  * OpenOffice.org is free software: you can redistribute it and/or modify
12*cdf0e10cSrcweir  * it under the terms of the GNU Lesser General Public License version 3
13*cdf0e10cSrcweir  * only, as published by the Free Software Foundation.
14*cdf0e10cSrcweir  *
15*cdf0e10cSrcweir  * OpenOffice.org is distributed in the hope that it will be useful,
16*cdf0e10cSrcweir  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17*cdf0e10cSrcweir  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18*cdf0e10cSrcweir  * GNU Lesser General Public License version 3 for more details
19*cdf0e10cSrcweir  * (a copy is included in the LICENSE file that accompanied this code).
20*cdf0e10cSrcweir  *
21*cdf0e10cSrcweir  * You should have received a copy of the GNU Lesser General Public License
22*cdf0e10cSrcweir  * version 3 along with OpenOffice.org.  If not, see
23*cdf0e10cSrcweir  * <http://www.openoffice.org/license.html>
24*cdf0e10cSrcweir  * for a copy of the LGPLv3 License.
25*cdf0e10cSrcweir  *
26*cdf0e10cSrcweir  ************************************************************************/
27*cdf0e10cSrcweir 
28*cdf0e10cSrcweir #ifndef _DBAUI_INDEXCOLLECTION_HXX_
29*cdf0e10cSrcweir #define _DBAUI_INDEXCOLLECTION_HXX_
30*cdf0e10cSrcweir 
31*cdf0e10cSrcweir #ifndef _COM_SUN_STAR_CONTAINER_XNAMEACCESS_HPP_
32*cdf0e10cSrcweir #include <com/sun/star/container/XNameAccess.hpp>
33*cdf0e10cSrcweir #endif
34*cdf0e10cSrcweir #ifndef _COM_SUN_STAR_SDBC_SQLEXCEPTION_HPP_
35*cdf0e10cSrcweir #include <com/sun/star/sdbc/SQLException.hpp>
36*cdf0e10cSrcweir #endif
37*cdf0e10cSrcweir #ifndef _COM_SUN_STAR_BEANS_XPROPERTYSET_HPP_
38*cdf0e10cSrcweir #include <com/sun/star/beans/XPropertySet.hpp>
39*cdf0e10cSrcweir #endif
40*cdf0e10cSrcweir #ifndef _DBAUI_INDEXES_HXX_
41*cdf0e10cSrcweir #include "indexes.hxx"
42*cdf0e10cSrcweir #endif
43*cdf0e10cSrcweir 
44*cdf0e10cSrcweir //......................................................................
45*cdf0e10cSrcweir namespace dbaui
46*cdf0e10cSrcweir {
47*cdf0e10cSrcweir //......................................................................
48*cdf0e10cSrcweir 
49*cdf0e10cSrcweir 	//==================================================================
50*cdf0e10cSrcweir 	//= OIndexCollection
51*cdf0e10cSrcweir 	//==================================================================
52*cdf0e10cSrcweir 	class OIndexCollection
53*cdf0e10cSrcweir 	{
54*cdf0e10cSrcweir 	protected:
55*cdf0e10cSrcweir 		::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess >
56*cdf0e10cSrcweir 					m_xIndexes;
57*cdf0e10cSrcweir 
58*cdf0e10cSrcweir 		// cached information
59*cdf0e10cSrcweir 		Indexes		m_aIndexes;
60*cdf0e10cSrcweir 
61*cdf0e10cSrcweir 	public:
62*cdf0e10cSrcweir 		// construction
63*cdf0e10cSrcweir 		OIndexCollection();
64*cdf0e10cSrcweir 		OIndexCollection(const OIndexCollection& _rSource);
65*cdf0e10cSrcweir 		//	OIndexCollection(const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess >& _rxIndexes);
66*cdf0e10cSrcweir 
67*cdf0e10cSrcweir 		const OIndexCollection& operator=(const OIndexCollection& _rSource);
68*cdf0e10cSrcweir 
69*cdf0e10cSrcweir 		// iterating through the collection
70*cdf0e10cSrcweir 		typedef OIndex* iterator;
71*cdf0e10cSrcweir 		typedef OIndex const* const_iterator;
72*cdf0e10cSrcweir 
73*cdf0e10cSrcweir 		/// get access to the first element of the index collection
74*cdf0e10cSrcweir 		Indexes::const_iterator begin() const { return m_aIndexes.begin(); }
75*cdf0e10cSrcweir 		/// get access to the first element of the index collection
76*cdf0e10cSrcweir 		Indexes::iterator begin() { return m_aIndexes.begin(); }
77*cdf0e10cSrcweir 		/// get access to the (last + 1st) element of the index collection
78*cdf0e10cSrcweir 		Indexes::const_iterator end() const { return m_aIndexes.end(); }
79*cdf0e10cSrcweir 		/// get access to the (last + 1st) element of the index collection
80*cdf0e10cSrcweir 		Indexes::iterator end() { return m_aIndexes.end(); }
81*cdf0e10cSrcweir 
82*cdf0e10cSrcweir 		// searching
83*cdf0e10cSrcweir 		Indexes::const_iterator find(const String& _rName) const;
84*cdf0e10cSrcweir 		Indexes::iterator find(const String& _rName);
85*cdf0e10cSrcweir 		Indexes::const_iterator findOriginal(const String& _rName) const;
86*cdf0e10cSrcweir 		Indexes::iterator findOriginal(const String& _rName);
87*cdf0e10cSrcweir 
88*cdf0e10cSrcweir 		// inserting without committing
89*cdf0e10cSrcweir 		// the OriginalName of the newly inserted index will be empty, thus indicating that it's new
90*cdf0e10cSrcweir 		Indexes::iterator insert(const String& _rName);
91*cdf0e10cSrcweir 		// commit a new index, which is already part if the collection, but does not have an equivalent in the
92*cdf0e10cSrcweir 		// data source, yet
93*cdf0e10cSrcweir 		void commitNewIndex(const Indexes::iterator& _rPos) SAL_THROW((::com::sun::star::sdbc::SQLException));
94*cdf0e10cSrcweir 
95*cdf0e10cSrcweir 		// reset the data for the given index
96*cdf0e10cSrcweir 		void resetIndex(const Indexes::iterator& _rPos) SAL_THROW((::com::sun::star::sdbc::SQLException));
97*cdf0e10cSrcweir 
98*cdf0e10cSrcweir 		// attach to a new key container
99*cdf0e10cSrcweir 		void attach(const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess >& _rxIndexes);
100*cdf0e10cSrcweir 		// detach from the container
101*cdf0e10cSrcweir 		void detach();
102*cdf0e10cSrcweir 
103*cdf0e10cSrcweir 		// is the object valid?
104*cdf0e10cSrcweir 		sal_Bool	isValid() const { return m_xIndexes.is(); }
105*cdf0e10cSrcweir 		// number of contained indexes
106*cdf0e10cSrcweir 		sal_Int32	size() const { return m_aIndexes.size(); }
107*cdf0e10cSrcweir 
108*cdf0e10cSrcweir 		/// drop an index, and remove it from the collection
109*cdf0e10cSrcweir 		sal_Bool	drop(const Indexes::iterator& _rPos) SAL_THROW((::com::sun::star::sdbc::SQLException));
110*cdf0e10cSrcweir 		/// simply drop the index described by the name, but don't remove the descriptor from the collection
111*cdf0e10cSrcweir 		sal_Bool	dropNoRemove(const Indexes::iterator& _rPos) SAL_THROW((::com::sun::star::sdbc::SQLException));
112*cdf0e10cSrcweir 
113*cdf0e10cSrcweir 	protected:
114*cdf0e10cSrcweir 		void implConstructFrom(const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess >& _rxIndexes);
115*cdf0e10cSrcweir 		void implFillIndexInfo(OIndex& _rIndex, ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > _rxDescriptor) SAL_THROW((::com::sun::star::uno::Exception));
116*cdf0e10cSrcweir 		void implFillIndexInfo(OIndex& _rIndex) SAL_THROW((::com::sun::star::uno::Exception));
117*cdf0e10cSrcweir 	};
118*cdf0e10cSrcweir 
119*cdf0e10cSrcweir 
120*cdf0e10cSrcweir //......................................................................
121*cdf0e10cSrcweir }	// namespace dbaui
122*cdf0e10cSrcweir //......................................................................
123*cdf0e10cSrcweir 
124*cdf0e10cSrcweir #endif // _DBAUI_INDEXCOLLECTION_HXX_
125*cdf0e10cSrcweir 
126