1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 24 #ifndef DBACCESS_SOURCE_CORE_INC_COMPOSERTOOLS_HXX 25 #define DBACCESS_SOURCE_CORE_INC_COMPOSERTOOLS_HXX 26 27 /** === begin UNO includes === **/ 28 /** === end UNO includes === **/ 29 30 #ifndef _RTL_USTRBUF_HXX_ 31 #include <rtl/ustrbuf.hxx> 32 #endif 33 34 #include <functional> 35 36 //........................................................................ 37 namespace dbaccess 38 { 39 //........................................................................ 40 41 //==================================================================== 42 //= TokenComposer 43 //==================================================================== 44 struct TokenComposer : public ::std::unary_function< ::rtl::OUString, void > 45 { 46 private: 47 #ifdef DBG_UTIL 48 bool m_bUsed; 49 #endif 50 51 protected: 52 ::rtl::OUStringBuffer m_aBuffer; 53 54 public: getComposedAndCleardbaccess::TokenComposer55 ::rtl::OUString getComposedAndClear() 56 { 57 #ifdef DBG_UTIL 58 m_bUsed = true; 59 #endif 60 return m_aBuffer.makeStringAndClear(); 61 } 62 cleardbaccess::TokenComposer63 void clear() 64 { 65 #ifdef DBG_UTIL 66 m_bUsed = false; 67 #endif 68 m_aBuffer.makeStringAndClear(); 69 } 70 71 public: TokenComposerdbaccess::TokenComposer72 TokenComposer() 73 #ifdef DBG_UTIL 74 :m_bUsed( false ) 75 #endif 76 { 77 } 78 ~TokenComposerdbaccess::TokenComposer79 virtual ~TokenComposer() 80 { 81 } 82 operator ()dbaccess::TokenComposer83 void operator() (const ::rtl::OUString& lhs) 84 { 85 append(lhs); 86 } 87 appenddbaccess::TokenComposer88 void append( const ::rtl::OUString& lhs ) 89 { 90 #ifdef DBG_UTIL 91 OSL_ENSURE( !m_bUsed, "FilterCreator::append: already used up!" ); 92 #endif 93 if ( lhs.getLength() ) 94 { 95 if ( m_aBuffer.getLength() ) 96 appendNonEmptyToNonEmpty( lhs ); 97 else 98 m_aBuffer.append( lhs ); 99 } 100 } 101 102 /// append the given part. Only to be called when both the part and our buffer so far are not empty 103 virtual void appendNonEmptyToNonEmpty( const ::rtl::OUString& lhs ) = 0; 104 }; 105 106 //==================================================================== 107 //= FilterCreator 108 //==================================================================== 109 struct FilterCreator : public TokenComposer 110 { appendNonEmptyToNonEmptydbaccess::FilterCreator111 virtual void appendNonEmptyToNonEmpty( const ::rtl::OUString& lhs ) 112 { 113 m_aBuffer.insert( 0, (sal_Unicode)' ' ); 114 m_aBuffer.insert( 0, (sal_Unicode)'(' ); 115 m_aBuffer.appendAscii( " ) AND ( " ); 116 m_aBuffer.append( lhs ); 117 m_aBuffer.appendAscii( " )" ); 118 } 119 }; 120 121 //==================================================================== 122 //= FilterCreator 123 //==================================================================== 124 struct OrderCreator : public TokenComposer 125 { appendNonEmptyToNonEmptydbaccess::OrderCreator126 virtual void appendNonEmptyToNonEmpty( const ::rtl::OUString& lhs ) 127 { 128 m_aBuffer.appendAscii( ", " ); 129 m_aBuffer.append( lhs ); 130 } 131 }; 132 133 //........................................................................ 134 } // namespace dbaccess 135 //........................................................................ 136 137 #endif // DBACCESS_SOURCE_CORE_INC_COMPOSERTOOLS_HXX 138 139