--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/webservices/wsstar/wsstarmessagehandlers/src/wsstarmessageutils.cpp Thu Jan 07 16:19:19 2010 +0200
@@ -0,0 +1,159 @@
+/*
+* Copyright (c) 2006-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:
+*
+*/
+
+
+
+
+
+
+
+
+
+
+#include "wsstarmessageutils.h"
+#include <xmlengnodelist.h>
+
+CSenElement* CWSStarMessageUtils::GetMarkedElementL(CSenElement& aParent,
+ const TDesC8& aValue, TBool aAttribute)
+ {
+ CSenElement* markedEl = NULL;
+
+//1.flat choose
+ RPointerArray<CSenElement>& elements = aParent.ElementsL();
+ TInt count(elements.Count());
+ TInt i=0;
+ while (i<count && !markedEl)
+ {
+ markedEl = elements[i];
+ if (aAttribute)
+ {
+ if (!markedEl->AttrValue(aValue))
+ {
+ markedEl = NULL;
+ }
+ }
+ else
+ {
+ if (markedEl->LocalName() != aValue)
+ {
+ markedEl = NULL;
+ }
+ }
+
+ i++;
+ }
+
+//2.go deeper
+ if (!markedEl)
+ {
+ elements = aParent.ElementsL();
+ TInt count(elements.Count());
+ TInt i=0;
+ while (i<count && !markedEl)
+ {
+ markedEl = CWSStarMessageUtils::GetMarkedElementL(*elements[i], aValue, aAttribute);
+ i++;
+ }
+ }
+ return markedEl;
+ }
+
+void CWSStarMessageUtils::FindElementL(const TDesC8& aElementName,
+ const TDesC8& aNamespace,
+ const TXmlEngElement& aParent,
+ RArrayElements* aElements)
+{
+ RXmlEngNodeList<TXmlEngElement> nodeList;
+ TXmlEngElement parent;
+ aParent.GetElementsByTagNameL( nodeList, aElementName , aNamespace );
+ if( nodeList.Count() )
+ {
+ parent = nodeList.Next();
+ aElements->AppendL(parent);
+ }
+
+ RXmlEngNodeList<TXmlEngElement> nodeChildList;
+ aParent.GetChildElements(nodeChildList);
+
+ TInt count( nodeChildList.Count() );
+ for(TInt i(0) ; i<count ; i++)
+ {
+ if( nodeChildList.HasNext() )
+ {
+ CWSStarMessageUtils::FindElementL(aElementName ,
+ aNamespace ,
+ nodeChildList.Next() ,
+ aElements);
+ }
+ }
+ nodeList.Close();
+ nodeChildList.Close();
+}
+
+CSenElement* CWSStarMessageUtils::FindElementL(const TDesC8& aLocalName, CSenElement& aParent)
+ {
+ CSenElement* elem = NULL;
+
+ RPointerArray<CSenElement>& elements = aParent.ElementsL();
+ TInt count(elements.Count());
+ TInt i=0;
+ while (i<count && !elem)
+ {
+ elem = elements[i];
+ if (elem->LocalName() != aLocalName)
+ {
+ elem = NULL;
+ }
+ i++;
+ }
+
+ if (!elem)
+ {
+ elements = aParent.ElementsL();
+ TInt count(elements.Count());
+ TInt i=0;
+ while (i<count && !elem)
+ {
+ elem = CWSStarMessageUtils::FindElementL(aLocalName, *elements[i]);
+ i++;
+ }
+ }
+ return elem;
+
+ }
+void CWSStarMessageUtils::FindElementL(
+ const TDesC8& aLocalName,
+ CSenElement& aParent,
+ RArraySenElements& aElements)
+ {
+ CSenElement* elem = NULL;
+
+ RPointerArray<CSenElement>& elements = aParent.ElementsL();
+ TInt count(elements.Count());
+ TInt i=0;
+ while (i<count)
+ {
+ elem = elements[i];
+ if (elem->LocalName() == aLocalName)
+ {
+ aElements.Append(elem);
+ }
+ CWSStarMessageUtils::FindElementL(aLocalName, *elem,aElements);
+ elem = NULL;
+ i++;
+ }
+ }