package com.constellio.app.modules.rm.migrations;
import static com.constellio.model.services.search.query.logical.LogicalSearchQueryOperators.from;
import java.util.List;
import java.util.concurrent.atomic.AtomicBoolean;
import com.constellio.app.entities.modules.MigrationResourcesProvider;
import com.constellio.app.entities.modules.MigrationScript;
import com.constellio.app.modules.rm.services.RMSchemasRecordsServices;
import com.constellio.app.modules.rm.wrappers.Folder;
import com.constellio.app.services.factories.AppLayerFactory;
import com.constellio.model.entities.records.ActionExecutorInBatch;
import com.constellio.model.entities.records.Record;
import com.constellio.model.entities.records.Transaction;
import com.constellio.model.entities.schemas.ModificationImpact;
import com.constellio.model.services.records.RecordModificationImpactHandler;
import com.constellio.model.services.records.RecordServices;
import com.constellio.model.services.search.SearchServices;
public class RMMigrationTo6_1_4 implements MigrationScript {
@Override
public String getVersion() {
return "6.1.4";
}
@Override
public void migrate(String collection, MigrationResourcesProvider migrationResourcesProvider, AppLayerFactory appLayerFactory)
throws Exception {
setSubFoldersEnteredFieldsToNull(collection, appLayerFactory);
}
private void setSubFoldersEnteredFieldsToNull(String collection, AppLayerFactory appLayerFactory)
throws Exception {
SearchServices searchServices = appLayerFactory.getModelLayerFactory().newSearchServices();
final RecordServices recordServices = appLayerFactory.getModelLayerFactory().newRecordServices();
final RMSchemasRecordsServices rm = new RMSchemasRecordsServices(collection, appLayerFactory);
final AtomicBoolean recordFixed = new AtomicBoolean(false);
new ActionExecutorInBatch(searchServices, "Set sub-folders entered values to null", 250) {
@Override
public void doActionOnBatch(List<Record> records)
throws Exception {
Transaction transaction = new Transaction();
for (Folder folder : rm.wrapFolders(records)) {
folder.setAdministrativeUnitEntered((String) null);
folder.setCategoryEntered((String) null);
folder.setRetentionRuleEntered((String) null);
folder.setCopyStatusEntered(null);
transaction.add(folder);
}
transaction.setSkippingRequiredValuesValidation(true);
recordServices.executeWithImpactHandler(transaction, new RecordModificationImpactHandler() {
@Override
public void prepareToHandle(ModificationImpact modificationImpact) {
}
@Override
public void handle() {
recordFixed.set(true);
}
@Override
public void cancel() {
}
});
}
}.execute(from(rm.folder.schemaType()).where(rm.folder.parentFolder()).isNotNull());
if (recordFixed.get()) {
appLayerFactory.getSystemGlobalConfigsManager().setReindexingRequired(true);
}
}
}