📄 _address_book_engine_8cpp-source.html
字号:
<a name="l00250"></a>00250 <span class="comment">// gets the XML query based on the search parameter passed</span><a name="l00251"></a>00251 <span class="comment">// SAMPLE XML Request is </span><a name="l00252"></a>00252 <span class="comment">// </span><a name="l00253"></a>00253 <span class="comment">// <ab:Query xmlns:ab=\"urn:nokia:test:addrbook:2004-09\"></span><a name="l00254"></a>00254 <span class="comment">// <ab:QueryItem></span><a name="l00255"></a>00255 <span class="comment">// <ab:Select> </span><a name="l00256"></a>00256 <span class="comment">// ab:Card[contains(ab:N ab:FAMILY,"%S") or contains(ab:N ab:GIVEN, "%S") or contains(ab:TEL, "%S")]</span><a name="l00257"></a>00257 <span class="comment">// </ab:Select></span><a name="l00258"></a>00258 <span class="comment">// </ab:QueryItem></span><a name="l00259"></a>00259 <span class="comment">// <ab:ResourceID></span><a name="l00260"></a>00260 <span class="comment">// XYZ</span><a name="l00261"></a>00261 <span class="comment">// </ab:ResourceID></span><a name="l00262"></a>00262 <span class="comment">// </ab:Query></span><a name="l00263"></a>00263 <span class="comment">//</span><a name="l00264"></a>00264 <span class="comment">// The %S will be replaced with the value entered by user as search string</span><a name="l00265"></a>00265 <span class="comment">// ----------------------------------------------------------------------------</span><a name="l00266"></a>00266 <span class="comment">//</span><a name="l00267"></a><a class="code" href="class_c_address_book_engine.html#95d3e261b03f0a2bf7f648406a80904f">00267</a> HBufC8* <a class="code" href="class_c_address_book_engine.html#95d3e261b03f0a2bf7f648406a80904f">CAddressBookEngine::GenerateQueryRequestL</a>(<span class="keyword">const</span> TDesC& aSearchPattern)<a name="l00268"></a>00268 {<a name="l00269"></a>00269 _LIT( KGenQueryReqL, <span class="stringliteral">"CAddressBookEngine::GenerateQueryRequestL(const TDesC& aSearchPattern)"</span>);<a name="l00270"></a>00270 LOG( KGenQueryReqL);<a name="l00271"></a>00271 <a name="l00272"></a>00272 <span class="comment">// Create Query Tag</span><a name="l00273"></a>00273 _LIT8 (KElement, <span class="stringliteral">"Query"</span>);<a name="l00274"></a>00274 CSenElement* element = CSenBaseElement::NewL(KElement);<a name="l00275"></a>00275 CleanupStack::PushL(element);<a name="l00276"></a>00276 element->SetNamespaceL(KQueryNS, KPpContract);<a name="l00277"></a>00277 <a name="l00278"></a>00278 <span class="comment">// Create QueryItem element</span><a name="l00279"></a>00279 _LIT8 (KQueryItem, <span class="stringliteral">"ab:QueryItem"</span>); <a name="l00280"></a>00280 CSenElement* queryItem = CSenBaseElement::NewL(KQueryItem);<a name="l00281"></a>00281 CleanupStack::PushL(queryItem);<a name="l00282"></a>00282 <a name="l00283"></a>00283 <span class="comment">// Create Select element</span><a name="l00284"></a>00284 _LIT8 (KSelectElement, <span class="stringliteral">"ab:Select"</span>);<a name="l00285"></a>00285 CSenBaseElement* selectElement=CSenBaseElement::NewL(KSelectElement); <a name="l00286"></a>00286 CleanupStack::PushL(selectElement);<a name="l00287"></a>00287 <a name="l00288"></a>00288 <span class="comment">//Create temporary buffer and perform UTF8 conversion for parameter passed </span><a name="l00289"></a>00289 HBufC8* tempBuffer = HBufC8::NewLC(512); <a name="l00290"></a>00290 TPtr8 ptrSelectQuery = tempBuffer->Des(); <a name="l00291"></a>00291 HBufC8* pattern = SenXmlUtils::ToUtf8LC(aSearchPattern); <a name="l00292"></a>00292 <span class="comment">//Replace %S with pattern passed in parameter</span><a name="l00293"></a>00293 ptrSelectQuery.Format(KSelectQuery, pattern, pattern, pattern); <a name="l00294"></a>00294 <a name="l00295"></a>00295 selectElement->SetContentL(ptrSelectQuery); <a name="l00296"></a>00296 <span class="comment">// Add select element to QueryItem</span><a name="l00297"></a>00297 queryItem->AddElementL(*selectElement);<a name="l00298"></a>00298 <a name="l00299"></a>00299 <span class="comment">//Add QueryItemto Query</span><a name="l00300"></a>00300 element->AddElementL(*queryItem);<a name="l00301"></a>00301 <a name="l00302"></a>00302 <span class="comment">// Next phase is to create and add ResourceID element into the query.</span><a name="l00303"></a>00303 CSenElement* resourceID = <a class="code" href="class_c_address_book_engine.html#14d7e3cddf3d688054a3b08f070919af">ResolveResourceIdL</a>();<a name="l00304"></a>00304 CSenBaseElement* resourceElement = NULL; <a name="l00305"></a>00305 <span class="keywordflow">if</span>(resourceID)<a name="l00306"></a>00306 {<a name="l00307"></a>00307 <span class="comment">// (Encrypted)Resource was successfully resolved. Now check</span><a name="l00308"></a>00308 <span class="comment">// whether plain ResourceID or EncryptedResourceID is</span><a name="l00309"></a>00309 <span class="comment">// available and create according element into the query.</span><a name="l00310"></a>00310 <span class="keywordflow">if</span> (resourceID->Content().Find(KEncrypted()) != KErrNotFound) <a name="l00311"></a>00311 {<a name="l00312"></a>00312 _LIT( KEncResID, <span class="stringliteral">"EncryptedResourceID exists."</span>);<a name="l00313"></a>00313 LOG(KEncResID);<a name="l00314"></a>00314 _LIT8 (KResourceElement, <span class="stringliteral">"ab:EncryptedResourceID"</span>);<a name="l00315"></a>00315 resourceElement = CSenBaseElement::NewL(KResourceElement);<a name="l00316"></a>00316 CleanupStack::PushL(resourceElement); <a name="l00317"></a>00317 <span class="comment">// copy the actual resource id content</span><a name="l00318"></a>00318 resourceElement->CopyFromL(*resourceID);<a name="l00319"></a>00319 }<a name="l00320"></a>00320 <span class="keywordflow">else</span><a name="l00321"></a>00321 {<a name="l00322"></a>00322 _LIT( KOnlyPlainResID, <span class="stringliteral">"Only plain ResourceID should be used (not encrypted)."</span>);<a name="l00323"></a>00323 LOG( KOnlyPlainResID);<a name="l00324"></a>00324 _LIT8 (KResourceElement, <span class="stringliteral">"ab:ResourceID"</span>);<a name="l00325"></a>00325 resourceElement = CSenBaseElement::NewL(KResourceElement);<a name="l00326"></a>00326 CleanupStack::PushL(resourceElement); <a name="l00327"></a>00327 <span class="comment">// Copy the actual resource id content</span><a name="l00328"></a>00328 resourceElement->CopyFromL(*resourceID);<a name="l00329"></a>00329 }<a name="l00330"></a>00330 }<a name="l00331"></a>00331 <span class="keywordflow">else</span><a name="l00332"></a>00332 {<a name="l00333"></a>00333 _LIT( KErrResID, <span class="stringliteral">"Error: could not resolve ResourceID!"</span>);<a name="l00334"></a>00334 LOG( KErrResID);<a name="l00335"></a>00335 _LIT8 (KResourceElement, <span class="stringliteral">"ab:ResourceID"</span>);<a name="l00336"></a>00336 resourceElement=CSenBaseElement::NewL(KResourceElement); <a name="l00337"></a>00337 CleanupStack::PushL(resourceElement); <a name="l00338"></a>00338 resourceElement->SetContentL(KResourceIDVal); <span class="comment">// example content</span><a name="l00339"></a>00339 }<a name="l00340"></a>00340 element->AddElementL(*resourceElement);<a name="l00341"></a>00341 CleanupStack::Pop(resourceElement); <a name="l00342"></a>00342 <a name="l00343"></a>00343 <span class="comment">//Get the XML</span><a name="l00344"></a>00344 HBufC8* soapBuf = element->AsXmlL();<a name="l00345"></a>00345 <a name="l00346"></a>00346 <span class="comment">// Log the XML request</span><a name="l00347"></a>00347 _LIT( KGenQuery, <span class="stringliteral">"Generated Query:"</span>);<a name="l00348"></a>00348 LOG( KGenQuery);<a name="l00349"></a>00349 LOG_ALL(( soapBuf->Des() ));<a name="l00350"></a>00350 <a name="l00351"></a>00351 <span class="comment">//Destroy the objects pushed on cleanup stack</span><a name="l00352"></a>00352 CleanupStack::PopAndDestroy(pattern);<a name="l00353"></a>00353 CleanupStack::PopAndDestroy(tempBuffer);<a name="l00354"></a>00354 CleanupStack::Pop(selectElement);<a name="l00355"></a>00355 CleanupStack::Pop(queryItem);<a name="l00356"></a>00356 CleanupStack::PopAndDestroy(element);<a name="l00357"></a>00357 <span class="comment">//return Pointer to Soap Request Buffer;</span><a name="l00358"></a>00358 <span class="keywordflow">return</span> soapBuf;<a name="l00359"></a>00359 }<a name="l00360"></a>00360 <a name="l00361"></a>00361 <span class="comment">// ----------------------------------------------------------------------------</span><a name="l00362"></a>00362 <span class="comment">// CAddressBookEngine::SendSearchL(const TDesC& aSearchPattern)</span><a name="l00363"></a>00363 <span class="comment">// function is called after an user has selected Search from the GUI </span><a name="l00364"></a>00364 <span class="comment">// and typed a request. Function creates a search pattern from the descriptor</span><a name="l00365"></a>00365 <span class="comment">// and send it to the WSP. The message from server is received through </span><a name="l00366"></a>00366 <span class="comment">// HandleMessageL() or an error is received through HandleErrorL().</span><a name="l00367"></a>00367 <span class="comment">// ----------------------------------------------------------------------------</span><a name="l00368"></a>00368 <span class="comment">//</span><a name="l00369"></a><a class="code" href="class_c_address_book_engine.html#747630896453ebd94401850077f9ce1e">00369</a> <span class="keywordtype">void</span> <a class="code" href="class_c_address_book_engine.html#747630896453ebd94401850077f9ce1e">CAddressBookEngine::SendSearchL</a>(<span class="keyword">const</span> TDesC& aSearchPattern)<a name="l00370"></a>00370 { <a name="l00371"></a>00371 _LIT( KSendSearchL, <span class="stringliteral">"CAddressBookEngine::SendSearchL()"</span>);<a name="l00372"></a>00372 LOG(KSendSearchL);<a name="l00373"></a>00373 <a class="code" href="class_c_address_book_engine.html#b07a7dadac01652ed3d4d68d40d79a15">iErrorState</a> = ENoError;<a name="l00374"></a>00374 <span class="keywordflow">if</span> (!<a class="code" href="class_c_address_book_engine.html#f702971f167e073a81134fd2876d0298">iConnection</a>)<a name="l00375"></a>00375 {<a name="l00376"></a>00376 _LIT( KConnNotReady, <span class="stringliteral">"Connection not ready."</span>);<a name="l00377"></a>00377 LOG(KConnNotReady);<a name="l00378"></a>00378 <a class="code" href="class_c_address_book_engine.html#5598d19cc10719afd28055422087a200">iObserver</a>.<a class="code" href="class_m_address_book_engine_observer.html#b3a39294ac41ecd9ba1eaae63fc36346">ErrorL</a>(EConnectionNotReady);<a name="l00379"></a>00379 <span class="keywordflow">return</span>;<a name="l00380"></a>00380 }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -