Changeset 606


Ignore:
Timestamp:
08/16/14 07:25:14 (5 years ago)
Author:
jls17
Message:
  • changed the parsing of the open window sample data from calling a static-method to using a class instance, so the caller can just use getServer and getSchema of the OpenWindowSampleData? class (makes the use more clear)
Location:
branches/work_311
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • branches/work_311/core/OpenWindowSampleData.cpp

    r604 r606  
    1717#include "stdafx.h" 
    1818#include "OpenWindowSampleData.h" 
     19#include "../util/Context.h" 
    1920 
    20 bool OpenWindowSampleData::GetSampleData(CARActiveLink& actLink, IfElseState ifElse, int nAction, string &server, string &schema) 
     21bool OpenWindowSampleData::ParseSampleData() 
    2122{ 
    2223        // ok, this is a very ugly design of the ARS api. The sample data of 
     
    2728        // own decode routine. 
    2829 
    29         const ARPropList &propList = actLink.GetPropList(); 
     30        const ARPropList &propList = context.getActLink().GetPropList(); 
    3031 
    3132        // first, decide which property we are looking for 
    32         unsigned int PropID = (ifElse == IES_IF ? AR_OPROP_WINDOW_OPEN_IF_SAMPLE_SERVER_SCHEMA : AR_OPROP_WINDOW_OPEN_ELSE_SAMPLE_SERVER_SCHEMA); 
     33        unsigned int PropID = (context.getIfElse() == IES_IF ? AR_OPROP_WINDOW_OPEN_IF_SAMPLE_SERVER_SCHEMA : AR_OPROP_WINDOW_OPEN_ELSE_SAMPLE_SERVER_SCHEMA); 
    3334 
    3435        // now find the index of the object property 
     
    4647        { 
    4748                // the property is found and has correct data type 
    48                 char* propData = propList.props[propIndex].value.u.charVal; 
    49                 unsigned int chrIndex = 0;      // this holds the current position within propData 
     49                return ParseSampleList(propList.props[propIndex].value.u.charVal); 
     50        } 
     51        return false; 
     52} 
     53 
     54bool OpenWindowSampleData::ParseSampleList(char *encodedList) 
     55{ 
     56        if (encodedList == NULL) return false; 
     57 
     58        // retrieve lists item count 
     59        int listCount = atoi(encodedList); 
     60 
     61        // find the \ after the list item count 
     62        const char* currentPos = strchr(encodedList, '\\'); 
     63        if (currentPos == NULL) return false; 
     64 
     65        if (listCount > 0 && *currentPos != 0) 
     66        { 
     67                ++currentPos; // skip the "\" 
    5068                 
    51                 int listCount = atoi(propData); // retrieve lists item count 
    52                 while (propData[chrIndex] != '\\' && propData[chrIndex] != 0) ++chrIndex; 
    53                 if (listCount > 0 && propData[chrIndex] != 0) 
     69                // now we need to check each entry of the list against the action-index we're lookup for 
     70                for (int listIndex = 0; listIndex < listCount; ++listIndex) 
    5471                { 
    55                         ++chrIndex; // skip last "\" 
    56                         // now we need to check each entry of the list against this actions index 
    57                         for (int listIndex = 0; listIndex < listCount; ++listIndex) 
     72                        int propActionIndex = atoi(currentPos); 
     73                        currentPos = strchr(currentPos, '\\'); 
     74                        if (currentPos == NULL) return false; 
     75                        ++currentPos; // skip the "\" 
     76 
     77                        if (propActionIndex == context.getActionIndex() && *currentPos != 0) 
    5878                        { 
    59                                 int propActionIndex = atoi(&propData[chrIndex]); 
    60                                 while (propData[chrIndex] != '\\' && propData[chrIndex] != 0) ++chrIndex; 
    61                                 if (propData[chrIndex] == '\\') ++chrIndex; 
     79                                // match! found the action we were looking for! 
     80                                const char* strStart = currentPos; 
     81                                currentPos = strchr(currentPos, '\\'); 
     82                                if (currentPos == NULL) return false; 
    6283 
    63                                 if (propActionIndex == nAction && propData[chrIndex] != 0) 
    64                                 { 
    65                                         // match! found the action we were looking for! 
    66                                         unsigned int strStart = chrIndex; 
    67                                         while (propData[chrIndex] != '\\' && propData[chrIndex] != 0) ++chrIndex; 
    68                                         if (propData[chrIndex] == 0) break; 
     84                                server_Start = strStart; 
     85                                server_End = currentPos; 
    6986 
    70                                         unsigned int strLen = chrIndex - strStart; 
    71                                         server.resize(strLen); 
    72                                         strncpy(&server[0], &propData[strStart], chrIndex - strStart); 
     87                                ++currentPos; // skip last "\" 
     88                                strStart = currentPos; 
     89                                while (*currentPos != '\\' && *currentPos != 0) ++currentPos; // we can't use strchr here, because we're looking to two possible chars 
    7390 
    74                                         ++chrIndex; // skip last "\" 
    75                                         strStart = chrIndex; 
    76                                         while (propData[chrIndex] != '\\' && propData[chrIndex] != 0) ++chrIndex; 
    77                                         //if (propData[chrIndex] == 0) break; 
     91                                schema_Start = strStart; 
     92                                schema_End = currentPos; 
     93                                return true;    // we are done 
     94                        } 
    7895 
    79                                         strLen = chrIndex - strStart; 
    80                                         schema.resize(strLen); 
    81                                         strncpy(&schema[0], &propData[strStart], chrIndex - strStart); 
    82                                         return true;    // we are done 
    83                                 } 
    84  
    85                                 // skip next two data entries now 
    86                                 for (int tmpDataCount = 0; tmpDataCount < 2; ++tmpDataCount) 
    87                                 { 
    88                                         while(propData[chrIndex] != '\\' && propData[chrIndex] != 0) ++chrIndex; 
    89                                         if (propData[chrIndex] == 0) break; 
    90                                         ++chrIndex; // skip last "\" 
    91                                 } 
    92                                 if (propData[chrIndex] == 0) break; 
     96                        // skip next two data entries now 
     97                        for (int tmpDataCount = 0; tmpDataCount < 2; ++tmpDataCount) 
     98                        { 
     99                                currentPos = strchr(currentPos, '\\'); 
     100                                if (currentPos == NULL) return false; 
     101                                ++currentPos; // skip last "\" 
    93102                        } 
     103                        if (currentPos == NULL) return false; 
    94104                } 
    95105        } 
    96106        return false; 
    97107} 
     108 
     109void OpenWindowSampleData::CheckAlreadyParsed() 
     110{ 
     111        if (!parsed) 
     112                valid = ParseSampleData(); 
     113} 
     114 
     115string OpenWindowSampleData::getServer() 
     116{ 
     117        CheckAlreadyParsed(); 
     118        if (!valid) return ""; 
     119 
     120        return string(server_Start, server_End); 
     121} 
     122 
     123string OpenWindowSampleData::getSchema() 
     124{ 
     125        CheckAlreadyParsed(); 
     126        if (!valid) return ""; 
     127 
     128        return string(schema_Start, schema_End); 
     129} 
  • branches/work_311/core/OpenWindowSampleData.h

    r604 r606  
    2121{ 
    2222public: 
    23         OpenWindowSampleData(Context &context) : context(context) {} 
     23        OpenWindowSampleData(Context &context) : context(context) { parsed = false; } 
    2424 
    2525        string getServer(); 
    2626        string getSchema(); 
    2727 
    28 public: 
    29         static bool GetSampleData(CARActiveLink& actLink, IfElseState ifElse, int nAction, string& server, string& schema); 
     28private: 
     29        void CheckAlreadyParsed(); 
     30        bool ParseSampleData(); 
     31        bool ParseSampleList(char *encodedList); 
    3032 
    3133private: 
    3234        Context &context; 
     35        bool parsed; 
     36        bool valid; 
     37        const char* server_Start; 
     38        const char* server_End; 
     39        const char* schema_Start; 
     40        const char* schema_End; 
    3341}; 
  • branches/work_311/doc/DocSchemaDetails.cpp

    r605 r606  
    2727#include "../core/OpenWindowReportData.h" 
    2828#include "../core/OpenWindowSampleData.h" 
     29#include "../util/Context.h" 
    2930#include "DocOverlayHelper.h" 
    3031#include "DocMain.h" 
     
    14661467                                { 
    14671468                                        AROpenDlgStruct &action = al.GetIfActions().actionList[i].u.openDlg;                     
     1469                                        Context context(al, IES_IF, i, -1, 0); 
     1470                                        OpenWindowSampleData sampleData(context); 
    14681471                                         
    14691472                                        string openWindowSchema; 
    14701473                                        if (action.schemaName[0] == '$' ) 
    14711474                                        { 
    1472                                                 string sampleServer; 
    1473                                                 OpenWindowSampleData::GetSampleData(al, IES_IF, i,      sampleServer, openWindowSchema); 
     1475                                                openWindowSchema = sampleData.getSchema(); 
    14741476                                        } 
    14751477                                        else 
    14761478                                                openWindowSchema = action.schemaName; 
    14771479 
    1478                                         if ((openWindowSchema.compare(AR_CURRENT_SCHEMA_TAG) == 0 /*&& IsSchemaInWFConnectStruct(al->schemaList)*/) || 
     1480                                        if ((openWindowSchema.compare(AR_CURRENT_SCHEMA_TAG) == 0 && IsSchemaInWFConnectStruct(al.GetSchemaList())) || 
    14791481                                                openWindowSchema.compare(schema.GetARName()) == 0) 
    14801482                                        { 
     
    14941496                                        { 
    14951497                                                AROpenDlgStruct &action = al.GetElseActions().actionList[i].u.openDlg; 
     1498                                                Context context(al, IES_ELSE, i, -1, 0); 
     1499                                                OpenWindowSampleData sampleData(context); 
    14961500 
    14971501                                                string openWindowSchema; 
    14981502                                                if (action.schemaName[0] == '$' ) 
    14991503                                                { 
    1500                                                         string sampleServer; 
    1501                                                         OpenWindowSampleData::GetSampleData(al, IES_ELSE, i,    sampleServer, openWindowSchema); 
     1504                                                        openWindowSchema = sampleData.getSchema(); 
    15021505                                                } 
    15031506                                                else 
    15041507                                                        openWindowSchema = action.schemaName; 
    15051508 
    1506                                                 if ((openWindowSchema.compare(AR_CURRENT_SCHEMA_TAG) == 0 /*&& IsSchemaInWFConnectStruct(al->schemaList)*/) || 
     1509                                                if ((openWindowSchema.compare(AR_CURRENT_SCHEMA_TAG) == 0 && IsSchemaInWFConnectStruct(al.GetSchemaList())) || 
    15071510                                                openWindowSchema.compare(schema.GetARName()) == 0) 
    15081511                                                { 
  • branches/work_311/doc/actions/DocOpenWindowAction.cpp

    r605 r606  
    4040                CARSchema attachedSchema(context.getCurrentSchemaId()); 
    4141                OpenWindowReportData reportData(action.reportString); 
     42                OpenWindowSampleData sampleData(context); 
    4243 
    4344                // check if we need to get the sample data 
    4445                if(action.serverName[0] == '$') 
    4546                { 
    46                         OpenWindowSampleData::GetSampleData(context.getActLink(), context.getIfElse(), context.getActionIndex(), openWindowServer, openWindowSchemaName); 
     47                        openWindowServer = sampleData.getServer(); 
     48                        openWindowSchemaName = sampleData.getSchema(); 
    4749                } 
    4850 
Note: See TracChangeset for help on using the changeset viewer.