xdmprotocols/XcapProtocol/XcapAppUsage/XcapPresenceRulesUsage/src/XcapOmaPresRulesUsage.cpp
--- /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
+