package com.constellio.app.modules.robots.migrations;
import java.util.ArrayList;
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.modules.robots.model.wrappers.Robot;
import com.constellio.app.modules.robots.model.wrappers.RobotLog;
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.entities.schemas.MetadataValueType;
import com.constellio.model.services.schemas.builders.MetadataSchemaBuilder;
import com.constellio.model.services.schemas.builders.MetadataSchemaTypeBuilder;
import com.constellio.model.services.schemas.builders.MetadataSchemaTypesBuilder;
public class RobotsMigrationTo6_3 implements MigrationScript {
@Override
public String getVersion() {
return "6.3";
}
@Override
public void migrate(String collection, MigrationResourcesProvider provider, AppLayerFactory factory)
throws Exception {
new SchemaAlterationFor6_3(collection, provider, factory).migrate();
updateFormAndDisplayConfigs(collection, factory);
}
private void updateFormAndDisplayConfigs(String collection, AppLayerFactory factory) {
SchemasDisplayManager manager = factory.getMetadataSchemasDisplayManager();
SchemaTypesDisplayTransactionBuilder transactionBuilder = manager.newTransactionBuilderFor(collection)
.in(Robot.SCHEMA_TYPE).addToForm(Robot.AUTO_EXECUTE).atTheEnd();
List<String> metas = new ArrayList<>();
metas.addAll(manager.getSchema(collection, RobotLog.DEFAULT_SCHEMA).getTableMetadataCodes());
metas.add(RobotLog.DEFAULT_SCHEMA + "_" + RobotLog.COUNT);
transactionBuilder.add(manager.getSchema(collection, RobotLog.DEFAULT_SCHEMA).withTableMetadataCodes(metas));
transactionBuilder.add(manager.getSchema(collection, "robotLog_default").withNewTableMetadatas("robotLog_default_count"));
manager.execute(transactionBuilder.build());
}
static class SchemaAlterationFor6_3 extends MetadataSchemasAlterationHelper {
protected SchemaAlterationFor6_3(String collection, MigrationResourcesProvider provider, AppLayerFactory factory) {
super(collection, provider, factory);
}
@Override
protected void migrate(MetadataSchemaTypesBuilder builder) {
updateRobotSchema(builder, builder.getSchemaType(Robot.SCHEMA_TYPE));
}
private void updateRobotSchema(MetadataSchemaTypesBuilder types, MetadataSchemaTypeBuilder robot) {
MetadataSchemaBuilder robotSchema = robot.getDefaultSchema();
robotSchema.createUndeletable(Robot.AUTO_EXECUTE).setType(MetadataValueType.BOOLEAN)
.setDefaultRequirement(true).setDefaultValue(false);
MetadataSchemaTypeBuilder robotLogSchemaType = types.getOrCreateNewSchemaType(RobotLog.SCHEMA_TYPE);
MetadataSchemaBuilder robotLogSchema = robotLogSchemaType.getDefaultSchema();
robotLogSchema.createUndeletable(RobotLog.COUNT).setType(MetadataValueType.NUMBER);
}
}
}