commsfwtools/preparedefaultcommsdatabase/Tools/ced/inc/input.h
changeset 0 dfb7c4ff071f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/commsfwtools/preparedefaultcommsdatabase/Tools/ced/inc/input.h	Thu Dec 17 09:22:25 2009 +0200
@@ -0,0 +1,269 @@
+// Copyright (c) 2003-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:
+//
+
+/**
+ @file
+ @internalComponent
+*/
+
+#include <e32hashtab.h>
+#include "CIniFile.h"
+#include "CXMLFile.h"
+
+#ifndef INPUT_H
+#define INPUT_H
+
+class LinkByTagResolver;
+class CFileDump;
+
+class CfgFile : public CBase
+/**
+@internalComponent
+*/
+	{
+	friend class LinkByTagResolver;
+	public:
+		CfgFile():file(NULL){}
+		~CfgFile()	{CloseConfigFile();}
+		
+		TInt OpenConfigFile(TDesC &fIn);
+		void CloseConfigFile();
+		
+		TInt OpenSetBlock(const TDesC &aSection)
+			{ return file->OpenSetBlock(aSection); }
+		TInt OpenTemplateBlock(const TDesC &aSection)
+			{ return file->OpenTemplateBlock(aSection); }
+		TInt OpenAddBlock(const TDesC &aSection)
+			{ return file->OpenAddBlock(aSection); }
+		TInt GetSetting(const TDesC &aValue, TPtrC &aSetting)
+			{ return file->GetSetting(aValue, aSetting); }
+		TInt StepToNextBlock()
+			{ return file->StepToNextBlock(); }
+	private:
+		CIniData* file;
+	};
+
+
+NONSHARABLE_CLASS(LinkByTagResolver) : public CBase
+    {
+    public:
+        static LinkByTagResolver* NewL(CfgFile* aIniData, CFileDump* aLogger);
+        static LinkByTagResolver* NewLC(CfgFile* aIniData, CFileDump* aLogger);
+        virtual ~LinkByTagResolver();
+        
+        /**
+         returns the recordId for the given Link.Table.Id format.
+         param: aTableName - the given linking by tag
+         return value: -1 if the linking cannot be found
+                       ther record number if the linking is found
+        */
+        const HBufC* ResolvedIdForTagLink(const TPtrC& aLinkingString/*, TDesC& aTheResolvedPair*/);
+        
+        
+    protected:
+        LinkByTagResolver(CfgFile* aIniData, CFileDump* aLogger);
+        void ConstructL();
+    
+    private:
+        /**
+         Called from ConstructL to fillup the hashmap from the config file
+        */
+        void FillUpHashMapL();
+        void ExemineFieldsL(const TInt aTableIndex);
+        TInt SearchForLink(const TPtrC& aSetting);
+        
+        //this function tries to resolve the linking by tag type linking.
+        //If it cannot resolve the link it leaves!!!!
+        void ResolveLinkToRecIdL(const TPtrC& aSetting, TBuf<MAX_BUFFER_LEN>& aResolvedLink);
+        
+        //The class owns this pointer so this has to be deleted!!
+        RPtrHashMap<HBufC, HBufC >*   iLinkByTagRecIdPairs;
+        
+        /**
+        This class USES this pointer and doesn't have the right to modify it...
+        As the ownership is not here we don't have to take care about deleting it.
+        
+        Unfortunetaly these cannot be const pointers because the iConfigFile will be changed -
+        the pointers inside the object...
+        And the iLogger doesn't have any const function...
+        */
+        CfgFile*      iConfigFile;
+        CFileDump*    iLogger;
+    };
+
+
+inline TInt CfgFile::OpenConfigFile(TDesC &fIn)
+	{
+	TRAPD(ret, file = CIniData::NewL(fIn));
+	if (ret == KErrNone)
+		{
+		if (file)
+			{
+			return ETrue;
+			}
+		
+		}
+	return EFalse;
+	}
+
+inline void CfgFile::CloseConfigFile()
+	{
+	if (file)
+		{
+		delete file;
+		file = NULL;
+		}
+	}
+
+class CXMLDatabase;
+
+
+class XMLFile : public CBase
+/**
+@internalComponent
+*/
+	{
+	public:
+		XMLFile():file(NULL){}
+		~XMLFile()	{CloseConfigFile();	}
+		
+		TInt OpenConfigFile(RFs& aFs, TDesC &fIn, CXMLDatabase* aXmlDb, 
+		                    TBool aForceXMLProcessing,
+		                    TBool aAppendMode);
+		void CloseConfigFile();
+		TInt GetSetting(const TInt aEntryIndex, const TDesC& aParamName, TPtrC &aParamValue)
+			{ return file->GetSetting(aEntryIndex, aParamName, aParamValue); }
+		TInt GetStartingIndex(const TDesC& aTableName)
+			{ return file->GetStartingIndex(aTableName); }
+		TInt GetLastIndex(const TDesC& aTableName)
+			{ return file->GetLastIndex(aTableName); }
+		TInt GetEntryNumberParameters(const TInt aEntryIndex)
+			{ return file->GetEntryNumberParameters(aEntryIndex); }
+		const TBuf<MAX_BUFFER_LEN>& GetOperation(const TInt aEntryIndex)
+			{ return file->GetOperation(aEntryIndex); }
+		TInt GetElementRecordID(const TInt aEntryIndex) const
+		    { return file->GetElementRecordID(aEntryIndex); }
+		
+	private:
+		CXMLData* file;
+	};
+
+
+inline TInt XMLFile::OpenConfigFile(RFs& aFs, TDesC &fIn, CXMLDatabase* aXmlDb, 
+                                    TBool aForceXMLProcessing,
+                                    TBool aAppendMode)
+	{
+	TRAPD(ret, file = CXMLData::NewL(aFs,fIn,aXmlDb,aForceXMLProcessing, aAppendMode));
+	if (ret == KErrNone)
+		{
+		if (file)
+			{
+			return ETrue;
+			}
+		}
+	return EFalse;
+	}
+
+inline void XMLFile::CloseConfigFile()
+	{
+	if (file)
+		{
+		delete file;
+		file = NULL;
+		}
+	}
+
+
+#ifdef SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
+
+class CFileDump;
+
+/**
+  @internalComponent
+*/
+class CInputFileParser : public CBase
+    {
+    public:
+        virtual ~CInputFileParser() {}
+
+        static CInputFileParser* FactoryLC(TBool aIsXML, TDesC& aFile, CFileDump* aLog);
+
+                TBool IsMeshCompatibleL();
+                
+        virtual void  InitialiseL()                     = 0;
+        virtual TBool CheckMeshTemplateL(TDesC &aTable) = 0;
+        virtual TBool CheckMeshInsertsL(TDesC &aTable)  = 0;
+        
+    protected:
+        CInputFileParser(TDesC& aFile, CFileDump* aLog);
+        void Exit(TInt aErr);
+        
+              TDesC&     iFile;
+              CFileDump* iLog;
+        const TText**    iTable;
+    };
+
+
+/**
+  @internalComponent
+*/
+class CCfgFileParser : public CInputFileParser
+    {
+    friend class CInputFileParser;
+    public:
+        virtual ~CCfgFileParser();
+        
+        virtual void  InitialiseL();
+        virtual TBool CheckMeshTemplateL(TDesC &aTable);
+        virtual TBool CheckMeshInsertsL(TDesC &aTable);
+        
+    protected:
+        CCfgFileParser(TDesC& aFile, CFileDump* aLog);
+        
+    private:
+        CfgFile iCfg;
+    };
+    
+/**
+  Lightweight XML file parser, read a file in, search it as text content...
+  
+  This class shamelessly copies from 'CIniData'.
+  
+  @internalComponent
+*/
+class CXMLFileParser : public CInputFileParser
+    {
+    friend class CInputFileParser;
+    public:
+        virtual ~CXMLFileParser();
+
+        virtual void  InitialiseL();
+        virtual TBool CheckMeshTemplateL(TDesC &aTable);
+        virtual TBool CheckMeshInsertsL(TDesC &aTable);
+
+    protected:
+        CXMLFileParser(TDesC& aFile, CFileDump* aLog);
+		
+	private:
+        TBool SearchXMLFile(const TDesC& aOpType, const TDesC& aTable);
+        
+        void OpenXMLFileL();
+        
+    	TPtr iPtr;
+    };
+
+#endif // SYMBIAN_NON_SEAMLESS_NETWORK_BEARER_MOBILITY
+
+#endif