websrv_pub/xml_extensions_api/tsrc/bc/xml_extensions_api/src/SAXTester.cpp
changeset 0 62f9d29f7211
equal deleted inserted replaced
-1:000000000000 0:62f9d29f7211
       
     1 /*
       
     2 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:
       
    15 *
       
    16 */
       
    17 
       
    18 #include "SAXTester.h"
       
    19 #include "WSTester.h"
       
    20 
       
    21 #define STATUS_NEW 0
       
    22 #define STATUS_READY 1
       
    23 #define STATUS_EXPIRED 2
       
    24 
       
    25 namespace
       
    26 	{
       
    27 	}
       
    28 
       
    29 enum TErrorState
       
    30 	{
       
    31 	ENoError = 0,
       
    32 	ESoapError,
       
    33 	ENestedError
       
    34 	};
       
    35 
       
    36 CSAXTester::CSAXTester( ):
       
    37 	iDelegate(NULL)
       
    38     {
       
    39 	iStartElem = 0;
       
    40 	iEndElem = 0;
       
    41 	iContent = 0;
       
    42 	iRunCase = 0;
       
    43 	iAsXml	 = NULL;
       
    44     }
       
    45 CSAXTester::~CSAXTester()
       
    46 	{
       
    47 	delete iXmlReader;
       
    48 	delete iAsXml;
       
    49 	if(iDelegate)
       
    50 		{
       
    51 //		iDelegate->ExtractElement(); // if delegate's element is onwned by this class
       
    52 		delete iDelegate;
       
    53 		}
       
    54 	}
       
    55 
       
    56 CSAXTester* CSAXTester::NewL(const TDesC8& aLocalName)
       
    57 	{
       
    58 	CSAXTester* saxTester = new (ELeave) CSAXTester();
       
    59 	CleanupStack::PushL(saxTester);
       
    60 	saxTester->ConstructL( aLocalName );
       
    61 	CleanupStack::Pop();
       
    62 	return saxTester;
       
    63 	}
       
    64 
       
    65 CSAXTester* CSAXTester::NewL(const TDesC8& aNsUri, const TDesC8& aLocalName )
       
    66 	{
       
    67 	CSAXTester* saxTester = new (ELeave) CSAXTester();
       
    68 	CleanupStack::PushL(saxTester);
       
    69 	saxTester->ConstructL( aNsUri, aLocalName );
       
    70 	CleanupStack::Pop();
       
    71 	return saxTester;
       
    72 	}
       
    73 CSAXTester* CSAXTester::NewL(const TDesC8& aNsUri, const TDesC8& aLocalName, const TDesC8& aQName  )
       
    74 	{
       
    75 	CSAXTester* saxTester = new (ELeave) CSAXTester();
       
    76 	CleanupStack::PushL(saxTester);
       
    77 	saxTester->ConstructL( aNsUri, aLocalName, aQName );
       
    78 	CleanupStack::Pop();
       
    79 	return saxTester;
       
    80 	}
       
    81 CSAXTester* CSAXTester::NewL(const TDesC8& aNsUri, const TDesC8& aLocalName, const TDesC8& aQName, const RAttributeArray& apAttrs  )
       
    82 	{
       
    83 	CSAXTester* saxTester = new (ELeave) CSAXTester();
       
    84 	CleanupStack::PushL(saxTester);
       
    85 	saxTester->ConstructL( aNsUri, aLocalName, aQName, apAttrs );
       
    86 	CleanupStack::Pop();
       
    87 	return saxTester;
       
    88 	}
       
    89 CSAXTester* CSAXTester::NewL(const TDesC8& aNsUri, const TDesC8& aLocalName, const TDesC8& aQName, const RAttributeArray& apAttrs, CSenElement& aParent  )
       
    90 	{
       
    91 	CSAXTester* saxTester = new (ELeave) CSAXTester();
       
    92 	CleanupStack::PushL(saxTester);
       
    93 	saxTester->ConstructL( aNsUri, aLocalName, aQName, apAttrs, aParent );
       
    94 	CleanupStack::Pop();
       
    95 	return saxTester;
       
    96 	}
       
    97 
       
    98 CSAXTester* CSAXTester::NewL(CSenElement& aParent  )
       
    99 	{
       
   100 	CSAXTester* saxTester = new (ELeave) CSAXTester();
       
   101 	CleanupStack::PushL(saxTester);
       
   102 	saxTester->ConstructL( aParent );
       
   103 	CleanupStack::Pop();
       
   104 	return saxTester;
       
   105 	}
       
   106 
       
   107 void CSAXTester::ConstructL()
       
   108 	{
       
   109 //	CSenBaseFragment::BaseConstructL(KPpContract, KQueryResponseLocalName);
       
   110 	//iReader.CreateL();
       
   111 	iXmlReader = CSenXmlReader::NewL();
       
   112 	}
       
   113 void CSAXTester::ConstructL( const TDesC8& aLocalName )
       
   114 	{
       
   115 	CSenBaseFragment::BaseConstructL( aLocalName );
       
   116 	//iReader.CreateL();
       
   117 	iXmlReader = CSenXmlReader::NewL();
       
   118 	}
       
   119 
       
   120 void CSAXTester::ConstructL( const TDesC8& aNsUri, const TDesC8& aLocalName  )
       
   121 	{
       
   122 	CSenBaseFragment::BaseConstructL( aNsUri, aLocalName );
       
   123 	//iReader.CreateL();
       
   124 	iXmlReader = CSenXmlReader::NewL();
       
   125 	}
       
   126 
       
   127 void CSAXTester::ConstructL( const TDesC8& aNsUri, const TDesC8& aLocalName, const TDesC8& aQName )
       
   128 	{
       
   129 	CSenBaseFragment::BaseConstructL( aNsUri, aLocalName, aQName );
       
   130 	//iReader.CreateL();
       
   131 	iXmlReader = CSenXmlReader::NewL();
       
   132 	}
       
   133 void CSAXTester::ConstructL( const TDesC8& aNsUri, const TDesC8& aLocalName, const TDesC8& aQName, const RAttributeArray& apAttrs )
       
   134 	{
       
   135 	CSenBaseFragment::BaseConstructL( aNsUri, aLocalName, aQName, apAttrs );
       
   136 	//iReader.CreateL();
       
   137 	iXmlReader = CSenXmlReader::NewL();
       
   138 	}
       
   139 void CSAXTester::ConstructL( const TDesC8& aNsUri, const TDesC8& aLocalName, const TDesC8& aQName, const RAttributeArray& apAttrs, CSenElement& aParent )
       
   140 	{
       
   141 	CSenBaseFragment::BaseConstructL( aNsUri, aLocalName, aQName, apAttrs, aParent );
       
   142 	//iReader.CreateL();
       
   143 	iXmlReader = CSenXmlReader::NewL();
       
   144 	}
       
   145 void CSAXTester::ConstructL( CSenElement& aParent )
       
   146 	{
       
   147 	CSenBaseFragment::BaseConstructL( aParent );
       
   148 	//iReader.CreateL();
       
   149 	iXmlReader = CSenXmlReader::NewL();
       
   150 	}
       
   151 
       
   152 void CSAXTester::StartElementL(	const TDesC8& aNsUri,
       
   153 										const TDesC8& aLocalName,
       
   154 										const TDesC8& aQName,
       
   155 										const RAttributeArray& aAttrs)
       
   156 	{
       
   157 	
       
   158 	iStartElem++;
       
   159 
       
   160 	if (iRunCase == KDelegateParsing && aLocalName == KL2Name8)
       
   161 		{
       
   162 		iState = KStateIgnore;
       
   163 		iDelegate = CSenBaseFragment::NewL(KL2Name8);
       
   164 		DelegateParsingL( *iDelegate );
       
   165 		}
       
   166 	else if (iRunCase == KDelegateParsing2 && iStartElem == 2)
       
   167 		{
       
   168 		iState = KStateIgnore;
       
   169 		DelegateParsingL( aNsUri, aLocalName, aQName, aAttrs );
       
   170 		
       
   171 		}
       
   172    	else if (iRunCase == KDetach && aLocalName == KL2Name8)
       
   173 		{
       
   174 		iState = KStateIgnore;
       
   175 		iDelegate = CSenBaseFragment::NewL( KDefaultNS(), KL2Name8()  );
       
   176 		DelegateParsingL( *iDelegate );
       
   177 
       
   178 		}
       
   179 	else 
       
   180 		{
       
   181 		CSenBaseFragment::StartElementL( aNsUri, aLocalName, aQName , aAttrs );
       
   182 		}
       
   183 
       
   184 	
       
   185 //	LOG_L("CAddressBookEngine::StartElementL() ***");
       
   186 //	LOG_FORMAT((_L("- namespace URI  (%S)"), aNsUri));
       
   187 //	LOG_FORMAT((_L("- localname      (%S)"), aLocalName));
       
   188 //	LOG_FORMAT((_L("- qualified name (%S)"), aQName));
       
   189 //
       
   190 //	if (aLocalName == KStatus)
       
   191 //		{
       
   192 //		
       
   193 //		if (SenXmlUtils::LocalName(SenXmlUtils::AttrValue(aAttrs, KCode)) != KOk)
       
   194 //			{
       
   195 //			iErrorState = ENestedError;
       
   196 //			delete iFaultDelegate;
       
   197 //			iFaultDelegate = NULL;
       
   198 //			iFaultDelegate = CSenDomFragment::NewL(aNsUri,
       
   199 //							aLocalName, aQName, aAttrs);
       
   200 //			DelegateParsingL(*iFaultDelegate);
       
   201 //			return;
       
   202 //			}
       
   203 //		}
       
   204 //	else if (aLocalName == KCard)
       
   205 //		{
       
   206 //		iErrorState = ENoError;
       
   207 //
       
   208 //		CContact* delegate = CContact::NewL();
       
   209 //		iContacts.Append(delegate);
       
   210 //		DelegateParsingL(*delegate);
       
   211 //		return;
       
   212 //		}
       
   213 	}
       
   214 void CSAXTester::EndElementL(	const TDesC8& aNsUri,
       
   215 										const TDesC8& aLocalName,
       
   216 										const TDesC8& aQName)
       
   217 	{
       
   218 	iEndElem++;
       
   219 	if(iRunCase == KDelegateParsing || iRunCase == KDelegateParsing2 || 
       
   220 		iRunCase == KDetach )
       
   221 		{
       
   222 		if(aLocalName == KL2Name8 )
       
   223 			{
       
   224 			// got a call from delegate created by this class
       
   225 			iState = KStateSave;
       
   226 
       
   227 			// we could delete delegate here to efficiently free memory
       
   228 			// asap
       
   229 			}
       
   230 		else
       
   231 			{
       
   232 			CSenBaseFragment::EndElementL( aNsUri, aLocalName, aQName );
       
   233 			}
       
   234 		}
       
   235 	else
       
   236 		{
       
   237 		CSenBaseFragment::EndElementL( aNsUri, aLocalName, aQName );
       
   238 		}
       
   239 //	if(aLocalName == KStatus)
       
   240 //		{
       
   241 //		if (iErrorState == ENestedError)
       
   242 //			{
       
   243 //			iErrorState = ENoError;
       
   244 //			CSenElement* statusElement = NULL;
       
   245 //			if (iFaultDelegate)
       
   246 //				{
       
   247 //					statusElement =
       
   248 //						iFaultDelegate->AsElement().Element(KStatus);
       
   249 //				}
       
   250 //
       
   251 //			if(statusElement)
       
   252 //				{
       
   253 //				const TDesC8* errorCode = statusElement->AttrValue(KCode);
       
   254 //				iContacts.ResetAndDestroy();
       
   255 //				if (errorCode)
       
   256 //					{
       
   257 //					if (SenXmlUtils::LocalName(*errorCode) == KTooManyMatches)
       
   258 //						{
       
   259 //						iObserver.ErrorL(ETooManyMatches);
       
   260 //						}
       
   261 //					else
       
   262 //						{
       
   263 //						iObserver.ErrorL(ESearchFailed); // Default error
       
   264 //						}
       
   265 //					}
       
   266 //				}
       
   267 //			else
       
   268 //				{
       
   269 //				// could not find status element:
       
   270 //				iObserver.ErrorL(ESearchFailed); // Default error
       
   271 //				}
       
   272 //			}
       
   273 //		else if (iErrorState == ESoapError)
       
   274 //			{
       
   275 //			iErrorState = ENoError;
       
   276 //			delete iFaultDelegate;
       
   277 //			iFaultDelegate = NULL;
       
   278 //			iContacts.ResetAndDestroy();
       
   279 //			iObserver.ErrorL(ESearchFailed); // Default error
       
   280 //			}
       
   281 //
       
   282 //		}
       
   283 //	else
       
   284 //		{
       
   285 //		CSenBaseFragment::EndElementL(aNsUri, aLocalName, aQName);
       
   286 //		}
       
   287 	}
       
   288 
       
   289 void CSAXTester::CharactersL(	const TDesC8& aChars,
       
   290 								TInt aStart,
       
   291 								TInt aLength
       
   292 							)
       
   293 	{
       
   294 	CSenBaseFragment::CharactersL( aChars, aStart, aLength );
       
   295 
       
   296 	iContent++;
       
   297 	}
       
   298 
       
   299 TBool CSAXTester::CheckParsingStatus(TInt aStart, TInt aEnd, TInt aContent )
       
   300 	{
       
   301 		if (aStart != iStartElem || aEnd != iEndElem || aContent != iContent )
       
   302 			{
       
   303 			return EFalse;
       
   304 			}
       
   305 		else
       
   306 			{
       
   307 			return ETrue;
       
   308 			}
       
   309 	}
       
   310 void CSAXTester::SetRunCase(TInt aCase)
       
   311 	{
       
   312 	iRunCase = aCase;
       
   313 	}
       
   314 CSenBaseFragment* CSAXTester::GetDetachedDelegate()
       
   315 	{
       
   316 	iDelegate->DetachL();
       
   317 	return iDelegate;
       
   318 	}
       
   319 CSenBaseFragment* CSAXTester::GetDelegate()
       
   320 	{
       
   321 	return iDelegate;
       
   322 	}