xdmprotocols/XcapProtocol/XcapAppUsage/XcapPresenceRulesUsage/src/XcapOmaPresRulesUsage.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 02 Feb 2010 01:05:17 +0200
changeset 0 c8caa15ef882
permissions -rw-r--r--
Revision: 201003 Kit: 201005

/*
* Copyright (c) 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:  CXcapOmaPresRulesUsage
*
*/




#include <XdmErrors.h>
#include <XdmDocumentNode.h>
#include "XcapOmaPresRulesUsage.h"

// Used specification
// OMA-TS-Presence_SIMPLE_XDM-V1_0-20060110-C, 10 January 2006
// OMA-TS-Presence_SIMPLE_XDM-V1_0-20060418-C, 18 April 2006

// ----------------------------------------------------
// CXcapOmaPresRulesUsage::CXcapOmaPresRulesUsage
// 
// ----------------------------------------------------
//
CXcapOmaPresRulesUsage::CXcapOmaPresRulesUsage( const CXdmEngine& aXdmEngine ) :
CXcapAppUsage( aXdmEngine ),
iIetfPresRules( NULL ),
iIetfCommonPolicy( NULL ),
iOmaCommonPolicy( NULL )
    {
    }

// ----------------------------------------------------
// CXcapOmaPresRulesUsage::NewL
// 
// ----------------------------------------------------
//
CXcapOmaPresRulesUsage* CXcapOmaPresRulesUsage::NewL( const TXcapAppUsageParams& aParameters )
    {
    CXcapOmaPresRulesUsage* self = new ( ELeave ) CXcapOmaPresRulesUsage( aParameters.iXdmEngine );
    CleanupStack::PushL( self );	// << self
    self->ConstructL();
    CleanupStack::Pop( self );      // >> self
    return self;
    }

// ----------------------------------------------------
// CXcapOmaPresRulesUsage::~CXcapOmaPresRulesUsage
// 
// ----------------------------------------------------
//
CXcapOmaPresRulesUsage::~CXcapOmaPresRulesUsage()
    {
    delete iIetfPresRules;
    delete iIetfCommonPolicy;
    delete iOmaCommonPolicy;
    }
        
// ----------------------------------------------------
// CXcapOmaPresRulesUsage::ConstructL
// 
// ----------------------------------------------------
//
void CXcapOmaPresRulesUsage::ConstructL()
    {
    iIetfPresRules = CXcapAppUsage::NewL( iXdmEngine, KXdmIetfPresRulesUsageUid );
    iIetfCommonPolicy = CXcapAppUsage::NewL( iXdmEngine, KXdmIetfCommonPolicyUsageUid );
    iOmaCommonPolicy = CXcapAppUsage::NewL( iXdmEngine, KXdmOmaCommonPolicyUsageUid );
    }

// ----------------------------------------------------
// CXcapOmaPresRulesUsage::AUID
// 
// ----------------------------------------------------
//
TPtrC8 CXcapOmaPresRulesUsage::AUID() const
    {
    return TPtrC8( KXdmOmaPresRulesUsageAUID );
    }
                
// ----------------------------------------------------
// CXcapOmaPresRulesUsage::ContentType
// 
// ----------------------------------------------------
//
TPtrC8 CXcapOmaPresRulesUsage::ContentType() const
    {
    return TPtrC8( KXdmOmaPresRulesUsageContType );
    }
    
// ----------------------------------------------------
// CXcapOmaPresRulesUsage::DefaultNamespace
// 
// ----------------------------------------------------
//
TPtrC8 CXcapOmaPresRulesUsage::DefaultNamespace() const
    {
    //return TPtrC8( KXdmOmaPresRulesNamespace );
    // NOTE the default namespace is IetfCommonPolicy
    return TPtrC8( KXdmIetfCommonPolicyNamespace );
    }    

