xdmprotocols/XcapProtocol/XcapAppUsage/XcapPresenceRulesUsage/src/XcapOmaPresRulesUsage.cpp
branchRCL_3
changeset 18 fbd2e7cec7ef
parent 0 c8caa15ef882
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/xdmprotocols/XcapProtocol/XcapAppUsage/XcapPresenceRulesUsage/src/XcapOmaPresRulesUsage.cpp	Wed Sep 01 12:23:14 2010 +0100
@@ -0,0 +1,267 @@
+/*
+* 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
+