package com.constellio.model.services.batch.controller;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
import com.constellio.data.dao.dto.records.OptimisticLockingResolution;
import com.constellio.model.entities.records.Record;
import com.constellio.model.entities.records.Transaction;
import com.constellio.model.services.records.BulkRecordTransactionHandler;
import com.constellio.model.services.records.BulkRecordTransactionHandlerOptions;
import com.constellio.model.services.records.RecordServices;
import com.constellio.model.services.records.RecordServicesException;
import com.constellio.sdk.tests.setups.TwoTaxonomiesContainingFolderAndDocumentsSetup.FolderSchema;
import com.constellio.sdk.tests.setups.TwoTaxonomiesContainingFolderAndDocumentsSetup.TaxonomyRecords;
public class BatchProcessControllerSetupWithTaxonomies {
public int add10_10_10_X_HierarchyOfFoldersWith(final RecordServices recordServices, final TaxonomyRecords taxonomyRecords,
final FolderSchema folderSchema, final int nbOfFoldersPerLevel2Node)
throws RecordServicesException, InterruptedException {
final AtomicInteger nbFolders = new AtomicInteger();
final List<Record> level2s = new ArrayList<>();
Transaction transaction = new Transaction();
for (int folderLevel0 = 0; folderLevel0 < 10; folderLevel0++) {
Record level0 = recordServices.newRecordWithSchema(folderSchema.instance());
transaction.addUpdate(level0);
level0.set(folderSchema.taxonomy1(), taxonomyRecords.taxo1_firstTypeItem2_secondTypeItem1);
for (int folderLevel1 = 0; folderLevel1 < 10; folderLevel1++) {
Record level1 = recordServices.newRecordWithSchema(folderSchema.instance());
level1.set(folderSchema.parent(), level0);
transaction.addUpdate(level1);
for (int folderLevel2 = 0; folderLevel2 < 10; folderLevel2++) {
Record level2 = recordServices.newRecordWithSchema(folderSchema.instance());
level2.set(folderSchema.parent(), level1);
transaction.addUpdate(level2);
level2s.add(level2);
}
}
}
nbFolders.addAndGet(transaction.getRecords().size());
transaction.setOptimisticLockingResolution(OptimisticLockingResolution.EXCEPTION);
recordServices.execute(transaction);
BulkRecordTransactionHandlerOptions options = new BulkRecordTransactionHandlerOptions().withRecordsPerBatch(10000);
BulkRecordTransactionHandler bulkTransactionsHandler = new BulkRecordTransactionHandler(recordServices,
"testRecordsSetup", options);
for (Record level2 : level2s) {
for (int j = 0; j < nbOfFoldersPerLevel2Node; j++) {
Record level3 = recordServices.newRecordWithSchema(folderSchema.instance());
level3.set(folderSchema.parent(), level2);
bulkTransactionsHandler.append(level3);
}
nbFolders.addAndGet(nbOfFoldersPerLevel2Node);
}
bulkTransactionsHandler.closeAndJoin();
return nbFolders.get();
}
}