Changeset 598


Ignore:
Timestamp:
08/13/14 18:04:37 (5 years ago)
Author:
jls17
Message:
  • made the CDocActionOpenWindowHelper a instantiatable class for reading report data

(needs further clean up)

Location:
branches/work_311
Files:
1 added
4 edited

Legend:

Unmodified
Added
Removed
  • branches/work_311/ARInsideTest.vcproj

    r579 r598  
    595595                        > 
    596596                        <File 
     597                                RelativePath=".\doc\DocActionOpenWindowHelperTest.cpp" 
     598                                > 
     599                        </File> 
     600                        <File 
    597601                                RelativePath=".\doc\DocTextReferencesTest.cpp" 
    598602                                > 
  • branches/work_311/doc/DocActionOpenWindowHelper.cpp

    r300 r598  
    1818#include "DocActionOpenWindowHelper.h" 
    1919 
    20 CDocActionOpenWindowHelper::CDocActionOpenWindowHelper(/*CARActiveLink &arALObject, AROpenDlgStruct& oWndStruct, string& ifElse, int numAction*/) 
    21 { 
     20CDocActionOpenWindowHelper::CDocActionOpenWindowHelper(char* reportString) 
     21{ 
     22        isValid = false; 
     23        isParsed = false; 
     24        this->reportString = reportString; 
     25 
     26        reportType_Start = NULL; 
     27        reportType_End = NULL; 
     28        reportLocation_Start = NULL; 
     29        reportLocation_End = NULL; 
     30        reportName_Start = NULL; 
     31        reportName_End = NULL; 
     32        reportDestination_Start = NULL; 
     33        //reportDestination_End = NULL; 
     34        entryIds_Start = NULL; 
     35        entryIds_End = NULL; 
     36        queryOverride_Start = NULL; 
     37        queryOverride_End = NULL; 
     38        reportOperation_Start = NULL; 
     39        reportOperation_End = NULL; 
     40        charEncoding_Start = NULL; 
     41        charEncoding_End = NULL; 
     42        inlineForm_Start = NULL; 
     43        inlineForm_End = NULL; 
    2244} 
    2345 
     
    3860 
    3961        // first, decide which property we are looking for 
    40         unsigned int PropID = AR_OPROP_WINDOW_OPEN_IF_SAMPLE_SERVER_SCHEMA; 
    41         if (ifElse != IES_IF) 
    42                 PropID = AR_OPROP_WINDOW_OPEN_ELSE_SAMPLE_SERVER_SCHEMA; 
     62        unsigned int PropID = (ifElse == IES_IF ? AR_OPROP_WINDOW_OPEN_IF_SAMPLE_SERVER_SCHEMA : AR_OPROP_WINDOW_OPEN_ELSE_SAMPLE_SERVER_SCHEMA); 
    4363 
    4464        // now find the index of the object property 
     
    7393                                if (propActionIndex == nAction && propData[chrIndex] != 0) 
    7494                                { 
    75                                         // match! whoooohooo! 
     95                                        // match! found the action we were looking for! 
    7696                                        unsigned int strStart = chrIndex; 
    7797                                        while (propData[chrIndex] != '\\' && propData[chrIndex] != 0) ++chrIndex; 
     
    107127} 
    108128 
    109 bool CDocActionOpenWindowHelper::GetReportData(char *reportStr, std::string &reportType, std::string &reportLocation, std::string &reportName, std::string &reportDestination, std::string &entryIDs, std::string &queryOverride, std::string &reportOperation, std::string &charEncoding) 
     129bool CDocActionOpenWindowHelper::GetReportData(char *reportStr, std::string &reportType, std::string &reportLocation, std::string &reportName, std::string &reportDestination, std::string &entryIDs, std::string &queryOverride, std::string &reportOperation, std::string &charEncoding, std::string &inlineForm) 
    110130{ 
    111131        if (reportStr == NULL) return false; 
     
    154174                        value = &reportOperation; 
    155175                        break; 
     176#if AR_CURRENT_API_VERSION >= AR_API_VERSION_764 
     177                case AR_REPORT_ATTR_INLINE_FORM: 
     178                        value = &inlineForm; 
     179                        break; 
     180#endif 
    156181                } 
    157182 
     
    170195        return false; 
    171196} 
     197 
     198bool CDocActionOpenWindowHelper::ParseReportData() 
     199{ 
     200        isParsed = true; 
     201        if (reportString == NULL) return false; 
     202 
     203        bool found = false; 
     204        char *curScanPos = strstr(reportString, "Report: \1");   
     205        if (curScanPos == NULL) return false; 
     206        curScanPos += 9; 
     207 
     208        while (curScanPos[0] != 0) 
     209        { 
     210                if (curScanPos[0] == 0x0A) 
     211                { 
     212                        ++curScanPos; 
     213                        reportDestination_Start = curScanPos; 
     214                        return true; 
     215                } 
     216 
     217                // search for "=" character (the start of the value follows) 
     218                int reportAttribute = atoi(curScanPos); 
     219                curScanPos = strchr(curScanPos,'=');  
     220                if (curScanPos == NULL) return found; 
     221                ++curScanPos; 
     222 
     223                // now search for \1, this marks the end of the value 
     224                const char* pos = strchr(curScanPos,'\1'); 
     225                if (pos == NULL) return found; 
     226                size_t len = (size_t)(pos - curScanPos); 
     227 
     228                const char **start = NULL; 
     229                const char **end = NULL; 
     230 
     231                switch (reportAttribute) 
     232                { 
     233                case AR_REPORT_ATTR_TYPE: 
     234                        start = &reportType_Start; 
     235                        end = &reportType_End; 
     236                        break; 
     237                case AR_REPORT_ATTR_FILENAME: 
     238                        start = &reportName_Start; 
     239                        end = &reportName_End; 
     240                        break; 
     241                case AR_REPORT_ATTR_LOCATION: 
     242                        start = &reportLocation_Start; 
     243                        end = &reportLocation_End; 
     244                        break; 
     245                case AR_REPORT_ATTR_CHAR_ENCODING: 
     246                        start = &charEncoding_Start; 
     247                        end = &charEncoding_End; 
     248                        break; 
     249                case AR_REPORT_ATTR_ENTRYIDS: 
     250                        start = &entryIds_Start; 
     251                        end = &entryIds_End; 
     252                        break; 
     253                case AR_REPORT_ATTR_QUERY_OVERRIDE: 
     254                        start = &queryOverride_Start; 
     255                        end = &queryOverride_End; 
     256                        break; 
     257                case AR_REPORT_ATTR_OPERATION: 
     258                        start = &reportOperation_Start; 
     259                        end = &reportOperation_End; 
     260                        break; 
     261#if AR_CURRENT_API_VERSION >= AR_API_VERSION_764 
     262                case AR_REPORT_ATTR_INLINE_FORM: 
     263                        start = &inlineForm_Start; 
     264                        end = &inlineForm_End; 
     265                        break; 
     266#endif 
     267                } 
     268 
     269                if (start != NULL && end != NULL) 
     270                { 
     271                        *start = curScanPos; 
     272                        *end = pos; 
     273                } 
     274                curScanPos += len + 1; 
     275        } 
     276 
     277        return false; 
     278} 
     279 
     280void CDocActionOpenWindowHelper::CheckAlreadyParsed() 
     281{ 
     282        if (!isParsed) 
     283                isValid = ParseReportData(); 
     284} 
     285 
     286string CDocActionOpenWindowHelper::getReportType() 
     287{ 
     288        CheckAlreadyParsed(); 
     289        if (!isValid) return ""; 
     290 
     291        return string(reportType_Start, reportType_End); 
     292} 
     293 
     294string CDocActionOpenWindowHelper::getReportLocation() 
     295{ 
     296        CheckAlreadyParsed(); 
     297        if (!isValid) return ""; 
     298 
     299        return string(reportLocation_Start, reportLocation_End); 
     300} 
     301 
     302string CDocActionOpenWindowHelper::getReportName() 
     303{ 
     304        CheckAlreadyParsed(); 
     305        if (!isValid) return ""; 
     306 
     307        return string(reportName_Start, reportName_End); 
     308} 
     309 
     310string CDocActionOpenWindowHelper::getReportDestination() 
     311{ 
     312        CheckAlreadyParsed(); 
     313        if (!isValid) return ""; 
     314 
     315        return reportDestination_Start; 
     316} 
     317 
     318string CDocActionOpenWindowHelper::getEntryIds() 
     319{ 
     320        CheckAlreadyParsed(); 
     321        if (!isValid) return ""; 
     322 
     323        return string(entryIds_Start, entryIds_End); 
     324} 
     325 
     326string CDocActionOpenWindowHelper::getQueryOverride() 
     327{ 
     328        CheckAlreadyParsed(); 
     329        if (!isValid) return ""; 
     330 
     331        return string(queryOverride_Start, queryOverride_End); 
     332} 
     333 
     334string CDocActionOpenWindowHelper::getReportOperation() 
     335{ 
     336        CheckAlreadyParsed(); 
     337        if (!isValid) return ""; 
     338 
     339        return string(reportOperation_Start, reportOperation_End); 
     340} 
     341 
     342string CDocActionOpenWindowHelper::getCharEncoding() 
     343{ 
     344        CheckAlreadyParsed(); 
     345        if (!isValid) return ""; 
     346 
     347        return string(charEncoding_Start, charEncoding_End); 
     348} 
     349 
     350string CDocActionOpenWindowHelper::getInlineForm() 
     351{ 
     352        CheckAlreadyParsed(); 
     353        if (!isValid) return ""; 
     354 
     355        return string(inlineForm_Start, inlineForm_End); 
     356} 
  • branches/work_311/doc/DocActionOpenWindowHelper.h

    r174 r598  
    2020class CDocActionOpenWindowHelper 
    2121{ 
    22 private: 
    23         CDocActionOpenWindowHelper(/*CARActiveLink &arALObject, AROpenDlgStruct& oWndStruct, string& ifElse, int numAction*/); 
     22public: 
     23        CDocActionOpenWindowHelper(char* reportString); 
    2424        ~CDocActionOpenWindowHelper(void); 
    2525 
    2626public: 
    2727        static bool GetSampleData(CARActiveLink& actLink, IfElseState ifElse, int nAction, string& server, string& schema); 
    28         static bool GetReportData(char* reportStr, string &reportType, string &reportLocation, string &reportName, string &reportDestination, string &entryIDs, string &queryOverride, string &reportOperation, string &charEncoding); 
     28        static bool GetReportData(char* reportStr, string &reportType, string &reportLocation, string &reportName, string &reportDestination, string &entryIDs, string &queryOverride, string &reportOperation, string &charEncoding, std::string &inlineForm); 
     29 
     30        string getReportType(); 
     31        string getReportLocation(); 
     32        string getReportName(); 
     33        string getReportDestination(); 
     34        string getEntryIds(); 
     35        string getQueryOverride(); 
     36        string getReportOperation(); 
     37        string getCharEncoding(); 
     38        string getInlineForm(); 
     39 
     40private: 
     41        void CheckAlreadyParsed(); 
     42        bool ParseReportData(); 
     43 
     44private: 
     45        bool isParsed; 
     46        bool isValid; 
     47        char* reportString; 
     48 
     49        const char* reportType_Start; 
     50        const char* reportType_End; 
     51        const char* reportLocation_Start; 
     52        const char* reportLocation_End; 
     53        const char* reportName_Start; 
     54        const char* reportName_End; 
     55        const char* reportDestination_Start; 
     56        //const char* reportDestination_End; 
     57        const char* entryIds_Start; 
     58        const char* entryIds_End; 
     59        const char* queryOverride_Start; 
     60        const char* queryOverride_End; 
     61        const char* reportOperation_Start; 
     62        const char* reportOperation_End; 
     63        const char* charEncoding_Start; 
     64        const char* charEncoding_End; 
     65        const char* inlineForm_Start; 
     66        const char* inlineForm_End; 
    2967}; 
  • branches/work_311/project.cmake/files.cmake

    r594 r598  
    398398 core/ARDayStructHelperTest.cpp 
    399399 core/ARParseFieldTest.cpp 
     400 doc/DocActionOpenWindowHelperTest.cpp 
    400401 doc/DocTextReferencesTest.cpp 
    401402 doc/DocTextReferencesTest.h 
Note: See TracChangeset for help on using the changeset viewer.