commsfwtools/preparedefaultcommsdatabase/src/CommsDatValidator.h
changeset 0 dfb7c4ff071f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/commsfwtools/preparedefaultcommsdatabase/src/CommsDatValidator.h	Thu Dec 17 09:22:25 2009 +0200
@@ -0,0 +1,425 @@
+// Copyright (c) 2004-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:
+// Data validation rules for CommsDat data
+// FILE CONTENTS :
+// 1/  CCDValidator Base class
+// 2/  Validator classes for particular records
+// a) CCDValidatorProxiesRecord
+// b) CCDValidatorLANServiceRecord
+// c) CCDValidatorTierRecord
+// d) CCDValidatorConnPref
+// e) CCDValidatorIAPRecord
+// VALIDATION
+// CCDValidator and derived classes implement validation rules for elements in the database
+// Not every element needs validation.  Database writers are trusted components
+// Validation is only necessary when data is written to the database
+// MAINTENANCE
+// Rules may need modification when the CommsDat schema changes
+// 
+//
+
+/**
+ @file 
+ @internalTechnology
+*/
+
+
+#if (!defined COMMSDATVALIDATOR_H)
+#define       COMMSDATVALIDATOR_H
+
+#include <cdbcols.h>
+
+//forward declarations
+//class CCDAPPrioritySelectionPolicyRecord;
+//class CCDAccessPointRecord;
+
+namespace CommsDatInternal
+/*
+@internalTechnology
+*/
+{
+
+
+/**************************************************************************************************
+ * 1/ VALIDATION BASE CLASSES 
+ *************************************************************************************************/
+
+
+NONSHARABLE_CLASS(CCDValidator) : public CBase
+/*
+Validates input data 
+
+Only for use where it is vital the data is correct
+Not all data entry is validated
+
+@internalComponent
+*/
+    {
+public :
+    
+    // Creates a validator class if there are validation rules for aElement
+    static void ValidateL(CMDBElement* aElement,CMDBSessionImpl& aSession
+#ifdef SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
+                          , TOperation aValidatorOperation = EModify
+#endif //SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
+                          );
+            
+    virtual ~CCDValidator();
+
+    // Performs any housekeeping if necessary upon deletion of a record.
+    // For example, applies the opposite rules to ValidateL().
+    virtual void OnDeleteL();
+
+    // Only ever created by the factory
+    CCDValidator(CMDBElement* aElement,CMDBSessionImpl& aSession);
+    
+
+private:
+
+    // Validates data using validation rules
+    // Leaves if it finds any errors in the data being submitted
+    virtual void DoValidateL();
+
+    CCDValidator();
+
+protected:
+    
+    //CMDBElement& iElement; // A reference to the element being validated
+    
+	// A pointer to the element being validated (the object DOESN'T 
+	// own the pointer!!!!!!)
+    CMDBElement* iElement; 
+    
+    CMDBSessionImpl& iSession;
+
+    };
+
+
+
+    
+/**************************************************************************************************
+ * 2/ VALIDATOR CLASSES FOR INDIVIDUAL ELEMENTS
+ *************************************************************************************************/
+
+
+
+/************************* 2 a) Validator for Proxy Table ******************************************
+ */
+NONSHARABLE_CLASS(CCDValidatorProxyRecord) : public CCDValidator
+    {
+public:
+    
+    virtual ~CCDValidatorProxyRecord()
+    	{
+    	delete iShadowElement;
+    	}
+    
+    CCDValidatorProxyRecord(CMDBElement* aElement,CMDBSessionImpl& aSession):CCDValidator(aElement,aSession){}
+    
+protected:
+
+    void DoValidateL();
+
+private:
+    //when only field validation is done the validator reads the whole record from the DB and acts as
+    //originally a record validation would be called. This element points to the record read from the
+    //dB.
+    CMDBElement* iShadowElement;
+    
+	void SetShadowElementL();
+    };
+
+
+/************************* 2 b) Validator for LanService Table ******************************************
+ */
+
+NONSHARABLE_CLASS(CCDValidatorLANServiceRecord) : public CCDValidator
+    {
+public:
+    
+    virtual ~CCDValidatorLANServiceRecord()
+    	{
+    	delete iShadowElement;
+    	}
+    
+    CCDValidatorLANServiceRecord(CMDBElement* aElement,CMDBSessionImpl& aSession):CCDValidator(aElement,aSession){}
+    
+protected:
+
+    void DoValidateL();
+    
+private:
+    //when only field validation is done the validator reads the whole record from the DB and acts as
+    //originally a record validation would be called. This element points to the record read from the
+    //dB.
+    CMDBElement* iShadowElement;
+    
+	void SetShadowElementL();
+    };
+
+
+
+#ifdef SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
+
+ /************************* 2 c) Validator for Tier Table ******************************************
+ */
+NONSHARABLE_CLASS(CCDValidatorTierRecord) : public CCDValidator
+    {
+public:
+    
+    virtual ~CCDValidatorTierRecord()
+    	{
+    	delete iShadowElement;
+    	}
+    
+    CCDValidatorTierRecord(CMDBElement* aElement,CMDBSessionImpl& aSession):CCDValidator(aElement,aSession){}
+    
+protected:
+
+    void DoValidateL();
+
+private:
+    //when only field validation is done the validator reads the whole record from the DB and acts as
+    //originally a record validation would be called. This element points to the record read from the
+    //dB.
+    CMDBElement* iShadowElement;
+    
+	void SetShadowElementL();
+    };
+
+#endif // SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
+
+
+#ifdef SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
+/**
+ This class is used by the CCDValidatorConnPref to generate the IPProto level AccessPoints
+ by mapping the ConnectionPreferences records to AccessPoint records.
+*/
+NONSHARABLE_CLASS(CIPProtoAPGenerator) : public CBase
+    {
+    public:
+        CIPProtoAPGenerator(CCDAPPrioritySelectionPolicyRecord* aSelPolRec,
+                            CMDBElement& aElement,  
+                            CMDBSessionImpl& aSession,
+                            TInt aLinkAPTagId)
+            : iSession(aSession)
+            , iElement(aElement)
+            , iAPSelPolRec(aSelPolRec)
+            , iLinkAPTagId(aLinkAPTagId)
+            {}
+                                       
+        virtual void DoTheWorkL() = 0;
+        
+        virtual ~CIPProtoAPGenerator() 
+            {
+            delete iAPSelPolRec;
+            }
+    
+    //protected to be able to access to these members from the derived classes.
+    //There is no point to write accessors just to access these members form the 
+    //dervied classes...
+    protected:
+        //void GenerateRecordName(TDes& aBuffer);
+        
+        
+        CMDBSessionImpl& iSession;
+        CMDBElement& iElement; // A reference to the element being validated                               CMDBSessionImpl& iSession
+        CCDAPPrioritySelectionPolicyRecord* iAPSelPolRec; //the ownership is here...
+        TInt iLinkAPTagId;
+    };
+
+NONSHARABLE_CLASS(CIPProtoAPModifier) : public CIPProtoAPGenerator
+    {
+    public:
+        CIPProtoAPModifier(CCDAPPrioritySelectionPolicyRecord* aSelPolRec,
+                           CMDBElement& aElement,  
+                           CMDBSessionImpl& aSession,
+                           TInt aLinkAPTagId)
+            : CIPProtoAPGenerator(aSelPolRec, aElement, aSession, aLinkAPTagId)
+            {}
+                           
+        virtual void DoTheWorkL();
+    };
+
+NONSHARABLE_CLASS(CIPProtoAPCreator) : public CIPProtoAPGenerator
+    {
+    public:
+        CIPProtoAPCreator(CCDAPPrioritySelectionPolicyRecord* aSelPolRec,
+                          CMDBElement& aElement,  
+                          CMDBSessionImpl& aSession,
+                          TInt aLinkAPTagId)
+            : CIPProtoAPGenerator(aSelPolRec, aElement, aSession, aLinkAPTagId)
+            {}
+        
+        virtual void DoTheWorkL();
+    };
+
+NONSHARABLE_CLASS(CIPProtoAPRemover) : public CIPProtoAPGenerator
+    {
+    public:
+        CIPProtoAPRemover(CCDAPPrioritySelectionPolicyRecord* aSelPolRec,
+                          CMDBElement& aElement,  
+                          CMDBSessionImpl& aSession)
+            : CIPProtoAPGenerator(aSelPolRec, aElement, aSession, 0)
+            {}
+        
+        virtual void DoTheWorkL();
+    };
+
+#endif //SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
+
+/************************* 2 d) Validator for Connection Preference Table ************************
+*/    
+NONSHARABLE_CLASS(CCDValidatorConnPref) : public CCDValidator
+    {
+public:
+
+    virtual ~CCDValidatorConnPref()
+        {
+#ifdef SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
+        delete iIPProtoGenerator;
+        delete iShadowElement;
+#endif //SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
+        }
+
+    CCDValidatorConnPref(CMDBElement* aElement,CMDBSessionImpl& aSession
+#ifdef SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
+                         ,TOperation aValidatorOperation
+#endif //SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
+                         )
+        :CCDValidator(aElement,aSession)
+#ifdef SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
+        , iOperation(aValidatorOperation)
+#endif //SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
+        {}
+    
+protected:
+
+    void DoValidateL();
+    
+private:
+
+    void ValidateBearerAndDirectionL(const TDesC& aServiceType, 
+                                     TCommDbConnectionDirection aDirection, 
+                                     TUint32 aBearerSet, 
+                                     TCommDbDialogPref aDlgPref);
+    
+#ifdef SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
+    CCDAPPrioritySelectionPolicyRecord* FindTheAPPrioritySelPolRecL(TInt aReferredIAPRecId);
+    
+    //This function returns with an IAP record number in the case if the defaultIAP
+    //field is not filled in the ConnPref record.
+    TInt FindIAPWithoutDefIAPL();
+    
+    void IPProtoAPGenerationOrModificationL();
+    
+    void SetShadowElementL();
+    
+    CIPProtoAPGenerator* iIPProtoGenerator;
+    TOperation iOperation;
+    //when only field validation is done the validator reads the whole record from the DB and acts as
+    //originally a record validation would be called. This element points to the record read from the
+    //dB.
+    CMDBElement* iShadowElement;
+#endif //SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
+    };
+
+
+
+/************************* 2 e) Validator for IAP Table ******************************************
+*/  
+  
+NONSHARABLE_CLASS(CCDValidatorIAPRecord) : public CCDValidator
+    {
+public:
+        
+    virtual ~CCDValidatorIAPRecord()
+    	{
+#ifdef SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
+    	delete iShadowElement;
+#endif
+    	}
+
+    CCDValidatorIAPRecord(CMDBElement* aElement,CMDBSessionImpl& aSession
+#ifdef SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
+                         ,TOperation aValidatorOperation
+#endif //SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
+                         )
+    	:CCDValidator(aElement,aSession)
+#ifdef SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
+        , iOperation(aValidatorOperation)
+#endif //SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
+        {}
+
+protected:
+
+    void DoValidateL();
+    
+    void OnDeleteL();
+
+private:
+
+#ifdef SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
+	TOperation iOperation;
+	
+    //when only field validation is done the validator reads the whole record from the DB and acts as
+    //originally a record validation would be called. This element points to the record read from the
+    //dB.
+    CMDBElement* iShadowElement;
+    
+    void InitialiseAccessPointRecordL(      CCDAccessPointRecord& lhs,
+                                      const TDesC&                aRecordName,
+                                            TInt                  aRecordId,
+                                            TInt                  aTag,
+                                            TUint32               aTier,
+                                            TUint32               aMCpr,
+                                            TUint32               aSelectionPolicy,
+                                            TUint32               aCpr,
+                                            TUint32               aCprConfig,
+                                            TUint32               aSCpr,
+                                            TUint32               aProtocol);
+   
+
+    CCDBearerTypeRecord* NewBearerTypeRecordL(CMDBSession& aSessionOwner, CCDIAPRecord& aIAPRecord);
+    
+    void DeleteAssociatedLinkLevelAPL();
+    void AssociatedLinkLevelAPGenerationL();
+    void SetShadowElementL();
+#endif // SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
+
+    void ServiceAndBearerValidationL();    
+    };
+
+} //end namespace CommsDatInternal
+
+
+       
+#endif //COMMSDATMAPPER_H
+        
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+