diff -r 000000000000 -r c8caa15ef882 xdmprotocols/XcapProtocol/XcapAppUsage/XcapPocGroupUsage/src/XcapPocGroupUsage.cpp --- /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 +#include +#include +#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(); + + // + if ( Match( element, KXdmGroup ) ) + { + // no other elements than + TInt count( aXdmNode.NodeCount() ); + for ( TInt i(0); i < count; i++ ) + { + if ( !Match( aXdmNode.ChileNode(i)->NodeName(), KXdmListService ) ) + { + LeaveWithErrorL( KXcapErrorSchemaViolation ); + } + } + found = ETrue; + } + // + else if ( Match( element, KXdmListService ) ) + { + // required attribute uri + if ( !aXdmNode.HasAttribute( KXdmUri ) ) + { + LeaveWithErrorL( KXcapErrorMissingRequiredAttribute ); + } + found = ETrue; + } + // + 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; + } + } + // + else if ( Match( element, KXdmInviteMembers ) ) + { + dataType = EDataTypeBoolean; + found = ETrue; + } + // + else if ( Match( element, KXdmMaxParticipantCount ) ) + { + dataType = EDataTypeNonNegativeInteger; + found = ETrue; + } + // + 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; + } + // + else if ( Match( element, KXdmAllowConfState ) ) + { + dataType = EDataTypeBoolean; + found = ETrue; + } + // + else if ( Match( element, KXdmAllowInvUsersDyn ) ) + { + dataType = EDataTypeBoolean; + found = ETrue; + } + // + 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; + } + // + else if ( Match( element, KXdmAllowInitiateConf ) ) + { + dataType = EDataTypeBoolean; + found = ETrue; + } + // + else if ( Match( element, KXdmAllowAnonymity ) ) + { + dataType = EDataTypeBoolean; + found = ETrue; + } + // + else if ( Match( element, KXdmIsKeyParticipant ) ) + { + dataType = EDataTypeBoolean; + found = ETrue; + } + // + // 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 ); + } + // + // 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 +