package com.constellio.app.modules.rm.migrations;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.InputStream;
import com.constellio.app.entities.modules.MigrationResourcesProvider;
import com.constellio.app.entities.modules.MigrationScript;
import com.constellio.app.modules.rm.services.RMSchemasRecordsServices;
import com.constellio.app.modules.rm.wrappers.PrintableLabel;
import com.constellio.app.services.factories.AppLayerFactory;
import com.constellio.data.io.services.facades.IOServices;
import com.constellio.model.entities.records.Content;
import com.constellio.model.services.contents.ContentManager;
import com.constellio.model.services.contents.ContentVersionDataSummary;
import com.constellio.model.services.records.RecordServices;
import com.constellio.model.services.records.RecordServicesException;
import com.constellio.model.services.search.query.logical.LogicalSearchQueryOperators;
public class RMMigrationTo7_2_0_2 implements MigrationScript {
@Override
public String getVersion() {
return "7.2.0.2";
}
@Override
public void migrate(String collection, MigrationResourcesProvider migrationResourcesProvider,
AppLayerFactory appLayerFactory) {
fixTemplates(collection, migrationResourcesProvider, appLayerFactory);
appLayerFactory.getSystemGlobalConfigsManager().setReindexingRequired(true);
}
private void fixTemplates(String collection, MigrationResourcesProvider migrationResourcesProvider,
AppLayerFactory appLayerFactory) {
RMSchemasRecordsServices rm = new RMSchemasRecordsServices(collection, appLayerFactory);
for (PrintableLabel printableLabel : rm.searchPrintableLabels(LogicalSearchQueryOperators.ALL)) {
switch (printableLabel.getTitle()) {
case "Code de plan justifié de dossier à droite (Avery 5161)":
installLabel(printableLabel, "Etiquettes Dossiers/5161/Avery_5161_D_Dossier.jasper", appLayerFactory,
migrationResourcesProvider);
break;
case "Code de plan justifié de dossier à droite (Avery 5163)":
installLabel(printableLabel, "Etiquettes Dossiers/5163/Avery_5163_D_Dossier.jasper", appLayerFactory,
migrationResourcesProvider);
break;
case "Code de plan justifié de dossier à gauche (Avery 5163)":
installLabel(printableLabel, "Etiquettes Dossiers/5163/Avery_5163_G_Dossier.jasper", appLayerFactory,
migrationResourcesProvider);
break;
case "Code de plan justifié de dossier à droite (Avery 5159)":
installLabel(printableLabel, "Etiquettes Dossiers/5159/Avery_5159_D_Dossier.jasper", appLayerFactory,
migrationResourcesProvider);
break;
case "Code de plan justifié de dossier à droite (Avery 5162)":
installLabel(printableLabel, "Etiquettes Dossiers/5162/Avery_5162_D_Dossier.jasper", appLayerFactory,
migrationResourcesProvider);
break;
case "Code de plan justifié de dossier à gauche (Avery 5162)":
installLabel(printableLabel, "Etiquettes Dossiers/5162/Avery_5162_G_Dossier.jasper", appLayerFactory,
migrationResourcesProvider);
break;
case "Code de plan justifié de dossier à gauche (Avery 5161)":
installLabel(printableLabel, "Etiquettes Dossiers/5161/Avery_5161_G_Dossier.jasper", appLayerFactory,
migrationResourcesProvider);
break;
case "Code de plan justifié de dossier à gauche (Avery 5159)":
installLabel(printableLabel, "Etiquettes Dossiers/5159/Avery_5159_G_Dossier.jasper", appLayerFactory,
migrationResourcesProvider);
break;
case "Code de plan justifié de conteneur (Avery 5161)":
installLabel(printableLabel, "Etiquettes Contenants/5161/Avery_5161_Container.jasper", appLayerFactory,
migrationResourcesProvider);
break;
case "Code de plan justifié de conteneur (Avery 5159)":
installLabel(printableLabel, "Etiquettes Contenants/5159/Avery_5159_Container.jasper", appLayerFactory,
migrationResourcesProvider);
break;
case "Code de plan justifié de conteneur (Avery 5163)":
installLabel(printableLabel, "Etiquettes Contenants/5163/Avery_5163_Container.jasper", appLayerFactory,
migrationResourcesProvider);
break;
case "Code de plan justifié de conteneur (Avery 5162)":
installLabel(printableLabel, "Etiquettes Contenants/5162/Avery_5162_Container.jasper", appLayerFactory,
migrationResourcesProvider);
break;
}
}
}
private void installLabel(PrintableLabel printableLabel, String subPath, AppLayerFactory appLayerFactory,
MigrationResourcesProvider migrationResourcesProvider) {
IOServices ioServices = appLayerFactory.getModelLayerFactory().getIOServicesFactory().newIOServices();
RecordServices recordServices = appLayerFactory.getModelLayerFactory().newRecordServices();
ContentManager contentManager = appLayerFactory.getModelLayerFactory().getContentManager();
Content content = printableLabel.getJasperfile();
File jasperFile = migrationResourcesProvider.getFile(("defaultJasperFiles/" + subPath).replace("/", File.separator));
InputStream inputStream = null;
try {
inputStream = ioServices.newFileInputStream(jasperFile, "installLabel");
ContentVersionDataSummary summary = contentManager.upload(inputStream, false, false, "jasperFile.jasper");
Content newContent = contentManager.createFileSystem(content.getCurrentVersion().getFilename(), summary);
printableLabel.setJasperFile(newContent);
try {
recordServices.update(printableLabel);
} catch (RecordServicesException e) {
throw new RuntimeException(e);
}
} catch (FileNotFoundException e) {
ioServices.closeQuietly(inputStream);
}
}
}