package com.constellio.app.modules.tasks;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import com.constellio.app.entities.modules.ComboMigrationScript;
import com.constellio.app.entities.modules.InstallableSystemModule;
import com.constellio.app.entities.modules.MigrationScript;
import com.constellio.app.entities.modules.ModuleWithComboMigration;
import com.constellio.app.entities.navigation.NavigationConfig;
import com.constellio.app.extensions.AppLayerCollectionExtensions;
import com.constellio.app.extensions.core.LockedRecordsExtension;
import com.constellio.app.modules.tasks.extensions.TaskRecordAppExtension;
import com.constellio.app.modules.tasks.extensions.TaskRecordExtension;
import com.constellio.app.modules.tasks.extensions.TaskRecordNavigationExtension;
import com.constellio.app.modules.tasks.extensions.TaskStatusSchemasExtension;
import com.constellio.app.modules.tasks.extensions.WorkflowRecordExtension;
import com.constellio.app.modules.tasks.extensions.schema.TaskTrashSchemaExtension;
import com.constellio.app.modules.tasks.migrations.TasksMigrationCombo;
import com.constellio.app.modules.tasks.migrations.TasksMigrationTo5_0_7;
import com.constellio.app.modules.tasks.migrations.TasksMigrationTo5_1_2;
import com.constellio.app.modules.tasks.migrations.TasksMigrationTo5_1_3;
import com.constellio.app.modules.tasks.migrations.TasksMigrationTo6_0;
import com.constellio.app.modules.tasks.migrations.TasksMigrationTo6_5_33;
import com.constellio.app.modules.tasks.migrations.TasksMigrationTo7_0;
import com.constellio.app.modules.tasks.migrations.TasksMigrationTo7_2;
import com.constellio.app.modules.tasks.model.managers.TaskReminderEmailManager;
import com.constellio.app.modules.tasks.navigation.TasksNavigationConfiguration;
import com.constellio.app.modules.tasks.services.TasksSchemasRecordsServices;
import com.constellio.app.services.factories.AppLayerFactory;
import com.constellio.model.entities.configs.SystemConfiguration;
import com.constellio.model.extensions.ModelLayerCollectionExtensions;
import com.constellio.model.services.records.cache.CacheConfig;
import com.constellio.model.services.records.cache.RecordsCache;
public class TaskModule implements InstallableSystemModule, ModuleWithComboMigration {
public static final String ID = "tasks";
public static final String NAME = "Tasks";
@Override
public List<MigrationScript> getMigrationScripts() {
return Arrays.asList(
new TasksMigrationTo5_0_7(),
new TasksMigrationTo5_1_2(),
new TasksMigrationTo5_1_3(),
new TasksMigrationTo6_0(),
new TasksMigrationTo6_5_33(),
new TasksMigrationTo7_0(),
new TasksMigrationTo7_2());
}
@Override
public void configureNavigation(NavigationConfig config) {
TasksNavigationConfiguration.configureNavigation(config);
}
@Override
public void start(String collection, AppLayerFactory appLayerFactory) {
registerManagers(collection, appLayerFactory);
setupAppLayerExtensions(collection, appLayerFactory);
setupModelLayerExtensions(collection, appLayerFactory);
}
private void setupAppLayerExtensions(String collection, AppLayerFactory appLayerFactory) {
AppLayerCollectionExtensions extensions = appLayerFactory.getExtensions().forCollection(collection);
extensions.recordAppExtensions.add(new TaskRecordAppExtension(collection, appLayerFactory));
extensions.recordNavigationExtensions.add(new TaskRecordNavigationExtension());
}
private void setupModelLayerExtensions(String collection, AppLayerFactory appLayerFactory) {
ModelLayerCollectionExtensions extensions = appLayerFactory.getModelLayerFactory().getExtensions()
.forCollection(collection);
extensions.recordExtensions.add(new TaskRecordExtension(collection, appLayerFactory));
extensions.recordExtensions.add(new TaskStatusSchemasExtension(collection, appLayerFactory));
extensions.recordExtensions.add(new WorkflowRecordExtension(collection, appLayerFactory));
extensions.schemaExtensions.add(new TaskTrashSchemaExtension());
//TODO Francis : Move in Constellio core's init
extensions.recordExtensions.add(new LockedRecordsExtension(collection, appLayerFactory));
TasksSchemasRecordsServices taskSchemas = new TasksSchemasRecordsServices(collection, appLayerFactory);
RecordsCache cache = appLayerFactory.getModelLayerFactory().getRecordsCaches().getCache(collection);
cache.configureCache(CacheConfig.volatileCache(taskSchemas.userTask.schemaType(), 1000));
}
@Override
public void stop(String collection, AppLayerFactory appLayerFactory) {
}
@Override
public void addDemoData(String collection, AppLayerFactory appLayerFactory) {
// Tasks provide no demo data for now
}
@Override
public boolean isComplementary() {
return false;
}
@Override
public List<String> getDependencies() {
return new ArrayList<>();
}
@Override
public List<SystemConfiguration> getConfigurations() {
return TaskConfigs.configurations;
}
@Override
public Map<String, List<String>> getPermissions() {
return TasksPermissionsTo.PERMISSIONS.getGrouped();
}
@Override
public List<String> getRolesForCreator() {
return new ArrayList<>();
}
@Override
public String getId() {
return ID;
}
@Override
public String getName() {
return NAME;
}
@Override
public String getPublisher() {
return DOCULIBRE;
}
private void registerManagers(String collection, AppLayerFactory appLayerFactory) {
appLayerFactory.registerManager(collection, ID, TaskReminderEmailManager.ID,
new TaskReminderEmailManager(appLayerFactory, collection));
}
@Override
public void start(AppLayerFactory appLayerFactory) {
TasksNavigationConfiguration.configureNavigation(appLayerFactory.getNavigatorConfigurationService());
}
@Override
public void stop(AppLayerFactory appLayerFactory) {
}
@Override
public ComboMigrationScript getComboMigrationScript() {
return new TasksMigrationCombo();
}
}