package com.constellio.app.modules.tasks.migrations;
import java.io.IOException;
import java.io.InputStream;
import org.apache.commons.io.IOUtils;
import com.constellio.app.entities.modules.MigrationHelper;
import com.constellio.app.entities.modules.MigrationResourcesProvider;
import com.constellio.app.entities.modules.MigrationScript;
import com.constellio.app.modules.tasks.TasksEmailTemplates;
import com.constellio.app.services.factories.AppLayerFactory;
import com.constellio.data.dao.managers.config.ConfigManagerException.OptimisticLockingConfiguration;
import com.constellio.model.services.emails.EmailTemplatesManager;
public class TasksMigrationTo5_1_3 extends MigrationHelper implements MigrationScript {
@Override
public String getVersion() {
return "5.1.3";
}
@Override
public void migrate(String collection, MigrationResourcesProvider migrationResourcesProvider, AppLayerFactory appLayerFactory)
throws Exception {
addAndReloadEmailTemplates(appLayerFactory, migrationResourcesProvider, collection);
}
private void addAndReloadEmailTemplates(AppLayerFactory appLayerFactory,
MigrationResourcesProvider migrationResourcesProvider,
String collection) {
String taskReminderTemplate;
String subTasksModificationTemplate;
String taskAssigneeModificationTemplate;
String taskAssigneeToYouTemplate;
String taskDeletionTemplate;
String taskStatusModificationTemplate;
String taskStatusModificationToCompletedTemplate;
if (appLayerFactory.getModelLayerFactory().getCollectionsListManager().getCollectionLanguages(collection).get(0)
.equals("en")) {
taskReminderTemplate = "taskReminderTemplate_en.html";
subTasksModificationTemplate = "subTasksModificationTemplate_en.html";
taskAssigneeModificationTemplate = "taskAssigneeModificationTemplate_en.html";
taskAssigneeToYouTemplate = "taskAssigneeToYouTemplate_en.html";
taskStatusModificationTemplate = "taskStatusModificationTemplate_en.html";
taskStatusModificationToCompletedTemplate = "taskStatusModificationToCompletedTemplate_en.html";
taskDeletionTemplate = "taskDeletionTemplate_en.html";
} else {
taskReminderTemplate = "taskReminderTemplate.html";
subTasksModificationTemplate = "subTasksModificationTemplate.html";
taskAssigneeModificationTemplate = "taskAssigneeModificationTemplate.html";
taskAssigneeToYouTemplate = "taskAssigneeToYouTemplate.html";
taskStatusModificationTemplate = "taskStatusModificationTemplate.html";
taskStatusModificationToCompletedTemplate = "taskStatusModificationToCompletedTemplate.html";
taskDeletionTemplate = "taskDeletionTemplate.html";
}
reloadEmailTemplate(appLayerFactory, migrationResourcesProvider, collection, taskAssigneeModificationTemplate,
TasksEmailTemplates.TASK_ASSIGNEE_MODIFIED);
reloadEmailTemplate(appLayerFactory, migrationResourcesProvider, collection,
taskStatusModificationToCompletedTemplate,
TasksEmailTemplates.TASK_COMPLETED);
reloadEmailTemplate(appLayerFactory, migrationResourcesProvider, collection, taskDeletionTemplate,
TasksEmailTemplates.TASK_DELETED);
reloadEmailTemplate(appLayerFactory, migrationResourcesProvider, collection, taskStatusModificationTemplate,
TasksEmailTemplates.TASK_STATUS_MODIFIED);
reloadEmailTemplate(appLayerFactory, migrationResourcesProvider, collection, subTasksModificationTemplate,
TasksEmailTemplates.TASK_SUB_TASKS_MODIFIED);
reloadEmailTemplate(appLayerFactory, migrationResourcesProvider, collection, taskReminderTemplate,
TasksEmailTemplates.TASK_REMINDER);
reloadEmailTemplate(appLayerFactory, migrationResourcesProvider, collection, taskAssigneeToYouTemplate,
TasksEmailTemplates.TASK_ASSIGNED_TO_YOU);
}
private void addEmailTemplate(AppLayerFactory appLayerFactory, MigrationResourcesProvider migrationResourcesProvider,
String collection,
String templateFileName, String templateId) {
InputStream stream = migrationResourcesProvider.getStream(templateFileName);
try {
appLayerFactory.getModelLayerFactory().getEmailTemplatesManager()
.addCollectionTemplateIfInexistent(templateId, collection, stream);
} catch (IOException | OptimisticLockingConfiguration e) {
throw new RuntimeException(e);
} finally {
IOUtils.closeQuietly(stream);
}
}
private void reloadEmailTemplate(AppLayerFactory appLayerFactory, MigrationResourcesProvider migrationResourcesProvider,
String collection,
String templateFileName, String templateId) {
InputStream templateInputStream = migrationResourcesProvider.getStream(templateFileName);
EmailTemplatesManager emailTemplateManager = appLayerFactory.getModelLayerFactory()
.getEmailTemplatesManager();
try {
emailTemplateManager.replaceCollectionTemplate(templateId, collection, templateInputStream);
} catch (IOException | OptimisticLockingConfiguration e) {
throw new RuntimeException(e);
} finally {
IOUtils.closeQuietly(templateInputStream);
}
}
}