|
1 /* |
|
2 * Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies). |
|
3 * All rights reserved. |
|
4 * This component and the accompanying materials are made available |
|
5 * under the terms of "Eclipse Public License v1.0" |
|
6 * which accompanies this distribution, and is available |
|
7 * at the URL "http://www.eclipse.org/legal/epl-v10.html". |
|
8 * |
|
9 * Initial Contributors: |
|
10 * Nokia Corporation - initial contribution. |
|
11 * |
|
12 * Contributors: |
|
13 * |
|
14 * Description: Array of attribute retrieval errors |
|
15 * |
|
16 */ |
|
17 |
|
18 |
|
19 |
|
20 |
|
21 #include "glxfetcherrorarray.h" |
|
22 #include <glxtracer.h> // For Logs |
|
23 |
|
24 // ----------------------------------------------------------------------------- |
|
25 // Constructor |
|
26 // ----------------------------------------------------------------------------- |
|
27 // |
|
28 CGlxFetchErrorArray::CGlxFetchErrorArray() |
|
29 { |
|
30 TRACER("CGlxFetchErrorArray::Default Constructor"); |
|
31 |
|
32 } |
|
33 |
|
34 // ----------------------------------------------------------------------------- |
|
35 // NewL |
|
36 // ----------------------------------------------------------------------------- |
|
37 // |
|
38 CGlxFetchErrorArray* CGlxFetchErrorArray::NewL(const CGlxFetchErrorArray* aErrorArray) |
|
39 { |
|
40 TRACER("CGlxFetchErrorArray::NewL"); |
|
41 |
|
42 CGlxFetchErrorArray* self = CGlxFetchErrorArray::NewLC(aErrorArray); |
|
43 CleanupStack::Pop(self); |
|
44 return self; |
|
45 } |
|
46 |
|
47 // ----------------------------------------------------------------------------- |
|
48 // NewLC |
|
49 // ----------------------------------------------------------------------------- |
|
50 // |
|
51 CGlxFetchErrorArray* CGlxFetchErrorArray::NewLC(const CGlxFetchErrorArray* aErrorArray) |
|
52 { |
|
53 TRACER("CGlxFetchErrorArray::NewLC"); |
|
54 |
|
55 CGlxFetchErrorArray* self = new( ELeave ) CGlxFetchErrorArray(); |
|
56 CleanupStack::PushL( self ); |
|
57 self->CopyConstructL(aErrorArray); |
|
58 return self; |
|
59 } |
|
60 // ----------------------------------------------------------------------------- |
|
61 // CopyConstructL |
|
62 // ----------------------------------------------------------------------------- |
|
63 // |
|
64 void CGlxFetchErrorArray::CopyConstructL(const CGlxFetchErrorArray* aErrorArray) |
|
65 { |
|
66 TRACER("CGlxFetchErrorArray::CopyConstructL"); |
|
67 |
|
68 if ( aErrorArray ) |
|
69 { |
|
70 TInt count = aErrorArray->iFetchErrors.Count(); |
|
71 for ( TInt index = 0; index < count; index++ ) |
|
72 { |
|
73 iFetchErrors.AppendL(aErrorArray->iFetchErrors[index]); |
|
74 } |
|
75 } |
|
76 } |
|
77 |
|
78 // ----------------------------------------------------------------------------- |
|
79 // Destructor |
|
80 // ----------------------------------------------------------------------------- |
|
81 // |
|
82 CGlxFetchErrorArray::~CGlxFetchErrorArray() |
|
83 { |
|
84 TRACER("CGlxFetchErrorArray::Destructor"); |
|
85 |
|
86 iFetchErrors.Reset(); |
|
87 } |
|
88 |
|
89 // ----------------------------------------------------------------------------- |
|
90 // ErrorCount |
|
91 // ----------------------------------------------------------------------------- |
|
92 // |
|
93 TInt CGlxFetchErrorArray::ErrorCount() const |
|
94 { |
|
95 TRACER("CGlxFetchErrorArray::ErrorCount"); |
|
96 |
|
97 return iFetchErrors.Count(); |
|
98 } |
|
99 |
|
100 // ----------------------------------------------------------------------------- |
|
101 // Error |
|
102 // ----------------------------------------------------------------------------- |
|
103 // |
|
104 TGlxFetchError CGlxFetchErrorArray::Error(TInt aIndex) const |
|
105 { |
|
106 TRACER("CGlxFetchErrorArray::Error"); |
|
107 |
|
108 return iFetchErrors[aIndex]; |
|
109 } |
|
110 |
|
111 // ----------------------------------------------------------------------------- |
|
112 // AddErrorL |
|
113 // ----------------------------------------------------------------------------- |
|
114 // |
|
115 void CGlxFetchErrorArray::AddErrorL(TGlxFetchError aError) |
|
116 { |
|
117 TRACER("CGlxFetchErrorArray::AddErrorL"); |
|
118 |
|
119 TInt index = FindError(aError.iAttr); |
|
120 |
|
121 if ( KErrNotFound == index ) |
|
122 { |
|
123 TLinearOrder<TGlxFetchError> orderer (&ErrorOrderById); |
|
124 iFetchErrors.InsertInOrderL(aError, orderer); |
|
125 } |
|
126 else |
|
127 { |
|
128 iFetchErrors[index] = aError; |
|
129 } |
|
130 } |
|
131 |
|
132 // ----------------------------------------------------------------------------- |
|
133 // Remove an error |
|
134 // ----------------------------------------------------------------------------- |
|
135 // |
|
136 void CGlxFetchErrorArray::Remove( TInt aIndex ) |
|
137 { |
|
138 TRACER("CGlxFetchErrorArray::Remove"); |
|
139 |
|
140 iFetchErrors.Remove( aIndex ); |
|
141 } |
|
142 |
|
143 // ----------------------------------------------------------------------------- |
|
144 // FindError |
|
145 // ----------------------------------------------------------------------------- |
|
146 // |
|
147 TInt CGlxFetchErrorArray::FindError(TMPXAttribute aAttr) const |
|
148 { |
|
149 TRACER("CGlxFetchErrorArray::FindError"); |
|
150 |
|
151 return iFetchErrors.FindInOrder(aAttr, (&ErrorOrderByKey)); |
|
152 } |
|
153 |
|
154 // ----------------------------------------------------------------------------- |
|
155 // FindError |
|
156 // ----------------------------------------------------------------------------- |
|
157 // |
|
158 TInt CGlxFetchErrorArray::FindError(TInt aContentId) const |
|
159 { |
|
160 TRACER("CGlxFetchErrorArray::FindError"); |
|
161 |
|
162 TInt count = iFetchErrors.Count(); |
|
163 TInt pos = KErrNotFound; |
|
164 for(TInt i=0; i<count; i++) |
|
165 { |
|
166 if(iFetchErrors[i].iAttr.ContentId()==aContentId) |
|
167 { |
|
168 pos = i; |
|
169 break; |
|
170 } |
|
171 } |
|
172 |
|
173 return pos; |
|
174 } |
|
175 |
|
176 // ----------------------------------------------------------------------------- |
|
177 // ErrorOrderByKey |
|
178 // ----------------------------------------------------------------------------- |
|
179 // |
|
180 TInt CGlxFetchErrorArray::ErrorOrderByKey(const TMPXAttribute* aAttr, const TGlxFetchError& aItem2) |
|
181 { |
|
182 TRACER("CGlxFetchErrorArray::ErrorOrderByKey"); |
|
183 |
|
184 TInt contentId1 = aAttr->ContentId(); |
|
185 TInt contentId2 = aItem2.iAttr.ContentId(); |
|
186 |
|
187 if (contentId1 < contentId2) |
|
188 { |
|
189 return -1; |
|
190 } |
|
191 |
|
192 if (contentId1 > contentId2) |
|
193 { |
|
194 return 1; |
|
195 } |
|
196 |
|
197 TUint attributeId1 = aAttr->AttributeId(); |
|
198 TUint attributeId2 = aItem2.iAttr.AttributeId(); |
|
199 |
|
200 if (attributeId1 < attributeId2) |
|
201 { |
|
202 return -1; |
|
203 } |
|
204 |
|
205 if (attributeId1 > attributeId2) |
|
206 { |
|
207 return 1; |
|
208 } |
|
209 |
|
210 return 0; |
|
211 } |
|
212 |
|
213 // ----------------------------------------------------------------------------- |
|
214 // ErrorOrderById |
|
215 // ----------------------------------------------------------------------------- |
|
216 // |
|
217 TInt CGlxFetchErrorArray::ErrorOrderById(const TGlxFetchError& aItem1, const TGlxFetchError& aItem2) |
|
218 { |
|
219 TRACER("CGlxFetchErrorArray::ErrorOrderById"); |
|
220 |
|
221 return ErrorOrderByKey(&(aItem1.iAttr), aItem2); |
|
222 } |
|
223 |