package com.constellio.app.modules.rm.migrations;
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.wrappers.Cart;
import com.constellio.app.modules.rm.wrappers.ContainerRecord;
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.model.entities.records.wrappers.User;
import com.constellio.model.services.schemas.builders.CommonMetadataBuilder;
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 RMMigrationTo5_1_7 implements MigrationScript {
@Override
public String getVersion() {
return "5.1.7";
}
@Override
public void migrate(String collection, MigrationResourcesProvider provider, AppLayerFactory factory)
throws Exception {
new SchemaAlterationsFor5_1_7(collection, provider, factory).migrate();
}
public static class SchemaAlterationsFor5_1_7 extends MetadataSchemasAlterationHelper {
protected SchemaAlterationsFor5_1_7(String collection, MigrationResourcesProvider provider, AppLayerFactory factory) {
super(collection, provider, factory);
}
@Override
protected void migrate(MetadataSchemaTypesBuilder builder) {
createCartSchemaType(builder);
}
private void createCartSchemaType(MetadataSchemaTypesBuilder builder) {
MetadataSchemaTypeBuilder schemaType = builder.createNewSchemaType(Cart.SCHEMA_TYPE).setSecurity(false);
MetadataSchemaBuilder schema = schemaType.getDefaultSchema();
schema.createUndeletable(Cart.OWNER).setDefaultRequirement(true).setUniqueValue(true)
.defineReferencesTo(builder.getSchemaType(User.SCHEMA_TYPE));
schema.createUndeletable(Cart.FOLDERS).setMultivalue(true)
.defineReferencesTo(builder.getSchemaType(Folder.SCHEMA_TYPE));
schema.createUndeletable(Cart.DOCUMENTS).setMultivalue(true)
.defineReferencesTo(builder.getSchemaType(Document.SCHEMA_TYPE));
schema.createUndeletable(Cart.CONTAINERS).setMultivalue(true)
.defineReferencesTo(builder.getSchemaType(ContainerRecord.SCHEMA_TYPE));
schema.getMetadata(CommonMetadataBuilder.TITLE).defineDataEntry().asCopied(schema.getMetadata(Cart.OWNER),
builder.getSchemaType(User.SCHEMA_TYPE).getDefaultSchema().getMetadata(CommonMetadataBuilder.TITLE));
}
}
}