package com.constellio.app.services.migrations.scripts;
import java.util.List;
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.services.factories.AppLayerFactory;
import com.constellio.model.entities.records.Record;
import com.constellio.model.entities.records.Transaction;
import com.constellio.model.entities.records.wrappers.Facet;
import com.constellio.model.entities.schemas.Metadata;
import com.constellio.model.entities.schemas.MetadataSchemaType;
import com.constellio.model.entities.schemas.MetadataValueType;
import com.constellio.model.services.factories.ModelLayerFactory;
import com.constellio.model.services.records.RecordServices;
import com.constellio.model.services.records.RecordServicesException;
import com.constellio.model.services.schemas.MetadataSchemasManager;
import com.constellio.model.services.schemas.builders.MetadataSchemaBuilder;
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 com.constellio.model.services.search.query.logical.LogicalSearchQueryOperators;
import com.constellio.model.services.search.query.logical.condition.LogicalSearchCondition;
public class CoreMigrationTo_5_1_4 implements MigrationScript {
@Override
public String getVersion() {
return "5.1.4";
}
@Override
public void migrate(String collection, MigrationResourcesProvider provider, AppLayerFactory appLayerFactory)
throws Exception {
new CoreSchemaAlterationFor5_1_4(collection, provider, appLayerFactory).migrate();
setNewFacetMetadatasDefaultValues(collection, appLayerFactory.getModelLayerFactory());
appLayerFactory.getSystemGlobalConfigsManager().setReindexingRequired(true);
}
private void setNewFacetMetadatasDefaultValues(String collection, ModelLayerFactory modelLayerFactory) {
RecordServices recordServices = modelLayerFactory.newRecordServices();
SearchServices searchServices = modelLayerFactory.newSearchServices();
MetadataSchemasManager manager = modelLayerFactory.getMetadataSchemasManager();
MetadataSchemaType type = manager.getSchemaTypes(collection).getSchemaType(Facet.SCHEMA_TYPE);
LogicalSearchCondition condition = LogicalSearchQueryOperators.from(type).returnAll();
LogicalSearchQuery query = new LogicalSearchQuery();
query.setCondition(condition);
List<Record> records = searchServices.search(query);
Transaction transaction = new Transaction();
for (Record record : records) {
Metadata activeMetadata = type.getSchema(record.getSchemaCode()).getMetadata(Facet.ACTIVE);
Metadata openByDefaultMetadata = type.getSchema(record.getSchemaCode()).getMetadata(Facet.OPEN_BY_DEFAULT);
record.set(activeMetadata, true);
record.set(openByDefaultMetadata, true);
transaction.update(record);
}
try {
recordServices.execute(transaction);
} catch (RecordServicesException e) {
throw new RuntimeException(e);
}
}
private class CoreSchemaAlterationFor5_1_4 extends MetadataSchemasAlterationHelper {
public CoreSchemaAlterationFor5_1_4(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.createUndeletable(Facet.ACTIVE).setType(MetadataValueType.BOOLEAN).setDefaultValue(Boolean.TRUE);
facetSchema.createUndeletable(Facet.OPEN_BY_DEFAULT).setType(MetadataValueType.BOOLEAN).setDefaultValue(Boolean.TRUE);
}
}
}