xdmprotocols/XcapProtocol/XcapAppUsage/XcapDirectoryUsage/src/XcapDirectoryUsage.cpp
branchRCL_3
changeset 35 fbd2e7cec7ef
parent 0 c8caa15ef882
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/xdmprotocols/XcapProtocol/XcapAppUsage/XcapDirectoryUsage/src/XcapDirectoryUsage.cpp	Wed Sep 01 12:23:14 2010 +0100
@@ -0,0 +1,234 @@
+/*
+* 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:  CXcapDirectoryUsage
+*
+*/
+
+
+
+
+#include <XdmErrors.h>
+#include <XdmDocumentNode.h>
+#include <XdmNodeAttribute.h>
+#include "XcapDirectoryUsage.h"
+
+
+// Used specification
+// OMA-TS-XDM_Core-V1_0-20051103-C, 03 November 2005
+
+// ----------------------------------------------------
+// CXcapDirectoryUsage::CXcapDirectoryUsage
+// 
+// ----------------------------------------------------
+//
+CXcapDirectoryUsage::CXcapDirectoryUsage( const CXdmEngine& aXdmEngine ) :
+                                          CXcapAppUsage( aXdmEngine )
+    {
+    }
+
+// ----------------------------------------------------
+// CXcapDirectoryUsage::NewL
+// 
+// ----------------------------------------------------
+//
+CXcapDirectoryUsage* CXcapDirectoryUsage::NewL( const TXcapAppUsageParams& aParameters )
+    {
+    CXcapDirectoryUsage* self = new ( ELeave ) CXcapDirectoryUsage( aParameters.iXdmEngine );
+    CleanupStack::PushL( self );    // << self
+    self->ConstructL();
+    CleanupStack::Pop( self );      // >> self
+    return self;
+    }
+
+// ----------------------------------------------------
+// CXcapDirectoryUsage::~CXcapDirectoryUsage
+// 
+// ----------------------------------------------------
+//
+CXcapDirectoryUsage::~CXcapDirectoryUsage()
+    {
+    }
+        
+// ----------------------------------------------------
+// CXcapDirectoryUsage::ConstructL
+// 
+// ----------------------------------------------------
+//
+void CXcapDirectoryUsage::ConstructL()
+    {
+    }
+
+// ----------------------------------------------------
+// CXcapDirectoryUsage::AUID
+// 
+// ----------------------------------------------------
+//
+TPtrC8 CXcapDirectoryUsage::AUID() const
+    {
+    return TPtrC8( KXdmDirectoryUsageAUID );
+    }
+                 
+// ----------------------------------------------------
+// CXcapDirectoryUsage::ContentType
+// 
+// ----------------------------------------------------
+//
+TPtrC8 CXcapDirectoryUsage::ContentType() const
+    {
+    return TPtrC8( KXdmDirectoryUsageContType );
+    }
+
+// ----------------------------------------------------
+// CXcapDirectoryUsage::DefaultNamespace
+// 
+// ----------------------------------------------------
+//
+TPtrC8 CXcapDirectoryUsage::DefaultNamespace() const
+    {
+    return TPtrC8( KXdmDirectoryNamespace );
+    }   
+    
+// ----------------------------------------------------
+// CXcapDirectoryUsage::ValidateNodeL
+// 
+// ----------------------------------------------------
+//
+TBool CXcapDirectoryUsage::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 );
+    TPtrC element = aXdmNode.NodeName();
+        
+    // <xcap-directory>
+    if ( Match( element, KXdmXcapDirectory ) ) 
+        {
+        found = ETrue;  
+        }
+    // <folder>
+    else if ( Match( element, KXdmFolder ) )
+        {
+        // required attribute auid
+        if ( !aXdmNode.HasAttribute( KXdmAuid ) )
+            {
+            LeaveWithErrorL( KXcapErrorMissingRequiredAttribute );
+            }
+        // there should be either <entry> or <error-code>
+        // element, not both
+        TBool entry( EFalse );
+        TBool errorcode( EFalse ) ;
+        TInt count( aXdmNode.NodeCount() );
+        for ( TInt i(0); i < count; i++ )
+            {
+            TPtrC childName = aXdmNode.ChileNode(i)->NodeName();            
+            if ( childName.CompareF( KXdmEntry ) ) 
+                {
+                entry = ETrue;
+                }
+            else if ( childName.CompareF( KXdmErrorCode ) ) 
+                {
+                errorcode = ETrue;
+                }
+            }
+        if ( entry && errorcode )   
+            {
+            LeaveWithErrorL( KXcapErrorSchemaViolation );   
+            }
+        found = ETrue;  
+        }
+    // <entry>
+    else if ( Match( element, KXdmEntry ) )
+        {
+        // required attributes uri and etag
+        if ( !aXdmNode.HasAttribute( KXdmUri ) )
+            {
+            LeaveWithErrorL( KXcapErrorMissingRequiredAttribute );
+            }
+        if ( !aXdmNode.HasAttribute( KXdmEtag ) )
+            {
+            LeaveWithErrorL( KXcapErrorMissingRequiredAttribute);
+            }
+        found = ETrue;  
+        }
+    // <error-code>
+    else if ( Match( element, KXdmErrorCode ) ) 
+        {
+        ValidateDataL( EDataTypeString, aXdmNode );
+        found = ETrue;  
+        }
+    return found;
+    }
+        
+// ----------------------------------------------------
+// CXcapDirectoryUsage::ValidateAttributeL
+// 
+// ----------------------------------------------------
+//
+void CXcapDirectoryUsage::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.
+    
+    TDataType dataType ( EDataTypeUndefined );
+    TPtrC attribute = aXdmNodeAttr.NodeName();
+    // uri
+    if ( Match( attribute, KXdmUri ) )
+        {
+        dataType = EDataTypeAnyURI;
+        }
+    // etag
+    else if ( Match( attribute, KXdmEtag ) )
+        {
+        dataType = EDataTypeString;
+        }
+    // last-modified
+    else if ( Match( attribute, KXdmLastModified ) )
+        {
+        dataType = EDataTypeDateTime;
+        }
+    // size
+    else if ( Match( attribute, KXdmSize ) )
+        {
+        dataType = EDataTypeNonNegativeInteger;
+        }
+    // auid
+    else if ( Match( attribute, KXdmAuid ) )
+        {
+        dataType = EDataTypeString;
+        }
+    // pass to base class for data validation
+    ValidateDataL( dataType, aXdmNodeAttr );
+    }
+
+// ----------------------------------------------------
+// CXcapDirectoryUsage::AddNamespaceInformationL
+// 
+// ----------------------------------------------------
+//
+void CXcapDirectoryUsage::AddNamespaceInformationL( CXdmDocument& aXdmDocument )
+    {
+    aXdmDocument.AppendNamespaceL( KXdmDirectoryNamespace, KNullDesC8 );
+    }
+    
+// End of File
+