supl/locationomasuplprotocolhandler/asnconverterpluginapi/src/epos_comasuplreport.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Fri, 19 Feb 2010 23:14:27 +0200
branchRCL_3
changeset 4 42de37ce7ce4
parent 0 667063e416a2
child 20 2b4ea9893b66
permissions -rw-r--r--
Revision: 201003 Kit: 201007

/*
* Copyright (c) 2002-2005 Nokia Corporation and/or its subsidiary(-ies). 
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
* which accompanies this distribution, and is available
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
*
* Initial Contributors:
* Nokia Corporation - initial contribution.
*
* Contributors:
*
* Description:  Header file for supl report message
*
*/


#include "epos_comasuplreport.h"
#include "epos_comasuplstartver2.h"
#include "epos_suplconstants.h"
#include "epos_comasuplresponse.h"
#include "lbs/epos_eomasuplposerrors.h"

const TInt KSessionListShift = 3;
const TInt KSetCapsShift = 2;
const TInt KRepDataShift = 1;

// -----------------------------------------------------------------------------
// COMASuplPositionData::COMASuplPositionData 
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
COMASuplPositionData::COMASuplPositionData()
    {   
    // No implementation required
    }
// -----------------------------------------------------------------------------
// COMASuplPositionData::~COMASuplPositionData
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
EXPORT_C COMASuplPositionData::~COMASuplPositionData()
    {
    if(iPosition)
        {
        delete iPosition;
        iPosition = NULL;
        }
    }
// -----------------------------------------------------------------------------
// COMASuplPositionData::NewLC()
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
EXPORT_C COMASuplPositionData* COMASuplPositionData::NewLC()
    {
    COMASuplPositionData* self = new (ELeave)COMASuplPositionData();
    CleanupStack::PushL(self);
    self->ConstructL();
    return self;
    }
// -----------------------------------------------------------------------------
// COMASuplPositionData::NewL()
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
EXPORT_C COMASuplPositionData* COMASuplPositionData::NewL()
    {
    COMASuplPositionData* self=COMASuplPositionData::NewLC();
    CleanupStack::Pop(self); // self;
    return self;
    }
// -----------------------------------------------------------------------------
// COMASuplPositionData::ConstructL()
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
void COMASuplPositionData::ConstructL()
    {

    }
// -----------------------------------------------------------------------------
// COMASuplPositionData::SetPosition()
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
EXPORT_C void COMASuplPositionData::SetPosition(COMASuplPosition* aPosition)
    {
    if(iPosition)
        {
        delete iPosition;
        iPosition = NULL;
        }
    iPosition = aPosition; 
    }

// -----------------------------------------------------------------------------
// COMASuplPositionData::SetPosMethod()
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
EXPORT_C void COMASuplPositionData::SetPosMethod(const TOMASuplPosMethod aPosMethod)
    {
    iPosMethod = aPosMethod;
    }

// -----------------------------------------------------------------------------
// COMASuplPositionData::GetPosition()
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//

EXPORT_C void COMASuplPositionData::GetPosition(COMASuplPosition*& aPosition)const
    {
    aPosition = iPosition;
    }
// -----------------------------------------------------------------------------
// COMASuplPositionData::GetPosMethod()
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
EXPORT_C void COMASuplPositionData::GetPosMethod(TOMASuplPosMethod& aPosMethod)const
    {
    aPosMethod = iPosMethod;
    }


// -----------------------------------------------------------------------------
// COMASuplPositionData::CloneL()
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
EXPORT_C COMASuplPositionData* COMASuplPositionData::CloneL()
    {
    COMASuplPositionData* positionDataToRet = COMASuplPositionData::NewL();
    positionDataToRet->SetPosMethod(iPosMethod);
    positionDataToRet->SetPosition(static_cast<COMASuplPosition*> (iPosition->CloneL()));

    return positionDataToRet;
    }
// -----------------------------------------------------------------------------
// COMASuplReportData::~COMASuplReportData()
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
EXPORT_C COMASuplReportData::~COMASuplReportData()
    {
    if(iPositionData)
        {
        delete iPositionData;
        iPositionData = NULL;
        }
    if(iMultipleLocIds)
        {
        delete iMultipleLocIds;
        iMultipleLocIds = NULL;
        }
    }

// -----------------------------------------------------------------------------
// COMASuplReportData::NewLC
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
EXPORT_C COMASuplReportData* COMASuplReportData::NewLC()
    {
    COMASuplReportData* self = new (ELeave)COMASuplReportData();
    CleanupStack::PushL(self);
    self->ConstructL();
    return self;
    }
// -----------------------------------------------------------------------------
// COMASuplReportData::NewL
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
EXPORT_C COMASuplReportData* COMASuplReportData::NewL()
    {
    COMASuplReportData* self=COMASuplReportData::NewLC();
    CleanupStack::Pop(self); // self;
    return self;
    }
