inc/NPRStoryXmlParser.h
author John Kern <johnk@symbian.org>
Fri, 24 Jul 2009 06:52:05 -0700
changeset 2 ffd24b74eda7
parent 0 0049171ecffb
permissions -rw-r--r--
Added tag NPR_1.0.0 for changeset 7c64bff801d1

/*
 ============================================================================
 Name	: NPRStoryXmlParser.h
 Author	: John Kern
 
 Copyright (c) 2009 Symbian Foundation Ltd
 This component and the accompanying materials are made available
 under the terms of the License "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:
 - Symbian Foundation Ltd - initial contribution
 - Symsource
 
 Contributors:
 - John Kern
 - Symsource
 
 Description : Story xml parser
 ============================================================================
 */

#ifndef __NPR_STORY_XML_PARSER_H__
#define __NPR_STORY_XML_PARSER_H__

// INCLUDES
#include <Xml/ContentHandler.h>
#include <Xml/Parser.h>

#include "NPRStory.h"

using namespace Xml;

/**
 *  CNPRStoryXmlParser
 * The SAX parser will use this handler and associated enums to create story objects.  
 */

// used by SAX parser. States of the XML response from NPR server. 
enum TNPRNewsState
		{
		ENPRNewsStateIdle = 0,
        ENPRNewsStateStory,
        ENPRNewsStateTitle,
        ENPRNewsStateTeaser,
        ENPRNewsStateThumbnail,
        ENPRNewsStateMedium,
        ENPRNewsStateText,
        ENPRNewsStateParagraph,
        ENPRNewsStateDate,
        ENPRNewsStateAudio,
        ENPRNewsStateAudioMp3,
        ENPRNewsStateAudioReal,
        ENPRNewsStateAudioWM,
		};

class CNPRStoryXmlParser : public CBase, public MContentHandler
	{
public:
	static CNPRStoryXmlParser* NewL(RPointerArray<CNPRStory>* aStoryArray);
	static CNPRStoryXmlParser* NewLC(RPointerArray<CNPRStory>* aStoryArray);
	~CNPRStoryXmlParser();

public:
	void OnStartDocumentL(const RDocumentParameters& aDocParam, TInt aErrorCode); 
	void OnEndDocumentL(TInt aErrorCode); 
	void OnStartElementL(const RTagInfo& aElement, const RAttributeArray& aAttributes, TInt aErrorCode);
	void OnEndElementL(const RTagInfo& aElement, TInt aErrorCode);
	void OnContentL(const TDesC8& aBytes, TInt aErrorCode);
	void OnStartPrefixMappingL(const RString& aPrefix, const RString& aUri, TInt aErrorCode);
	void OnEndPrefixMappingL(const RString& aPrefix, TInt aErrorCode);
	void OnIgnorableWhiteSpaceL(const TDesC8& aBytes, TInt aErrorCode);
	void OnSkippedEntityL(const RString& aName, TInt aErrorCode);
	void OnProcessingInstructionL(const TDesC8& aTarget, const TDesC8& aData, TInt aErrorCode);
	void OnError(TInt aErrorCode);
	TAny* GetExtendedInterface(const TInt32 aUid) ;
	
private:
	// Constructors and destructor
	HBufC* Copy8To16LC(const TDesC8& aDes);
	
private:
	CNPRStoryXmlParser(RPointerArray<CNPRStory>* aStoryArray);
	void ConstructL();
	
private:
	CNPRStory*					iCurrentStory; 
	TNPRNewsState 				iState;
	RPointerArray<CNPRStory>* 	iStoryArray; //it doesn't take ownership, do not delete
	HBufC8* 					iTagName;
	TBool 						iStory;
	};

#endif // __NPR_STORY_XML_PARSER_H__