package com.constellio.app.services.migrations.scripts;
import static java.util.Arrays.asList;
import java.util.Map;
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.entities.schemasDisplay.SchemaTypeDisplayConfig;
import com.constellio.app.services.factories.AppLayerFactory;
import com.constellio.app.services.schemasDisplay.SchemaDisplayManagerTransaction;
import com.constellio.app.services.schemasDisplay.SchemasDisplayManager;
import com.constellio.model.entities.Language;
import com.constellio.model.entities.records.wrappers.Facet;
import com.constellio.model.entities.schemas.MetadataValueType;
import com.constellio.model.services.schemas.builders.MetadataSchemaBuilder;
import com.constellio.model.services.schemas.builders.MetadataSchemaTypesBuilder;
public class CoreMigrationTo_5_1_6 implements MigrationScript {
@Override
public String getVersion() {
return "5.1.6";
}
@Override
public void migrate(String collection, MigrationResourcesProvider provider, AppLayerFactory appLayerFactory)
throws Exception {
new CoreSchemaAlterationFor5_1_6(collection, provider, appLayerFactory).migrate();
setupDisplayConfig(collection, appLayerFactory, provider);
}
private class CoreSchemaAlterationFor5_1_6 extends MetadataSchemasAlterationHelper {
public CoreSchemaAlterationFor5_1_6(String collection, MigrationResourcesProvider migrationResourcesProvider,
AppLayerFactory appLayerFactory) {
super(collection, migrationResourcesProvider, appLayerFactory);
}
@Override
protected void migrate(MetadataSchemaTypesBuilder typesBuilder) {
createNewFacetMetadatas(typesBuilder);
}
private void createNewFacetMetadatas(MetadataSchemaTypesBuilder typesBuilder) {
MetadataSchemaBuilder facetSchema = typesBuilder.getSchemaType(Facet.SCHEMA_TYPE).getDefaultSchema();
facetSchema.getMetadata(Facet.TITLE).setDefaultRequirement(true);
facetSchema.createSystemReserved(Facet.USED_BY_MODULE).setType(MetadataValueType.STRING);
}
}
private void setupDisplayConfig(String collection, AppLayerFactory appLayerFactory,
MigrationResourcesProvider migrationResourcesProvider) {
Language language = migrationResourcesProvider.getLanguage();
String configurationTab = "default:init.facetConfiguration.configuration";
String valeursTab = "init.facetConfiguration.values";
String queryTab = "init.facetConfiguration.query";
Map<String, Map<Language, String>> groups = migrationResourcesProvider.getLanguageMap(
asList(configurationTab, valeursTab, queryTab));
SchemasDisplayManager manager = appLayerFactory.getMetadataSchemasDisplayManager();
SchemaDisplayManagerTransaction transaction = new SchemaDisplayManagerTransaction();
SchemaTypeDisplayConfig facetSchemaType = manager.getType(collection, Facet.SCHEMA_TYPE);
transaction.add(facetSchemaType
.withMetadataGroup(groups));
transaction.add(manager.getMetadata(collection, Facet.DEFAULT_SCHEMA, Facet.TITLE)
.withMetadataGroup(configurationTab));
transaction.add(manager.getMetadata(collection, Facet.DEFAULT_SCHEMA, Facet.FIELD_DATA_STORE_CODE)
.withMetadataGroup(configurationTab));
transaction.add(manager.getMetadata(collection, Facet.DEFAULT_SCHEMA, Facet.ORDER_RESULT)
.withMetadataGroup(configurationTab));
transaction.add(manager.getMetadata(collection, Facet.DEFAULT_SCHEMA, Facet.FACET_TYPE)
.withMetadataGroup(configurationTab));
transaction.add(manager.getMetadata(collection, Facet.DEFAULT_SCHEMA, Facet.ELEMENT_PER_PAGE)
.withMetadataGroup(configurationTab));
transaction.add(manager.getMetadata(collection, Facet.DEFAULT_SCHEMA, Facet.ACTIVE)
.withMetadataGroup(configurationTab));
transaction.add(manager.getMetadata(collection, Facet.DEFAULT_SCHEMA, Facet.OPEN_BY_DEFAULT)
.withMetadataGroup(configurationTab));
transaction.add(manager.getMetadata(collection, Facet.FIELD_SCHEMA, Facet.FIELD_VALUES_LABEL)
.withMetadataGroup(valeursTab));
transaction.add(manager.getMetadata(collection, Facet.QUERY_SCHEMA, Facet.LIST_QUERIES)
.withMetadataGroup(queryTab));
manager.execute(transaction);
}
}