// -----------------------------------------------------------------------------
// COMASuplReportData::ConstructL
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
void COMASuplReportData::ConstructL()
    {

    }

// -----------------------------------------------------------------------------
// COMASuplReportData::COMASuplReportData
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
COMASuplReportData::COMASuplReportData()
    {
    //no implementation
    }

// -----------------------------------------------------------------------------
// COMASuplReportData::SetPosData
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
EXPORT_C void COMASuplReportData::SetPosData(COMASuplPositionData* aPositionData)
    {
    if(iPositionData)
        {
        delete iPositionData;
        iPositionData = NULL;
        }
    iPositionData = aPositionData;
    }
// -----------------------------------------------------------------------------
// COMASuplReportData::SetTimeStamp
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
EXPORT_C void COMASuplReportData::SetTimeStamp(const TOMASuplTimeStamp aTimeStamp)
    {
    iTimeStamp = aTimeStamp;
    }
// -----------------------------------------------------------------------------
// COMASuplReportData::SetResultCode
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
EXPORT_C void COMASuplReportData::SetResultCode(const TOMASuplReportDataResultCode aResultCode)
    {
    iResultCode = aResultCode;
    }
// -----------------------------------------------------------------------------
// COMASuplReportData::SetMutipleLocId
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
EXPORT_C void COMASuplReportData::SetMutipleLocId(COMASuplMultipleLocIds* aMultipleLocIds)
    {
    if(iMultipleLocIds)
        {
        delete iMultipleLocIds;
        iMultipleLocIds = NULL;
        }
    iMultipleLocIds = aMultipleLocIds;
    }

// -----------------------------------------------------------------------------
// COMASuplReportData::GetPosData
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
EXPORT_C void COMASuplReportData::GetPosData(COMASuplPositionData*& aPositionData)const
    {
    aPositionData = iPositionData;
    }
    
// -----------------------------------------------------------------------------
// COMASuplReportData::GetTimeStamp
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
EXPORT_C void COMASuplReportData::GetTimeStamp(TOMASuplTimeStamp& aTimeStamp)const
    {
    aTimeStamp = iTimeStamp;
    }
// -----------------------------------------------------------------------------
// COMASuplReportData::GetResultCode
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
EXPORT_C void COMASuplReportData::GetResultCode(COMASuplReportData::TOMASuplReportDataResultCode& aResultCode)const
    {
    aResultCode = iResultCode;
    }
// -----------------------------------------------------------------------------
// COMASuplReportData::GetMutipleLocId
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
EXPORT_C void COMASuplReportData::GetMutipleLocId(COMASuplMultipleLocIds*& aMultipleLocIds)const
    {
    aMultipleLocIds = iMultipleLocIds;
    }
// -----------------------------------------------------------------------------
// COMASuplReportData::CloneL
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
EXPORT_C COMASuplReportData* COMASuplReportData::CloneL()
    {
    COMASuplReportData* repDataToRet = COMASuplReportData::NewL();
    repDataToRet->SetMutipleLocId(iMultipleLocIds->CloneL());
    repDataToRet->SetResultCode(iResultCode);
    repDataToRet->SetTimeStamp(iTimeStamp);
    repDataToRet->SetPosData(iPositionData->CloneL());
    return repDataToRet;
    }
// -----------------------------------------------------------------------------
// COMASuplReport::COMASuplReport
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
EXPORT_C COMASuplReport::COMASuplReport()
    {
    // No implementation required
    }
// -----------------------------------------------------------------------------
// COMASuplReport::~COMASuplReport
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
EXPORT_C COMASuplReport::~COMASuplReport()
    {
       
    if(iSETCapabilities)
        {
        delete iSETCapabilities;
        iSETCapabilities = NULL;
        }
    iSessionList.ResetAndDestroy();
    iReportDataList.ResetAndDestroy();
    }
// -----------------------------------------------------------------------------
// COMASuplReport::NewLC()
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
EXPORT_C COMASuplReport* COMASuplReport::NewLC()
    {
    COMASuplReport* self = new (ELeave)COMASuplReport();
    CleanupStack::PushL(self);
    self->ConstructL();
    return self;
    }
// -----------------------------------------------------------------------------
// COMASuplReport::NewL()
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
EXPORT_C COMASuplReport* COMASuplReport::NewL()
    {
    COMASuplReport* self=COMASuplReport::NewLC();
    CleanupStack::Pop(self); // self;
    return self;
    }

// -----------------------------------------------------------------------------
// COMASuplReport::ConstructL()
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
void COMASuplReport::ConstructL()
    {
    iOptionalMask = 0;
       
    SetMessageType(COMASuplAsnMessageBase::ESUPL_REPORT);
    }

