xdmprotocols/XcapProtocol/XcapAppUsage/XcapPocGroupUsage/src/XcapPocGroupUsage.cpp
changeset 0 c8caa15ef882
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/xdmprotocols/XcapProtocol/XcapAppUsage/XcapPocGroupUsage/src/XcapPocGroupUsage.cpp	Tue Feb 02 01:05:17 2010 +0200
@@ -0,0 +1,330 @@
+/*
+* 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:  CXcapPocGroupUsage
+*
+*/
+
+
+
+
+#include <XdmErrors.h>
+#include <XdmDocumentNode.h>
+#include <XdmNodeAttribute.h>
+#include "XcapPocGroupUsage.h"
+
+
+
+// Used specification
+// OMA-TS-PoC_XDM-V1_0-20060609-A, 09 June 2006
+// ----------------------------------------------------
+// CXcapPocGroupUsage::CXcapPocGroupUsage
+// 
+// ----------------------------------------------------
+//
+CXcapPocGroupUsage::CXcapPocGroupUsage( const CXdmEngine& aXdmEngine ) :
+CXcapAppUsage( aXdmEngine ),
+iIetfCommonPolicies( NULL ),
+iOmaCommonPolicies( NULL ),
+iResourceLists( NULL )
+    {
+    }
+
+// ----------------------------------------------------
+// CXcapPocGroupUsage::NewL
+// 
+// ----------------------------------------------------
+//
+CXcapPocGroupUsage* CXcapPocGroupUsage::NewL( const TXcapAppUsageParams& aParameters )
+    {
+    CXcapPocGroupUsage* self = new ( ELeave ) CXcapPocGroupUsage( aParameters.iXdmEngine );
+    CleanupStack::PushL( self );    // << self
+    self->ConstructL();
+    CleanupStack::Pop( self );      // >> self
+    return self;
+    }
+
+// ----------------------------------------------------
+// CXcapPocGroupUsage::~CXcapPocGroupUsage
+// 
+// ----------------------------------------------------
+//
+CXcapPocGroupUsage::~CXcapPocGroupUsage()
+    {
+    delete iIetfCommonPolicies;
+    delete iOmaCommonPolicies;
+    delete iResourceLists;
+    }
+        
+// ----------------------------------------------------
+// CXcapPocGroupUsage::ConstructL
+// 
+// ----------------------------------------------------
+//
+void CXcapPocGroupUsage::ConstructL()
+    {
+    iIetfCommonPolicies = CXcapAppUsage::NewL( iXdmEngine, EXdmIetfCommonPolicy );
+    iOmaCommonPolicies = CXcapAppUsage::NewL( iXdmEngine, EXdmOmaCommonPolicy );
+    iResourceLists = CXcapAppUsage::NewL( iXdmEngine, EXdmResourceLists );
+    }
+
+// ----------------------------------------------------
+// CXcapPocGroupUsage::AUID
+// 
+// ----------------------------------------------------
+//
+TPtrC8 CXcapPocGroupUsage::AUID() const
+    {
+    return TPtrC8( KXdmPocGroupUsageAUID );
+    }
+
+// ----------------------------------------------------
+// CXcapPocGroupUsage::ContentType
+// 
+// ----------------------------------------------------
+//
+TPtrC8 CXcapPocGroupUsage::ContentType() const
+    {
+    return TPtrC8( KXdmPocGroupUsageContType );
+    }
+
+// ----------------------------------------------------
+// CXcapPocGroupUsage::DefaultNamespace
+// 
+// ----------------------------------------------------
+//
+TPtrC8 CXcapPocGroupUsage::DefaultNamespace() const
+    {
+    return TPtrC8( KXdmPocGroupNamespace );
+    }   
+    
+// ----------------------------------------------------
+// CXcapPocGroupUsage::ValidateNodeL
+// 
+// ----------------------------------------------------
+//
+TBool CXcapPocGroupUsage::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();
+            
+    // <group> 
+    if ( Match( element, KXdmGroup ) )
+        {
+        // no other elements than <list-service>
+        TInt count( aXdmNode.NodeCount() );
+        for ( TInt i(0); i < count; i++ )
+            {
+            if ( !Match( aXdmNode.ChileNode(i)->NodeName(), KXdmListService ) )
+                {
+                LeaveWithErrorL( KXcapErrorSchemaViolation );   
+                }
+            }
+        found = ETrue;
+        }           
+    // <list-service>
+    else if ( Match( element, KXdmListService ) )
+        {
+        // required attribute uri
+        if ( !aXdmNode.HasAttribute( KXdmUri ) )
+            {
+            LeaveWithErrorL( KXcapErrorMissingRequiredAttribute );
+            }
+        found = ETrue;
+        }
+    // <display-name>   
+    else if ( Match( element, KXdmDisplayName ) )
+        {
+        CXdmDocumentNode* parent = aXdmNode.Parent();
+        if ( parent && !parent->NodeName().CompareF( KXdmEntry ) )
+            {
+            found = iResourceLists->ValidateNodeL( aXdmNode );	
+            if ( found )
+            	{
+            	SetPrefixL( aXdmNode, KXdmResourceListsNsPrefix );  
+            	}
+            }
+        else
+            {
+        dataType = EDataTypeString;
+        found = ETrue;
+        }
+        }
+    // <invite-members>     
+    else if ( Match( element, KXdmInviteMembers ) )
+        {
+        dataType = EDataTypeBoolean;
+        found = ETrue;
+        }
+    // <max-participant-count>
+    else if ( Match( element, KXdmMaxParticipantCount ) )
+        {
+        dataType = EDataTypeNonNegativeInteger;
+        found = ETrue;
+        }
+    // <is-list-member>
+    else if ( Match( element, KXdmIsListMember ) )
+        {
+        // dataType = EDataTypeBoolean; // OMA-TS-PoC_XDM-V1_0-20050317-C, 17 March 2005
+        // changed 4-Nov-2005 PoC XDM
+        dataType = EDataTypeEmpty;
+        found = ETrue;
+        }   
+    // <allow-conference-state> 
+    else if ( Match( element, KXdmAllowConfState ) )
+        {
+        dataType = EDataTypeBoolean;
+        found = ETrue;
+        }
+    // <allow-invite-users-dynamically>
+    else if ( Match( element, KXdmAllowInvUsersDyn ) )
+        {
+        dataType = EDataTypeBoolean;
+        found = ETrue;
+        }
+    // <join-handling> 
+    else if ( Match( element, KXdmJoinHandling ) )
+        {
+        // OMA-TS-PoC_XDM-V1_0-20050317-C, 17 March 2005
+        // the value must be "allow" or "block"
+        // 0 (block) and 1 (allow)
+        /* TPtrC8 data = aXdmNode.LeafNodeContent();
+        if ( data.CompareF( KXdmAllow )
+             && data.CompareF( KXdmBlock ) )
+            {
+            LeaveWithErrorL( KXcapErrorEnumerationRule );
+            }
+        */
+        // changed OMA-TS-PoC_XDM-V1_0-20060127-C, 27 January 2006
+        dataType = EDataTypeBoolean;
+        found = ETrue;
+        }
+    // <allow-initiate-conference>
+    else if ( Match( element, KXdmAllowInitiateConf ) )
+        {
+        dataType = EDataTypeBoolean;
+        found = ETrue;
+        }
+    // <allow-anonymity>
+    else if ( Match( element, KXdmAllowAnonymity ) )
+        {
+        dataType = EDataTypeBoolean;
+        found = ETrue;
+        }
+    // <is-key-participant>
+    else if ( Match( element, KXdmIsKeyParticipant ) )
+        {
+        dataType = EDataTypeBoolean;
+        found = ETrue;
+        }
+    // <external> 
+    // type = rl:externalType from urn:ietf:params:xml:ns:resource-lists 
+    // pass to the appropriate usage for validation
+    // but use default namespace
+    else if ( Match( element, KXdmExternal ) )
+        {
+        found = iResourceLists->ValidateNodeL( aXdmNode );
+        }
+    // <entry> 
+    // type = rl:entryType from urn:ietf:params:xml:ns:resource-lists 
+    // pass to the appropriate usage for validation
+    // but use default namespace
+    else if ( Match( element, KXdmEntry ) )    
+        {
+        found = iResourceLists->ValidateNodeL( aXdmNode );
+        }
+
+    // urn:ietf:params:xml:ns:common-policy
+    if ( !found )
+        {
+        found = iIetfCommonPolicies->ValidateNodeL( aXdmNode );
+        if ( found )
+            {
+            SetPrefixL( aXdmNode, KXdmIetfCommonPolicyNsPrefix );  
+            }
+        }
+    // urn:oma:params:xml:ns:common-policy
+    if ( !found )
+        {
+        found = iOmaCommonPolicies->ValidateNodeL( aXdmNode );
+        if ( found )
+            {
+            SetPrefixL( aXdmNode, KXdmOmaCommonPolicyNsPrefix );   
+            }
+        }
+        
+    // if the node is some of the basic types,
+    // pass it to the base class for data validation
+    if ( dataType != EDataTypeUndefined )
+        {
+        ValidateDataL( dataType, aXdmNode );
+        }
+    return found;   
+    }
+
+// ----------------------------------------------------
+// CXcapPocGroupUsage::ValidateAttributeL
+// 
+// ----------------------------------------------------
+//
+void CXcapPocGroupUsage::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.
+
+    TPtrC attribute = aXdmNodeAttr.NodeName();
+    
+    // uri
+    if ( Match( attribute, KXdmUri ) ) 
+        {
+        // pass to base class for data validation
+        // check if this should be SIP uri
+        ValidateDataL( EDataTypeAnyURI, aXdmNodeAttr ); 
+        }
+    else
+        {
+        // add parent element namespace checking when available,
+        // now we don't know the attribute's namespace
+        iIetfCommonPolicies->ValidateAttributeL( aXdmNodeAttr );
+        iOmaCommonPolicies->ValidateAttributeL( aXdmNodeAttr ); 
+        }
+    }
+                            
+// ----------------------------------------------------
+// CXcapPocGroupUsage::AddNamespaceInformationL
+// 
+// ----------------------------------------------------
+//
+void CXcapPocGroupUsage::AddNamespaceInformationL( CXdmDocument& aXdmDocument )
+    {
+    aXdmDocument.AppendNamespaceL( KXdmPocGroupNamespace, KNullDesC8 );
+    aXdmDocument.AppendNamespaceL( KXdmResourceListsNamespace, KXdmResourceListsNsPrefix );
+    aXdmDocument.AppendNamespaceL( KXdmIetfCommonPolicyNamespace, KXdmIetfCommonPolicyNsPrefix );
+    aXdmDocument.AppendNamespaceL( KXdmOmaCommonPolicyNamespace, KXdmOmaCommonPolicyNsPrefix );
+    }
+
+
+// End of File
+