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.model.enums.FolderStatus;
import com.constellio.app.modules.rm.services.RMSchemasRecordsServices;
import com.constellio.app.modules.rm.wrappers.Document;
import com.constellio.app.modules.rm.wrappers.Folder;
import com.constellio.app.modules.rm.wrappers.type.DocumentType;
import com.constellio.app.modules.rm.wrappers.type.FolderType;
import com.constellio.app.services.factories.AppLayerFactory;
import com.constellio.model.entities.records.Transaction;
import com.constellio.model.entities.schemas.MetadataValueType;
import com.constellio.model.services.records.RecordServicesException;
import com.constellio.model.services.schemas.builders.CommonMetadataBuilder;
import com.constellio.model.services.schemas.builders.MetadataSchemaBuilder;
import com.constellio.model.services.schemas.builders.MetadataSchemaTypesBuilder;
public class RMMigrationTo5_1_5 implements MigrationScript {
@Override
public String getVersion() {
return "5.1.5";
}
@Override
public void migrate(String collection, MigrationResourcesProvider provider, AppLayerFactory factory)
throws Exception {
new RMSchemaAlterationsFor5_1_5(collection, provider, factory).migrate();
createNewRecords(collection, factory, provider);
}
private void createNewRecords(String collection, AppLayerFactory factory, MigrationResourcesProvider provider) {
RMSchemasRecordsServices rm = new RMSchemasRecordsServices(collection, factory);
Transaction transaction = new Transaction();
createFolderTypeAndDocumentTypeFacets(transaction, rm, provider);
try {
factory.getModelLayerFactory().newRecordServices().execute(transaction);
} catch (RecordServicesException e) {
throw new RuntimeException(e);
}
}
private void createFolderTypeAndDocumentTypeFacets(Transaction transaction, RMSchemasRecordsServices rm,
MigrationResourcesProvider provider) {
transaction.add(rm.newFacetField().setTitle(provider.getDefaultLanguageString("facets.folderType"))
.setFieldDataStoreCode(rm.folder.folderType().getDataStoreCode()).setActive(false));
transaction.add(rm.newFacetField().setTitle(provider.getDefaultLanguageString("facets.documentType"))
.setFieldDataStoreCode(rm.documentDocumentType().getDataStoreCode()).setActive(false));
}
private class RMSchemaAlterationsFor5_1_5 extends MetadataSchemasAlterationHelper {
protected RMSchemaAlterationsFor5_1_5(String collection, MigrationResourcesProvider provider, AppLayerFactory factory) {
super(collection, provider, factory);
}
@Override
protected void migrate(MetadataSchemaTypesBuilder typesBuilder) {
MetadataSchemaBuilder folderType = typesBuilder.getSchemaType(FolderType.SCHEMA_TYPE).getDefaultSchema();
updateFolderSchema(typesBuilder.getSchemaType(Folder.SCHEMA_TYPE).getDefaultSchema(), folderType);
MetadataSchemaBuilder documentType = typesBuilder.getSchemaType(DocumentType.SCHEMA_TYPE).getDefaultSchema();
updateDocumentSchema(typesBuilder.getSchemaType(Document.SCHEMA_TYPE).getDefaultSchema(), documentType);
}
private void updateFolderSchema(MetadataSchemaBuilder folder, MetadataSchemaBuilder folderType) {
folder.createSystemReserved(Folder.PERMISSION_STATUS).defineAsEnum(FolderStatus.class);
folder.createSystemReserved(Folder.FOLDER_TYPE).setType(MetadataValueType.STRING).defineDataEntry()
.asCopied(folder.getMetadata(Folder.TYPE), folderType.getMetadata(CommonMetadataBuilder.TITLE));
}
private void updateDocumentSchema(MetadataSchemaBuilder document, MetadataSchemaBuilder documentType) {
document.createSystemReserved(Document.DOCUMENT_TYPE).setType(MetadataValueType.STRING).defineDataEntry()
.asCopied(document.getMetadata(Document.TYPE), documentType.getMetadata(CommonMetadataBuilder.TITLE));
}
}
}