| Quintiq file version 2.0 | 
| #parent: #root | 
| StaticMethod CreateDataPieces (LibDEF_DataTransfers dataTransfers_i, NamedValueTree nvt_i) | 
| { | 
|   Description: | 
|   [* | 
|     This is for creating data pieces for multiple data transfers using the given NVT (so 1 NVT for all the given data transfers). | 
|     Each data transfer might have different chunk size limit, so this means different number of chunks of the NVT (the NVT will be chunked differently). | 
|     The algorithm used here is to save performance cost by avoiding redundant NVT chunking for data transfers with the same chunk size limit (by reusing the previous NVT chunking result). | 
|   *] | 
|   TextBody: | 
|   [* | 
|     // Create the data pieces for every data transfer. | 
|     // To save performance on chunking, first sort the dataTransfers based on the | 
|     // totalContentLength and ChunkSizeLimit (they are possible to be different for each target), | 
|     // Then only do chunking if any of them is different. Else reuse the previous one | 
|     dataTransfersSorted := selectsortedset( dataTransfers_i, Elements, dt, true, | 
|                                             dt.TotalContentLength(), | 
|                                             dt.ChunkSizeLimit() ); | 
|     previousDt := null( LibDEF_DataTransfer ); | 
|     nvtContainerFromPrev := null( LibDEF_NamedValueTreeContainer, owning ); | 
|     traverse( dataTransfersSorted, Elements, dt ) | 
|     { | 
|       LibDEF_Util::EventLog( dt.IntegrationEvent(), "Preparing data pieces (chunking NVT)." ); | 
|        | 
|       if( isnull( previousDt ) | 
|           or isnull( nvtContainerFromPrev ) | 
|           or previousDt.TotalContentLength() <> dt.TotalContentLength() | 
|           or previousDt.ChunkSizeLimit() <> dt.ChunkSizeLimit() ) | 
|       { | 
|         nvtContainerFromPrev := dt.CreateDataPieces( nvt_i ); | 
|       } | 
|       else | 
|       { | 
|         dt.CreateDataPieces( nvtContainerFromPrev ); | 
|       } | 
|       previousDt := dt; | 
|     } | 
|   *] | 
|   InterfaceProperties { Accessibility: 'Module' } | 
| } |