Changeset 602


Ignore:
Timestamp:
08/13/14 18:05:45 (5 years ago)
Author:
jls17
Message:
Location:
branches/work_311/doc
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • branches/work_311/doc/DocActionOpenWindowHelper.cpp

    r601 r602  
    127127} 
    128128 
    129 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, std::string &inlineForm) 
    130 { 
    131         if (reportStr == NULL) return false; 
    132  
    133         bool found = false; 
    134         char *report = strstr(reportStr, "Report: \1");  
    135         if (report == NULL) return false; 
    136         report += 9; 
    137  
    138         while (report[0] != 0) 
    139         { 
    140                 if (report[0] == 0x0A) 
    141                 { 
    142                         ++report; 
    143                         reportDestination = report; 
    144                         return true; 
    145                 } 
    146  
    147                 int i = atoi(report); 
    148                 report = strchr(report,'=');  
    149                 if (report == NULL) return found; 
    150                 ++report; 
    151  
    152                 string *value = NULL; 
    153                 switch (i) 
    154                 { 
    155                 case AR_REPORT_ATTR_TYPE: 
    156                         value = &reportType; 
    157                         break; 
    158                 case AR_REPORT_ATTR_FILENAME: 
    159                         value = &reportName; 
    160                         break; 
    161                 case AR_REPORT_ATTR_LOCATION: 
    162                         value = &reportLocation; 
    163                         break; 
    164                 case AR_REPORT_ATTR_CHAR_ENCODING: 
    165                         value = &charEncoding; 
    166                         break; 
    167                 case AR_REPORT_ATTR_ENTRYIDS: 
    168                         value = &entryIDs; 
    169                         break; 
    170                 case AR_REPORT_ATTR_QUERY_OVERRIDE: 
    171                         value = &queryOverride; 
    172                         break; 
    173                 case AR_REPORT_ATTR_OPERATION: 
    174                         value = &reportOperation; 
    175                         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 
    181                 } 
    182  
    183                 const char* pos = strchr(report,'\1'); 
    184                 if (pos == NULL) return found; 
    185                 size_t len = (size_t)(pos - report); 
    186  
    187                 if (value != NULL) 
    188                 { 
    189                         value->resize(len); 
    190                         if (len > 0) strncpy(&(*value)[0], report, len); 
    191                 } 
    192                 report += len + 1; 
    193         } 
    194  
    195         return false; 
    196 } 
    197  
    198129bool CDocActionOpenWindowHelper::ParseReportData() 
    199130{ 
  • branches/work_311/doc/DocActionOpenWindowHelper.h

    r601 r602  
    2525 
    2626        static bool GetSampleData(CARActiveLink& actLink, IfElseState ifElse, int nAction, string& server, string& schema); 
    27         static bool GetReportData(char* reportStr, string &reportType, string &reportLocation, string &reportName, string &reportDestination, string &entryIDs, string &queryOverride, string &reportOperation, string &charEncoding, std::string &inlineForm); 
    2827 
    2928        bool IsValid(); // returns true if the report string passed to the constructor could be parsed without errors 
  • branches/work_311/doc/DocActionOpenWindowHelperTest.cpp

    r601 r602  
    5252        ASSERT_STREQ("true", result.c_str()); 
    5353} 
     54 
     55// even if the property (here "Report Name") is not in the (valid) report, it shouldn't fail 
     56TEST_F(DocActionOpenWindowHelperTests, TryToReadAValueNotInTheReportString) 
     57{ 
     58        char* mostlyEmptyReport = "Report: \00121=AR System\001\nto-screen: "; 
     59        CDocActionOpenWindowHelper reportData(mostlyEmptyReport); 
     60 
     61        string result = reportData.getReportName(); 
     62        ASSERT_STREQ("", result.c_str()); 
     63} 
     64 
     65// if the report is simply invalid, it shouldn't fail as well 
     66TEST_F(DocActionOpenWindowHelperTests, TryToReadAValueFromInvalidReport) 
     67{ 
     68        char* invalidReport = "WrongReport: \001"; 
     69        CDocActionOpenWindowHelper reportData(invalidReport); 
     70 
     71        string result = reportData.getReportDestination(); 
     72        ASSERT_STREQ("", result.c_str()); 
     73} 
  • branches/work_311/doc/actions/DocOpenWindowAction.cpp

    r600 r602  
    176176 
    177177                // report details here 
    178                 string *entryIDs = NULL; 
    179                 string *queryOverride = NULL; 
    180                 string *reportOperation = NULL; 
    181                 string *charEncoding = NULL; 
    182                 string *inlineForm = NULL; 
    183178                if (windowMode == AR_ACTIVE_LINK_ACTION_OPEN_REPORT) 
    184179                { 
    185                         string reportType; 
    186                         string reportLocation; 
    187                         string reportName; 
    188                         string reportDestination; 
    189                         entryIDs = new string(); 
    190                         queryOverride = new string(); 
    191                         reportOperation = new string(); 
    192                         charEncoding = new string(); 
    193                         inlineForm = new string(); 
    194  
    195                         if (!CDocActionOpenWindowHelper::GetReportData(action.reportString, reportType, reportLocation, reportName, reportDestination, *entryIDs, *queryOverride, *reportOperation, *charEncoding, *inlineForm)) 
     180                        if (!reportData.IsValid()) 
    196181                        { 
    197182                                strm << "<p>"; 
     
    203188                        else 
    204189                        { 
    205                                 strm << "<p>Report Type: "; 
     190                                string reportType = reportData.getReportType(); 
     191                                string reportLocation = reportData.getReportLocation(); 
     192                                string reportName = reportData.getReportName(); 
     193                                string reportDestination = reportData.getReportDestination(); 
     194 
     195                                strm << "<p>Report Type: ";                              
    206196                                if (!reportType.empty() && reportType[0] == '$') 
    207197                                { 
     
    395385                        if (windowMode == AR_ACTIVE_LINK_ACTION_OPEN_REPORT) 
    396386                        { 
     387                                string entryIDs = reportData.getEntryIds(); 
     388                                string queryOverride = reportData.getQueryOverride(); 
     389                                string reportOperation = reportData.getReportOperation(); 
     390                                string charEncoding = reportData.getCharEncoding(); 
     391 
    397392                                strm << "<p>EntryIDs: "; 
    398                                 if (!entryIDs->empty() && entryIDs->operator[](0) == '$') 
    399                                 { 
    400                                         int fieldId = atoi(&entryIDs->c_str()[1]); 
     393                                if (!entryIDs.empty() && entryIDs[0] == '$') 
     394                                { 
     395                                        int fieldId = atoi(&entryIDs.c_str()[1]); 
    401396                                        strm << "$" << (fieldId < 0 ? CAREnum::Keyword(abs(fieldId)) : arIn->LinkToField(context, fieldId)) << "$"; 
    402397                                        if (fieldId > 0) 
     
    408403                                else 
    409404                                { 
    410                                         strm << *entryIDs; 
     405                                        strm << entryIDs; 
    411406                                } 
    412407                                 
    413408                                strm << "<br/>Query Override: "; 
    414                                 if (!queryOverride->empty() && queryOverride->operator[](0) == '$') 
    415                                 { 
    416                                         int fieldId = atoi(&entryIDs->c_str()[1]); 
     409                                if (!queryOverride.empty() && queryOverride[0] == '$') 
     410                                { 
     411                                        int fieldId = atoi(&entryIDs.c_str()[1]); 
    417412                                        strm << "$" << (fieldId < 0 ? CAREnum::Keyword(abs(fieldId)) : arIn->LinkToField(context, fieldId)) << "$"; 
    418413                                        if (fieldId > 0) 
     
    424419                                else 
    425420                                { 
    426                                         strm << *queryOverride; 
     421                                        strm << queryOverride; 
    427422                                } 
    428423                                 
    429424                                strm << "<br/>Report Operation: "; 
    430                                 int iReportOperation = atoi(reportOperation->c_str()); 
     425                                int iReportOperation = atoi(reportOperation.c_str()); 
    431426                                if (iReportOperation == 0) iReportOperation = 2;        // set default to Run 
    432427                                strm << CAREnum::ReportOperation(iReportOperation); 
    433428 
    434429                                strm << "<br/>Character Encoding: "; 
    435                                 if (!charEncoding->empty() && charEncoding->operator[](0) == '$') 
    436                                 { 
    437                                         int fieldId = atoi(&charEncoding->c_str()[1]); 
     430                                if (!charEncoding.empty() && charEncoding[0] == '$') 
     431                                { 
     432                                        int fieldId = atoi(&charEncoding.c_str()[1]); 
    438433                                        strm << "$" << (fieldId < 0 ? CAREnum::Keyword(abs(fieldId)) : arIn->LinkToField(context, fieldId)) << "$"; 
    439434                                        if (fieldId > 0) 
     
    445440                                else 
    446441                                { 
    447                                         strm << *charEncoding; 
     442                                        strm << charEncoding; 
    448443                                } 
    449444                                strm << "</p>" << endl; 
    450  
    451                                 // clean up 
    452                                 delete entryIDs; 
    453                                 delete queryOverride; 
    454                                 delete reportOperation; 
    455                                 delete charEncoding; 
    456                                 delete inlineForm; 
    457445                        } 
    458446 
Note: See TracChangeset for help on using the changeset viewer.