// -----------------------------------------------------------------------------
// COMASuplReport::Clone() 
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//              
EXPORT_C void COMASuplReport::Clone(const COMASuplAsnMessageBase* aReport,TInt& aErrorCode)
    {

    TRAP(aErrorCode, CloneBaseL(aReport,aErrorCode));
    COMASuplReport* reportToClone = (COMASuplReport*)aReport;
    
    RPointerArray<COMASuplSessionID> sessionList;
    /* SetCapabilities*/
    COMASuplSETCapabilitiesVer2* sETCapabilities = NULL; 
    RPointerArray<COMASuplReportData> reportDataList;
    //ver field/ of Supl_end
    TBuf8<KVer> ver;

    reportToClone->GetReportDataList(reportDataList);
    
    for(TInt reportListIter = 0; reportListIter < reportDataList.Count();reportListIter++)
        {
        TRAP(aErrorCode,(iReportDataList.Append(reportDataList[reportListIter]->CloneL())));
        }
        
    //set the optional mask to indicate report data list is set
    iOptionalMask |= 1<<KRepDataShift;
    
    reportToClone->GetSetCapabilities(sETCapabilities);
    if(sETCapabilities) 
    	{
		TRAP(aErrorCode,SetSetCapabilities(sETCapabilities->CloneL()));
    	}
    	
    reportToClone->GetVer(ver);
    SetVer(ver);
    
    reportToClone->GetSessionList(sessionList);
   
    for(TInt count = 0; count < sessionList.Count();count++)
        {
        TRAP(aErrorCode,iSessionList.Append(sessionList[count]->CloneL()));
        } 
        
    iOptionalMask |= KSessionListShift;
    
    sessionList.Close();
    reportDataList.Close();
    
    
    }

/*
 * Getter method for Session List
 */
EXPORT_C TInt COMASuplReport::GetSessionList(RPointerArray<COMASuplSessionID>& aSessionList)const
    {
    if(iOptionalMask & (1<<KSessionListShift))
        {
        for(TInt count = 0; count < iSessionList.Count();count++)
            {
            aSessionList.Append(iSessionList[count]);
            }
        return KErrNone;
        }
    else
        return KErrOMASuplParamNotSet;
    }

/*
 * Getter method for Session List
 */
EXPORT_C TInt COMASuplReport::GetSetCapabilities(COMASuplSETCapabilitiesVer2*& aSETCapabilities)const
    {
    if(iOptionalMask & (1<<KSetCapsShift))
        {
        aSETCapabilities = iSETCapabilities;
        return KErrNone;
        }
    else
        return KErrOMASuplParamNotSet;
    }

/*
 * Getter method for Session List
 */
EXPORT_C TInt COMASuplReport::GetReportDataList(RPointerArray<COMASuplReportData>& aReportDataList)const
    {
    if(iOptionalMask & (1<<KRepDataShift))
        {
        for(TInt count = 0; count < iReportDataList.Count();count++)
            {
            aReportDataList.Append(iReportDataList[count]);
            }
        return KErrNone;
        }
    else
        return KErrOMASuplParamNotSet;
    }
/*
 * getter method for version
 */
EXPORT_C TInt COMASuplReport::GetVer(TDes8& aVer)const
    {
    if(iOptionalMask & (1))
        {
        if(aVer.MaxLength() >= iVer.Length())
            {
            aVer = iVer;
            return KErrNone;
            }
        return KErrArgument;
        }
    else
        return KErrOMASuplParamNotSet;
    }
/*
 * Getter method for Session List
 */
EXPORT_C void COMASuplReport::SetSessionList(const RPointerArray<COMASuplSessionID>& aSessionList)
    {
    iSessionList.Reset();
    iOptionalMask |= 1<<KSessionListShift;
    for(TInt count = 0; count < aSessionList.Count();count++)
        {
        iSessionList.Append(aSessionList[count]);
        }  
    }
/*
 * Getter method for Set Capabilities
 */
EXPORT_C void COMASuplReport::SetSetCapabilities(COMASuplSETCapabilitiesVer2* aSETCapabilities)
    {
    if(aSETCapabilities)
        {
        iOptionalMask |= 1<<KSetCapsShift;
        iSETCapabilities = aSETCapabilities;
        }
    }
/*
 * Getter method for Report Data List
 */
EXPORT_C void COMASuplReport::SetReportDataList(const RPointerArray<COMASuplReportData>& aReportDataList)
    {
    iReportDataList.Reset();
    iOptionalMask |= 1<<KRepDataShift;
    for(TInt count = 0; count < aReportDataList.Count();count++)
        {
        iReportDataList.Append(aReportDataList[count]);
        }        
    }

/*
 * Getter method for Version
 */
EXPORT_C void COMASuplReport::SetVer(const TDesC8& aVer)
    {
    if(aVer.Length() <= iVer.MaxLength())
        {
        iOptionalMask |= 1;
        iVer = aVer;
        }
    }