package com.constellio.model.services.batch.actions; import java.util.ArrayList; import java.util.List; import com.constellio.model.entities.batchprocess.BatchProcessAction; import com.constellio.model.entities.records.Record; import com.constellio.model.entities.records.Transaction; import com.constellio.model.entities.records.TransactionRecordsReindexation; import com.constellio.model.entities.schemas.Metadata; import com.constellio.model.entities.schemas.MetadataSchemaTypes; import com.constellio.model.services.records.RecordProvider; import com.constellio.model.services.schemas.MetadataList; public class ReindexMetadatasBatchProcessAction implements BatchProcessAction { final List<String> reindexedMetadataCodes; public ReindexMetadatasBatchProcessAction(List<String> reindexedMetadataCodes) { this.reindexedMetadataCodes = reindexedMetadataCodes; } public static ReindexMetadatasBatchProcessAction forMetadatas(List<Metadata> metadataToReindex) { List<String> codes = new ArrayList<>(); for (Metadata metadata : metadataToReindex) { codes.add(metadata.getCode()); } return new ReindexMetadatasBatchProcessAction(codes); } @Override public Transaction execute(List<Record> batch, MetadataSchemaTypes schemaTypes, RecordProvider recordProvider) { Transaction transaction = new Transaction(); MetadataList reindexedMetadatas = schemaTypes.getMetadatas(reindexedMetadataCodes); transaction.getRecordUpdateOptions().setForcedReindexationOfMetadatas(new TransactionRecordsReindexation(reindexedMetadatas)); transaction.setSkippingReferenceToLogicallyDeletedValidation(true); transaction.setSkippingRequiredValuesValidation(true); transaction.addUpdate(batch); return transaction; } @Override public Object[] getInstanceParameters() { return new Object[] { reindexedMetadataCodes }; } }