diff -r 000000000000 -r f979ecb2b13e pimappsupport/vcardandvcal/Ticket/VTicketMaster.CPP --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pimappsupport/vcardandvcal/Ticket/VTicketMaster.CPP Tue Feb 02 10:12:19 2010 +0200 @@ -0,0 +1,646 @@ +// Copyright (c) 2001-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 "VTicketMaster.H" + +#include +#include + +#include +#include + + +EXPORT_C CParserVTicketmaster* CParserVTicketmaster::NewL() + { + CParserVTicketmaster* self=new(ELeave) CParserVTicketmaster(); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(self); + return self; + } + +CParserVTicketmaster::CParserVTicketmaster() +: CVersitParser(ESupportsVersion) + { + iDefaultVersion = KVersitTokenVTicketmasterVersionNo; + } + +EXPORT_C void CParserVTicketmaster::ExternalizeL(RWriteStream& aStream) + { + if (!iEntityName) + SetEntityNameL(KVersitVarTokenVCONCERT); + CVersitParser::ExternalizeL(aStream); + } + +EXPORT_C TUid CParserVTicketmaster::RecognizeToken(const TDesC8& aToken) const +// From CVersitParser + { + TUid uid = KNullUid; + TChar firstChar(aToken.Ptr()[0]); + firstChar=firstChar.GetUpperCase(); + switch (firstChar) + { + case 'V': + if (!aToken.CompareF(KVersitTokenVERSION)) + uid.iUid = KVersitPropertyHBufCUid; + break; + default: + break; + } + if (uid == KNullUid) + return CVersitParser::RecognizeToken(aToken); + return uid; + } + +EXPORT_C TUid CParserVTicketmasterEntity::RecognizeToken(const TDesC8& aToken) const +// From CVersitParser + { + TUid uid = KNullUid; + TChar firstChar(aToken.Ptr()[0]); + firstChar=firstChar.GetUpperCase(); + switch (firstChar) + { + case 'A': + if (!aToken.CompareF(KVersitTokenARTIST)) + uid.iUid = KVersitPropertyHBufCUid; + break; + case 'B': + if (!aToken.CompareF(KVersitTokenBOOKINGFEE)) + uid.iUid = KVTicketmasterPriceUid; + break; + case 'C': + if (!aToken.CompareF(KVersitTokenCONCERTDATE)) + uid.iUid = KVersitPropertyDateTimeUid; + break; + case 'E': + if (!aToken.CompareF(KVersitTokenEVENTCODE)) + uid.iUid = KVTicketmasterEventCodeUid; + break; + case 'N': + if (!aToken.CompareF(KVersitTokenNUMBEROFTICKETS)) + uid.iUid = KVersitPropertyIntUid; + break; + case 'O': + if (!aToken.CompareF(KVersitTokenORGANISATION)) + uid.iUid = KVersitPropertyHBufCUid; + else if (!aToken.CompareF(KVersitTokenOTHERRELATEDSHOWS)) + uid.iUid = KVTicketmasterOtherRelatedShowsId; + break; + case 'P': + if (!aToken.CompareF(KVersitTokenPRICELEVEL)) + uid.iUid = KVersitPropertyIntUid; + break; + case 'S': + if (!aToken.CompareF(KVersitTokenSEATNUMBERS)) + uid.iUid = KVTicketmasterSeatNumUid; + else if (!aToken.CompareF(KVersitTokenSUPPORTINGACT)) + uid.iUid = KVersitPropertyHBufCUid; + break; + case 'T': + if (!aToken.CompareF(KVersitTICKETTERMINAL)) + uid.iUid = KVersitPropertyIntUid; + else if (!aToken.CompareF(KVersitTokenTICKETPRICE)) + uid.iUid = KVTicketmasterPriceUid; + break; + case 'V': + if (!aToken.CompareF(KVersitTokenVENUE)) + uid.iUid = KVersitPropertyHBufCUid; + break; + default: + break; + } + if (uid == KNullUid) + return CVersitParser::RecognizeToken(aToken); + return uid; + } + +EXPORT_C TInt CParserVTicketmaster::RecognizeEntityName() const +// From CVersitParser + { + if (iCurrentProperty && iCurrentProperty->Value()) + { + TPtrC entityName=STATIC_CAST(CParserPropertyValueHBufC*,iCurrentProperty->Value())->Value(); + if (entityName==KVersitVarTokenVCONCERT) + return KVTicketmasterEntityUidVConcert; + else if (entityName==KVersitVarTokenVMUSICAL) + return KVTicketmasterEntityUidVMusical; + } + return 0; + } + +EXPORT_C CVersitParser* CParserVTicketmaster::MakeEntityL(TInt aEntityUid,HBufC* aEntityName) +// From CVersitParser + { + CVersitParser* newEntity = NULL; + CleanupStack::PushL(aEntityName); + switch (aEntityUid) + { + case KVTicketmasterEntityUidVConcert: + case KVTicketmasterEntityUidVMusical: + newEntity=CParserVTicketmasterEntity::NewL(); + break; + default: + //if entity is not concert nor musical, + //then create base class entity with no version + newEntity = new(ELeave) CVersitParser(ENoVersionProperty); + CleanupStack::PushL(newEntity); + newEntity->ConstructL(); + CleanupStack::Pop(newEntity); + } + CleanupStack::Pop(aEntityName); + CleanupStack::PushL(newEntity); //Cannot leave as we have just popped an item and the stack never shrinks + newEntity->InternalizeL(aEntityName, iLineReader); + CleanupStack::Pop(newEntity); + return newEntity; + } + +CParserPropertyValue* CParserVTicketmasterEntity::MakePropertyValueL(const TUid& aPropertyUid,HBufC16*& aValue) +// From CVersitParser + { + switch (aPropertyUid.iUid) + { + case KVTicketmasterPriceUid: //won't be recognized except by subclass + return MakePropertyValuePriceL(aValue->Des()); + case KVTicketmasterEventCodeUid: + return MakePropertyValueEventCodeL(aValue->Des()); + case KVTicketmasterSeatNumUid: + return MakePropertyValueSeatNumL(aValue->Des()); + case KVTicketmasterOtherRelatedShowsId: + { + CParserPropertyValue* value = NULL; + CPtrCArray* array=MakePropertyValueOtherRelatedShowsL(aValue->Des()); + CleanupStack::PushL(array); + value = new(ELeave) CParserPropertyValueOtherRelatedShows(array); + aValue = NULL; + CleanupStack::Pop(array); + return value; + } + + default: + break; + }; + return CVersitParser::MakePropertyValueL(aPropertyUid,aValue); + } + +EXPORT_C CParserPropertyValue* CParserVTicketmasterEntity::MakePropertyValuePriceL(TPtr16 aPriceValue) + { + const TInt stringLength = aPriceValue.Length(); + TInt valueInPennys = 0; + TInt valueInPounds = 0; + TChar currencySymbol = 0xa4; //£ symbol + + TInt i=0; + //check if there is any white space before hitting £ symbol + //we have assume the case that all price values are non-corrupted + while (VersitUtils::IsWhiteSpace(aPriceValue[i]) && i='0' && actualValue<='9')) && i='0' && actualValue<='9') + valueInPounds = 10*valueInPounds + actualValue -'0'; + if ((++i)='0' && actualValue<='9') + valueInPennys = 10*valueInPennys + actualValue -'0'; + if ((++i)seatLength=2, seat AB1->seatLength=3 + TSeatNum seat; + RArray seatArray; + TPtr16 specificSeat(&aSeatNum[0], seatLength, seatLength); //initialization of specificSeat + + while (i(TSeatNum::CompareSeats));; + } + else if (aSeatNum[i] == KHyphen) //if it is A1-7,A9 OR just A1-7 + { + specificSeat.Set(&aSeatNum[firstCharacterOfSeat], seatLength, seatLength); + CreateSeatsL(seat, specificSeat); + + seatLength = 0; + + ++i; + while (i+1<=stringLength && aSeatNum[i]!=KComma) + { + ++seatLength; + ++i; + } + + TInt temp; + TPtr16 num(&aSeatNum[i-seatLength], seatLength, seatLength); + Val(num, temp); + seat.iNextSeats = temp - seat.iSeatNum; + + seatArray.InsertInOrder(seat,TLinearOrder(TSeatNum::CompareSeats)); + + seatLength = 0; + + } + else if (i+1>=stringLength) //if it is the last one in the string + { + specificSeat.Set(&aSeatNum[firstCharacterOfSeat], seatLength+1, seatLength+1); + CreateSeatsL(seat, specificSeat); + + seatArray.InsertInOrder(seat,TLinearOrder(TSeatNum::CompareSeats));; + } + else + ++seatLength; + + ++i; + } + + //buf is for testing purpose - to check what is stored in the array + TBuf8<200> buf; + TInt arrayLength = seatArray.Count(); + for (TInt j=0; j='0' && aSpecificSeat[i]<='9')) + ++i; + + __ASSERT_ALWAYS(i<=2, User::Leave(KErrGeneral)); + + TPtr16 num(&aSpecificSeat[0], i, i); + aSeat.iRow = num; + + num.Set(&aSpecificSeat[i], stringLength-i, stringLength-i); + Val(num, aSeat.iSeatNum); + + aSeat.iNextSeats = 0; + + } + + +TInt TSeatNum::CompareSeats(const TSeatNum& aFirst, const TSeatNum& aSecond) + { + if (aFirst.iRow.Length() == aSecond.iRow.Length()) + { + if (aFirst.iRow.Length() == 1) + { + if (aFirst.iRow == aSecond.iRow) + return (aFirst.iSeatNum - aSecond.iSeatNum); + else + return (aFirst.iRow[0] - aSecond.iRow[0]); + } + else + { + if (aFirst.iRow[0] == aSecond.iRow[0]) + { + if (aFirst.iRow[1]==aSecond.iRow[1]) + return (aFirst.iSeatNum - aSecond.iSeatNum); + else + return (aFirst.iRow[1] - aSecond.iRow[1]); + } + else + return (aFirst.iRow[0] - aSecond.iRow[0]); + } + } + else + return (aFirst.iRow.Length() - aSecond.iRow.Length()); + } + + + +// +// input data may look like STEPS;KYLIE;SAM +// +CPtrCArray* CParserVTicketmasterEntity::MakePropertyValueOtherRelatedShowsL(TPtr16 aShow) + { + TInt stringLength = aShow.Length(); + CPtrCArray* arrayOfValues = new(ELeave)CPtrC16Array(5); + + TInt i = 0; + TInt showLength = 0; //length of the string of the show, say STEPS->showLength=5 + while(iAppendL(show); + showLength = 0; + } + else if (i+1>=stringLength) + { + TPtr16 show(&aShow[i-showLength], showLength+1, showLength+1); + arrayOfValues->AppendL(show); + } + else + ++showLength; + ++i; + } + + return arrayOfValues; + } + +//************************************************************************************* +// +// CParserPropertyValuePrice +// +//************************************************************************************* +EXPORT_C CParserPropertyValuePrice::CParserPropertyValuePrice(TChar aCurrencySymbol, TChar aDecimalPoint, TInt aPounds, TInt aPennys) +:CParserPropertyValue(TUid::Uid(KVTicketmasterPriceUid)) +,iCurrencySymbol(aCurrencySymbol) +,iDecimalPoint(aDecimalPoint) +,iPounds(aPounds) +,iPennys(aPennys) + {} + +EXPORT_C CParserPropertyValuePrice::~CParserPropertyValuePrice() + { + } + +EXPORT_C void CParserPropertyValuePrice::ExternalizeL(RWriteStream& aStream, const Versit::TEncodingAndCharset& /*aEncodingCharset*/ + ,TInt /*aLengthOutput*/) + { + TBuf8 buf; + buf.Append(iCurrencySymbol); + buf.AppendNum(iPounds); + buf.Append(iDecimalPoint); + buf.AppendNumFixedWidth(iPennys, EDecimal, 2); + aStream.WriteL(buf); + } + + +//************************************************************************************* +// +// CParserPropertyValueEventCode +// +//************************************************************************************* + +CParserPropertyValueEventCode::CParserPropertyValueEventCode(TInt aFirstCode, TInt aFirstCodeLength, + TInt aSecondCode, TInt aSecondCodeLength, + TInt aThirdCode, TInt aThirdCodeLength) +:CParserPropertyValue(TUid::Uid(KVTicketmasterEventCodeUid)) +,iFirstCode(aFirstCode) +,iSecondCode(aSecondCode) +,iThirdCode(aThirdCode) +,iFirstCodeLength(aFirstCodeLength) +,iSecondCodeLength(aSecondCodeLength) +,iThirdCodeLength(aThirdCodeLength) + {} + + +void CParserPropertyValueEventCode::ExternalizeL(RWriteStream& aStream, const Versit::TEncodingAndCharset& aEncodingCharset + ,TInt /*aLengthOutput*/) + { + + __ASSERT_ALWAYS(aEncodingCharset.iEncoding!=Versit::EBase64Encoding, TMPanic(EUnexpectedBase64)); + + TBuf8 buf; + buf.AppendNumFixedWidth(iFirstCode, EDecimal, iFirstCodeLength); + buf.Append('-'); + buf.AppendNumFixedWidth(iSecondCode, EDecimal, iSecondCodeLength); + buf.Append('-'); + buf.AppendNumFixedWidth(iThirdCode, EDecimal, iThirdCodeLength); + aStream.WriteL(buf); + } + + + +//************************************************************************************* +// +// CParserPropertyValueSeatNumL +// +//************************************************************************************* +CParserPropertyValueSeatNum::CParserPropertyValueSeatNum(RArray& aSeatArray) +:CParserPropertyValue(TUid::Uid(KVTicketmasterSeatNumUid)) +,iSeatArray(aSeatArray) + {} + +CParserPropertyValueSeatNum::~CParserPropertyValueSeatNum() + { + } + +void CParserPropertyValueSeatNum::ExternalizeL(RWriteStream& aStream, const Versit::TEncodingAndCharset& /*aEncodingCharset*/ + ,TInt /*aLengthOutput*/) + { + TBuf8 buf; + + iArrayLength = iSeatArray.Count(); + for (TInt i=0; i 0) + { + buf.Append(iSeatArray[i].iRow); + buf.AppendNum(iSeatArray[i].iSeatNum); + buf.Append('-'); + buf.AppendNum(iSeatArray[i].iNextSeats + iSeatArray[i].iSeatNum); + } + else + { + buf.Append(iSeatArray[i].iRow); + buf.AppendNum(iSeatArray[i].iSeatNum); + } + + if (i+1 buf; + TInt arraySize = iShowArray->Count(); + for (TInt j=0; jAt(j)); + + if (j+1ConstructL(); + CleanupStack::Pop(self); + return self; + } + +// Constructs a vTicketmaster sub-entity parser. +CParserVTicketmasterEntity::CParserVTicketmasterEntity() +: CVersitParser(EFalse) + { + } + +//The destructor is empty, and is present only to cause the virtual +//function table to be defined in a unique module. +CParserVTicketmasterEntity::~CParserVTicketmasterEntity() + { + } + +