webservices/idwsfplugin/src/idwsfcorrelationheader.cpp
changeset 0 62f9d29f7211
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/webservices/idwsfplugin/src/idwsfcorrelationheader.cpp	Thu Jan 07 16:19:19 2010 +0200
@@ -0,0 +1,152 @@
+/*
+* Copyright (c) 2002-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:        
+*
+*/
+
+
+
+
+
+
+
+
+// INCLUDE FILES
+#include <SenDateUtils.h>
+#include <SenXmlUtils.h>
+
+#include "idwsfcorrelationheader.h"
+#include "senguidgen.h"
+#include "idwsfmessage.h"
+
+
+namespace
+    {
+    _LIT8(KAttrMessageId, "messageID");
+    _LIT8(KAttrRefToMessageId, "refToMessageID");
+    _LIT8(KAttrTimestamp, "timestamp");
+    }
+
+CIdWsfCorrelationHeader* CIdWsfCorrelationHeader::NewL(
+                                                const TDesC8& aRefToMessageId)
+    {
+    CIdWsfCorrelationHeader* pNew = new (ELeave) CIdWsfCorrelationHeader;
+    CleanupStack::PushL(pNew);
+    pNew->ConstructL(aRefToMessageId);
+    CleanupStack::Pop(); // pNew;
+    return pNew;
+    }
+
+CIdWsfCorrelationHeader* CIdWsfCorrelationHeader::NewL(
+                                            const RAttributeArray& aAttributes)
+    {
+    CIdWsfCorrelationHeader* pNew = new (ELeave) CIdWsfCorrelationHeader;
+    CleanupStack::PushL(pNew);
+    pNew->ConstructL(aAttributes);
+    CleanupStack::Pop(); // pNew;
+    return pNew;
+    }
+
+CIdWsfCorrelationHeader::CIdWsfCorrelationHeader()
+    {
+    }
+
+void CIdWsfCorrelationHeader::ConstructL(const TDesC8& aRefToMessageId)
+    {
+    BaseConstructL(KSBXmlNs, KCorrelationName, KCorrelationQName);
+
+    CSenGuidGen* pGuidGenerator = CSenGuidGen::NewLC();
+    ipMessageId = pGuidGenerator->GetRandomGuid8LC();
+    CleanupStack::Pop();            // ipMessageId
+    CleanupStack::PopAndDestroy(); // pGuidGenerator
+
+    ipRefToMessageId = aRefToMessageId.AllocL();
+
+    // Init timestamp
+    TTime t;
+    t.UniversalTime();
+    TBuf8<SenDateUtils::KXmlDateTimeMaxLength> ts;
+    SenDateUtils::ToXmlDateTimeUtf82L(ts, t);
+    ipTimestamp = ts.AllocL();
+    }
+
+void CIdWsfCorrelationHeader::ConstructL(const RAttributeArray& aAttributes)
+    {
+    BaseConstructL(KSBXmlNs, KCorrelationName);
+
+    ipMessageId = SenXmlUtils::AllocAttrValueL(aAttributes, KAttrMessageId);
+    ipRefToMessageId = SenXmlUtils::AllocAttrValueL(aAttributes, KAttrRefToMessageId);
+    ipTimestamp = SenXmlUtils::AllocAttrValueL(aAttributes, KAttrTimestamp);
+
+    __ASSERT_ALWAYS(ipMessageId != NULL, User::Leave(KErrArgument));
+    __ASSERT_ALWAYS(ipTimestamp != NULL, User::Leave(KErrArgument));
+    }
+
+CIdWsfCorrelationHeader::~CIdWsfCorrelationHeader()
+    {
+    delete ipMessageId;
+    delete ipRefToMessageId;
+    delete ipTimestamp;
+    }
+
+TPtrC8 CIdWsfCorrelationHeader::MessageId()
+    {
+    return *ipMessageId;
+    }
+
+TPtrC8 CIdWsfCorrelationHeader::RefToMessageId()
+    {
+    if (!ipRefToMessageId)
+        {
+        return KNullDesC8();
+        }
+    else
+        {
+        return *ipRefToMessageId;
+        }
+    }
+
+TPtrC8 CIdWsfCorrelationHeader::Timestamp()
+    {
+    if(ipTimestamp)
+        return *ipTimestamp;
+    else
+        {
+        return KNullDesC8(); // should not happen(!)
+        }
+    }
+
+void CIdWsfCorrelationHeader::SetCorrelationL(const TDesC8& aRefToMessageId)
+    {
+    HBufC8* pRefToMessageId = NULL;aRefToMessageId.AllocL();
+    delete ipRefToMessageId;
+    ipRefToMessageId = pRefToMessageId;
+    }
+
+void CIdWsfCorrelationHeader::WriteAttrsToL(RWriteStream& aWriteStream)
+    {
+    WriteAttrToL(aWriteStream, KAttrMessageId, *ipMessageId);
+
+    // check that reftomessageid exists and is over zero-length
+    // IOP: empty reftomessageid is not allowed by specs(!):
+    if (ipRefToMessageId && ipRefToMessageId->Length()>0)
+        {
+        WriteAttrToL(aWriteStream, KAttrRefToMessageId, *ipRefToMessageId);
+        }
+    WriteAttrToL(aWriteStream, KAttrTimestamp, *ipTimestamp);
+    }
+
+// End of File
+
+