package com.constellio.app.modules.rm.migrations; import com.constellio.app.entities.modules.MetadataSchemasAlterationHelper; import com.constellio.app.entities.modules.MigrationResourcesProvider; import com.constellio.app.entities.modules.MigrationScript; import com.constellio.app.modules.rm.model.validators.MediumTypeValidator; import com.constellio.app.modules.rm.services.RMSchemasRecordsServices; import com.constellio.app.modules.rm.wrappers.type.MediumType; import com.constellio.app.services.factories.AppLayerFactory; import com.constellio.model.entities.records.Transaction; import com.constellio.model.services.factories.ModelLayerFactory; import com.constellio.model.services.records.RecordServicesException; import com.constellio.model.services.schemas.builders.MetadataSchemaTypesBuilder; import com.constellio.model.services.search.SearchServices; import com.constellio.model.services.search.query.logical.LogicalSearchQuery; import static com.constellio.model.services.search.query.logical.LogicalSearchQueryOperators.*; import java.util.ArrayList; import java.util.List; /** * Created by Charles Blanchette on 2017-03-22. */ public class RMMigrationTo7_1_2 implements MigrationScript { @Override public String getVersion() { return "7.1.2"; } @Override public void migrate(String collection, MigrationResourcesProvider migrationResourcesProvider, AppLayerFactory appLayerFactory) { new SchemaAlterationFor7_1_2(collection, migrationResourcesProvider, appLayerFactory).migrate(); createMediumTypes(collection, appLayerFactory.getModelLayerFactory(), migrationResourcesProvider); } private void createMediumTypes(String collection, ModelLayerFactory modelLayerFactory, MigrationResourcesProvider migrationResourcesProvider) { Transaction transaction = new Transaction(); RMSchemasRecordsServices rm = new RMSchemasRecordsServices(collection, modelLayerFactory); SearchServices searchServices = modelLayerFactory.newSearchServices(); String driveCode = migrationResourcesProvider.getDefaultLanguageString("MediumType.driveCode"); String driveNewTitle = migrationResourcesProvider.getDefaultLanguageString("MediumType.newDriveTitle"); LogicalSearchQuery query = new LogicalSearchQuery(from(rm.mediumTypeSchemaType()).where(ALL)); List<MediumType> mediumTypes = rm.wrapMediumTypes(searchServices.search(query)); List<MediumType> mediumTypesNonAnalogiques = new ArrayList<>(); if (rm.getMediumTypeByCode(driveCode) == null) { for (MediumType mediumType : mediumTypes) { if (!mediumType.isAnalogical()) { mediumTypesNonAnalogiques.add(mediumType); } } if (mediumTypesNonAnalogiques.size() == 0) { transaction.add(rm.newMediumType().setCode(driveCode) .setTitle(driveNewTitle) .setAnalogical(false)); } else { MediumType mediumType = mediumTypesNonAnalogiques.get(0); transaction.add(mediumType.setCode(driveCode) .setAnalogical(false)); } } try { modelLayerFactory.newRecordServices().execute(transaction); } catch (RecordServicesException e) { throw new RuntimeException(e); } } class SchemaAlterationFor7_1_2 extends MetadataSchemasAlterationHelper { protected SchemaAlterationFor7_1_2(String collection, MigrationResourcesProvider migrationResourcesProvider, AppLayerFactory appLayerFactory) { super(collection, migrationResourcesProvider, appLayerFactory); } public String getVersion() { return "7.1.2"; } @Override protected void migrate(MetadataSchemaTypesBuilder typesBuilder) { migrateMediumType(typesBuilder); } private void migrateMediumType(MetadataSchemaTypesBuilder typesBuilder) { typesBuilder.getSchema(MediumType.DEFAULT_SCHEMA).defineValidators().add(MediumTypeValidator.class); } } }