webservices/wsdescription/src/senfacet.cpp
changeset 0 62f9d29f7211
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/webservices/wsdescription/src/senfacet.cpp	Thu Jan 07 16:19:19 2010 +0200
@@ -0,0 +1,193 @@
+/*
+* Copyright (c) 2002-2005 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 FILES 
+#include "SenFacet.h"
+
+EXPORT_C CSenFacet* CSenFacet::NewL()
+    {
+    CSenFacet* pNew = new (ELeave) CSenFacet;
+    CleanupStack::PushL(pNew);
+    pNew->ConstructL(KSenFacet);
+    CleanupStack::Pop(); // pNew
+    return pNew;
+    }
+
+EXPORT_C CSenFacet* CSenFacet::NewL(
+    const TDesC8& aNsUri,
+    const TDesC8& aLocalName,
+    const TDesC8& aQName,
+    const RAttributeArray& aAttributes
+    )
+    {
+    CSenFacet* pNew = new (ELeave) CSenFacet;
+    CleanupStack::PushL(pNew);
+    pNew->ConstructL(aNsUri, aLocalName, aQName, aAttributes);
+    CleanupStack::Pop(); // pNew
+    return pNew;
+    }
+
+EXPORT_C CSenFacet* CSenFacet::NewL(CSenElement& aCopiedSource)
+    {
+    CSenFacet* pNew = new (ELeave) CSenFacet;
+    CleanupStack::PushL(pNew);
+    pNew->ConstructL(aCopiedSource);
+    CleanupStack::Pop(); // pNew;
+    return pNew;
+    }
+
+
+EXPORT_C CSenFacet::~CSenFacet()
+    {
+    }
+
+EXPORT_C CSenFacet::CSenFacet()
+    {
+    }
+
+EXPORT_C void CSenFacet::ConstructL(const TDesC8& aLocalName)
+    {
+    BaseConstructL(aLocalName);
+    }
+
+EXPORT_C void CSenFacet::ConstructL(CSenElement& aCopiedSource)
+    {
+    BaseConstructL(aCopiedSource.LocalName());
+    CopyFromL(aCopiedSource);
+    }
+
+EXPORT_C void CSenFacet::ConstructL(const TDesC8& aNsUri,
+                             const TDesC8& aLocalName,
+                             const TDesC8& aQName,
+                             const RAttributeArray& aAttributes)
+    {
+    BaseConstructL(aNsUri, aLocalName, aQName, aAttributes);
+    }
+
+EXPORT_C void CSenFacet::SetNameL(const TDesC8& aName)
+    {
+    AddAttributeL(KFacetAttrName,aName);
+    }
+
+EXPORT_C void CSenFacet::SetTypeL(const TDesC8& aType)
+    {
+    AddAttributeL(KFacetAttrType,aType);
+    }
+
+EXPORT_C void CSenFacet::SetValueL(const TDesC8& aValue)
+    {
+    SetContentL(aValue);
+    }
+
+EXPORT_C TPtrC8 CSenFacet::Name()
+    {
+    const TDesC8* pAttrValue = AttrValue(KFacetAttrName);
+    if (pAttrValue) return TPtrC8(*pAttrValue);
+    else return KNullDesC8();
+    }
+
+EXPORT_C TPtrC8 CSenFacet::Type()
+    {
+    const TDesC8* pAttrValue = AttrValue(KFacetAttrType);
+    if (pAttrValue) return TPtrC8(*pAttrValue);
+    else return KNullDesC8();
+    }
+
+EXPORT_C TPtrC8 CSenFacet::Value()
+    {
+    return this->Content();
+    }
+    
+void CSenFacet::CopyFromL(CSenElement& aSource)
+    {
+    TPtrC8 sourceContent = aSource.Content();
+    if (sourceContent.Length() > 0)
+        {
+        if ( ! HasContent() )
+            {
+            SetContentL(sourceContent);
+            }
+        else
+            {
+            RWriteStream& ws = ContentWriteStreamL();
+            ws.WriteL(sourceContent);
+            }
+        }
+
+    RPointerArray<CSenBaseAttribute> sourceAttributes = aSource.AttributesL();
+    if (sourceAttributes.Count() > 0)
+        {
+        for (TInt i=0;i<sourceAttributes.Count(); i++)
+            {
+            CSenBaseAttribute* pBaseAttribute = sourceAttributes[i];
+
+            // duplicate check. Now overrides the original value
+            CSenBaseAttribute* pOriginal = FindAttr(pBaseAttribute->Name());
+            if (pOriginal)
+                {
+                pOriginal->SetValueL(pBaseAttribute->Value());
+                continue;
+                }
+
+            CSenBaseAttribute* pNewBaseAttribute =
+                CSenBaseAttribute::NewL(pBaseAttribute->Name(),
+                                        pBaseAttribute->Value());
+            CleanupStack::PushL(pNewBaseAttribute);
+            
+            RPointerArray<CSenBaseAttribute>& attributes = AttributesL();
+#ifdef EKA2
+            attributes.AppendL(pNewBaseAttribute);
+#else
+            User::LeaveIfError(attributes.Append(pNewBaseAttribute));
+#endif
+            CleanupStack::Pop(pNewBaseAttribute);
+            }
+        }
+
+    RPointerArray<CSenElement> sourceElements = aSource.ElementsL();
+    if (sourceElements.Count() > 0)
+        {
+        for (TInt i=0;i<sourceElements.Count(); i++)
+            {
+            CSenElement* pElement = sourceElements[i];
+            CSenElement* pNewElement =
+                                CSenBaseElement::NewL(pElement->LocalName());
+            pNewElement->SetParent(this);
+            CleanupStack::PushL(pNewElement);
+            pNewElement->CopyFromL(*pElement);
+            
+            RPointerArray<CSenElement>& elements = ElementsL();
+#ifdef EKA2
+            elements.AppendL(pNewElement);
+#else
+            User::LeaveIfError(elements.Append(pNewElement));
+#endif // EKA2
+            CleanupStack::Pop(pNewElement);
+            }
+        }
+    }
+    
+// End of File