--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/webservices/wsmessages/src/senatommessage.cpp Thu Jan 07 16:19:19 2010 +0200
@@ -0,0 +1,585 @@
+/*
+* Copyright (c) 2008 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 <e32std.h>
+#include <badesca.h>
+
+#include <SenDomFragmentBase.h>
+
+#include "senatommessage.h"
+
+#include "sendebug.h"
+#include "senlogger.h"
+#include <xmlengnodelist.h>
+
+CSenAtomMessage::CSenAtomMessage()
+//:iTitle(NULL), iId(NULL), iUpdated(NULL), iPublished(NULL)
+// Automatically all members will be zeroed in CBase derived classes, so initialization list is required only when to initializ other than zero
+// This fixes the RVCT Compiler warning #1299-D
+ {
+ TLSLOG_L(KSenMessagesLogChannel, KSenMessagesLogLevel, "CSenAtomMessage::CSenAtomMessage()");
+ }
+
+EXPORT_C CSenAtomMessage::~CSenAtomMessage()
+ {
+ if(iTitle)
+ {
+ delete iTitle;
+ }
+ if(iIdTag)
+ {
+ delete iIdTag;
+ }
+ if(iUpdated)
+ {
+ delete iUpdated;
+ }
+ if(iPublished)
+ {
+ delete iPublished;
+ }
+
+ }
+
+EXPORT_C TInt64 CSenAtomMessage::Id() const
+ {
+ return iId;
+ }
+
+EXPORT_C void CSenAtomMessage::OnStartElementL(const RTagInfo& aElement,
+ const RAttributeArray& /* aAttributes*/,
+ TInt /*aErrorCode*/)
+ {
+ TLSLOG_L(KSenMessagesLogChannel, KSenMessagesLogLevel, "CSenAtomMessage::OnStartElementL");
+ const TPtrC8 saxLocalName = aElement.LocalName().DesC();
+ const TPtrC8 saxNsUri = aElement.Uri().DesC();
+ const TPtrC8 saxPrefix = aElement.Prefix().DesC();
+
+ }
+
+EXPORT_C void CSenAtomMessage::OnEndElementL(
+ const RTagInfo& aElement,
+ TInt /*aErrorCode*/)
+ {
+ TLSLOG_L(KSenMessagesLogChannel, KSenMessagesLogLevel, "CSenAtomMessage::OnEndElementL");
+
+ const TPtrC8 saxLocalName = aElement.LocalName().DesC();
+ const TPtrC8 saxNsUri = aElement.Uri().DesC();
+ const TPtrC8 saxPrefix = aElement.Prefix().DesC();
+
+ }
+
+
+EXPORT_C CSenFragmentBase* CSenAtomMessage::CreateBodyFragmentL(const TDesC8& aNsUri,
+ const TDesC8& aLocalName,
+ const TDesC8& aPrefix,
+ const RAttributeArray& aAttributes,
+ TXmlEngElement& aParent,
+ RSenDocument& aOwnerDocument)
+ {
+ TLSLOG_L(KSenMessagesLogChannel, KSenMessagesLogLevel, "CSenAtomMessage::CreateBodyFragmentL");
+ return CSenDomFragmentBase::NewL(aNsUri, aLocalName, aPrefix, aAttributes, aParent, aOwnerDocument);
+ }
+
+EXPORT_C TBool CSenAtomMessage::IsSafeToCast(MSenMessage::TClass aType)
+ {
+ TLSLOG_L(KSenMessagesLogChannel, KSenMessagesLogLevel, "CSenAtomMessage::IsSafeToCast(aType)");
+ if ( aType == MSenMessage::EAtomMessage )
+ {
+ return ETrue;
+ }
+
+ return EFalse;
+ }
+EXPORT_C MSenMessage::TClass CSenAtomMessage::Type()
+ {
+ return MSenMessage::EAtomMessage;
+ }
+
+EXPORT_C MSenMessage::TDirection CSenAtomMessage::Direction()
+ {
+ return MSenMessage::EOutbound;
+ }
+EXPORT_C TInt CSenAtomMessage::SetContext(MSenMessageContext* /*apNotOwnedContext*/)
+ {
+ return KErrNotSupported;
+ }
+EXPORT_C MSenMessageContext* CSenAtomMessage::Context()
+ {
+ return NULL;
+ }
+EXPORT_C TInt CSenAtomMessage::SetProperties(MSenProperties* /*apOwnedProperties*/)
+ {
+ return KErrNotSupported;
+ }
+EXPORT_C MSenProperties* CSenAtomMessage::Properties()
+ {
+ return NULL;
+ }
+EXPORT_C TInt CSenAtomMessage::TxnId()
+ {
+ return KErrNotSupported;
+ }
+
+EXPORT_C MSenMessage* CSenAtomMessage::CloneL()
+ {
+ return NULL;
+ }
+
+
+EXPORT_C const TDesC8& CSenAtomMessage::Title() const
+ {
+ if ( iTitle )
+ return *iTitle;
+ else
+ return KNullDesC8();
+ }
+
+EXPORT_C void CSenAtomMessage::SetTitleL( const TDesC8& aTitle )
+ {
+ if ( iTitle )
+ {
+ delete iTitle;
+ iTitle = 0;
+ }
+ if ( aTitle.Length()> 0 )
+ {
+
+ iTitle = aTitle.AllocL();
+ TXmlEngElement message = AsElementL();
+ TXmlEngElement title;
+ title = message.AddNewElementL(KSenAtomTitleName);
+ title.SetTextNoEncL(aTitle);
+ }
+ }
+
+
+EXPORT_C TInt CSenAtomMessage::LinkCountL()
+ {
+ TXmlEngElement message = AsElementL();
+ RXmlEngNodeList<TXmlEngElement> list;
+ //const TPtrC8 tNsUri = NsUri();
+ CleanupClosePushL(list);
+ message.GetElementsByTagNameL(list, KSenAtomLinkName, KSenAtomSpace);
+ TInt a = list.Count();
+ CleanupStack::PopAndDestroy(&list);
+ return a;
+ }
+
+EXPORT_C void CSenAtomMessage::AddLinkL( const TDesC8& aHref, const TDesC8& aRel, const TDesC8& aType, const TDesC8& aHrefLang, const TDesC8& aTitle, const TDesC8& aLength)
+ {
+
+ TXmlEngElement message = AsElementL();
+ TXmlEngElement link;
+ link = message.AddNewElementL(KSenAtomLinkName);
+
+ if(aHref!=KNullDesC8)
+ {
+ link.AddNewAttributeSameNsL(KSenAtomHref,aHref);
+ }
+ if(aRel!=KNullDesC8)
+ {
+ link.AddNewAttributeSameNsL(KSenAtomRel,aRel);
+ }
+ if(aType!=KNullDesC8)
+ {
+ link.AddNewAttributeSameNsL(KSenAtomType,aType);
+ }
+ if(aHrefLang!=KNullDesC8)
+ {
+ link.AddNewAttributeSameNsL(KSenAtomHrefLang,aHrefLang);
+ }
+ if(aLength!=KNullDesC8)
+ {
+ link.AddNewAttributeSameNsL(KSenAtomLength,aLength);
+ }
+ if(aTitle!=KNullDesC8)
+ {
+ link.AddNewAttributeSameNsL(KSenAtomTitle,aTitle);
+ }
+ }
+
+EXPORT_C void CSenAtomMessage::RemoveLinkL(TInt aIndex )
+ {
+ TXmlEngElement message = AsElementL();
+ TXmlEngElement link;
+ RXmlEngNodeList<TXmlEngElement> list;
+ CleanupClosePushL(list);
+ message.GetElementsByTagNameL(list, KSenAtomLinkName, KSenAtomSpace);
+ TInt count =0;
+ while(list.HasNext()){
+ link = list.Next();
+ if(count == aIndex){
+ link.Remove();
+ break;
+ }
+ count++;
+ }
+ CleanupStack::PopAndDestroy(&list);
+ }
+
+EXPORT_C void CSenAtomMessage::RemoveLinkL(const TDesC8& aHref )
+ {
+
+ TXmlEngElement message = AsElementL();
+ TXmlEngElement link;
+ RXmlEngNodeList<TXmlEngElement> list;
+
+ CleanupClosePushL(list);
+ message.GetElementsByTagNameL(list, KSenAtomLinkName, KSenAtomSpace);
+ while(list.HasNext()){
+ link = list.Next();
+ TPtrC8 icPtr = link.AttributeValueL(KSenAtomHref, KSenAtomSpace);
+ if(aHref.Compare(icPtr)==0){
+ link.Remove();
+ break;
+ }
+ }
+ CleanupStack::PopAndDestroy(&list);
+ }
+
+
+
+EXPORT_C void CSenAtomMessage:: AddCategoryL( const TDesC8& aTerm, const TDesC8& aScheme, const TDesC8& aLabel)
+ {
+ TXmlEngElement message = AsElementL();
+ TXmlEngElement category;
+ category = message.AddNewElementL(KSenAtomCategoryName);
+
+ if(aTerm!=KNullDesC8)
+ {
+ category.AddNewAttributeSameNsL(KSenAtomTerm,aTerm);
+ }
+ if(aScheme!=KNullDesC8)
+ {
+ category.AddNewAttributeSameNsL(KSenAtomScheme,aScheme);
+ }
+ if(aLabel!=KNullDesC8)
+ {
+ category.AddNewAttributeSameNsL(KSenAtomLabel,aLabel);
+ }
+ }
+
+EXPORT_C TInt CSenAtomMessage::CategoryCountL()
+ {
+ TXmlEngElement message = AsElementL();
+ RXmlEngNodeList<TXmlEngElement> list;
+ CleanupClosePushL(list);
+ message.GetElementsByTagNameL(list, KSenAtomCategoryName, KSenAtomSpace);
+ TInt a = list.Count();
+ CleanupStack::PopAndDestroy(&list);
+ return a;
+ }
+
+EXPORT_C void CSenAtomMessage::RemoveCategoryL(const TDesC8& aTerm )
+ {
+
+ TXmlEngElement message = AsElementL();
+ TXmlEngElement category;
+ RXmlEngNodeList<TXmlEngElement> list;
+
+ CleanupClosePushL(list);
+ message.GetElementsByTagNameL(list, KSenAtomCategoryName, KSenAtomSpace);
+ while(list.HasNext()){
+ category = list.Next();
+ TPtrC8 icPtr = category.AttributeValueL(KSenAtomTerm, KSenAtomSpace);
+ if(aTerm.Compare(icPtr)==0){
+ category.Remove();
+ break;
+ }
+ }
+ CleanupStack::PopAndDestroy(&list);
+ }
+
+
+
+EXPORT_C const TDesC8& CSenAtomMessage::Updated() const
+ {
+ if ( iUpdated )
+ return *iUpdated;
+ else
+ return KNullDesC8;
+ }
+
+EXPORT_C void CSenAtomMessage::SetUpdatedL( const TDesC8& aUpdated )
+ {
+ if ( iUpdated )
+ {
+ delete iUpdated;
+ iUpdated = 0;
+ }
+ if ( aUpdated.Length()> 0 )
+ {
+ iUpdated = aUpdated.AllocL();
+ TXmlEngElement message = AsElementL();
+ TXmlEngElement updated;
+ updated = message.AddNewElementL(KSenAtomUpdatedName);
+ updated.SetTextNoEncL(aUpdated);
+ }
+ }
+
+EXPORT_C const TDesC8& CSenAtomMessage::Published() const
+ {
+ if ( iPublished )
+ return *iPublished;
+ else
+ return KNullDesC8;
+ }
+
+EXPORT_C void CSenAtomMessage::SetPublishedL( const TDesC8& aPublished )
+ {
+ if ( iPublished )
+ {
+ delete iPublished;
+ iPublished = 0;
+ }
+ if ( aPublished.Length()> 0 )
+ {
+ iPublished = aPublished.AllocL();
+ TXmlEngElement message = AsElementL();
+ TXmlEngElement published;
+ published = message.AddNewElementL(KSenAtomPublishedName);
+ published.SetTextNoEncL(aPublished);
+ }
+ }
+
+EXPORT_C const TDesC8& CSenAtomMessage::IdTag() const
+ {
+ if ( iIdTag )
+ return *iIdTag;
+ else
+ return KNullDesC8;
+ }
+
+EXPORT_C void CSenAtomMessage::SetIdTagL( const TDesC8& aId )
+ {
+ if ( iIdTag )
+ {
+ delete iIdTag;
+ iIdTag = 0;
+ }
+ if ( aId.Length()> 0 )
+ {
+ iIdTag = aId.AllocL();
+ TXmlEngElement message = AsElementL();
+ TXmlEngElement id;
+ id = message.AddNewElementL(KSenAtomIdName);
+ id.SetTextNoEncL(aId);
+ }
+ }
+
+
+EXPORT_C void CSenAtomMessage::SetAuthorL( const TDesC8& aName, const TDesC8& aUri, const TDesC8& aEmail )
+ {
+ TXmlEngElement message = AsElementL();
+ TXmlEngElement auth;
+
+ auth = message.AddNewElementL(KSenAtomAuthorName);
+
+ if(aName!=KNullDesC8)
+ {
+ TXmlEngElement nameEl;
+ nameEl = auth.AddNewElementL(KSenAtomName);
+ nameEl.SetTextNoEncL(aName);
+ }
+ if(aUri!=KNullDesC8)
+ {
+ TXmlEngElement uriEl;
+ uriEl = auth.AddNewElementL(KSenAtomURI);
+ uriEl.SetTextNoEncL(aUri);
+ }
+ if(aEmail!=KNullDesC8)
+ {
+ TXmlEngElement emailEl;
+ emailEl = auth.AddNewElementL(KSenAtomEmail);
+ emailEl.SetTextNoEncL(aEmail);
+ }
+ }
+
+EXPORT_C void CSenAtomMessage::RemoveAuthorL()
+ {
+ TXmlEngElement message = AsElementL();
+ TXmlEngElement author;
+ RXmlEngNodeList<TXmlEngElement> list;
+ CleanupClosePushL(list);
+ message.GetElementsByTagNameL(list, KSenAtomAuthorName, KSenAtomSpace);
+ while(list.HasNext()){
+ author = list.Next();
+ author.Remove();
+ }
+ CleanupStack::PopAndDestroy(&list);
+ }
+
+EXPORT_C TInt CSenAtomMessage::ContributorCountL()
+ {
+ TXmlEngElement message = AsElementL();
+ RXmlEngNodeList<TXmlEngElement> list;
+ //const TPtrC8 tNsUri = NsUri();
+ CleanupClosePushL(list);
+ message.GetElementsByTagNameL(list, KSenAtomContributorName, KSenAtomSpace);
+ TInt a = list.Count();
+ CleanupStack::PopAndDestroy(&list);
+ return a;
+ }
+
+EXPORT_C void CSenAtomMessage::AddContributorL( const TDesC8& aName, const TDesC8& aUri, const TDesC8& aEmail )
+ {
+ TXmlEngElement message = AsElementL();
+ TXmlEngElement contributor;
+ contributor = message.AddNewElementL(KSenAtomContributorName);
+
+ if(aName!=KNullDesC8)
+ {
+ TXmlEngElement nameEl;
+ nameEl = contributor.AddNewElementL(KSenAtomName);
+ nameEl.SetTextNoEncL(aName);
+ }
+ if(aUri!=KNullDesC8)
+ {
+ TXmlEngElement uriEl;
+ uriEl = contributor.AddNewElementL(KSenAtomURI);
+ uriEl.SetTextNoEncL(aUri);
+ }
+ if(aEmail!=KNullDesC8)
+ {
+ TXmlEngElement emailEl;
+ emailEl = contributor.AddNewElementL(KSenAtomEmail);
+ emailEl.SetTextNoEncL(aEmail);
+ }
+ }
+
+EXPORT_C void CSenAtomMessage::RemoveContributorL(const TDesC8& aName )
+ {
+ TXmlEngElement message = AsElementL();
+ TXmlEngElement contributor;
+ TXmlEngElement nameTag;
+ RXmlEngNodeList<TXmlEngElement> list;
+ RXmlEngNodeList<TXmlEngElement> listIn;
+
+ CleanupClosePushL(list);
+ CleanupClosePushL(listIn);
+
+ message.GetElementsByTagNameL(list, KSenAtomContributorName, KSenAtomSpace);
+ while(list.HasNext()){
+ contributor = list.Next();
+ contributor.GetElementsByTagNameL(listIn, KSenAtomName, KSenAtomSpace);
+ while(listIn.HasNext()){
+ nameTag = listIn.Next();
+ TPtrC8 idBuf = nameTag.Text();
+ if(aName.Compare(idBuf)==0){
+ contributor.Remove();
+ break;
+ }
+ }
+ }
+ CleanupStack::PopAndDestroy(&listIn);
+ CleanupStack::PopAndDestroy(&list);
+ }
+
+
+EXPORT_C void CSenAtomMessage::SetRightsL( const TDesC8& aRights)
+ {
+ TXmlEngElement message = AsElementL();
+ TXmlEngElement rightsEl;
+ rightsEl = message.AddNewElementL(KSenAtomRightsName);
+ rightsEl.SetTextNoEncL(aRights);
+ }
+
+EXPORT_C const TDesC8& CSenAtomMessage::RightsL()
+ {
+ TXmlEngElement message = AsElementL();
+ RXmlEngNodeList<TXmlEngElement> list;
+ CleanupClosePushL(list);
+
+ message.GetElementsByTagNameL(list, KSenAtomRightsName, KSenAtomSpace);
+ if(list.Count()>0) {
+ TXmlEngElement rights = list.Next();
+ TPtrC8 icPtr = rights.Text();
+ CleanupStack::PopAndDestroy(&list);
+ HBufC8* out = icPtr.Alloc();
+ return *out;
+ }else{
+ CleanupStack::PopAndDestroy(&list);
+ return KNullDesC8();
+ }
+ }
+
+EXPORT_C TInt CSenAtomMessage::AttributeCountL(const TDesC8& aName, const TDesC8& aNameSpaceURI)
+ {
+ TXmlEngElement message = AsElementL();
+ RXmlEngNodeList<TXmlEngElement> list;
+ //const TPtrC8 tNsUri = NsUri();
+ CleanupClosePushL(list);
+ message.GetElementsByTagNameL(list, aName, aNameSpaceURI);
+ TInt a = list.Count();
+ CleanupStack::PopAndDestroy(&list);
+ return a;
+ }
+
+EXPORT_C void CSenAtomMessage::RemoveByAttributeL(const TDesC8& atomtag, const TDesC8& aNameSpaceUri, const TDesC8& attributeName, const TDesC8& aValue)
+ {
+
+ TXmlEngElement message = AsElementL();
+ TXmlEngElement tagToRemove;
+ RXmlEngNodeList<TXmlEngElement> list;
+
+ CleanupClosePushL(list);
+ message.GetElementsByTagNameL(list, atomtag, aNameSpaceUri);
+ while(list.HasNext()){
+ tagToRemove = list.Next();
+ TPtrC8 icPtr = tagToRemove.AttributeValueL(attributeName, KSenAtomSpace);
+ if(aValue.Compare(icPtr)==0){
+ tagToRemove.Remove();
+ break;
+ }
+ }
+ CleanupStack::PopAndDestroy(&list);
+ }
+
+EXPORT_C void CSenAtomMessage::RemoveBySubtagL(const TDesC8& aAtomtag, const TDesC8& aNameSpaceUri, const TDesC8& aSubtagName, const TDesC8& aValue)
+ {
+ TXmlEngElement message = AsElementL();
+ TXmlEngElement tagToRemove;
+ TXmlEngElement name;
+ RXmlEngNodeList<TXmlEngElement> list;
+ RXmlEngNodeList<TXmlEngElement> listIn;
+ CleanupClosePushL(list);
+ CleanupClosePushL(listIn);
+ message.GetElementsByTagNameL(list, aAtomtag, aNameSpaceUri);
+ while(list.HasNext()){
+ tagToRemove = list.Next();
+ tagToRemove.GetElementsByTagNameL(listIn, aSubtagName, aNameSpaceUri);
+ while(listIn.HasNext()){
+ name = listIn.Next();
+ TPtrC8 idBuf = name.Text();
+ if(aValue.Compare(idBuf)==0){
+ tagToRemove.Remove();
+ break;
+ }
+ }
+ }
+ CleanupStack::PopAndDestroy(&listIn);
+ CleanupStack::PopAndDestroy(&list);
+ }