1*b1cdbd2cSJim Jagielski /************************************************************** 2*b1cdbd2cSJim Jagielski * 3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one 4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file 5*b1cdbd2cSJim Jagielski * distributed with this work for additional information 6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file 7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the 8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance 9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at 10*b1cdbd2cSJim Jagielski * 11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0 12*b1cdbd2cSJim Jagielski * 13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing, 14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an 15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the 17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations 18*b1cdbd2cSJim Jagielski * under the License. 19*b1cdbd2cSJim Jagielski * 20*b1cdbd2cSJim Jagielski *************************************************************/ 21*b1cdbd2cSJim Jagielski 22*b1cdbd2cSJim Jagielski 23*b1cdbd2cSJim Jagielski 24*b1cdbd2cSJim Jagielski #ifndef _DBAUI_INDEXCOLLECTION_HXX_ 25*b1cdbd2cSJim Jagielski #define _DBAUI_INDEXCOLLECTION_HXX_ 26*b1cdbd2cSJim Jagielski 27*b1cdbd2cSJim Jagielski #ifndef _COM_SUN_STAR_CONTAINER_XNAMEACCESS_HPP_ 28*b1cdbd2cSJim Jagielski #include <com/sun/star/container/XNameAccess.hpp> 29*b1cdbd2cSJim Jagielski #endif 30*b1cdbd2cSJim Jagielski #ifndef _COM_SUN_STAR_SDBC_SQLEXCEPTION_HPP_ 31*b1cdbd2cSJim Jagielski #include <com/sun/star/sdbc/SQLException.hpp> 32*b1cdbd2cSJim Jagielski #endif 33*b1cdbd2cSJim Jagielski #ifndef _COM_SUN_STAR_BEANS_XPROPERTYSET_HPP_ 34*b1cdbd2cSJim Jagielski #include <com/sun/star/beans/XPropertySet.hpp> 35*b1cdbd2cSJim Jagielski #endif 36*b1cdbd2cSJim Jagielski #ifndef _DBAUI_INDEXES_HXX_ 37*b1cdbd2cSJim Jagielski #include "indexes.hxx" 38*b1cdbd2cSJim Jagielski #endif 39*b1cdbd2cSJim Jagielski 40*b1cdbd2cSJim Jagielski //...................................................................... 41*b1cdbd2cSJim Jagielski namespace dbaui 42*b1cdbd2cSJim Jagielski { 43*b1cdbd2cSJim Jagielski //...................................................................... 44*b1cdbd2cSJim Jagielski 45*b1cdbd2cSJim Jagielski //================================================================== 46*b1cdbd2cSJim Jagielski //= OIndexCollection 47*b1cdbd2cSJim Jagielski //================================================================== 48*b1cdbd2cSJim Jagielski class OIndexCollection 49*b1cdbd2cSJim Jagielski { 50*b1cdbd2cSJim Jagielski protected: 51*b1cdbd2cSJim Jagielski ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess > 52*b1cdbd2cSJim Jagielski m_xIndexes; 53*b1cdbd2cSJim Jagielski 54*b1cdbd2cSJim Jagielski // cached information 55*b1cdbd2cSJim Jagielski Indexes m_aIndexes; 56*b1cdbd2cSJim Jagielski 57*b1cdbd2cSJim Jagielski public: 58*b1cdbd2cSJim Jagielski // construction 59*b1cdbd2cSJim Jagielski OIndexCollection(); 60*b1cdbd2cSJim Jagielski OIndexCollection(const OIndexCollection& _rSource); 61*b1cdbd2cSJim Jagielski // OIndexCollection(const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess >& _rxIndexes); 62*b1cdbd2cSJim Jagielski 63*b1cdbd2cSJim Jagielski const OIndexCollection& operator=(const OIndexCollection& _rSource); 64*b1cdbd2cSJim Jagielski 65*b1cdbd2cSJim Jagielski // iterating through the collection 66*b1cdbd2cSJim Jagielski typedef OIndex* iterator; 67*b1cdbd2cSJim Jagielski typedef OIndex const* const_iterator; 68*b1cdbd2cSJim Jagielski 69*b1cdbd2cSJim Jagielski /// get access to the first element of the index collection begin() const70*b1cdbd2cSJim Jagielski Indexes::const_iterator begin() const { return m_aIndexes.begin(); } 71*b1cdbd2cSJim Jagielski /// get access to the first element of the index collection begin()72*b1cdbd2cSJim Jagielski Indexes::iterator begin() { return m_aIndexes.begin(); } 73*b1cdbd2cSJim Jagielski /// get access to the (last + 1st) element of the index collection end() const74*b1cdbd2cSJim Jagielski Indexes::const_iterator end() const { return m_aIndexes.end(); } 75*b1cdbd2cSJim Jagielski /// get access to the (last + 1st) element of the index collection end()76*b1cdbd2cSJim Jagielski Indexes::iterator end() { return m_aIndexes.end(); } 77*b1cdbd2cSJim Jagielski 78*b1cdbd2cSJim Jagielski // searching 79*b1cdbd2cSJim Jagielski Indexes::const_iterator find(const String& _rName) const; 80*b1cdbd2cSJim Jagielski Indexes::iterator find(const String& _rName); 81*b1cdbd2cSJim Jagielski Indexes::const_iterator findOriginal(const String& _rName) const; 82*b1cdbd2cSJim Jagielski Indexes::iterator findOriginal(const String& _rName); 83*b1cdbd2cSJim Jagielski 84*b1cdbd2cSJim Jagielski // inserting without committing 85*b1cdbd2cSJim Jagielski // the OriginalName of the newly inserted index will be empty, thus indicating that it's new 86*b1cdbd2cSJim Jagielski Indexes::iterator insert(const String& _rName); 87*b1cdbd2cSJim Jagielski // commit a new index, which is already part if the collection, but does not have an equivalent in the 88*b1cdbd2cSJim Jagielski // data source, yet 89*b1cdbd2cSJim Jagielski void commitNewIndex(const Indexes::iterator& _rPos) SAL_THROW((::com::sun::star::sdbc::SQLException)); 90*b1cdbd2cSJim Jagielski 91*b1cdbd2cSJim Jagielski // reset the data for the given index 92*b1cdbd2cSJim Jagielski void resetIndex(const Indexes::iterator& _rPos) SAL_THROW((::com::sun::star::sdbc::SQLException)); 93*b1cdbd2cSJim Jagielski 94*b1cdbd2cSJim Jagielski // attach to a new key container 95*b1cdbd2cSJim Jagielski void attach(const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess >& _rxIndexes); 96*b1cdbd2cSJim Jagielski // detach from the container 97*b1cdbd2cSJim Jagielski void detach(); 98*b1cdbd2cSJim Jagielski 99*b1cdbd2cSJim Jagielski // is the object valid? isValid() const100*b1cdbd2cSJim Jagielski sal_Bool isValid() const { return m_xIndexes.is(); } 101*b1cdbd2cSJim Jagielski // number of contained indexes size() const102*b1cdbd2cSJim Jagielski sal_Int32 size() const { return m_aIndexes.size(); } 103*b1cdbd2cSJim Jagielski 104*b1cdbd2cSJim Jagielski /// drop an index, and remove it from the collection 105*b1cdbd2cSJim Jagielski sal_Bool drop(const Indexes::iterator& _rPos) SAL_THROW((::com::sun::star::sdbc::SQLException)); 106*b1cdbd2cSJim Jagielski /// simply drop the index described by the name, but don't remove the descriptor from the collection 107*b1cdbd2cSJim Jagielski sal_Bool dropNoRemove(const Indexes::iterator& _rPos) SAL_THROW((::com::sun::star::sdbc::SQLException)); 108*b1cdbd2cSJim Jagielski 109*b1cdbd2cSJim Jagielski protected: 110*b1cdbd2cSJim Jagielski void implConstructFrom(const ::com::sun::star::uno::Reference< ::com::sun::star::container::XNameAccess >& _rxIndexes); 111*b1cdbd2cSJim Jagielski void implFillIndexInfo(OIndex& _rIndex, ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > _rxDescriptor) SAL_THROW((::com::sun::star::uno::Exception)); 112*b1cdbd2cSJim Jagielski void implFillIndexInfo(OIndex& _rIndex) SAL_THROW((::com::sun::star::uno::Exception)); 113*b1cdbd2cSJim Jagielski }; 114*b1cdbd2cSJim Jagielski 115*b1cdbd2cSJim Jagielski 116*b1cdbd2cSJim Jagielski //...................................................................... 117*b1cdbd2cSJim Jagielski } // namespace dbaui 118*b1cdbd2cSJim Jagielski //...................................................................... 119*b1cdbd2cSJim Jagielski 120*b1cdbd2cSJim Jagielski #endif // _DBAUI_INDEXCOLLECTION_HXX_ 121*b1cdbd2cSJim Jagielski 122