--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/simpleengine/xdmrlspres/src/presenceactionxdm.cpp Tue Feb 02 01:05:17 2010 +0200
@@ -0,0 +1,188 @@
+/*
+* Copyright (c) 2006 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: RLS and Presence XDM, This class represents Presence Action
+*
+*/
+
+
+
+
+// Includes
+#include <utf.h>
+#include <XdmDocumentNode.h>
+#include <XdmNodeAttribute.h>
+#include <xcapappusagedef.h>
+
+#include "cpresencexdm.h"
+#include "presenceactionxdm.h"
+#include "rlspresxdmlogger.h"
+#include "rlspresxdmconstsint.h"
+
+// ---------------------------------------------------------------------------
+// TPresenceActionXDM::TPresenceActionXDM()
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TPresenceActionXDM::TPresenceActionXDM():iPresXDM(NULL)
+ {
+ OPENG_DP(D_OPENG_LIT( "TPresenceActionXDM::TPresenceActionXDM()" ) );
+ }
+
+// ---------------------------------------------------------------------------
+// TPresenceActionXDM::Init()
+// ---------------------------------------------------------------------------
+//
+EXPORT_C void TPresenceActionXDM::Init(CPresenceXDM* const aPresXDM)
+ {
+ OPENG_DP(D_OPENG_LIT( "TPresenceActionXDM::Init(aPresXDM=%d)"),aPresXDM );
+ iPresXDM = aPresXDM;
+ }
+
+// ---------------------------------------------------------------------------
+// TPresenceActionXDM::AddOrReplaceAction()
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt TPresenceActionXDM::AddOrReplaceActionL(const TDesC& aRuleID,
+ const TDesC& aAction)
+ {
+ OPENG_DP(D_OPENG_LIT( "TPresenceActionXDM::AddOrReplaceActionL()" ) );
+ OPENG_DP(D_OPENG_LIT( " aRuleID = %S, aAction = %S" ),&aRuleID, &aAction);
+
+ TInt err(KErrNone);
+
+ CXdmDocumentNode* subHandlingNode = GetSubHandlingNodeL(aRuleID, ETrue);
+ if(subHandlingNode!=NULL)
+ {
+ if(IsValidAction(aAction))
+ {
+ subHandlingNode->SetLeafNode(ETrue);
+ subHandlingNode->SetLeafNodeContentL(aAction);
+ err = KErrNone;
+ }
+ else
+ err = KErrArgument;
+ }
+ else
+ err = KErrNotFound;
+
+ OPENG_DP(D_OPENG_LIT( " return: %d" ),err);
+ return err;
+ }
+
+// ---------------------------------------------------------------------------
+// TPresenceActionXDM::RemoveAction()
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt TPresenceActionXDM::RemoveActionL(const TDesC& aRuleID)
+ {
+ OPENG_DP(D_OPENG_LIT( "TPresenceActionXDM::RemoveActionL()" ) );
+ OPENG_DP(D_OPENG_LIT( " aRuleID = %S" ),&aRuleID );
+ __ASSERT_ALWAYS(iPresXDM, User::Leave(KErrNotReady));
+
+ TInt err(KErrNone);
+ CXdmDocumentNode* subHandlingNode = GetSubHandlingNodeL(aRuleID, EFalse);
+ if(subHandlingNode!=NULL)
+ iPresXDM->RemoveFromModelL(subHandlingNode);
+ else
+ err = KErrNotFound;
+
+ OPENG_DP(D_OPENG_LIT( " return: %d" ),err);
+ return err;
+ }
+
+// ---------------------------------------------------------------------------
+// TPresenceActionXDM::GetAction()
+// ---------------------------------------------------------------------------
+//
+EXPORT_C TInt TPresenceActionXDM::GetActionL(const TDesC& aRuleID, TDes& aAction)
+ {
+ OPENG_DP(D_OPENG_LIT( "TPresenceActionXDM::GetActionL()" ) );
+ OPENG_DP(D_OPENG_LIT( " aRuleID = %S" ),&aRuleID );
+
+ TInt err(KErrNone);
+
+ CXdmDocumentNode* subHandlingNode = GetSubHandlingNodeL(aRuleID, EFalse);
+ if(subHandlingNode==NULL)
+ {
+ OPENG_DP(D_OPENG_LIT( " return: KErrNotFound" ));
+ return KErrNotFound;
+ }
+
+ HBufC* nodeContents(NULL);
+
+ subHandlingNode->SetLeafNode(ETrue);
+ nodeContents = CnvUtfConverter::ConvertToUnicodeFromUtf8L
+ (subHandlingNode->LeafNodeContent());
+ //Check given string length
+ if((nodeContents->Des()).Length() > aAction.MaxLength())
+ err = KErrArgument;
+ else
+ aAction = nodeContents->Des();
+
+ delete nodeContents;
+
+ OPENG_DP(D_OPENG_LIT( " return: err" ));
+ return err;
+ }
+
+// ---------------------------------------------------------------------------
+// TPresenceActionXDM::GetSubHandlingNode()
+// ---------------------------------------------------------------------------
+//
+CXdmDocumentNode* TPresenceActionXDM::GetSubHandlingNodeL(const TDesC& aRuleID,
+ TBool aCreate)
+ {
+ OPENG_DP(D_OPENG_LIT( " TPresenceActionXDM::GetSubHandlingNodeL()" ) );
+ OPENG_DP(D_OPENG_LIT( " GetSubHandlingNodeL aRuleID = %S, aCreate = %d" ),
+ &aRuleID,aCreate);
+
+ __ASSERT_ALWAYS(iPresXDM, User::Leave(KErrNotReady));
+
+ CXdmDocumentNode* actionNode = iPresXDM->GetRuleChildNodeL(aRuleID,
+ KXdmActions, aCreate);
+ if ( (!aCreate) && (actionNode==NULL))
+ return NULL;
+
+ RPointerArray<CXdmDocumentNode> nodes;
+ CXdmDocumentNode* subHandling(NULL);
+
+ // Finding subhandling node
+ actionNode->Find(KXdmSubHandling, nodes);
+ OPENG_DP(D_OPENG_LIT( " GetSubHandlingNodeL nodesCount = %d" ),nodes.Count());
+ if(nodes.Count()) // if action node exist
+ {
+ subHandling = nodes[0]; // only one sub-handling node can exist
+ }
+ else if (aCreate) // if asked to create
+ {
+ subHandling = actionNode->CreateChileNodeL(KXdmSubHandling);
+ }
+
+ nodes.Close();
+ return subHandling;
+ }
+
+// ---------------------------------------------------------------------------
+// TPresenceActionXDM::IsValidAction()
+// ---------------------------------------------------------------------------
+//
+TBool TPresenceActionXDM::IsValidAction(const TDesC& aAction)
+ {
+ OPENG_DP(D_OPENG_LIT( " TPresenceActionXDM::IsValidAction()" ) );
+ if((aAction==KPresBlock)||(aAction==KPresConfirm)||(aAction==KPresPoliteBlock)||(aAction==KPresAllow))
+ return ETrue;
+ return EFalse;
+ }
+
+// end of file
+