mpx/commonframework/common/src/mpxsubscription.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 17 Dec 2009 08:55:47 +0200
changeset 0 a2952bb97e68
permissions -rw-r--r--
Revision: 200949 Kit: 200951

/*
* Copyright (c) 2007 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:  MPX subscription class
*
*/


// INCLUDES
#include <mpxlog.h>
#include "mpxmediaarray.h"
#include "mpxsubscriptiondefs.h"
#include "mpxsubscription.h"

// ============================ MEMBER FUNCTIONS ==============================

// ----------------------------------------------------------------------------
// CMPXSubscription::NewL
// ----------------------------------------------------------------------------
//
EXPORT_C CMPXSubscription* CMPXSubscription::NewL()
    {
    CMPXSubscription* self = static_cast<CMPXSubscription*>(CMPXMedia::NewL());
    CleanupStack::PushL(self);
    self->InitializeL();
    CleanupStack::Pop(self); 
    return self; 
    }

// ----------------------------------------------------------------------------
// CMPXSubscription::NewL
// ----------------------------------------------------------------------------
//
EXPORT_C CMPXSubscription* CMPXSubscription::NewL(
    CMPXMediaArray& aMediaArray)
    {
    CMPXSubscription* self = static_cast<CMPXSubscription*>(CMPXMedia::NewL());
    CleanupStack::PushL(self);
    self->InitializeL(aMediaArray);
    CleanupStack::Pop(self); 
    return self; 
    }

// ----------------------------------------------------------------------------
// CMPXSubscription::AddItemL
// ----------------------------------------------------------------------------
//
EXPORT_C void CMPXSubscription::AddItemL(
    const CMPXSubscriptionItem& aItem)
    {
    // append the subscription item to the media array
    CMPXMediaArray* items = Value<CMPXMediaArray>(KMPXSubscriptionItems);
    User::LeaveIfNull(items);
    items->AppendL(aItem);
    }

// ----------------------------------------------------------------------------
// CMPXSubscription::Items
// ----------------------------------------------------------------------------
//
EXPORT_C const CMPXMediaArray* CMPXSubscription::ItemsL() const
    {
    MPX_ASSERT(IsSupported(KMPXSubscriptionItems));
    CMPXMediaArray* array = Value<CMPXMediaArray>(KMPXSubscriptionItems);
    User::LeaveIfNull(array);
    return array;
    }

// ----------------------------------------------------------------------------
// CMPXSubscription::operator==
// ----------------------------------------------------------------------------
//
EXPORT_C TBool CMPXSubscription::operator==(
    const CMPXSubscription& aSubscription) const
    {
    TBool match(ETrue);
 
    const CMPXMediaArray* array1 = aSubscription.ItemsL();
    const CMPXMediaArray* array2 = ItemsL();

    TInt count(array1->Count());
    if (count != array2->Count())
        {
        match = EFalse;
        }
    else
        {
        for (TInt index = 0; (index < count) && match; ++index)
            {
            CMPXSubscriptionItem* subItem1( array1->AtL(index) );
            CMPXSubscriptionItem* subItem2( array2->AtL(index) );
 
            TInt attrCount(subItem1->Count());
            if (attrCount != subItem2->Count())
                {
                match = EFalse;
                break;
                }
 
            for (TInt attrIndex = 0; attrIndex < attrCount; ++attrIndex) 
                {
                const TMPXAttribute& attr( subItem1->Attribute( attrIndex ));
                if ( !subItem1->Match( *subItem2, attr ) )
                    {
                    match = EFalse;
                    break;
                    }
                }
            }
        }
 
    return match; 
    }

// ----------------------------------------------------------------------------
// CMPXSubscription::InitializeL
// ----------------------------------------------------------------------------
//
void CMPXSubscription::InitializeL()
    {
    // create an empty subscription item array
    CMPXMediaArray* dummy = CMPXMediaArray::NewL();
    CleanupStack::PushL(dummy); 
    SetCObjectValueL(KMPXSubscriptionItems, dummy); 
    CleanupStack::PopAndDestroy(dummy);
    }

// ----------------------------------------------------------------------------
// CMPXSubscription::InitializeL
// ----------------------------------------------------------------------------
//
void CMPXSubscription::InitializeL(
    CMPXMediaArray& aMediaArray)
    {
    SetCObjectValueL(KMPXSubscriptionItems, &aMediaArray); 
    }

// ----------------------------------------------------------------------------
// CMPXSubscription::DebugPrint
// ----------------------------------------------------------------------------
//
void CMPXSubscription::DebugPrint() const
    {
    const CMPXMediaArray* array(NULL);
    TRAPD(err,  array = ItemsL());
    if (KErrNone == err)
        {
        MPX_ASSERT(array);
        TInt count(array->Count());
        for (TInt index = 0; index < count; ++index)
            {
            CMPXSubscriptionItem* subItem = (*array)[index];
            if (subItem)
                {
                TInt attrCount(subItem->Count());
 
                for (TInt attrIndex = 0; attrIndex < attrCount; ++attrIndex)
                    {
                    const TMPXAttribute& attr = subItem->Attribute(attrIndex);
                    MPX_DEBUG3("Attr: %x, %x", attr.ContentId(), attr.AttributeId());
                    }
                }
            else
                {
                break;
                }
            }
        }
    }

// End of File