package com.constellio.app.modules.rm.migrations; import static com.constellio.model.entities.schemas.MetadataTransiency.PERSISTED; import static com.constellio.model.entities.schemas.Schemas.SCHEMA_AUTOCOMPLETE_FIELD; import java.util.ArrayList; import java.util.List; import com.constellio.app.entities.modules.MetadataSchemasAlterationHelper; import com.constellio.app.entities.modules.MigrationHelper; import com.constellio.app.entities.modules.MigrationResourcesProvider; import com.constellio.app.entities.modules.MigrationScript; import com.constellio.app.modules.rm.constants.RMRoles; import com.constellio.app.modules.rm.model.calculators.document.DocumentAutocompleteFieldCalculator; import com.constellio.app.modules.rm.model.calculators.folder.FolderAutocompleteFieldCalculator; import com.constellio.app.modules.rm.wrappers.AdministrativeUnit; import com.constellio.app.modules.rm.wrappers.Category; import com.constellio.app.modules.rm.wrappers.Document; import com.constellio.app.modules.rm.wrappers.Folder; import com.constellio.app.modules.rm.wrappers.RMUserFolder; import com.constellio.app.modules.rm.wrappers.RetentionRule; import com.constellio.app.services.factories.AppLayerFactory; import com.constellio.model.entities.CorePermissions; import com.constellio.model.entities.records.wrappers.UserFolder; import com.constellio.model.entities.schemas.MetadataSchema; import com.constellio.model.entities.schemas.MetadataSchemaTypes; import com.constellio.model.entities.schemas.MetadataSchemasRuntimeException; import com.constellio.model.entities.schemas.MetadataValueType; import com.constellio.model.entities.security.Role; import com.constellio.model.services.factories.ModelLayerFactory; import com.constellio.model.services.schemas.MetadataSchemasManager; import com.constellio.model.services.schemas.builders.MetadataSchemaBuilder; import com.constellio.model.services.schemas.builders.MetadataSchemaTypesBuilder; public class RMMigrationTo7_1_1 extends MigrationHelper implements MigrationScript { @Override public String getVersion() { return "7.1.1"; } @Override public void migrate(String collection, MigrationResourcesProvider migrationResourcesProvider, AppLayerFactory appLayerFactory) throws Exception { new SchemaAlterationFor7_1_1(collection, migrationResourcesProvider, appLayerFactory).migrate(); alterRole(collection, appLayerFactory.getModelLayerFactory()); appLayerFactory.getSystemGlobalConfigsManager().setReindexingRequired(true); } private void alterRole(String collection, ModelLayerFactory modelLayerFactory) { Role RGDrole = modelLayerFactory.getRolesManager().getRole(collection, RMRoles.RGD); List<String> newAdmPermissions = new ArrayList<>(); newAdmPermissions.add(CorePermissions.VIEW_SYSTEM_BATCH_PROCESSES); modelLayerFactory.getRolesManager().updateRole(RGDrole.withNewPermissions(newAdmPermissions)); } private class SchemaAlterationFor7_1_1 extends MetadataSchemasAlterationHelper { protected SchemaAlterationFor7_1_1(String collection, MigrationResourcesProvider migrationResourcesProvider, AppLayerFactory appLayerFactory) { super(collection, migrationResourcesProvider, appLayerFactory); } @Override protected void migrate(MetadataSchemaTypesBuilder typesBuilder) { ModelLayerFactory modelLayerFactory = appLayerFactory.getModelLayerFactory(); MetadataSchemasManager schemasManager = modelLayerFactory.getMetadataSchemasManager(); MetadataSchemaTypes types = schemasManager.getSchemaTypes(collection); MetadataSchemaBuilder folderSchema = typesBuilder.getSchemaType(Folder.SCHEMA_TYPE).getDefaultSchema(); folderSchema.getMetadata(Folder.ACTIVE_RETENTION_CODE).setTransiency(PERSISTED); folderSchema.getMetadata(Folder.SEMIACTIVE_RETENTION_CODE).setTransiency(PERSISTED); folderSchema.getMetadata(Folder.SEMIACTIVE_RETENTION_TYPE).setTransiency(PERSISTED); folderSchema.getMetadata(Folder.COPY_RULES_EXPECTED_TRANSFER_DATES).setTransiency(PERSISTED); folderSchema.getMetadata(Folder.COPY_RULES_EXPECTED_DEPOSIT_DATES).setTransiency(PERSISTED); folderSchema.getMetadata(Folder.COPY_RULES_EXPECTED_DESTRUCTION_DATES).setTransiency(PERSISTED); folderSchema.getMetadata(Folder.MAIN_COPY_RULE).setTransiency(PERSISTED); folderSchema.getMetadata(Folder.DECOMMISSIONING_DATE).setTransiency(PERSISTED); folderSchema.getMetadata(SCHEMA_AUTOCOMPLETE_FIELD.getLocalCode()) .defineDataEntry().asCalculated(FolderAutocompleteFieldCalculator.class); typesBuilder.getSchema(Document.DEFAULT_SCHEMA).getMetadata(SCHEMA_AUTOCOMPLETE_FIELD.getLocalCode()) .defineDataEntry().asCalculated(DocumentAutocompleteFieldCalculator.class); MetadataSchema defaultUserFolderSchema = types.getSchema(UserFolder.DEFAULT_SCHEMA); MetadataSchemaBuilder defaultUserFolderSchemaBuilder = typesBuilder.getSchemaType(UserFolder.SCHEMA_TYPE).getDefaultSchema(); try { defaultUserFolderSchema.get(RMUserFolder.ADMINISTRATIVE_UNIT); } catch (MetadataSchemasRuntimeException.NoSuchMetadata e) { defaultUserFolderSchemaBuilder.create(RMUserFolder.ADMINISTRATIVE_UNIT).setType(MetadataValueType.REFERENCE).setEssential(false) .defineReferencesTo(typesBuilder.getSchemaType(AdministrativeUnit.SCHEMA_TYPE)); } try { defaultUserFolderSchema.get(RMUserFolder.CATEGORY); } catch (MetadataSchemasRuntimeException.NoSuchMetadata e) { defaultUserFolderSchemaBuilder.create(RMUserFolder.CATEGORY).setType(MetadataValueType.REFERENCE).setEssential(false) .defineReferencesTo(typesBuilder.getSchemaType(Category.SCHEMA_TYPE)); } try { defaultUserFolderSchema.get(RMUserFolder.RETENTION_RULE); } catch (MetadataSchemasRuntimeException.NoSuchMetadata e) { defaultUserFolderSchemaBuilder.create(RMUserFolder.RETENTION_RULE).setType(MetadataValueType.REFERENCE).setEssential(false) .defineReferencesTo(typesBuilder.getSchemaType(RetentionRule.SCHEMA_TYPE)); } try { defaultUserFolderSchema.get(RMUserFolder.PARENT_FOLDER); } catch (MetadataSchemasRuntimeException.NoSuchMetadata e) { defaultUserFolderSchemaBuilder.create(RMUserFolder.PARENT_FOLDER).setType(MetadataValueType.REFERENCE).setEssential(false) .defineReferencesTo(typesBuilder.getSchemaType(Folder.SCHEMA_TYPE)); } } } }