taskswitcher/server/src/tsserializeddataprovider.cpp
author hgs
Mon, 13 Sep 2010 13:26:33 +0300
changeset 116 305818acdca4
permissions -rw-r--r--
201036
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
116
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents:
diff changeset
     3
* All rights reserved.
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
*
hgs
parents:
diff changeset
     9
* Initial Contributors:
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
*
hgs
parents:
diff changeset
    12
* Contributors:
hgs
parents:
diff changeset
    13
*
hgs
parents:
diff changeset
    14
* Description:
hgs
parents:
diff changeset
    15
*
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
#include <s32mem.h>
hgs
parents:
diff changeset
    18
#include "tsserializeddataprovider.h"
hgs
parents:
diff changeset
    19
#include "tsmodel.h"
hgs
parents:
diff changeset
    20
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    21
/**
hgs
parents:
diff changeset
    22
 * Leaving constructor. 
hgs
parents:
diff changeset
    23
 * @param observer - data observer
hgs
parents:
diff changeset
    24
 */
hgs
parents:
diff changeset
    25
CTsSerializedDataProvider* CTsSerializedDataProvider::NewL(MTsDataObserver &observer)
hgs
parents:
diff changeset
    26
{
hgs
parents:
diff changeset
    27
    return new (ELeave) CTsSerializedDataProvider(observer);
hgs
parents:
diff changeset
    28
    
hgs
parents:
diff changeset
    29
}
hgs
parents:
diff changeset
    30
hgs
parents:
diff changeset
    31
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    32
/**
hgs
parents:
diff changeset
    33
 * Constructor
hgs
parents:
diff changeset
    34
 * @param observer - data observer
hgs
parents:
diff changeset
    35
 */
hgs
parents:
diff changeset
    36
CTsSerializedDataProvider::CTsSerializedDataProvider(MTsDataObserver& observer)
hgs
parents:
diff changeset
    37
:
hgs
parents:
diff changeset
    38
    iObserver(observer)
hgs
parents:
diff changeset
    39
{}
hgs
parents:
diff changeset
    40
hgs
parents:
diff changeset
    41
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    42
/**
hgs
parents:
diff changeset
    43
 * Destructor
hgs
parents:
diff changeset
    44
 */
hgs
parents:
diff changeset
    45
CTsSerializedDataProvider::~CTsSerializedDataProvider()
hgs
parents:
diff changeset
    46
{
hgs
parents:
diff changeset
    47
    iData.Close();
hgs
parents:
diff changeset
    48
}
hgs
parents:
diff changeset
    49
hgs
parents:
diff changeset
    50
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    51
/**
hgs
parents:
diff changeset
    52
 * Interface implementation.
hgs
parents:
diff changeset
    53
 * @see MTsDataProvider::Data()
hgs
parents:
diff changeset
    54
 */
hgs
parents:
diff changeset
    55
const TDesC8& CTsSerializedDataProvider::Data() const
hgs
parents:
diff changeset
    56
{
hgs
parents:
diff changeset
    57
    return iData;
hgs
parents:
diff changeset
    58
}
hgs
parents:
diff changeset
    59
hgs
parents:
diff changeset
    60
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    61
/**
hgs
parents:
diff changeset
    62
 * Interface implementation.
hgs
parents:
diff changeset
    63
 * @see MTsModelObserver::dataChanged(MTsModel &)
hgs
parents:
diff changeset
    64
 */
hgs
parents:
diff changeset
    65
void CTsSerializedDataProvider::DataChanged(MTsModel &model)
hgs
parents:
diff changeset
    66
{
hgs
parents:
diff changeset
    67
    serializeModel(model);
hgs
parents:
diff changeset
    68
}
hgs
parents:
diff changeset
    69
hgs
parents:
diff changeset
    70
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    71
/**
hgs
parents:
diff changeset
    72
 * Serialize source model into internal data storage
hgs
parents:
diff changeset
    73
 * @param src - model
hgs
parents:
diff changeset
    74
 */
hgs
parents:
diff changeset
    75
void CTsSerializedDataProvider::serializeModel(const MTsModel &src)
hgs
parents:
diff changeset
    76
{
hgs
parents:
diff changeset
    77
    TRAPD(errNo, serializeModelL(src));
hgs
parents:
diff changeset
    78
    if(KErrNone == errNo ) {
hgs
parents:
diff changeset
    79
        iObserver.DataChanged();
hgs
parents:
diff changeset
    80
    }
hgs
parents:
diff changeset
    81
}
hgs
parents:
diff changeset
    82
hgs
parents:
diff changeset
    83
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
    84
/**
hgs
parents:
diff changeset
    85
 * Serialize source model into internal data storage. Function can leave.
hgs
parents:
diff changeset
    86
 * @param src - source model
hgs
parents:
diff changeset
    87
 */
hgs
parents:
diff changeset
    88
void CTsSerializedDataProvider::serializeModelL(const MTsModel &src)
hgs
parents:
diff changeset
    89
{
hgs
parents:
diff changeset
    90
    const TInt KExpandSize = 256;
hgs
parents:
diff changeset
    91
    CBufFlat* buf = CBufFlat::NewL(KExpandSize);
hgs
parents:
diff changeset
    92
    CleanupStack::PushL(buf);
hgs
parents:
diff changeset
    93
    RBufWriteStream stream(*buf); 
hgs
parents:
diff changeset
    94
    CleanupClosePushL(stream);
hgs
parents:
diff changeset
    95
    
hgs
parents:
diff changeset
    96
    serializeModelL(stream, src);
hgs
parents:
diff changeset
    97
    
hgs
parents:
diff changeset
    98
    CleanupStack::PopAndDestroy(&stream);
hgs
parents:
diff changeset
    99
    iData.Close();
hgs
parents:
diff changeset
   100
    iData.CreateL(buf->Size());
hgs
parents:
diff changeset
   101
    buf->Read(0, iData, buf->Size());
hgs
parents:
diff changeset
   102
    CleanupStack::PopAndDestroy(buf);
hgs
parents:
diff changeset
   103
}
hgs
parents:
diff changeset
   104
hgs
parents:
diff changeset
   105
// -----------------------------------------------------------------------------
hgs
parents:
diff changeset
   106
/**
hgs
parents:
diff changeset
   107
 * Serialize source model into destination stream. Function can leave.
hgs
parents:
diff changeset
   108
 * @param dst - destination stream
hgs
parents:
diff changeset
   109
 * @param src - source model
hgs
parents:
diff changeset
   110
 */
hgs
parents:
diff changeset
   111
void CTsSerializedDataProvider::serializeModelL(RWriteStream& dst, const MTsModel &src)
hgs
parents:
diff changeset
   112
{
hgs
parents:
diff changeset
   113
    dst.WriteInt32L( src.Count() );
hgs
parents:
diff changeset
   114
    for (TInt iter(0); iter < src.Count(); ++iter) {
hgs
parents:
diff changeset
   115
        dst << src.ItemL( iter );
hgs
parents:
diff changeset
   116
    }
hgs
parents:
diff changeset
   117
}