webservices/wsstar/wsstarpolicy/src/wspolicyregistry.cpp
changeset 0 62f9d29f7211
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/webservices/wsstar/wsstarpolicy/src/wspolicyregistry.cpp	Thu Jan 07 16:19:19 2010 +0200
@@ -0,0 +1,217 @@
+/*
+* Copyright (c) 2006-2006 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 "wspolicyregistry.h"
+#include <SenXmlElement.h> // check if this include is needed(?)
+#include "wspolicy.h"
+
+using namespace WSPolicy;
+
+
+EXPORT_C CPolicyRegistry* CPolicyRegistry::NewL()
+{
+     CPolicyRegistry* pSelf =
+        CPolicyRegistry::NewLC();
+    CleanupStack::Pop(pSelf);
+    return pSelf;
+   
+}
+EXPORT_C CPolicyRegistry* CPolicyRegistry::NewLC()
+{
+    CPolicyRegistry* pSelf =
+                        new (ELeave) CPolicyRegistry();
+    CleanupStack::PushL(pSelf);
+    pSelf->ConstructL();
+    return pSelf;
+  
+}
+CPolicyRegistry::~CPolicyRegistry()
+{
+   iRegistry.Reset(); // destroys
+   delete iParent;
+}
+EXPORT_C void CPolicyRegistry::PopulateRegistryL(CSenElement* aServicePolicy)	//codescannerwarnings
+{
+    RPointerArray<CSenElement> policies;
+    CleanupClosePushL(policies);
+    aServicePolicy->ElementsL(policies,WSPolicy::KWsPolicyNsUri,WSPolicy::KWsPolicy);
+    
+    CSenElement* pPolicy = NULL;
+   
+    TInt count(policies.Count());
+
+    if(count > 0)
+    {
+        
+    for(TInt i=0; i<count; i++)
+        {
+        pPolicy = policies[i];
+        if(pPolicy)
+            {
+                TPtrC8 id = PolicyIdL(pPolicy);
+                TPtrC8 name = PolicyNameL(pPolicy);
+                if(id != KNullDesC8() && name != KNullDesC8())
+                RegisterPolicy(id, pPolicy);
+            }
+        }
+    }
+    
+    CleanupStack::PopAndDestroy(); // policies
+}
+EXPORT_C void CPolicyRegistry::ResetRegistry()
+{
+    iRegistry.Reset();
+}
+
+TPtrC8 CPolicyRegistry::PolicyIdL(CSenElement* aPolicy)
+{
+    RPointerArray<CSenBaseAttribute>& attrs = aPolicy->AttributesL();
+
+    CSenBaseAttribute* bs = NULL;
+    TInt ele_count = attrs.Count();
+         
+    for (TInt j=0; j < ele_count; j++)
+        {
+            
+        bs = (attrs)[j];
+        if(bs)
+
+        if(bs->Name().Compare(WSPolicy::KWsuId) == 0)
+            {
+             return bs->Value();
+            }
+         }
+
+    return KNullDesC8();
+}
+TPtrC8 CPolicyRegistry::PolicyNameL(CSenElement* aPolicy)
+{
+    RPointerArray<CSenBaseAttribute>& attrs = aPolicy->AttributesL();
+
+    CSenBaseAttribute* bs = NULL;
+    TInt ele_count = attrs.Count();
+         
+    for (TInt j=0; j < ele_count; j++)
+        {
+            
+        bs = (attrs)[j];
+        if(bs)
+
+        if(bs->Name().Compare(WSPolicy::KName) == 0)
+            {
+             return bs->Value();
+            }
+         }
+
+    return KNullDesC8();
+}
+
+
+EXPORT_C void CPolicyRegistry::SetParent(CPolicyRegistry* aParent)
+{
+    iParent = aParent;
+}
+EXPORT_C CPolicyRegistry* CPolicyRegistry::Parent()
+{
+    return iParent;
+}
+
+EXPORT_C CSenElement* CPolicyRegistry::LookupPolicyByNameL(const TPtrC8& aPolicyName)	//codescannerwarnings
+{
+    if(aPolicyName.Length() <1)
+        return NULL;
+    
+    TInt count = iRegistry.Count();
+    
+    for (TInt i = 0; i< count; i++)
+    {
+      CSenElement* policy = (CSenElement*)iRegistry.ValueAt(i);
+      
+      if(policy)
+      {
+        TPtrC8 name = PolicyNameL(policy);
+        TPtrC8 policyUri = CWSPolicyUtils::PolicyUriL(policy);
+        if(name != KNullDesC8() && (name.Compare(aPolicyName) == 0 
+                                || policyUri.Compare(aPolicyName) == 0))
+        {
+            return  policy;  
+        }
+      }
+        
+    }
+
+    return NULL;
+}
+EXPORT_C CSenElement* CPolicyRegistry::LookupPolicy(const TPtrC8& aPolicyID)
+{
+
+    TInt index = iRegistry.Find(aPolicyID);
+    if(index!=KErrNotFound)
+    {
+        CSenElement* policy = (CSenElement*)iRegistry.ValueAt(index);
+        TDesC8* policyId(iRegistry.KeyAt(index));
+
+        if (policy == NULL && iParent != NULL) 
+        {//No recursive calls as it is a flat array of policies
+//            policy = iParent->LookupPolicy(aPolicyURI);
+        }
+        
+        return policy;
+    }
+    else
+    return NULL;
+}
+EXPORT_C void CPolicyRegistry::RegisterPolicy(TDesC8& aPolicyID, CSenElement* aPolicy)
+{
+    
+    TInt index = iRegistry.Find(aPolicyID);
+    if(index == KErrNotFound)
+    {
+        TInt  append = iRegistry.Append(aPolicyID.Alloc(), aPolicy);    
+//        if(append==KErrNone) { }
+    }
+    
+}
+EXPORT_C void CPolicyRegistry::UnregisterPolicy(const TPtrC8& aPolicyID)
+{
+    TInt  retVal = iRegistry.RemoveByKey(aPolicyID);
+    if(retVal == KErrNone)
+    {
+        
+    }
+                
+}
+CPolicyRegistry::CPolicyRegistry():
+iRegistry(ETrue,EFalse),
+iParent(NULL)
+{
+    
+}
+void CPolicyRegistry::ConstructL()
+{
+//    if(aParent != NULL)
+//     iParent = aParent;       
+}