diff -r 000000000000 -r dfb7c4ff071f commsfwtools/preparedefaultcommsdatabase/Tools/ced/inc/input.h --- /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 +#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& aResolvedLink); + + //The class owns this pointer so this has to be deleted!! + RPtrHashMap* 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& 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