package com.constellio.app.modules.rm.migrations;
import static com.constellio.model.entities.schemas.MetadataValueType.BOOLEAN;
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.calculators.FolderClosingDateCalculator2;
import com.constellio.app.modules.rm.model.calculators.document.DocumentConfidentialCalculator;
import com.constellio.app.modules.rm.model.calculators.document.DocumentEssentialCalculator;
import com.constellio.app.modules.rm.model.calculators.folder.FolderConfidentialCalculator;
import com.constellio.app.modules.rm.model.calculators.folder.FolderEssentialCalculator;
import com.constellio.app.modules.rm.wrappers.Document;
import com.constellio.app.modules.rm.wrappers.Folder;
import com.constellio.app.services.factories.AppLayerFactory;
import com.constellio.app.services.schemasDisplay.SchemaTypesDisplayTransactionBuilder;
import com.constellio.app.services.schemasDisplay.SchemasDisplayManager;
import com.constellio.model.services.schemas.builders.MetadataBuilder;
import com.constellio.model.services.schemas.builders.MetadataSchemaBuilder;
import com.constellio.model.services.schemas.builders.MetadataSchemaTypesBuilder;
public class RMMigrationTo7_0_10_5 implements MigrationScript {
@Override
public String getVersion() {
return "7.0.10.5";
}
@Override
public void migrate(String collection, MigrationResourcesProvider provider, AppLayerFactory appLayerFactory)
throws Exception {
new SchemaAlterationsFor7_0_10_5(collection, provider, appLayerFactory).migrate();
SchemasDisplayManager schemaDisplayManager = appLayerFactory.getMetadataSchemasDisplayManager();
SchemaTypesDisplayTransactionBuilder transaction = schemaDisplayManager.newTransactionBuilderFor(collection);
transaction.in(Folder.SCHEMA_TYPE).addToDisplay(Folder.ESSENTIAL).afterMetadata(Folder.RETENTION_RULE);
transaction.in(Folder.SCHEMA_TYPE).addToDisplay(Folder.CONFIDENTIAL).afterMetadata(Folder.RETENTION_RULE);
schemaDisplayManager.execute(transaction.build());
}
public static class SchemaAlterationsFor7_0_10_5 extends MetadataSchemasAlterationHelper {
protected SchemaAlterationsFor7_0_10_5(String collection, MigrationResourcesProvider provider, AppLayerFactory factory) {
super(collection, provider, factory);
}
@Override
protected void migrate(MetadataSchemaTypesBuilder typesBuilder) {
MetadataSchemaBuilder folderSchema = types().getSchema(Folder.DEFAULT_SCHEMA);
MetadataSchemaBuilder documentSchema = types().getSchema(Document.DEFAULT_SCHEMA);
MetadataBuilder folderEssential = getOrCreateBoolean(folderSchema, Folder.ESSENTIAL);
MetadataBuilder folderConfidential = getOrCreateBoolean(folderSchema, Folder.CONFIDENTIAL);
MetadataBuilder documentEssential = getOrCreateBoolean(documentSchema, Document.ESSENTIAL);
MetadataBuilder documentConfidential = getOrCreateBoolean(documentSchema, Document.CONFIDENTIAL);
folderEssential.defineDataEntry().asCalculated(FolderEssentialCalculator.class);
folderConfidential.defineDataEntry().asCalculated(FolderConfidentialCalculator.class);
documentEssential.defineDataEntry().asCalculated(DocumentEssentialCalculator.class);
documentConfidential.defineDataEntry().asCalculated(DocumentConfidentialCalculator.class);
folderSchema.get(Folder.CLOSING_DATE).defineDataEntry().asCalculated(FolderClosingDateCalculator2.class);
}
private MetadataBuilder getOrCreateBoolean(MetadataSchemaBuilder schema, String localCode) {
if (schema.hasMetadata(localCode)) {
return schema.get(localCode);
} else {
return schema.create(localCode).setType(BOOLEAN);
}
}
}
}