|
1 /* |
|
2 * Copyright (c) 2004 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: Attribute model implementation. |
|
15 * |
|
16 */ |
|
17 |
|
18 // INCLUDE FILES |
|
19 |
|
20 #include "CPEngPresenceAttrModel.h" |
|
21 #include "CPEngPresenceAttrConstructor.h" |
|
22 #include "CPEngAttrModelAsyncDataSetHook.h" |
|
23 #include "CPEngPresenceAttrModelStorageProxy.h" |
|
24 #include "PEngAttributeRequestCodec.h" |
|
25 |
|
26 |
|
27 #include "MPEngXMLSerializer.h" |
|
28 #include "MPEngXMLParser.h" |
|
29 |
|
30 #include "MPEngPresenceAttrModelTypeImp.h" |
|
31 |
|
32 |
|
33 #include "PresenceDebugPrint.h" |
|
34 |
|
35 |
|
36 #include <E32Base.h> |
|
37 #include <S32Strm.h> |
|
38 |
|
39 |
|
40 |
|
41 |
|
42 //LOCAL constants |
|
43 namespace |
|
44 { |
|
45 #if defined(_DEBUG) |
|
46 _LIT( KPEngAttributeModelPanicCategory, "PEngAttrModel" ); |
|
47 #endif |
|
48 |
|
49 enum TPEngAttributeModelPanics |
|
50 { |
|
51 EPEngDataIntNotSupported, |
|
52 EPEngDataDesC8NotSupported, |
|
53 EPEngDataDesC16NotSupported, |
|
54 EPEngSetDataIntNotSupported, |
|
55 EPEngSetDataDesC8NotSupported, |
|
56 EPEngSetDataDesC16NotSupported, |
|
57 EPEngSetDataDesC8AsyncNotSupported, |
|
58 EPEngSetDataDesC16AsyncNotSupported, |
|
59 EPEngInternalizeMismatch, |
|
60 }; |
|
61 |
|
62 |
|
63 void PanicAttrModel( TPEngAttributeModelPanics aReason ) |
|
64 { |
|
65 #if defined(_DEBUG) |
|
66 User::Panic( KPEngAttributeModelPanicCategory, aReason ); |
|
67 #endif |
|
68 |
|
69 // suppress the unreferenced variable warning |
|
70 ( void ) aReason; |
|
71 } |
|
72 |
|
73 |
|
74 void PanicAttrModelL( TPEngAttributeModelPanics aReason, TInt aLeaveCode ) |
|
75 { |
|
76 #if defined(_DEBUG) |
|
77 PanicAttrModel( aReason ); |
|
78 #else |
|
79 User::Leave( aLeaveCode ); |
|
80 #endif |
|
81 |
|
82 // suppress the unreferenced variable warnings |
|
83 ( void ) aReason; |
|
84 ( void ) aLeaveCode; |
|
85 } |
|
86 } |
|
87 |
|
88 |
|
89 |
|
90 |
|
91 // ============================= MEMBER FUNCTIONS ============================= |
|
92 // ----------------------------------------------------------------------------- |
|
93 // CPEngAttributeConstruct::NewL() |
|
94 // Two-phased constructor. |
|
95 // ----------------------------------------------------------------------------- |
|
96 // |
|
97 CPEngPresenceAttrModel* CPEngPresenceAttrModel::NewL( |
|
98 CPEngPresenceAttrConstructor& aTypeConstructor, |
|
99 const TDesC& aPresenceID, |
|
100 MPEngPresenceAttrModelTypeImp* aTypeImp ) |
|
101 { |
|
102 CPEngPresenceAttrModel* self = new ( ELeave ) CPEngPresenceAttrModel( |
|
103 aTypeConstructor ); |
|
104 CleanupStack::PushL( self ); |
|
105 self->ConstructL( aPresenceID ); |
|
106 CleanupStack::Pop( self ); |
|
107 |
|
108 //TypeImp ownership is taken only in full success |
|
109 self->iTypeImp = aTypeImp; |
|
110 return self; |
|
111 } |
|
112 |
|
113 |
|
114 |
|
115 // C++ default constructor can NOT contain any code, that |
|
116 // might leave. |
|
117 // |
|
118 CPEngPresenceAttrModel::CPEngPresenceAttrModel( |
|
119 CPEngPresenceAttrConstructor& aTypeConstructor ) |
|
120 : iTypeConstructor( aTypeConstructor ), |
|
121 iDataSource( EPEngAttrLocalDefault ), |
|
122 iQualifier( EFalse ) |
|
123 { |
|
124 iTypeConstructor.OpenRef(); |
|
125 } |
|
126 |
|
127 |
|
128 // Destructor |
|
129 CPEngPresenceAttrModel::~CPEngPresenceAttrModel() |
|
130 { |
|
131 delete iStorage; |
|
132 delete iTypeImp; |
|
133 delete iPresenceId; |
|
134 delete iAsyncSetHook; |
|
135 |
|
136 iTypeConstructor.CloseRef(); |
|
137 } |
|
138 |
|
139 |
|
140 |
|
141 |
|
142 // ----------------------------------------------------------------------------- |
|
143 // CPEngPresenceAttrModel::ConstructL() |
|
144 // ----------------------------------------------------------------------------- |
|
145 // |
|
146 void CPEngPresenceAttrModel::ConstructL( const TDesC& aPresenceID ) |
|
147 { |
|
148 iPresenceId = aPresenceID.AllocL(); |
|
149 iStorage = CPEngPresenceAttrModelStorageProxy::NewL( *this ); |
|
150 } |
|
151 |
|
152 |
|
153 |
|
154 // ----------------------------------------------------------------------------- |
|
155 // CPEngPresenceAttrModel::Type() |
|
156 // From MPEngPresenceAttrModel |
|
157 // ----------------------------------------------------------------------------- |
|
158 // |
|
159 TUint32 CPEngPresenceAttrModel::Type() const |
|
160 { |
|
161 return iTypeConstructor.iType; |
|
162 } |
|
163 |
|
164 |
|
165 // ----------------------------------------------------------------------------- |
|
166 // CPEngPresenceAttrModel::TypeProperties() |
|
167 // From MPEngPresenceAttrModel |
|
168 // ----------------------------------------------------------------------------- |
|
169 // |
|
170 const MPEngPresenceAttrTypeProperties2& CPEngPresenceAttrModel::TypeProperties() const |
|
171 { |
|
172 return iTypeConstructor; |
|
173 } |
|
174 |
|
175 |
|
176 // ----------------------------------------------------------------------------- |
|
177 // CPEngPresenceAttrModel::PresenceID() |
|
178 // From MPEngPresenceAttrModel |
|
179 // ----------------------------------------------------------------------------- |
|
180 // |
|
181 const TDesC& CPEngPresenceAttrModel::PresenceID() const |
|
182 { |
|
183 return *iPresenceId; |
|
184 } |
|
185 |
|
186 |
|
187 // ----------------------------------------------------------------------------- |
|
188 // CPEngPresenceAttrModel::DataSource() |
|
189 // From MPEngPresenceAttrModel |
|
190 // ----------------------------------------------------------------------------- |
|
191 // |
|
192 TPEngAttrDataSource CPEngPresenceAttrModel::DataSource() const |
|
193 { |
|
194 return iDataSource; |
|
195 } |
|
196 |
|
197 |
|
198 // ----------------------------------------------------------------------------- |
|
199 // CPEngPresenceAttrModel::Qualifier() |
|
200 // From MPEngPresenceAttrModel |
|
201 // ----------------------------------------------------------------------------- |
|
202 // |
|
203 TBool CPEngPresenceAttrModel::Qualifier() const |
|
204 { |
|
205 return iQualifier; |
|
206 } |
|
207 |
|
208 |
|
209 // ----------------------------------------------------------------------------- |
|
210 // CPEngPresenceAttrModel::DataInt() |
|
211 // From MPEngPresenceAttrModel |
|
212 // ----------------------------------------------------------------------------- |
|
213 // |
|
214 TInt CPEngPresenceAttrModel::DataInt( TInt aField, |
|
215 TInt aGroup ) const |
|
216 { |
|
217 PENG_DP( D_PENG_LIT( "MPEngPresenceAttrModel2::DataDesC8(%d, %d) [%08x]" ), |
|
218 aField, aGroup, iTypeConstructor.iType ); |
|
219 |
|
220 TInt data = 0; |
|
221 if ( !iTypeImp->GetData( &data, NULL, NULL, aField, aGroup ) ) |
|
222 { |
|
223 PENG_DP( D_PENG_LIT( "Scope / value type not supported" ) ); |
|
224 PanicAttrModel( EPEngDataIntNotSupported ); |
|
225 return KErrNotSupported; |
|
226 } |
|
227 |
|
228 return data; |
|
229 } |
|
230 |
|
231 |
|
232 // ----------------------------------------------------------------------------- |
|
233 // CPEngPresenceAttrModel::DataDesC8() |
|
234 // From MPEngPresenceAttrModel |
|
235 // ----------------------------------------------------------------------------- |
|
236 // |
|
237 const TPtrC8 CPEngPresenceAttrModel::DataDesC8( TInt aField, |
|
238 TInt aGroup ) const |
|
239 { |
|
240 PENG_DP( D_PENG_LIT( "MPEngPresenceAttrModel2::DataDesC8(%d, %d) [%08x]" ), |
|
241 aField, aGroup, iTypeConstructor.iType ); |
|
242 |
|
243 |
|
244 TPtrC8 data( NULL, 0 ); |
|
245 if ( !iTypeImp->GetData( NULL, &data, NULL, aField, aGroup ) ) |
|
246 { |
|
247 PENG_DP( D_PENG_LIT( "Scope / value type not supported" ) ); |
|
248 PanicAttrModel( EPEngDataDesC8NotSupported ); |
|
249 return KNullDesC8(); |
|
250 } |
|
251 |
|
252 return data; |
|
253 } |
|
254 |
|
255 |
|
256 // ----------------------------------------------------------------------------- |
|
257 // CPEngPresenceAttrModel::DataDesC16() |
|
258 // From MPEngPresenceAttrModel |
|
259 // ----------------------------------------------------------------------------- |
|
260 // |
|
261 const TPtrC16 CPEngPresenceAttrModel::DataDesC16( TInt aField, |
|
262 TInt aGroup ) const |
|
263 { |
|
264 PENG_DP( D_PENG_LIT( "MPEngPresenceAttrModel2::DataDesC16(%d, %d) [%08x]" ), |
|
265 aField, aGroup, iTypeConstructor.iType ); |
|
266 |
|
267 |
|
268 TPtrC16 data( NULL, 0 ); |
|
269 if ( !iTypeImp->GetData( NULL, NULL, &data, aField, aGroup ) ) |
|
270 { |
|
271 PENG_DP( D_PENG_LIT( "Scope / value type not supported" ) ); |
|
272 PanicAttrModel( EPEngDataDesC16NotSupported ); |
|
273 return KNullDesC16(); |
|
274 } |
|
275 |
|
276 return data; |
|
277 } |
|
278 |
|
279 |
|
280 // ----------------------------------------------------------------------------- |
|
281 // CPEngPresenceAttrModel::SetQualifier() |
|
282 // From MPEngPresenceAttrModel |
|
283 // ----------------------------------------------------------------------------- |
|
284 // |
|
285 void CPEngPresenceAttrModel::SetQualifier( TBool aQualifier ) |
|
286 { |
|
287 iQualifier = aQualifier; |
|
288 |
|
289 //data has been locally edited |
|
290 iDataSource = EPEngAttrLocalEdited; |
|
291 } |
|
292 |
|
293 |
|
294 // ----------------------------------------------------------------------------- |
|
295 // CPEngPresenceAttrModel::SetDataIntL() |
|
296 // From MPEngPresenceAttrModel |
|
297 // ----------------------------------------------------------------------------- |
|
298 // |
|
299 void CPEngPresenceAttrModel::SetDataIntL( TInt aData, |
|
300 TInt aField, |
|
301 TInt aGroup ) |
|
302 { |
|
303 PENG_DP( D_PENG_LIT( "MPEngPresenceAttrModel2::SetDataIntL(%d, %d, %d) [%08x]" ), |
|
304 aData, aField, aGroup, iTypeConstructor.iType ); |
|
305 |
|
306 if ( !iTypeImp->SetDataL( &aData, NULL, NULL, aField, aGroup ) ) |
|
307 { |
|
308 PENG_DP( D_PENG_LIT( "Scope / value type / value not supported" ) ); |
|
309 PanicAttrModelL( EPEngSetDataIntNotSupported, KErrNotSupported ); |
|
310 } |
|
311 |
|
312 iQualifier = ETrue; |
|
313 iDataSource = EPEngAttrLocalEdited; |
|
314 } |
|
315 |
|
316 |
|
317 // ----------------------------------------------------------------------------- |
|
318 // CPEngPresenceAttrModel::SetDataDesC8L() |
|
319 // From MPEngPresenceAttrModel |
|
320 // ----------------------------------------------------------------------------- |
|
321 // |
|
322 void CPEngPresenceAttrModel::SetDataDesC8L( const TDesC8& aData, |
|
323 TInt aField, |
|
324 TInt aGroup ) |
|
325 { |
|
326 PENG_DP( D_PENG_LIT( "MPEngPresenceAttrModel2::SetDataDesC8L(%d, %d) [%08x]" ), |
|
327 aField, aGroup, iTypeConstructor.iType ); |
|
328 |
|
329 if ( !iTypeImp->SetDataL( NULL, &aData, NULL, aField, aGroup ) ) |
|
330 { |
|
331 PENG_DP( D_PENG_LIT( "Scope / value type / value itself not supported" ) ); |
|
332 PanicAttrModelL( EPEngSetDataDesC8NotSupported, KErrNotSupported ); |
|
333 } |
|
334 |
|
335 iQualifier = ETrue; |
|
336 iDataSource = EPEngAttrLocalEdited; |
|
337 } |
|
338 |
|
339 |
|
340 // ----------------------------------------------------------------------------- |
|
341 // CPEngPresenceAttrModel::SetDataDesC16L() |
|
342 // From MPEngPresenceAttrModel |
|
343 // ----------------------------------------------------------------------------- |
|
344 // |
|
345 void CPEngPresenceAttrModel::SetDataDesC16L( const TDesC16& aData, |
|
346 TInt aField, |
|
347 TInt aGroup ) |
|
348 { |
|
349 PENG_DP( D_PENG_LIT( "MPEngPresenceAttrModel2::SetDataDesC16L(%d, %d) [%08x]" ), |
|
350 aField, aGroup, iTypeConstructor.iType ); |
|
351 |
|
352 if ( !iTypeImp->SetDataL( NULL, NULL, &aData, aField, aGroup ) ) |
|
353 { |
|
354 PENG_DP( D_PENG_LIT( "Scope / value type / value not supported" ) ); |
|
355 PanicAttrModelL( EPEngSetDataDesC16NotSupported, KErrNotSupported ); |
|
356 } |
|
357 |
|
358 iQualifier = ETrue; |
|
359 iDataSource = EPEngAttrLocalEdited; |
|
360 } |
|
361 |
|
362 // ----------------------------------------------------------------------------- |
|
363 // CPEngPresenceAttrModel::SetDataDesC8AsyncL() |
|
364 // From MPEngPresenceAttrModel |
|
365 // ----------------------------------------------------------------------------- |
|
366 // |
|
367 void CPEngPresenceAttrModel::SetDataDesC8AsyncL( const TDesC8& aData, |
|
368 TRequestStatus& aRequestStatus, |
|
369 TInt aField, |
|
370 TInt aGroup ) |
|
371 { |
|
372 PENG_DP( D_PENG_LIT( "MPEngPresenceAttrModel2::SetDataDesC8AsyncL(%d, %d) [%08x]" ), |
|
373 aField, aGroup, iTypeConstructor.iType ); |
|
374 |
|
375 LazyInitAsyncSetHookL(); |
|
376 |
|
377 iAsyncSetHook->InitializeLC( aRequestStatus, |
|
378 *this, //Self is updated when processing done |
|
379 *iTypeImp ); //Real model is canceled |
|
380 |
|
381 if ( !iTypeImp->SetDataAsyncL( &aData, NULL, iAsyncSetHook->Status(), aField, aGroup ) ) |
|
382 { |
|
383 PENG_DP( D_PENG_LIT( "Scope / value type / value not supported" ) ); |
|
384 PanicAttrModelL( EPEngSetDataDesC8AsyncNotSupported, KErrNotSupported ); |
|
385 } |
|
386 |
|
387 CleanupStack::Pop(); |
|
388 iAsyncSetHook->Activate(); |
|
389 } |
|
390 |
|
391 |
|
392 |
|
393 |
|
394 // ----------------------------------------------------------------------------- |
|
395 // CPEngPresenceAttrModel::SetDataDesC16AsyncL() |
|
396 // From MPEngPresenceAttrModel |
|
397 // ----------------------------------------------------------------------------- |
|
398 // |
|
399 void CPEngPresenceAttrModel::SetDataDesC16AsyncL( const TDesC16& aData, |
|
400 TRequestStatus& aRequestStatus, |
|
401 TInt aField, |
|
402 TInt aGroup ) |
|
403 { |
|
404 PENG_DP( D_PENG_LIT( "MPEngPresenceAttrModel2::SetDataDesC16AsyncL(%d, %d) [%08x]" ), |
|
405 aField, aGroup, iTypeConstructor.iType ); |
|
406 |
|
407 LazyInitAsyncSetHookL(); |
|
408 |
|
409 iAsyncSetHook->InitializeLC( aRequestStatus, |
|
410 *this, //Self is updated when processing done |
|
411 *iTypeImp ); //Real model is canceled |
|
412 |
|
413 |
|
414 if ( !iTypeImp->SetDataAsyncL( NULL, &aData, iAsyncSetHook->Status(), aField, aGroup ) ) |
|
415 { |
|
416 PENG_DP( D_PENG_LIT( "Scope / value type / value not supported" ) ); |
|
417 PanicAttrModelL( EPEngSetDataDesC16AsyncNotSupported, KErrNotSupported ); |
|
418 } |
|
419 |
|
420 CleanupStack::Pop(); |
|
421 iAsyncSetHook->Activate(); |
|
422 } |
|
423 |
|
424 |
|
425 // ----------------------------------------------------------------------------- |
|
426 // CPEngPresenceAttrModel::CancelSetDataAsync() |
|
427 // From MPEngPresenceAttrModel |
|
428 // ----------------------------------------------------------------------------- |
|
429 // |
|
430 void CPEngPresenceAttrModel::CancelSetDataAsync() |
|
431 { |
|
432 PENG_DP( D_PENG_LIT( "MPEngPresenceAttrModel2::CancelSetDataAsync() [%08x]" ), |
|
433 iTypeConstructor.iType ); |
|
434 |
|
435 if ( iAsyncSetHook ) |
|
436 { |
|
437 iAsyncSetHook->Cancel(); |
|
438 } |
|
439 } |
|
440 |
|
441 |
|
442 // ----------------------------------------------------------------------------- |
|
443 // CPEngPresenceAttrModel::Extension() |
|
444 // ----------------------------------------------------------------------------- |
|
445 // |
|
446 const MPEngAttrModelExtension2* CPEngPresenceAttrModel::Extension() const |
|
447 { |
|
448 return NULL; |
|
449 } |
|
450 |
|
451 |
|
452 MPEngAttrModelExtension2* CPEngPresenceAttrModel::Extension() |
|
453 { |
|
454 return NULL; |
|
455 } |
|
456 |
|
457 |
|
458 // ----------------------------------------------------------------------------- |
|
459 // CPEngPresenceAttrModel::TypeExtension() |
|
460 // ----------------------------------------------------------------------------- |
|
461 // |
|
462 TAny* CPEngPresenceAttrModel::TypeExtension( TUint32 aType ) |
|
463 { |
|
464 return iTypeImp->TypeExtension( aType ); |
|
465 } |
|
466 |
|
467 |
|
468 // ----------------------------------------------------------------------------- |
|
469 // CPEngPresenceAttrModel::Advanced() |
|
470 // ----------------------------------------------------------------------------- |
|
471 // |
|
472 const MPEngPresenceAdvancedAttrModel2* CPEngPresenceAttrModel::Advanced() const |
|
473 { |
|
474 return this; |
|
475 } |
|
476 |
|
477 MPEngPresenceAdvancedAttrModel2* CPEngPresenceAttrModel::Advanced() |
|
478 { |
|
479 return this; |
|
480 } |
|
481 |
|
482 |
|
483 // ----------------------------------------------------------------------------- |
|
484 // CPEngPresenceAttrModel::CloneLC() |
|
485 // ----------------------------------------------------------------------------- |
|
486 // |
|
487 MPEngPresenceAttrModel2* CPEngPresenceAttrModel::CloneLC() const |
|
488 { |
|
489 MPEngPresenceAdvancedAttrModel2* clone = |
|
490 iTypeConstructor.NewAttributeInstanceLC( EFalse, PresenceID() ); |
|
491 |
|
492 PEngAttributeRequestCodec::CopyModelDataL( *this, *clone ); |
|
493 |
|
494 return clone; |
|
495 } |
|
496 |
|
497 |
|
498 // ----------------------------------------------------------------------------- |
|
499 // CPEngPresenceAttrModel::Close() |
|
500 // ----------------------------------------------------------------------------- |
|
501 // |
|
502 void CPEngPresenceAttrModel::Close() |
|
503 { |
|
504 delete this; |
|
505 } |
|
506 |
|
507 |
|
508 // ----------------------------------------------------------------------------- |
|
509 // CPEngPresenceAttrModel::EncodeToXmlL() |
|
510 // from MPEngPresenceAdvancedAttrModel |
|
511 // ----------------------------------------------------------------------------- |
|
512 // |
|
513 void CPEngPresenceAttrModel::EncodeToXmlL( MPEngXMLSerializer& aSerializer ) const |
|
514 { |
|
515 PENG_DP( D_PENG_LIT( "CPEngPresenceAttrModel::EncodeValueToXmlL() [%08x]" ), |
|
516 iTypeConstructor.iType ); |
|
517 |
|
518 TPtrC8 xmlName; |
|
519 TPtrC8 xmlNameSpace; |
|
520 |
|
521 User::LeaveIfError( iTypeConstructor.GetCurrentXmlNames( xmlName, xmlNameSpace ) ); |
|
522 aSerializer.StartTagL( xmlName ); |
|
523 { |
|
524 aSerializer.StartTagL( KQualifierXMLTag ); |
|
525 { |
|
526 if ( iQualifier ) |
|
527 { |
|
528 aSerializer.RawValueL( KXMLValueTrue ); |
|
529 } |
|
530 else |
|
531 { |
|
532 aSerializer.RawValueL( KXMLValueFalse ); |
|
533 } |
|
534 } |
|
535 aSerializer.EndTagL( KQualifierXMLTag ); |
|
536 |
|
537 if ( iQualifier ) |
|
538 { |
|
539 //Attribute qualifier is TRUE |
|
540 //==>let the derived model to serialize its data |
|
541 iTypeImp->EncodeDataToXmlL( aSerializer ); |
|
542 } |
|
543 } |
|
544 |
|
545 |
|
546 aSerializer.EndTagL( xmlName ); |
|
547 } |
|
548 |
|
549 |
|
550 // ----------------------------------------------------------------------------- |
|
551 // CPEngPresenceAttrModel::DecodeAttributeFromXmlL() |
|
552 // from MPEngPresenceAdvancedAttrModel |
|
553 // ----------------------------------------------------------------------------- |
|
554 // |
|
555 void CPEngPresenceAttrModel::DecodeFromXmlL( MPEngXMLParser& aParser, |
|
556 const TDesC8& aDataBlock ) |
|
557 { |
|
558 PENG_DP( D_PENG_LIT( "CPEngPresenceAttrModel::DecodeValueFromXmlL() [%08x]" ), |
|
559 iTypeConstructor.iType ); |
|
560 |
|
561 iQualifier = ETrue; |
|
562 if ( aParser.DecodeL( aDataBlock, KQualifierXMLTag, EFalse ) ) |
|
563 { |
|
564 if ( aParser.ResultL().CompareF( KXMLValueFalse ) == 0 ) |
|
565 { |
|
566 //Attribute qualifier is FALSE only if it is explicitly |
|
567 //stated so in the XML |
|
568 iQualifier = EFalse; |
|
569 } |
|
570 } |
|
571 |
|
572 if ( iQualifier ) |
|
573 { |
|
574 //Attribute data is updated only if the qualifier was TRUE |
|
575 iTypeImp->DecodeDataFromXmlL( aParser, aDataBlock ); |
|
576 } |
|
577 else |
|
578 { |
|
579 iTypeImp->ResetDataL(); |
|
580 } |
|
581 |
|
582 HandleAttributeUpdatedToNetwork(); |
|
583 } |
|
584 |
|
585 |
|
586 // ----------------------------------------------------------------------------- |
|
587 // CPEngPresenceAttrModel::Storage() |
|
588 // from MPEngPresenceAdvancedAttrModel |
|
589 // ----------------------------------------------------------------------------- |
|
590 // |
|
591 const CPEngPresenceAttrModelStorageProxy& CPEngPresenceAttrModel::Storage() const |
|
592 { |
|
593 return *iStorage; |
|
594 } |
|
595 |
|
596 CPEngPresenceAttrModelStorageProxy& CPEngPresenceAttrModel::Storage() |
|
597 { |
|
598 return *iStorage; |
|
599 } |
|
600 |
|
601 |
|
602 |
|
603 // ----------------------------------------------------------------------------- |
|
604 // CPEngPresenceAttrModel::ExternalizeSize() |
|
605 // from MPEngPresenceAdvancedAttrModel |
|
606 // ----------------------------------------------------------------------------- |
|
607 // |
|
608 TInt CPEngPresenceAttrModel::ExternalizeSize() const |
|
609 { |
|
610 TInt sizeInBytes = 14; |
|
611 // 4 bytes: extension1 |
|
612 // 4 bytes: TypeId |
|
613 // 1 byte: DataSource |
|
614 // 1 byte: Qualifier |
|
615 // 4 bytes: extension2 |
|
616 |
|
617 //And get externalize size from real model.. |
|
618 sizeInBytes = sizeInBytes + iTypeImp->DataExternalizeSize(); |
|
619 |
|
620 return sizeInBytes; |
|
621 } |
|
622 |
|
623 |
|
624 // ----------------------------------------------------------------------------- |
|
625 // CPEngPresenceAttrModel::ExternalizeL() |
|
626 // from MPEngPresenceAdvancedAttrModel |
|
627 // ----------------------------------------------------------------------------- |
|
628 // |
|
629 void CPEngPresenceAttrModel::ExternalizeL( RWriteStream& aStream ) const |
|
630 { |
|
631 aStream.WriteUint32L( 0 ); //Write 32 bit for future extension |
|
632 aStream.WriteUint32L( iTypeConstructor.iType ); |
|
633 aStream.WriteInt8L( iDataSource ); |
|
634 aStream.WriteInt8L( iQualifier ); |
|
635 aStream.WriteInt32L( 0 ); //Write 32 bit for future extension |
|
636 |
|
637 //let model implementation externalize its data.. |
|
638 iTypeImp->ExternalizeDataL( aStream ); |
|
639 } |
|
640 |
|
641 |
|
642 // ----------------------------------------------------------------------------- |
|
643 // CPEngPresenceAttrModel::InternalizeL() |
|
644 // from MPEngPresenceAdvancedAttrModel |
|
645 // ----------------------------------------------------------------------------- |
|
646 // |
|
647 void CPEngPresenceAttrModel::InternalizeL( RReadStream& aStream ) |
|
648 { |
|
649 aStream.ReadUint32L(); //future extension |
|
650 TUint32 interType = aStream.ReadUint32L(); |
|
651 iDataSource = static_cast<TPEngAttrDataSource> ( aStream.ReadInt8L() ); |
|
652 iQualifier = aStream.ReadInt8L(); |
|
653 aStream.ReadUint32L(); //future extension |
|
654 |
|
655 // Check from attribute type that correct type is internalized. |
|
656 __ASSERT_ALWAYS( interType == iTypeConstructor.iType, |
|
657 PanicAttrModelL( EPEngInternalizeMismatch, KErrCorrupt ) ); |
|
658 |
|
659 //Try internalize type specific data. |
|
660 //Reset contents if corrupted |
|
661 TRAPD( err, iTypeImp->InternalizeDataL( aStream ) ); |
|
662 if ( ( err == KErrCorrupt ) || |
|
663 ( err == KErrEof ) ) |
|
664 { |
|
665 iTypeImp->ResetDataL(); |
|
666 } |
|
667 else |
|
668 { |
|
669 User::LeaveIfError( err ); |
|
670 } |
|
671 } |
|
672 |
|
673 |
|
674 // ----------------------------------------------------------------------------- |
|
675 // CPEngPresenceAttrModel::HandleAttributeUpdatedToNetwork() |
|
676 // from MPEngPresenceAdvancedAttrModel |
|
677 // ----------------------------------------------------------------------------- |
|
678 // |
|
679 void CPEngPresenceAttrModel::HandleAttributeUpdatedToNetwork() |
|
680 { |
|
681 iDataSource = EPEngAttrNetwork; |
|
682 } |
|
683 |
|
684 |
|
685 |
|
686 // ----------------------------------------------------------------------------- |
|
687 // CPEngPresenceAttrModel::HandleNetworkSessionStateChangeL() |
|
688 // from MPEngPresenceAdvancedAttrModel |
|
689 // ----------------------------------------------------------------------------- |
|
690 // |
|
691 void CPEngPresenceAttrModel::HandleNetworkSessionStateChangeL( TBool aSessionOpen ) |
|
692 { |
|
693 iTypeImp->HandleNetworkSessionStateChangeL( aSessionOpen ); |
|
694 } |
|
695 |
|
696 |
|
697 |
|
698 // ----------------------------------------------------------------------------- |
|
699 // CPEngPresenceAttrModel::LazyInitAsyncSetHookL() |
|
700 // ----------------------------------------------------------------------------- |
|
701 // |
|
702 void CPEngPresenceAttrModel::LazyInitAsyncSetHookL() |
|
703 { |
|
704 if ( !iAsyncSetHook ) |
|
705 { |
|
706 iAsyncSetHook = new ( ELeave ) CPEngAttrModelAsyncDataSetHook(); |
|
707 } |
|
708 } |
|
709 |
|
710 |
|
711 |
|
712 |
|
713 // End of File |
|
714 |
|
715 |