Changeset 549


Ignore:
Timestamp:
05/30/14 03:13:14 (5 years ago)
Author:
jls17
Message:
  • added slow object loading for fields and vuis to get ARInside working with server version 5.1.2 (#133)
Location:
branches/work_311/lists
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • branches/work_311/lists/ARFieldList.cpp

    r403 r549  
    174174        memset(&status, 0, sizeof(status)); 
    175175 
    176         // ok, get all informations of the fields we need 
    177         if (ARGetMultipleFields(&arIn->arControl, 
    178                 schemaName,  
    179                 NULL, // all field ids 
    180                 &fldExists, 
    181                 &fieldIds, 
    182                 &names, 
    183                 &fieldMaps, 
    184                 &dataTypes, 
    185                 &options, 
    186                 &createModes, 
    187                 &fieldOptions, 
    188                 &defaultValues, 
    189 #if AR_CURRENT_API_VERSION >= AR_API_VERSION_763 
    190                 NULL, // groupListList // TODO: support static inherited permissions 
    191 #endif 
    192                 &permLists, 
    193                 &limits, 
    194                 &dInstanceLists, 
    195                 &helpTexts, 
    196                 &changedTimes, 
    197                 &owners, 
    198                 &changedUsers, 
    199                 &changeDiary, 
    200 #if AR_CURRENT_API_VERSION >= AR_API_VERSION_763 
    201                 &objProps, 
    202 #endif 
    203                 &status) == AR_RETURN_OK) 
    204         { 
    205                 FreeARBooleanList(&fldExists, false); 
    206  
    207                 sortedList.reserve(names.numItems); 
    208                 for (unsigned int i=0; i<names.numItems; ++i) 
    209                 { 
    210                         sortedList.push_back(i); 
    211                 } 
    212  
    213                 workflowReferences.resize(names.numItems); 
    214  
    215                 return true; 
     176        if (arIn->CompareServerVersion(6,3) < 0) 
     177        { 
     178                ARInternalIdList fieldIdList; 
     179                ARZeroMemory(&fieldIdList); 
     180 
     181                if (ARGetListField(&arIn->arControl, schemaName, AR_FIELD_TYPE_ALL, 0,  
     182#if AR_CURRENT_API_VERSION >= AR_API_VERSION_763 
     183                        NULL,  
     184#endif 
     185                        &fieldIdList, &status) == AR_RETURN_OK) 
     186                { 
     187                        Reserve(fieldIdList.numItems); 
     188 
     189                        unsigned int currentWriteIndex = 0; 
     190                        for (unsigned int idx = 0; idx < fieldIdList.numItems; ++idx) 
     191                        { 
     192                                if (ARGetField(&arIn->arControl, schemaName, fieldIdList.internalIdList[idx], 
     193                                        names.nameList[currentWriteIndex], 
     194                                        &fieldMaps.mappingList[currentWriteIndex], 
     195                                        &dataTypes.intList[currentWriteIndex], 
     196                                        &options.intList[currentWriteIndex], 
     197                                        &createModes.intList[currentWriteIndex], 
     198                                        &fieldOptions.intList[currentWriteIndex], 
     199                                        &defaultValues.valueList[currentWriteIndex], 
     200#if AR_CURRENT_API_VERSION >= AR_API_VERSION_763 
     201                                        NULL, 
     202#endif 
     203                                        &permLists.permissionList[currentWriteIndex], 
     204                                        &limits.fieldLimitList[currentWriteIndex], 
     205                                        &dInstanceLists.dInstanceList[currentWriteIndex], 
     206                                        &helpTexts.stringList[currentWriteIndex], 
     207                                        &changedTimes.timestampList[currentWriteIndex], 
     208                                        owners.nameList[currentWriteIndex], 
     209                                        changedUsers.nameList[currentWriteIndex], 
     210                                        &changeDiary.stringList[currentWriteIndex], 
     211#if AR_CURRENT_API_VERSION >= AR_API_VERSION_763 
     212                                        &objProps.propsList[currentWriteIndex], 
     213#endif 
     214                                        &status) == AR_RETURN_OK) 
     215                                { 
     216                                        fieldIds.internalIdList[currentWriteIndex++] = fieldIdList.internalIdList[idx]; 
     217                                } 
     218                                else 
     219                                        cerr << BuildMessageAndFreeStatus(status); 
     220                        } 
     221                        SetNumItems(currentWriteIndex); 
     222                        BuildIndex(); 
     223                        return true; 
     224                } 
     225                else 
     226                { 
     227                        cerr << BuildMessageAndFreeStatus(status); 
     228                        return false; 
     229                } 
    216230        } 
    217231        else 
    218232        { 
    219                 cerr << BuildMessageAndFreeStatus(status); 
    220                 return false; 
     233                // ok, get all informations of the fields we need 
     234                if (ARGetMultipleFields(&arIn->arControl, 
     235                        schemaName,  
     236                        NULL, // all field ids 
     237                        &fldExists, 
     238                        &fieldIds, 
     239                        &names, 
     240                        &fieldMaps, 
     241                        &dataTypes, 
     242                        &options, 
     243                        &createModes, 
     244                        &fieldOptions, 
     245                        &defaultValues, 
     246        #if AR_CURRENT_API_VERSION >= AR_API_VERSION_763 
     247                        NULL, // groupListList // TODO: support static inherited permissions 
     248        #endif 
     249                        &permLists, 
     250                        &limits, 
     251                        &dInstanceLists, 
     252                        &helpTexts, 
     253                        &changedTimes, 
     254                        &owners, 
     255                        &changedUsers, 
     256                        &changeDiary, 
     257        #if AR_CURRENT_API_VERSION >= AR_API_VERSION_763 
     258                        &objProps, 
     259        #endif 
     260                        &status) == AR_RETURN_OK) 
     261                { 
     262                        FreeARBooleanList(&fldExists, false); 
     263                        BuildIndex(); 
     264                        return true; 
     265                } 
     266                else 
     267                { 
     268                        cerr << BuildMessageAndFreeStatus(status); 
     269                        return false; 
     270                } 
    221271        } 
    222272} 
     
    270320#endif 
    271321} 
     322 
     323void CARFieldListServer::Reserve(unsigned int amount) 
     324{ 
     325        names.nameList = new ARNameType[amount]; 
     326        ZeroMemory(names.nameList, sizeof(ARNameType) * amount); 
     327 
     328        fieldIds.internalIdList = new ARInternalId[amount]; 
     329        ZeroMemory(fieldIds.internalIdList, sizeof(ARInternalId) * amount); 
     330 
     331        fieldMaps.mappingList = new ARFieldMappingStruct[amount]; 
     332        ZeroMemory(fieldMaps.mappingList, sizeof(ARFieldMappingStruct) * amount); 
     333 
     334        dataTypes.intList = new unsigned int[amount]; 
     335        ZeroMemory(dataTypes.intList, sizeof(unsigned int) * amount); 
     336 
     337        options.intList = new unsigned int[amount]; 
     338        ZeroMemory(options.intList, sizeof(unsigned int) * amount); 
     339 
     340        createModes.intList = new unsigned int[amount]; 
     341        ZeroMemory(createModes.intList, sizeof(unsigned int) * amount); 
     342         
     343        fieldOptions.intList = new unsigned int[amount]; 
     344        ZeroMemory(fieldOptions.intList, sizeof(unsigned int) * amount); 
     345 
     346        defaultValues.valueList = new ARValueStruct[amount]; 
     347        ZeroMemory(defaultValues.valueList, sizeof(ARValueStruct) * amount); 
     348 
     349        permLists.permissionList = new ARPermissionList[amount]; 
     350        ZeroMemory(permLists.permissionList, sizeof(ARPermissionList) * amount); 
     351 
     352        limits.fieldLimitList = new ARFieldLimitStruct[amount]; 
     353        ZeroMemory(limits.fieldLimitList, sizeof(ARFieldLimitStruct) * amount); 
     354 
     355        dInstanceLists.dInstanceList = new ARDisplayInstanceList[amount]; 
     356        ZeroMemory(dInstanceLists.dInstanceList, sizeof(ARDisplayInstanceList) * amount); 
     357 
     358        helpTexts.stringList = new char*[amount]; 
     359        ZeroMemory(helpTexts.stringList, sizeof(char*) * amount); 
     360 
     361        changedTimes.timestampList = new ARTimestamp[amount]; 
     362        ZeroMemory(changedTimes.timestampList, sizeof(ARTimestamp) * amount); 
     363 
     364        owners.nameList = new ARAccessNameType[amount]; 
     365        ZeroMemory(owners.nameList, sizeof(ARAccessNameType) * amount); 
     366 
     367        changedUsers.nameList = new ARAccessNameType[amount]; 
     368        ZeroMemory(changedUsers.nameList, sizeof(ARAccessNameType) * amount); 
     369 
     370        changeDiary.stringList = new char*[amount]; 
     371        ZeroMemory(changeDiary.stringList, sizeof(char*) * amount); 
     372 
     373#if AR_CURRENT_API_VERSION >= AR_API_VERSION_763 
     374        objProps.propsList = new ARPropList[amount]; 
     375        ZeroMemory(objProps.propsList, sizeof(ARPropList) * amount); 
     376#endif 
     377} 
     378 
     379void CARFieldListServer::SetNumItems(unsigned int amount) 
     380{ 
     381        names.numItems = amount; 
     382        fieldIds.numItems = amount; 
     383        fieldMaps.numItems = amount; 
     384        dataTypes.numItems = amount; 
     385        options.numItems = amount; 
     386        createModes.numItems = amount; 
     387        fieldOptions.numItems = amount; 
     388        defaultValues.numItems = amount; 
     389        permLists.numItems = amount; 
     390        limits.numItems = amount; 
     391        dInstanceLists.numItems = amount; 
     392        helpTexts.numItems = amount; 
     393        changedTimes.numItems = amount; 
     394        owners.numItems = amount; 
     395        changedUsers.numItems = amount; 
     396        changeDiary.numItems = amount; 
     397#if AR_CURRENT_API_VERSION >= AR_API_VERSION_763 
     398        objProps.numItems = amount; 
     399#endif 
     400} 
     401 
     402void CARFieldListServer::BuildIndex() 
     403{ 
     404        sortedList.reserve(names.numItems); 
     405        for (unsigned int i=0; i<names.numItems; ++i) 
     406        { 
     407                sortedList.push_back(i); 
     408        } 
     409        workflowReferences.resize(names.numItems); 
     410} 
  • branches/work_311/lists/ARFieldList.h

    r525 r549  
    150150 
    151151private: 
     152        void Reserve(unsigned int amount); 
     153        void SetNumItems(unsigned int amount); 
     154        void BuildIndex(); 
     155 
     156private: 
    152157        unsigned int schemaId; 
    153158 
  • branches/work_311/lists/ARServerInfoList.cpp

    r403 r549  
    7777                        { 
    7878                        case AR_SERVER_INFO_DB_PASSWORD: 
     79                        case AR_SERVER_INFO_DSO_MARK_PENDING_RETRY: 
    7980#if AR_CURRENT_API_VERSION >= AR_API_VERSION_764 
    8081                        case AR_SERVER_INFO_RESTART_PLUGIN: 
  • branches/work_311/lists/ARVUIList.cpp

    r403 r549  
    110110        memset(&status, 0, sizeof(status)); 
    111111 
    112         // ok, get all informations of the fields we need 
    113         if (ARGetMultipleVUIs(&arIn->arControl, 
    114                 schemaName,  
    115                 NULL, // all field ids 
    116                 0,    // no changed since restriction 
    117                 &vuiExists, 
    118                 &ids, 
    119                 &names, 
    120                 &locales, 
    121                 &types, 
    122                 &dispProps, 
    123                 &helpTexts, 
    124                 &changedTimes, 
    125                 &owners, 
    126                 &changedUsers, 
    127                 &changeDiary, 
    128 #if AR_CURRENT_API_VERSION >= AR_API_VERSION_763 
    129                 &objProps, 
    130 #endif 
    131                 &status) == AR_RETURN_OK) 
    132         { 
    133                 FreeARBooleanList(&vuiExists, false); 
    134  
    135                 sortedList.reserve(names.numItems); 
    136                 for (unsigned int i=0; i<names.numItems; ++i) 
    137                 { 
    138                         sortedList.push_back(i); 
    139                 } 
    140                 return true; 
     112        if (arIn->CompareServerVersion(6,3) < 0) 
     113        { 
     114                ARInternalIdList        vuiIdList; 
     115                ARZeroMemory(&vuiIdList); 
     116                if (ARGetListVUI(&arIn->arControl, schemaName, 0,  
     117#if AR_CURRENT_API_VERSION >= AR_API_VERSION_763 
     118                        NULL, 
     119#endif                   
     120                        &vuiIdList, &status) == AR_RETURN_OK) 
     121                { 
     122                        Reserve(vuiIdList.numItems); 
     123 
     124                        unsigned int currentWriteIndex = 0; 
     125                        for (unsigned int idx = 0; idx < vuiIdList.numItems; ++idx) 
     126                        { 
     127                                if (ARGetVUI(&arIn->arControl, 
     128                                        schemaName, 
     129                                        vuiIdList.internalIdList[idx], 
     130                                        names.nameList[currentWriteIndex], 
     131                                        locales.localeList[currentWriteIndex], 
     132                                        &types.intList[currentWriteIndex], 
     133                                        &dispProps.propsList[currentWriteIndex], 
     134                                        &helpTexts.stringList[currentWriteIndex], 
     135                                        &changedTimes.timestampList[currentWriteIndex], 
     136                                        owners.nameList[currentWriteIndex], 
     137                                        changedUsers.nameList[currentWriteIndex], 
     138                                        &changeDiary.stringList[currentWriteIndex], 
     139#if AR_CURRENT_API_VERSION >= AR_API_VERSION_763 
     140                                        &objProps.propsList[currentWriteIndex], 
     141#endif 
     142                                        &status) == AR_RETURN_OK) 
     143                                { 
     144                                        ids.internalIdList[currentWriteIndex++] = vuiIdList.internalIdList[idx]; 
     145                                } 
     146                                else 
     147                                        cerr << BuildMessageAndFreeStatus(status); 
     148                        } 
     149                        SetNumItems(currentWriteIndex); 
     150                        BuildIndex(); 
     151                        return true; 
     152                } 
     153                else 
     154                { 
     155                        cerr << BuildMessageAndFreeStatus(status); 
     156                        return false; 
     157                } 
    141158        } 
    142159        else 
    143160        { 
    144                 cerr << BuildMessageAndFreeStatus(status); 
    145                 return false; 
     161                // ok, get all informations of the fields we need 
     162                if (ARGetMultipleVUIs(&arIn->arControl, 
     163                        schemaName,  
     164                        NULL, // all field ids 
     165                        0,    // no changed since restriction 
     166                        &vuiExists, 
     167                        &ids, 
     168                        &names, 
     169                        &locales, 
     170                        &types, 
     171                        &dispProps, 
     172                        &helpTexts, 
     173                        &changedTimes, 
     174                        &owners, 
     175                        &changedUsers, 
     176                        &changeDiary, 
     177        #if AR_CURRENT_API_VERSION >= AR_API_VERSION_763 
     178                        &objProps, 
     179        #endif 
     180                        &status) == AR_RETURN_OK) 
     181                { 
     182                        FreeARBooleanList(&vuiExists, false); 
     183                        BuildIndex(); 
     184                        return true; 
     185                } 
     186                else 
     187                { 
     188                        cerr << BuildMessageAndFreeStatus(status); 
     189                        return false; 
     190                } 
    146191        } 
    147192} 
     
    177222#endif 
    178223} 
     224 
     225void CARVUIListServer::Reserve(unsigned int amount) 
     226{ 
     227        ids.internalIdList = new ARInternalId[amount]; 
     228        ZeroMemory(ids.internalIdList, sizeof(ARInternalId) * amount); 
     229 
     230        names.nameList = new ARNameType[amount]; 
     231        ZeroMemory(names.nameList, sizeof(ARNameType) * amount); 
     232 
     233        locales.localeList = new ARLocaleType[amount]; 
     234        ZeroMemory(locales.localeList, sizeof(ARLocaleType) * amount); 
     235 
     236        types.intList = new unsigned int[amount]; 
     237        ZeroMemory(types.intList, sizeof(unsigned int) * amount); 
     238 
     239        dispProps.propsList = new ARPropList[amount]; 
     240        ZeroMemory(dispProps.propsList, sizeof(ARPropList) * amount); 
     241         
     242        helpTexts.stringList = new char*[amount]; 
     243        ZeroMemory(helpTexts.stringList, sizeof(char*) * amount); 
     244 
     245        changedTimes.timestampList = new ARTimestamp[amount]; 
     246        ZeroMemory(changedTimes.timestampList, sizeof(ARTimestamp) * amount); 
     247         
     248        owners.nameList = new ARAccessNameType[amount]; 
     249        ZeroMemory(owners.nameList, sizeof(ARAccessNameType) * amount); 
     250         
     251        changedUsers.nameList = new ARAccessNameType[amount]; 
     252        ZeroMemory(changedUsers.nameList, sizeof(ARAccessNameType) * amount); 
     253         
     254        changeDiary.stringList = new char*[amount]; 
     255        ZeroMemory(changeDiary.stringList, sizeof(char*) * amount); 
     256 
     257#if AR_CURRENT_API_VERSION >= AR_API_VERSION_763 
     258        objProps.propsList = new ARPropList[amount]; 
     259        ZeroMemory(objProps.propsList, sizeof(ARPropList) * amount); 
     260#endif 
     261} 
     262 
     263void CARVUIListServer::SetNumItems(unsigned int amount) 
     264{ 
     265        ids.numItems = amount; 
     266        names.numItems = amount; 
     267        locales.numItems = amount; 
     268        types.numItems = amount; 
     269        dispProps.numItems = amount; 
     270        helpTexts.numItems = amount; 
     271        changedTimes.numItems = amount; 
     272        owners.numItems = amount; 
     273        changedUsers.numItems = amount; 
     274        changeDiary.numItems = amount; 
     275#if AR_CURRENT_API_VERSION >= AR_API_VERSION_763 
     276        objProps.numItems = amount; 
     277#endif 
     278} 
     279 
     280void CARVUIListServer::BuildIndex() 
     281{ 
     282        sortedList.reserve(names.numItems); 
     283        for (unsigned int i=0; i<names.numItems; ++i) 
     284        { 
     285                sortedList.push_back(i); 
     286        } 
     287} 
  • branches/work_311/lists/ARVUIList.h

    r525 r549  
    113113 
    114114private: 
     115        void Reserve(unsigned int amount); 
     116        void SetNumItems(unsigned int amount); 
     117        void BuildIndex(); 
     118 
     119private: 
    115120        unsigned int schemaId; 
    116121         
Note: See TracChangeset for help on using the changeset viewer.