commsfwtools/preparedefaultcommsdatabase/src/MetaDatabaseSessionImpl.h
changeset 0 dfb7c4ff071f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/commsfwtools/preparedefaultcommsdatabase/src/MetaDatabaseSessionImpl.h	Thu Dec 17 09:22:25 2009 +0200
@@ -0,0 +1,336 @@
+// 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:
+// Meta-database session declarations
+// 
+//
+
+/**
+ @file 
+*/
+
+#if (! defined METADATABASESSIONIMPL_H)
+#define        METADATABASESSIONIMPL_H 
+
+#include <e32property.h>
+
+// Forward declarations
+namespace CommsDatInternal
+{
+class CCDMapper;
+class CCDNotifier;
+}
+
+namespace CommsDat
+{
+
+using namespace CommsDatInternal;
+
+
+
+NONSHARABLE_CLASS(CMDBSessionImpl) : public CBase
+/*
+CommsDat-specific implementation of a meta database session
+
+@internalComponent
+*/
+{
+public : 
+    
+    /* Constructor/Destructor
+   
+    @internalComponent
+    */ 
+    
+    CMDBSessionImpl(CMDBSession& aOwner);
+    ~CMDBSessionImpl();
+    
+    
+    /*
+    Open a session with the storage server and compare data versions
+        
+    The MetaDatabase always attempts to support the required version.  If the versions match,
+    KErrNone will be returned.  If the versions are not the same, but the requested version
+    is supported, a warning code will be returned. Otherwise an error will be 
+    returned.  
+    
+    @internalComponent
+    */
+    TInt ConstructL( TVersion aRequiredVersion );  
+
+    
+    /* 
+    Close session with storage server.
+    
+    @internalComponent
+    */
+    void Close();
+
+
+
+    //
+    // Accessors
+    
+    /*
+    Lookup latest data format version
+    
+    @internalComponent
+    */
+    TVersion LatestVersion();
+    
+    
+    /*
+    Lookup data format version currently in use by client
+    
+    @internalComponent
+    */
+    TVersion VersionInUse();
+    
+    
+    /*
+    Lookup data format version currently in use by client
+    Return ETrue if it is the latest version. 
+    
+    @internalComponent
+    */
+    TBool UsingLatestVersion(); 
+
+    /*
+	Non-leaving method for creating notifier object.
+
+    @internalComponent
+    */
+	TInt CreateNotifier();
+  
+
+    
+    /*
+    Notifier object currently in use.
+    
+    @internalComponent
+    */
+    CCDNotifier* NotifierL();
+      
+    
+    /*
+    Storage class to store Comms data.  First call creates the object
+        
+    @internalComponent
+    */
+    CRepository* StorageL();
+  
+    
+    
+    //
+    // Transactionsd with storage server
+    //
+    
+    /* 
+    Start transaction with storage server if available
+    
+    @internalComponent
+    */
+    TBool MaybeOpenTransactionL();
+    
+    
+    /* 
+    Query if transaction is already underway in this session
+    
+    @internalComponent
+    */
+    TBool IsInTransaction();
+   
+   
+    /* 
+    Rollback transaction restoring database state to before transaction started.
+    
+    @internalComponent
+    */
+    void RollbackTransactionL();
+    
+
+    /* 
+    Commit transaction if outstanding and owned by caller
+    
+    @internalComponent
+    */
+    TInt MaybeCommitTransactionL(TBool aOwnLock, CMDBElement* aDoSync, TInt aErr);
+      
+        
+    /* 
+    Set flags in attribute mask as requested by client
+    
+    @internalComponent
+    */   
+    void SetAttributeMask(TMDBAttributeFlags aAttributeMask);
+    
+    /* 
+    Check flags in attribute mask as requested by client
+    
+    @internalComponent
+    */   
+    TBool IsSetAttributeMask(TMDBAttributeFlags aAttributeMask);
+
+    /* 
+    Clear flags from attribute mask as requested by client
+    
+    @internalComponent
+    */   
+    void ClearAttributeMask(TMDBAttributeFlags aAttributeMask);
+
+    
+    /* 
+    Retrieve attribute mask relevant to writing the db
+    
+    @internalComponent
+    */
+    TMDBAttributeFlags GetWriteAttributeMask();
+    
+    /* 
+    Retrieve attribute mask relevant to reading the db
+    
+    @internalComponent
+    */
+    TMDBAttributeFlags GetReadAttributeMask();
+    
+    /* 
+	Decide whether to create a new node in the database
+    	and then create it if necessary
+	A node means a new table, new column or new record
+	 
+    @internalComponent
+    */
+    //void MaybeCreateNodeL(CMDBElement& aElement, TDesc& aName = KNullDesC);    
+    void MaybeCreateNodeL(CMDBElement& aElement);    
+    
+	/* 
+    Find the element in the DB if it exists and assign its attributes
+
+    @internalComponent
+    */
+    TInt LoadElementAttributesL(TMDBElementId& aElementId);
+    
+    TInt LoadNodeAttributesL(TMDBElementId& aElementId);
+  
+	/* 
+    Locate a new node in the database
+   	A node means a new table, new column or new record
+
+    @internalComponent
+    */
+ 	void SetNodeIdL(TMDBElementId& aElementId, TMDBElementId aMask, TMDBElementId aInitialId, TMDBElementId aMaxId, TInt aMaxVal);
+
+
+	/* 
+    Create a new placeholder in the database
+   	A placeholder reserves space for a new table, new column or new record
+    A placeholder never has attributes set
+    tableName is typically KNullDesC, but should be set to something readable for a generic record
+    @internalComponent
+    */
+ 	void CreatePlaceholderL(TMDBElementId& aElementId, TMDBElementId aNodeTypeMask, TDesC& aTableName);
+ 	
+ 	//first try with an overload...
+ 	void CreatePlaceholderL(TMDBElementId& aElementId, TMDBElementId aNodeTypeMask, CMDBElement& aElement);
+    
+    /* 
+    Create a new node in the database
+   	A node identifies a new table, new column or new record
+    It carries type information about the node and identifies default attributes for the node and its children
+        Table - table id
+        Column - column id, column name, column type
+        Record - record id
+
+    A node is used as the primary key to identify an element in the database
+    @internalComponent
+    */
+ 	void CreateNodeL(TMDBElementId& aElementId, TMDBElementId aMask, CMDBElement& aElement, SGenericRecordTypeInfo* aFieldTypeInfo = NULL);
+
+	/* 
+    If appropriate, modify a node in the database and its placeholder
+   	A node identifies a table, column or record
+
+    @internalComponent
+    */
+    TInt MaybeModifyNodeL(TMDBElementId& aElementId);   
+
+
+	/* 
+    If appropriate, delete a node in the database and its placeholder
+   	A node identifies a table, column or record
+
+    @internalComponent
+    */
+ 	TInt MaybeDeleteNodeL(CMDBElement* aElement, TMDBElementId& aElementId);
+
+
+    /* 
+    Check for match between two arrays of element ids
+    Utility function used by metadatabase and visitors
+
+    @internalComponent
+    */
+    TInt FindMatchL(RArray<TUint32>& aCandidates, RArray<TUint32>& aMatches, TUint32 aIdMask = 0);
+
+    void EndModification(){iInModification = EFalse;}
+
+	void ReadAllowedL(TMDBElementId aElementId);
+
+	void WriteAllowedL(TMDBElementId aElementId);
+	
+	void DeleteAllowedL(TMDBElementId aElementId);
+	
+	TInt GatherParentAttributesL(TMDBElementId& aElementId);
+	
+	TInt FindElementInDatabaseL(TMDBElementId& aElementId);
+
+public:
+
+	// Need to call back to owner to make recursive db calls for nested elements
+    CMDBSession&                    iOwner;
+    
+    TBool                           iMapping;
+
+private:
+    
+    void EstablishVersionL(TVersion aVersionToCheck);   
+
+    /* Flag to check to see if mapping is required
+    Worth the cost of a flag here because checking it is cheaper than calculating
+    the version all the time*/
+    TBool                           iUsingLatestVersion; 
+    
+    CCDNotifier*                    iNotifier;
+    
+    TRequestStatus                  iStatusIndicator;
+   
+    // Storage server interface
+    CRepository*                    iCommsStorage;
+
+    TVersion                        iClientsDataSetVersion;   
+    
+    TBool                           iInTransaction;
+    TBool                           iInModification;
+    
+    TMDBAttributeFlags              iReadAttributeMask;
+    TMDBAttributeFlags              iWriteAttributeMask;
+
+	RProperty						iCommitSeqProperty;
+};
+
+
+    
+
+} // end namespace CommsDatInternal
+
+#endif //METADATABASESSIONIMPL_H