servicediscoveryandcontrol/pnp/test/upnp/upnpdescription/src/cstatetableparser.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/servicediscoveryandcontrol/pnp/test/upnp/upnpdescription/src/cstatetableparser.cpp Tue Feb 02 01:12:20 2010 +0200
@@ -0,0 +1,156 @@
+// 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 "cstatetableparser.h"
+#include <upnpdescriptionschema.h>
+
+CStateTableParser* CStateTableParser::NewL(CUPnPStateVariable *aStateTable, const RStringPool& aStringPool)
+ {
+ CStateTableParser* self = new (ELeave) CStateTableParser(aStateTable, aStringPool);
+ return self;
+ }
+
+CStateTableParser::CStateTableParser(CUPnPStateVariable *aStateTable, const RStringPool& aStringPool) : iStateTable(aStateTable), iStringPool(aStringPool)
+ {
+ }
+
+CStateTableParser::~CStateTableParser()
+ {
+ }
+
+void CStateTableParser::ParseStartElementL(const RTagInfo& aElement, const RAttributeArray& aAttributes)
+ {
+ iSiblingsCount++;
+ iString = iStringPool.OpenStringL(aElement.LocalName().DesC());
+ TInt tblIndex = iString.Index ( UPNPDESCRIPTIONXMLTAGS::Table );
+ const TDesC8& str = iString.DesC();
+ switch(tblIndex)
+ {
+ case UPNPDESCRIPTIONXMLTAGS::EStateVariable:
+ {
+ _LIT8(KSendEvents,"sendEvents");
+ _LIT8(KYes,"yes");
+ _LIT8(KNo,"no");
+
+ const RAttribute& attribute = aAttributes[0];
+ const RTagInfo& nameInfo = attribute.Attribute();
+
+ const TDesC8& localName = nameInfo.LocalName().DesC();
+ if ( localName.CompareF( KSendEvents ) )
+ User::Leave(KErrCorrupt);
+ const TDesC8& value = attribute.Value().DesC();
+ if ( !value.CompareF(KYes) )
+ iStateTable->SetPropertyL(iStringPool.String(UPNPDESCRIPTIONXMLTAGS::ESendEvents, UPNPDESCRIPTIONXMLTAGS::Table),KYes);
+
+ else if ( !value.CompareF(KNo) )
+ iStateTable->SetPropertyL(iStringPool.String(UPNPDESCRIPTIONXMLTAGS::ESendEvents, UPNPDESCRIPTIONXMLTAGS::Table),KNo);
+ else
+ User::Leave(KErrCorrupt);
+
+ }
+
+ break;
+
+ case UPNPDESCRIPTIONXMLTAGS::EAllowedValueList:
+ {
+ if ( !iArgValueList )
+ {
+ iArgValueList = CUPnPArgValueList::NewL();
+ iArgValueList->iType = CUPnPArgValueList::EArgValueList;
+ }
+ else
+ User::Leave(KErrCorrupt);
+
+ iStateTable->SetAllowedValueType(ETrue);
+ iStateTable->SetAllowedValuesL(iArgValueList);
+ iFlags = iFlags | EAllowedValue;
+ }
+ break;
+
+ case UPNPDESCRIPTIONXMLTAGS::EAllowedValueRange:
+ {
+ iSiblingsCount--;
+ CUPnPValueRange* valueRange = CUPnPValueRange::NewL();
+ valueRange->iType = CUPnPValueRange::EArgValueRange ;
+ CleanupStack::PushL(valueRange);
+ iStateTable->SetAllowedValuesL(valueRange);
+ iStateTable->SetAllowedValueType(EFalse);
+ CleanupStack::Pop();
+ CValueRangeParser* valueParser = CValueRangeParser::NewL(valueRange, iStringPool);
+ CleanupStack::PushL(valueParser);
+ StartChildParserL(valueParser, aElement, aAttributes);
+ CleanupStack::Pop(valueParser);
+ }
+ break;
+ //default : Don't do anything
+ }
+
+ }
+
+void CStateTableParser::ParseEndElementL(const RTagInfo& /*aElement*/)
+ {
+ iSiblingsCount--;
+ iStateTable->SetPropertyStatus(iString,ETrue);
+ iString.Close();
+ }
+
+void CStateTableParser::ParseContentL(const TDesC8& aBytes)
+ {
+ if ( !IsBlankSpace( aBytes ) )
+ {
+ if ( iFlags == EAllowedValue )
+ iArgValueList->AppendL( aBytes );
+ else
+ iStateTable->SetPropertyL(iString,aBytes);
+ }
+ }
+
+//------------------------------------------------------------------------------
+CValueRangeParser* CValueRangeParser::NewL(CUPnPValueRange* aValueRange, const RStringPool& aStringPool)
+ {
+ CValueRangeParser* self = new (ELeave) CValueRangeParser(aValueRange, aStringPool);
+ return self;
+ }
+
+CValueRangeParser::CValueRangeParser(CUPnPValueRange* aValueRange, const RStringPool& aStringPool) : iValueRange(aValueRange), iStringPool(aStringPool)
+ {
+ }
+
+CValueRangeParser::~CValueRangeParser()
+ {
+ }
+
+void CValueRangeParser::ParseStartElementL(const RTagInfo& aElement, const RAttributeArray& /*aAttributes*/)
+ {
+ iSiblingsCount++;
+ iString = iStringPool.OpenStringL(aElement.LocalName().DesC());
+ }
+
+void CValueRangeParser::ParseEndElementL(const RTagInfo& /*aElement*/)
+ {
+ iSiblingsCount--;
+ iValueRange->SetPropertyStatus(iString,ETrue);
+ iString.Close();
+ }
+
+void CValueRangeParser::ParseContentL(const TDesC8& aBytes)
+ {
+ if ( !IsBlankSpace( aBytes ) )
+ iValueRange->SetPropertyL( iString, aBytes );
+
+ }
+
+
+