// // MODULE: APGTSBESREAD.H // // PURPOSE: BES file reading classes // // COMPANY: Saltmine Creative, Inc. (206)-284-7511 support@saltmine.com // // AUTHOR: Oleg Kalosha // // ORIGINAL DATE: 7-29-98 // // NOTES: // Typical BES file content might be: //
// // // // // Enter items to search for // // //
// See corresponding .cpp file for details of restrictions & for other notes. // // Version Date By Comments //-------------------------------------------------------------------- // V3.0 08-04-98 OK // V3.0 08-31-98 JM support both returning a raw & an URL encoded form // #ifndef __APGTSBESREAD_H_ #define __APGTSBESREAD_H_ #include "fileread.h" //////////////////////////////////////////////////////////////////////////////////// // CAPGTSBESReaderException //////////////////////////////////////////////////////////////////////////////////// class CAPGTSBESReader; class CAPGTSBESReaderException : public CFileReaderException { public: enum eAPGTSBESErr { eEV_GTS_ERROR_BES_MISS_TYPE_TAG, // %1 %2 Backend search file does not have TYPE tag (make sure tag is all caps in file): TYPE= %3 %4 eEV_GTS_ERROR_BES_MISS_CT_TAG, // %1 %2 Backend search file is missing close tag '>' for TYPE tag %3 %4 eEV_GTS_ERROR_BES_MISS_CN_TAG, // %1 %2 Backend search file is missing close tag '>' for NAME tag %3 %4 eEV_GTS_ERROR_BES_MISS_CV_TAG // %1 %2 Backend search file is missing close tag '>' for VALUE tag %3 %4 } m_eAPGTSBESErr; public: // source_file is LPCSTR rather than LPCTSTR because __FILE__ is char[35] CAPGTSBESReaderException(CFileReader* reader, eAPGTSBESErr err, LPCSTR source_file, int line); }; //////////////////////////////////////////////////////////////////////////////////// // CBESPair // represents name value pair for TYPE=TEXT field in a form // value (BESStr) will reflect what we're searching for. //////////////////////////////////////////////////////////////////////////////////// struct CBESPair { // data CString Name; // in the example in the notes at the head of this file, // this would be "CiRestriction" // code CString GetBESStr() const {return BESStr;} CBESPair& operator << (const vector& in); protected: CString BESStr; // value }; //////////////////////////////////////////////////////////////////////////////////// // CAPGTSBESReader // Read BES file // Includes interface to modify content of BES file into GET-POST method //////////////////////////////////////////////////////////////////////////////////// class CAPGTSBESReader : public CTextFileReader { public: static LPCTSTR FORM; static LPCTSTR METHOD; static LPCTSTR ACTION; static LPCTSTR INPUT; static LPCTSTR TYPE; static LPCTSTR NAME; static LPCTSTR VALUE; static LPCTSTR HIDDEN; static LPCTSTR TEXT; public: static void URLEncodeString(const CString& in, CString& out); static bool DecodeInputString(CFileReader* reader, const CString& str, CString& type, CString& name, CString& value); protected: CString m_strURLEncodedForm; // URL-encoded entire form (name-value pairs for a // GET-method query) including the string to search on. CBESPair m_SearchText; // contains non-URL-encoded BES name - value pair // Initial BES content resides in CFileReader::m_StreamData, // but is really of no interest. vector m_arrBESStr; // contains array of encoded partial search strings // for BES search. In practice, these correspond to // certain node/state pairs vector m_arrRawForm; // contains array of unparsed strings exactly as they // come from the BES file int m_iBES; // index of element in m_arrRawForm before which // we place search string (to build a whole form). vector m_arrURLEncodedForm; // contains array of parsed and encoded strings public: CAPGTSBESReader(CPhysicalFileReader * pPhysicalFileReader, LPCTSTR szDefaultContents = NULL); ~CAPGTSBESReader(); void GenerateBES( const vector & arrstrIn, CString & strEncoded, CString & strRaw); protected: CAPGTSBESReader& operator << (const CString& in); // add (AND) new clause into search expression. CAPGTSBESReader& operator >> (const CString& in); // roll back clause addition CAPGTSBESReader& ClearSearchString(); void GetURLEncodedForm(CString&); void GetRawForm(CString&); protected: virtual void Parse(); protected: virtual void BuildURLEncodedForm(); virtual bool IsMethodString(const CString&) const; virtual bool IsBESString(const CString&) const; virtual bool IsTypeString(const CString&) const; virtual bool ParseMethodString(const CString& in, CString& out); virtual bool ParseBESString(const CString& in, CBESPair& out); virtual bool ParseTypeString(const CString& in, CString& out); }; #endif