// ----------------------------------------------------
// CXcapOmaPresRulesUsage::ValidateL
// 
// ----------------------------------------------------
//
TBool CXcapOmaPresRulesUsage::ValidateNodeL( CXdmDocumentNode& aXdmNode )
    {
    // This method is called by base class for each element
    // in document, here we have to declare every element, check element 
    // datatype, restrictions for values and also do all checking that concerns  
    // the structure of the element. If the datatype is some of
    // the common datatypes defined in xcapappusage.h, the node
    // can pe passed to the base class for value validation.
    // If the node belongs to this namespace, the return value
    // should be true, false otherwise.

    TBool found ( EFalse );   
    TDataType dataType ( EDataTypeUndefined );
    TPtrC element = aXdmNode.NodeName();
     
    // <provide-willigness>
    if ( Match( element, KXdmProvideWillingness ) )
        {
        dataType = EDataTypeBoolean;
        found = ETrue;
        }
    // <provide-network-availability>
    else if ( Match( element, KXdmProvideNetworkAvailability ) )
        {
        dataType = EDataTypeBoolean;
        found = ETrue;
        }
    // <provide-session-participation>
    else if ( Match( element, KXdmProvideSessionParticipation ) )
        {
        dataType = EDataTypeBoolean;
        found = ETrue;
        }
    // <provide-registration-state>
    else if ( Match( element, KXdmProvideRegistrationState ) )
        {
        dataType = EDataTypeBoolean;
        found = ETrue;
        }
    // <provide-barring-state>
    else if ( Match( element, KXdmProvideBarringState ) )
        {
        dataType = EDataTypeBoolean;
        found = ETrue;
        }
    // <provide-geopriv>
    else if ( Match( element, KXdmProvideGeopriv ) )
        {
        // value must be "false" or "full"
        // 0 (false), 1 (full)
        TPtrC8 data = aXdmNode.LeafNodeContent();
        if ( data.CompareF( KXdmFalse )
             && data.CompareF( KXdmFull ) )
            {
            LeaveWithErrorL( KXcapErrorEnumerationRule );
            }
        found = ETrue;
        }
    // <service-id>
    else if ( Match( element, KXdmServiceId ) )
        {
        dataType = EDataTypeString;
        found = ETrue;
        }
        
    // NOTE the default namespace is IetfCommonPolicy
    if ( found )
        {
        SetPrefixL( aXdmNode, KXdmOmaPresRulesNsPrefix );
        }

    // urn:ietf:params:xml:ns:pres-rules
    // urn:ietf:params:xml:ns:common-policy
    // urn:oma:xml:xdm:common-policy
    else
        {
        // urn:ietf:params:xml:ns:common-policy
        found = iIetfCommonPolicy->ValidateNodeL( aXdmNode );
        if ( found )
            {
            // this means that this belongs to urn:ietf:params:xml:ns:common-policy,
            // there may be the prefix already
            // NOTE the default namespace is IetfCommonPolicy
                SetPrefixL( aXdmNode, KNullDesC8 );
                }
        else
            {
            // urn:ietf:params:xml:ns:pres-rules
            found = iIetfPresRules->ValidateNodeL( aXdmNode );
            if ( found )
                {
                SetPrefixL( aXdmNode, KXdmIetfPresRulesNsPrefix );
                }
            else
                {
                // urn:oma:xml:xdm:common-policy
                found = iOmaCommonPolicy->ValidateNodeL( aXdmNode );
                if ( found )
                    {
                    SetPrefixL( aXdmNode, KXdmOmaCommonPolicyNsPrefix );
                    }
                }
            }
        }
        
    if ( dataType != EDataTypeUndefined )
        {
        // pass to the base class for data validation
        ValidateDataL( dataType, aXdmNode );
        }
    return found;
    }

// ----------------------------------------------------
// CXcapOmaPresRulesUsage::ValidateAttributeL
// 
// ----------------------------------------------------
//
void CXcapOmaPresRulesUsage::ValidateAttributeL( const CXdmNodeAttribute& aXdmNodeAttr )
    {
    // This method is called by base class for each attribute
    // in document, here we have to define data types
    // for attributes, and pass them to the base class
    // for the actual data checking.
    
    // there aren't any attributes in
    // oma presence rules usage schema
    // urn:ietf:params:xml:ns:pres-rules
    // urn:ietf:params:xml:ns:common-policy
    iIetfPresRules->ValidateAttributeL( aXdmNodeAttr );
    }   
                         
// ----------------------------------------------------
// CXcapOmaPresRulesUsage::AddNamespaceInformationL
// 
// ----------------------------------------------------
//
void CXcapOmaPresRulesUsage::AddNamespaceInformationL( CXdmDocument& aXdmDocument )
    {
    // NOTE the default namespace is IetfCommonPolicy
    aXdmDocument.AppendNamespaceL( KXdmIetfCommonPolicyNamespace, KNullDesC8 );
    aXdmDocument.AppendNamespaceL( KXdmOmaCommonPolicyNamespace, KXdmOmaCommonPolicyNsPrefix );
    aXdmDocument.AppendNamespaceL( KXdmOmaPresRulesNamespace, KXdmOmaPresRulesNsPrefix );
    aXdmDocument.AppendNamespaceL( KXdmIetfPresRulesNamespace, KXdmIetfPresRulesNsPrefix );
/*    aXdmDocument.AppendNamespaceL( KXdmOmaPresRulesNamespace, KNullDesC8 );
    aXdmDocument.AppendNamespaceL( KXdmIetfPresRulesNamespace, KXdmIetfPresRulesNsPrefix );
    aXdmDocument.AppendNamespaceL( KXdmIetfCommonPolicyNamespace, KXdmIetfCommonPolicyNsPrefix );*/
    }

// End of File