package com.constellio.model.services.records; import java.util.ArrayList; import java.util.List; import com.constellio.model.entities.batchprocess.BatchProcess; import com.constellio.model.entities.batchprocess.BatchProcessAction; import com.constellio.model.entities.schemas.Metadata; import com.constellio.model.entities.schemas.ModificationImpact; import com.constellio.model.services.batch.actions.ReindexMetadatasBatchProcessAction; import com.constellio.model.services.batch.manager.BatchProcessesManager; import com.constellio.model.services.search.SearchServices; import com.constellio.model.services.search.query.logical.condition.LogicalSearchCondition; public class AddToBatchProcessImpactHandler implements RecordModificationImpactHandler { BatchProcessesManager manager; SearchServices searchServices; List<BatchProcess> createdBatchProcesses = new ArrayList<>(); public AddToBatchProcessImpactHandler(BatchProcessesManager manager, SearchServices searchServices) { this.manager = manager; this.searchServices = searchServices; } @Override public void prepareToHandle(ModificationImpact modificationImpact) { LogicalSearchCondition condition = modificationImpact.getLogicalSearchCondition(); if (searchServices.hasResults(condition)) { String title = "reindex.transaction"; if (modificationImpact.getTransactionTitle() != null) { title += " " + modificationImpact.getTransactionTitle(); } BatchProcessAction action = newBatchProcessAction(modificationImpact.getMetadataToReindex()); String collection = modificationImpact.getMetadataToReindex().get(0).getCollection(); BatchProcess batchProcess = this.manager.addBatchProcessInStandby(condition, action, title); createdBatchProcesses.add(batchProcess); } } @Override public void handle() { for (BatchProcess batchProcess : createdBatchProcesses) { this.manager.markAsPending(batchProcess); } } @Override public void cancel() { for (BatchProcess batchProcess : createdBatchProcesses) { this.manager.cancelStandByBatchProcess(batchProcess); } this.createdBatchProcesses.clear(); } BatchProcessAction newBatchProcessAction(List<Metadata> metadatas) { return ReindexMetadatasBatchProcessAction.forMetadatas(metadatas); } public List<BatchProcess> getAllCreatedBatchProcesses() { return createdBatchProcesses; } }