package com.constellio.app.modules.rm.migrations; import static com.constellio.model.services.search.query.logical.LogicalSearchQueryOperators.from; import java.util.Iterator; import java.util.List; import com.constellio.app.entities.modules.MigrationResourcesProvider; import com.constellio.app.entities.modules.MigrationScript; import com.constellio.app.modules.rm.wrappers.Category; import com.constellio.app.services.factories.AppLayerFactory; import com.constellio.data.utils.BatchBuilderIterator; import com.constellio.model.entities.Taxonomy; import com.constellio.model.entities.records.Record; import com.constellio.model.entities.records.Transaction; import com.constellio.model.entities.schemas.MetadataSchemaType; import com.constellio.model.entities.schemas.MetadataSchemaTypes; import com.constellio.model.entities.schemas.Schemas; import com.constellio.model.services.records.RecordServices; import com.constellio.model.services.records.RecordServicesException; import com.constellio.model.services.records.reindexing.ReindexationMode; import com.constellio.model.services.records.reindexing.ReindexingServices; import com.constellio.model.services.schemas.MetadataSchemasManager; import com.constellio.model.services.search.SearchServices; import com.constellio.model.services.search.query.logical.LogicalSearchQuery; import com.constellio.model.services.taxonomies.TaxonomiesManager; public class RMMigrationTo5_0_4_1 implements MigrationScript { @Override public String getVersion() { return "5.0.4.2"; } @Override public void migrate(String collection, MigrationResourcesProvider migrationResourcesProvider, AppLayerFactory appLayerFactory) { RecordServices recordServices = appLayerFactory.getModelLayerFactory().newRecordServices(); SearchServices searchServices = appLayerFactory.getModelLayerFactory().newSearchServices(); MetadataSchemasManager metadataSchemasManager = appLayerFactory.getModelLayerFactory().getMetadataSchemasManager(); TaxonomiesManager taxonomiesManager = appLayerFactory.getModelLayerFactory().getTaxonomiesManager(); MetadataSchemaTypes types = metadataSchemasManager.getSchemaTypes(collection); for (Taxonomy taxonomy : taxonomiesManager.getEnabledTaxonomies(collection)) { for (String schemaTypeCode : taxonomy.getSchemaTypes()) { MetadataSchemaType schemaType = types.getSchemaType(schemaTypeCode); Iterator<Record> recordsIterator = searchServices.recordsIterator( new LogicalSearchQuery(from(schemaType).returnAll())); Iterator<List<Record>> recordBatchesIterator = new BatchBuilderIterator<>(recordsIterator, 100); while (recordBatchesIterator.hasNext()) { Transaction transaction = new Transaction(); transaction.setSkippingRequiredValuesValidation(true); for (Record record : recordBatchesIterator.next()) { transaction.add(record.set(Schemas.VISIBLE_IN_TREES, true)); } try { recordServices.execute(transaction); } catch (RecordServicesException e) { throw new RuntimeException(e); } } } } boolean hasCategories = searchServices.hasResults(from(metadataSchemasManager.getSchemaTypes(collection).getSchemaType( Category.SCHEMA_TYPE)).returnAll()); if (hasCategories) { ReindexingServices reindexingServices = appLayerFactory.getModelLayerFactory().newReindexingServices(); reindexingServices.reindexCollection(collection, ReindexationMode.RECALCULATE_AND_REWRITE); } } }