package com.constellio.app.modules.robots;
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.modules.robots.constants.RobotsPermissionsTo;
import com.constellio.app.modules.robots.extensions.RobotSystemCheckExtension;
import com.constellio.app.modules.robots.migrations.RobotsMigrationCombo;
import com.constellio.app.modules.robots.migrations.RobotsMigrationTo5_1_2;
import com.constellio.app.modules.robots.migrations.RobotsMigrationTo5_1_3;
import com.constellio.app.modules.robots.migrations.RobotsMigrationTo6_3;
import com.constellio.app.modules.robots.model.actions.RunExtractorsActionExecutor;
import com.constellio.app.modules.robots.services.RobotSchemaRecordServices;
import com.constellio.app.modules.robots.services.RobotsManager;
import com.constellio.app.modules.robots.ui.navigation.RobotsNavigationConfiguration;
import com.constellio.app.services.factories.AppLayerFactory;
import com.constellio.model.entities.configs.SystemConfiguration;
public class ConstellioRobotsModule implements InstallableSystemModule, ModuleWithComboMigration {
public static final String ID = "robots";
public static final String NAME = "Constellio Robots";
@Override
public String getId() {
return ID;
}
@Override
public String getName() {
return NAME;
}
@Override
public String getPublisher() {
return "Constellio";
}
@Override
public List<MigrationScript> getMigrationScripts() {
return Arrays.asList(
new RobotsMigrationTo5_1_2(),
new RobotsMigrationTo5_1_3(),
new RobotsMigrationTo6_3()
);
}
@Override
public void configureNavigation(NavigationConfig config) {
RobotsNavigationConfiguration.configureNavigation(config);
}
@Override
public void start(String collection, AppLayerFactory appLayerFactory) {
registerManagers(collection, appLayerFactory);
RobotSchemaRecordServices robotSchemas = new RobotSchemaRecordServices(collection, appLayerFactory);
RobotsManager robotsManager = robotSchemas.getRobotsManager();
RunExtractorsActionExecutor.registerIn(robotsManager);
setupAppLayerExtensions(collection, appLayerFactory);
}
@Override
public void stop(String collection, AppLayerFactory appLayerFactory) {
}
@Override
public void addDemoData(String collection, AppLayerFactory appLayerFactory) {
}
private void registerManagers(String collection, AppLayerFactory appLayerFactory) {
RobotSchemaRecordServices robotSchemas = new RobotSchemaRecordServices(collection, appLayerFactory);
appLayerFactory.registerManager(collection, ConstellioRobotsModule.ID, RobotsManager.ID, new RobotsManager(robotSchemas));
}
@Override
public boolean isComplementary() {
return false;
}
@Override
public List<String> getDependencies() {
return new ArrayList<>();
}
@Override
public List<SystemConfiguration> getConfigurations() {
return new ArrayList<>();
}
@Override
public Map<String, List<String>> getPermissions() {
return RobotsPermissionsTo.PERMISSIONS.getGrouped();
}
@Override
public List<String> getRolesForCreator() {
return new ArrayList<>();
}
@Override
public void start(AppLayerFactory appLayerFactory) {
RobotsNavigationConfiguration.configureNavigation(appLayerFactory.getNavigatorConfigurationService());
}
private void setupAppLayerExtensions(String collection, AppLayerFactory appLayerFactory) {
AppLayerCollectionExtensions extensions = appLayerFactory.getExtensions().forCollection(collection);
extensions.systemCheckExtensions.add(new RobotSystemCheckExtension(collection, appLayerFactory));
}
@Override
public void stop(AppLayerFactory appLayerFactory) {
}
@Override
public ComboMigrationScript getComboMigrationScript() {
return new RobotsMigrationCombo();
}
}