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 DBACCESS_SOURCE_CORE_INC_COMPOSERTOOLS_HXX 25*b1cdbd2cSJim Jagielski #define DBACCESS_SOURCE_CORE_INC_COMPOSERTOOLS_HXX 26*b1cdbd2cSJim Jagielski 27*b1cdbd2cSJim Jagielski /** === begin UNO includes === **/ 28*b1cdbd2cSJim Jagielski /** === end UNO includes === **/ 29*b1cdbd2cSJim Jagielski 30*b1cdbd2cSJim Jagielski #ifndef _RTL_USTRBUF_HXX_ 31*b1cdbd2cSJim Jagielski #include <rtl/ustrbuf.hxx> 32*b1cdbd2cSJim Jagielski #endif 33*b1cdbd2cSJim Jagielski 34*b1cdbd2cSJim Jagielski #include <functional> 35*b1cdbd2cSJim Jagielski 36*b1cdbd2cSJim Jagielski //........................................................................ 37*b1cdbd2cSJim Jagielski namespace dbaccess 38*b1cdbd2cSJim Jagielski { 39*b1cdbd2cSJim Jagielski //........................................................................ 40*b1cdbd2cSJim Jagielski 41*b1cdbd2cSJim Jagielski //==================================================================== 42*b1cdbd2cSJim Jagielski //= TokenComposer 43*b1cdbd2cSJim Jagielski //==================================================================== 44*b1cdbd2cSJim Jagielski struct TokenComposer : public ::std::unary_function< ::rtl::OUString, void > 45*b1cdbd2cSJim Jagielski { 46*b1cdbd2cSJim Jagielski private: 47*b1cdbd2cSJim Jagielski #ifdef DBG_UTIL 48*b1cdbd2cSJim Jagielski bool m_bUsed; 49*b1cdbd2cSJim Jagielski #endif 50*b1cdbd2cSJim Jagielski 51*b1cdbd2cSJim Jagielski protected: 52*b1cdbd2cSJim Jagielski ::rtl::OUStringBuffer m_aBuffer; 53*b1cdbd2cSJim Jagielski 54*b1cdbd2cSJim Jagielski public: getComposedAndCleardbaccess::TokenComposer55*b1cdbd2cSJim Jagielski ::rtl::OUString getComposedAndClear() 56*b1cdbd2cSJim Jagielski { 57*b1cdbd2cSJim Jagielski #ifdef DBG_UTIL 58*b1cdbd2cSJim Jagielski m_bUsed = true; 59*b1cdbd2cSJim Jagielski #endif 60*b1cdbd2cSJim Jagielski return m_aBuffer.makeStringAndClear(); 61*b1cdbd2cSJim Jagielski } 62*b1cdbd2cSJim Jagielski cleardbaccess::TokenComposer63*b1cdbd2cSJim Jagielski void clear() 64*b1cdbd2cSJim Jagielski { 65*b1cdbd2cSJim Jagielski #ifdef DBG_UTIL 66*b1cdbd2cSJim Jagielski m_bUsed = false; 67*b1cdbd2cSJim Jagielski #endif 68*b1cdbd2cSJim Jagielski m_aBuffer.makeStringAndClear(); 69*b1cdbd2cSJim Jagielski } 70*b1cdbd2cSJim Jagielski 71*b1cdbd2cSJim Jagielski public: TokenComposerdbaccess::TokenComposer72*b1cdbd2cSJim Jagielski TokenComposer() 73*b1cdbd2cSJim Jagielski #ifdef DBG_UTIL 74*b1cdbd2cSJim Jagielski :m_bUsed( false ) 75*b1cdbd2cSJim Jagielski #endif 76*b1cdbd2cSJim Jagielski { 77*b1cdbd2cSJim Jagielski } 78*b1cdbd2cSJim Jagielski ~TokenComposerdbaccess::TokenComposer79*b1cdbd2cSJim Jagielski virtual ~TokenComposer() 80*b1cdbd2cSJim Jagielski { 81*b1cdbd2cSJim Jagielski } 82*b1cdbd2cSJim Jagielski operator ()dbaccess::TokenComposer83*b1cdbd2cSJim Jagielski void operator() (const ::rtl::OUString& lhs) 84*b1cdbd2cSJim Jagielski { 85*b1cdbd2cSJim Jagielski append(lhs); 86*b1cdbd2cSJim Jagielski } 87*b1cdbd2cSJim Jagielski appenddbaccess::TokenComposer88*b1cdbd2cSJim Jagielski void append( const ::rtl::OUString& lhs ) 89*b1cdbd2cSJim Jagielski { 90*b1cdbd2cSJim Jagielski #ifdef DBG_UTIL 91*b1cdbd2cSJim Jagielski OSL_ENSURE( !m_bUsed, "FilterCreator::append: already used up!" ); 92*b1cdbd2cSJim Jagielski #endif 93*b1cdbd2cSJim Jagielski if ( lhs.getLength() ) 94*b1cdbd2cSJim Jagielski { 95*b1cdbd2cSJim Jagielski if ( m_aBuffer.getLength() ) 96*b1cdbd2cSJim Jagielski appendNonEmptyToNonEmpty( lhs ); 97*b1cdbd2cSJim Jagielski else 98*b1cdbd2cSJim Jagielski m_aBuffer.append( lhs ); 99*b1cdbd2cSJim Jagielski } 100*b1cdbd2cSJim Jagielski } 101*b1cdbd2cSJim Jagielski 102*b1cdbd2cSJim Jagielski /// append the given part. Only to be called when both the part and our buffer so far are not empty 103*b1cdbd2cSJim Jagielski virtual void appendNonEmptyToNonEmpty( const ::rtl::OUString& lhs ) = 0; 104*b1cdbd2cSJim Jagielski }; 105*b1cdbd2cSJim Jagielski 106*b1cdbd2cSJim Jagielski //==================================================================== 107*b1cdbd2cSJim Jagielski //= FilterCreator 108*b1cdbd2cSJim Jagielski //==================================================================== 109*b1cdbd2cSJim Jagielski struct FilterCreator : public TokenComposer 110*b1cdbd2cSJim Jagielski { appendNonEmptyToNonEmptydbaccess::FilterCreator111*b1cdbd2cSJim Jagielski virtual void appendNonEmptyToNonEmpty( const ::rtl::OUString& lhs ) 112*b1cdbd2cSJim Jagielski { 113*b1cdbd2cSJim Jagielski m_aBuffer.insert( 0, (sal_Unicode)' ' ); 114*b1cdbd2cSJim Jagielski m_aBuffer.insert( 0, (sal_Unicode)'(' ); 115*b1cdbd2cSJim Jagielski m_aBuffer.appendAscii( " ) AND ( " ); 116*b1cdbd2cSJim Jagielski m_aBuffer.append( lhs ); 117*b1cdbd2cSJim Jagielski m_aBuffer.appendAscii( " )" ); 118*b1cdbd2cSJim Jagielski } 119*b1cdbd2cSJim Jagielski }; 120*b1cdbd2cSJim Jagielski 121*b1cdbd2cSJim Jagielski //==================================================================== 122*b1cdbd2cSJim Jagielski //= FilterCreator 123*b1cdbd2cSJim Jagielski //==================================================================== 124*b1cdbd2cSJim Jagielski struct OrderCreator : public TokenComposer 125*b1cdbd2cSJim Jagielski { appendNonEmptyToNonEmptydbaccess::OrderCreator126*b1cdbd2cSJim Jagielski virtual void appendNonEmptyToNonEmpty( const ::rtl::OUString& lhs ) 127*b1cdbd2cSJim Jagielski { 128*b1cdbd2cSJim Jagielski m_aBuffer.appendAscii( ", " ); 129*b1cdbd2cSJim Jagielski m_aBuffer.append( lhs ); 130*b1cdbd2cSJim Jagielski } 131*b1cdbd2cSJim Jagielski }; 132*b1cdbd2cSJim Jagielski 133*b1cdbd2cSJim Jagielski //........................................................................ 134*b1cdbd2cSJim Jagielski } // namespace dbaccess 135*b1cdbd2cSJim Jagielski //........................................................................ 136*b1cdbd2cSJim Jagielski 137*b1cdbd2cSJim Jagielski #endif // DBACCESS_SOURCE_CORE_INC_COMPOSERTOOLS_HXX 138*b1cdbd2cSJim Jagielski 139