websrv_pub/xml_fragment_api/tsrc/bc/senfragment/src/maindomfragment.cpp
branchRCL_3
changeset 34 f68f07157250
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/websrv_pub/xml_fragment_api/tsrc/bc/senfragment/src/maindomfragment.cpp	Thu Jul 15 19:53:58 2010 +0300
@@ -0,0 +1,191 @@
+/*
+* Copyright (c) 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 "maindomfragment.h"
+#include "SenFragmentBase.h"
+
+namespace
+    {
+	const TInt KStateParsingDelegate    = 100;
+    _LIT8(KMainFragmentXmlns,   "urn:main:fragment");
+    _LIT8(KMainFragmentName,    "MainFragment");
+    _LIT8(KMainFragmentQName,   "mn:MainFragment");	
+    _LIT8(KDelegateName,        "DelegateFragment");
+    }
+
+CMainDomFragment* CMainDomFragment::NewL()
+    {
+    CMainDomFragment* pNew = NewLC();
+    CleanupStack::Pop(); // pNew;
+    return pNew;
+    }
+
+CMainDomFragment* CMainDomFragment::NewLC()
+    {
+    CMainDomFragment* pNew = new (ELeave) CMainDomFragment;
+    CleanupStack::PushL(pNew);
+    pNew->BaseConstructL();
+    return pNew;
+    }
+
+
+CMainDomFragment* CMainDomFragment::NewL(
+    const TDesC8& aNsUri,
+    const TDesC8& aLocalName,
+    const TDesC8& aQName
+    )
+    {
+    CMainDomFragment* pNew = NewLC( aNsUri, aLocalName, aQName );
+    CleanupStack::Pop(); // pNew;
+    return pNew;
+    }
+
+CMainDomFragment* CMainDomFragment::NewLC(
+    const TDesC8& aNsUri,
+    const TDesC8& aLocalName,
+    const TDesC8& aQName
+    )
+    {
+    CMainDomFragment* pNew = new (ELeave) CMainDomFragment;
+    CleanupStack::PushL(pNew);
+    pNew->BaseConstructL(aNsUri, aLocalName, aQName);
+    return pNew;
+    }
+
+
+CMainDomFragment::CMainDomFragment()
+: ipDelegateFragment(NULL)
+    {
+    }
+
+void CMainDomFragment::BaseConstructL()
+    {
+    CSenDomFragmentBase::BaseConstructL(
+        KMainFragmentXmlns,
+        KMainFragmentName,
+        KMainFragmentQName
+        );
+    }
+
+void CMainDomFragment::BaseConstructL(
+    const TDesC8& aNsUri,
+    const TDesC8& aLocalName,
+    const TDesC8& aQName
+    )
+    {
+    CSenDomFragmentBase::BaseConstructL(aNsUri, aLocalName, aQName);
+    }
+
+CMainDomFragment::~CMainDomFragment()
+    {
+    delete ipDelegateFragment;
+    }
+
+void CMainDomFragment::OnStartElementL(const RTagInfo& aElement,
+                                    const RAttributeArray& aAttributes,
+                                    TInt aErrorCode)
+    {
+    switch (iState)
+        {
+        case KSenStateSave:
+            {
+            const TPtrC8 saxLocalName   = aElement.LocalName().DesC();
+            
+            if (saxLocalName == KDelegateName)
+                {
+                const TPtrC8 saxNsUri       = aElement.Uri().DesC();
+                const TPtrC8 saxPrefix      = aElement.Prefix().DesC();
+                
+                TXmlEngElement element = AsElementL();
+                RSenDocument& document = AsDocumentL();
+
+				ipDelegateFragment = CDelegateDomFragment::NewL(
+					                         saxNsUri, saxLocalName,
+					                         saxPrefix, aAttributes,
+					                         element, document
+					                         );
+                
+                iState = KStateParsingDelegate;
+                
+                OnDelegateParsingL(*ipDelegateFragment);
+                }
+            else
+                {
+                CSenDomFragmentBase::OnStartElementL(aElement, aAttributes,
+                                                  aErrorCode);
+                }
+            break;
+            }
+        default:
+            {
+            CSenDomFragmentBase::OnStartElementL(aElement, aAttributes,
+                                            aErrorCode);
+            break;
+            }
+        }
+    }
+
+void CMainDomFragment::OnEndElementL(const RTagInfo& aElement,
+        						          TInt aErrorCode)
+
+    {
+    switch(iState)
+        {
+        case KStateParsingDelegate:
+            {
+            iState = KSenStateSave;
+            break;
+            }
+
+        default:
+            {
+            CSenDomFragmentBase::OnEndElementL(aElement, aErrorCode);
+            break;
+            }
+        }
+    }
+    
+void CMainDomFragment::OnResumeParsingFromL(const RTagInfo& aElement,
+                                                TInt aErrorCode)
+    {
+    SetContentHandler(*this);
+
+    switch (iState)
+        {
+        // no other states may be resumed(!)
+        case KStateParsingDelegate:
+            {
+            OnEndElementL(aElement, aErrorCode);
+            }
+            break;
+        }    
+    }
+    
+CDelegateDomFragment& CMainDomFragment::DelegateFragment()
+    {
+    return *ipDelegateFragment;
+    }
+
+// END OF FILE
+