blob: 233b57a7fe6dda9cbd3bdc313eb1e37f8f52a411 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
|
/*************************************************************************
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* Copyright 2000, 2010 Oracle and/or its affiliates.
*
* OpenOffice.org - a multi-platform office productivity suite
*
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License version 3
* only, as published by the Free Software Foundation.
*
* OpenOffice.org is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License version 3 for more details
* (a copy is included in the LICENSE file that accompanied this code).
*
* You should have received a copy of the GNU Lesser General Public License
* version 3 along with OpenOffice.org. If not, see
* <http://www.openoffice.org/license.html>
* for a copy of the LGPLv3 License.
*
************************************************************************/
#ifndef _CONNECTIVITY_MAB_QUERYHELPER_HXX_
#define _CONNECTIVITY_MAB_QUERYHELPER_HXX_
#include <MNSInclude.hxx>
#include "MErrorResource.hxx"
#include <sal/types.h>
#include <rtl/ustring.hxx>
#include <osl/mutex.hxx>
#include <osl/conditn.hxx>
#include <comphelper/stl_types.hxx>
#include <osl/thread.hxx>
#include <hash_map>
namespace connectivity
{
namespace mozab
{
class MQueryHelperResultEntry
{
private:
typedef ::std::hash_map< ::rtl::OString, ::rtl::OUString, ::rtl::OStringHash > FieldMap;
mutable ::osl::Mutex m_aMutex;
FieldMap m_Fields;
nsCOMPtr<nsIAbCard> m_Card;
sal_Int32 m_RowStates;
public:
MQueryHelperResultEntry();
~MQueryHelperResultEntry();
void insert( const rtl::OString &key, rtl::OUString &value );
rtl::OUString getValue( const rtl::OString &key ) const;
void setValue( const rtl::OString &key, const rtl::OUString & rValue);
void setCard(nsIAbCard *card);
nsIAbCard *getCard();
sal_Bool setRowStates(sal_Int32 state){m_RowStates = state; return sal_True;};
sal_Int32 getRowStates() { return m_RowStates;};
};
class MQueryHelper : public nsIAbDirectoryQueryResultListener
{
private:
typedef std::vector< MQueryHelperResultEntry* > resultsArray;
mutable ::osl::Mutex m_aMutex;
::osl::Condition m_aCondition;
resultsArray m_aResults;
sal_Int32 m_nIndex;
sal_Bool m_bHasMore;
sal_Bool m_bAtEnd;
sal_Bool m_bErrorCondition;
sal_Bool m_bQueryComplete;
ErrorDescriptor m_aError;
void append(MQueryHelperResultEntry* resEnt );
void clear_results();
void clearResultOrComplete();
void notifyResultOrComplete();
sal_Bool waitForResultOrComplete( );
void getCardValues(nsIAbCard *card,sal_Int32 rowIndex=0);
#if OSL_DEBUG_LEVEL > 0
oslThreadIdentifier m_oThreadID;
#endif
public:
NS_DECL_ISUPPORTS
NS_DECL_NSIABDIRECTORYQUERYRESULTLISTENER
MQueryHelper();
virtual ~MQueryHelper();
void reset();
void rewind();
MQueryHelperResultEntry* next( );
MQueryHelperResultEntry* getByIndex( sal_uInt32 nRow );
const ErrorDescriptor& getError() const { return m_aError; }
sal_Bool isError() const;
sal_Bool hasMore() const;
sal_Bool atEnd() const;
sal_Bool queryComplete() const;
sal_Bool waitForQueryComplete( );
sal_Bool waitForRow( sal_Int32 rowNum );
sal_Int32 getResultCount() const;
sal_uInt32 getRealCount() const;
sal_Int32 createNewCard(); //return Row count number
sal_Bool resyncRow(sal_Int32 rowIndex);
void notifyQueryError() ;
sal_Bool setCardValues(const sal_Int32 rowIndex);
sal_Int32 commitCard(const sal_Int32 rowIndex, nsIAbDirectory * directory);
sal_Int32 deleteCard(const sal_Int32 rowIndex, nsIAbDirectory * directory);
};
}
}
#endif // _CONNECTIVITY_MAB_QUERYHELPER_HXX_
|