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.schemas.MetadataValueType;
import com.constellio.model.entities.security.global.GlobalGroup;
import com.constellio.model.entities.security.global.SolrGlobalGroup;
import com.constellio.model.services.schemas.builders.MetadataSchemaBuilder;
import com.constellio.model.services.schemas.builders.MetadataSchemaTypesBuilder;
public class CoreMigrationTo_6_5_19 implements MigrationScript {
@Override
public String getVersion() {
return "6.5.19";
}
@Override
public void migrate(String collection, MigrationResourcesProvider provider, AppLayerFactory appLayerFactory)
throws Exception {
//
new AddGlobalGroupLocallyCreatedMetadata(collection, provider, appLayerFactory).migrate();
if (appLayerFactory.getModelLayerFactory().getMetadataSchemasManager().getSchemaTypes(collection)
.hasSchema(SolrGlobalGroup.DEFAULT_SCHEMA)) {
// Set metadata value
final boolean locallyCreated = appLayerFactory.
getModelLayerFactory().
newUserServices().
canAddOrModifyUserAndGroup();
final List<GlobalGroup> globalGroupList = appLayerFactory.
getModelLayerFactory().
getGlobalGroupsManager().
getAllGroups();
boolean runGroupMigration = true;
while (runGroupMigration) {
runGroupMigration = false;
for (final GlobalGroup globalGroup : globalGroupList) {
try {
appLayerFactory.
getModelLayerFactory().
getGlobalGroupsManager().
addUpdate(globalGroup.withLocallyCreated(locallyCreated));
} catch (Exception e) {
e.printStackTrace();
runGroupMigration = true;
}
}
}
}
}
private class AddGlobalGroupLocallyCreatedMetadata extends MetadataSchemasAlterationHelper {
public AddGlobalGroupLocallyCreatedMetadata(String collection, MigrationResourcesProvider provider,
AppLayerFactory appLayerFactory) {
super(collection, provider, appLayerFactory);
}
@Override
protected void migrate(MetadataSchemaTypesBuilder metadataSchemaTypesBuilder) {
if (metadataSchemaTypesBuilder.hasSchemaType(SolrGlobalGroup.SCHEMA_TYPE)) {
// Add metadata to schema
final MetadataSchemaBuilder metadataSchemaBuilder = metadataSchemaTypesBuilder
.getSchema(SolrGlobalGroup.DEFAULT_SCHEMA);
if (!metadataSchemaBuilder.hasMetadata(SolrGlobalGroup.LOCALLY_CREATED)) {
metadataSchemaBuilder.createUndeletable(SolrGlobalGroup.LOCALLY_CREATED).setType(MetadataValueType.BOOLEAN);
}
}
}
}
}