servicediscoveryandcontrol/pnp/test/upnp/upnpdescription/src/cactionparser.cpp
changeset 0 f5a58ecadc66
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/servicediscoveryandcontrol/pnp/test/upnp/upnpdescription/src/cactionparser.cpp	Tue Feb 02 01:12:20 2010 +0200
@@ -0,0 +1,69 @@
+// Copyright (c) 2008-2009 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 "cactionparser.h"
+#include <upnpdescriptionschema.h>
+#include "cargumentparser.h"
+
+CActionParser* CActionParser::NewL(CUPnPAction* aAction, const RStringPool& aStringPool)
+	{
+	CActionParser* self = new (ELeave) CActionParser(aAction, aStringPool);
+	return self;
+	}
+
+CActionParser::CActionParser(CUPnPAction* aAction, const RStringPool& aStringPool) : iAction(aAction), iStringPool(aStringPool)
+	{
+	}
+
+CActionParser::~CActionParser()
+	{
+	}
+
+void CActionParser::ParseStartElementL(const RTagInfo& aElement, const RAttributeArray& aAttributes)
+	{
+	iSiblingsCount++;
+	iString = iStringPool.OpenStringL(aElement.LocalName().DesC());
+	TInt tblIndex = iString.Index ( UPNPDESCRIPTIONXMLTAGS::Table );
+		
+	if (tblIndex >= 0)
+		{
+		if ( tblIndex ==UPNPDESCRIPTIONXMLTAGS::EArgument)
+			{
+			iSiblingsCount--;
+			CUPnPArgument* argument = CUPnPArgument::NewL();
+			CleanupStack::PushL(argument);
+			iAction->AppendL( argument );
+			CleanupStack::Pop( argument );
+			CArgumentParser* argumentParser = CArgumentParser::NewL(argument, iStringPool);
+			CleanupStack::PushL(argumentParser);
+			StartChildParserL( argumentParser, aElement, aAttributes );
+			CleanupStack::Pop( argumentParser);
+			}
+		}
+	}
+	
+
+void CActionParser::ParseEndElementL(const RTagInfo& /*aElement*/)
+	{
+	iSiblingsCount--;
+	iAction->SetPropertyStatus(iString,ETrue);
+	iString.Close();
+	}
+
+void CActionParser::ParseContentL(const TDesC8& aBytes)
+	{
+	if ( !IsBlankSpace( aBytes ) )
+		iAction->SetPropertyL(iString, aBytes);
+	}