package com.constellio.app.services.migrations; import com.constellio.app.entities.navigation.NavigationConfig; import com.constellio.app.entities.navigation.NavigationItem; import com.constellio.app.modules.rm.constants.RMPermissionsTo; import com.constellio.app.modules.rm.ui.pages.viewGroups.RecordsManagementViewGroup; import com.constellio.app.modules.tasks.TasksPermissionsTo; import com.constellio.app.services.factories.AppLayerFactory; import com.constellio.app.ui.application.Navigation; import com.constellio.app.ui.framework.components.ComponentState; import com.constellio.app.ui.pages.base.ConstellioHeader; import com.constellio.app.ui.pages.base.MainLayout; import com.constellio.app.ui.pages.management.AdminView; import com.constellio.app.ui.pages.viewGroups.AdminViewGroup; import com.constellio.app.ui.pages.viewGroups.TrashViewGroup; import com.constellio.model.entities.CorePermissions; import com.constellio.model.entities.records.wrappers.User; import com.constellio.model.services.users.CredentialUserPermissionChecker; import com.constellio.model.services.users.UserServices; import com.vaadin.server.FontAwesome; import java.io.Serializable; import java.util.ArrayList; import java.util.List; import static com.constellio.app.ui.framework.components.ComponentState.visibleIf; public class CoreNavigationConfiguration implements Serializable { public static final String CONFIG = "config"; public static final String CONFIG_ICON = "images/icons/config/configuration.png"; public static final String LDAP_CONFIG = "ldapConfig"; public static final String LDAP_CONFIG_ICON = "images/icons/config/address_book3.png"; public static final String GROUPS = "groups"; public static final String GROUPS_ICON = "images/icons/config/group.png"; public static final String USERS = "users"; public static final String USERS_ICON = "images/icons/config/user.png"; public static final String COLLECTIONS = "collections"; public static final String COLLECTIONS_ICON = "images/icons/config/collections.png"; public static final String PLUGINS = "plugins"; public static final String PLUGINS_ICON = "images/icons/config/module.png"; public static final String IMPORT_USERS = "importUsers"; public static final String IMPORT_USERS_ICON = "images/icons/config/import-users.png"; public static final String EXPORT = "export"; public static final String EXPORT_ICONS = "images/icons/config/export.png"; public static final String IMPORT_AUTHORIZATIONS = "importAuthorizations"; public static final String IMPORT_GROUPS = "importGroups"; public static final String IMPORT_AUTHORIZATIONS_ICON = "images/icons/config/import-authorizations.png"; public static final String IMPORT_GROUPS_ICON = "images/icons/config/import-groups.png"; public static final String BIG_DATA = "bigData"; public static final String BIG_DATA_ICON = "images/icons/config/big-data.png"; public static final String UPDATE_CENTER = "updateCenter"; public static final String UPDATE_CENTER_ICON = "images/icons/config/update-center.png"; public static final String EMAIL_SERVER = "emailServer"; public static final String EMAIL_SERVER_ICON = "images/icons/config/mail_server.png"; public static final String TAXONOMIES = "taxonomies"; public static final String TAXONOMIES_ICON = "images/icons/config/taxonomy.png"; public static final String VALUE_DOMAINS = "valueDomains"; public static final String VALUE_DOMAINS_ICON = "images/icons/config/value-domain.png"; public static final String FACET_CONFIGURATION = "listFacetConfiguration"; public static final String FACET_CONFIGURATION_ICON = "images/icons/config/funnel.png"; public static final String METADATA_SCHEMAS = "metadataSchemas"; public static final String METADATA_SCHEMAS_ICON = "images/icons/config/metadata.png"; public static final String SECURITY = "security"; public static final String SECURITY_ICON = "images/icons/config/collection-security.png"; public static final String ROLES = "roles"; public static final String ROLES_ICON = "images/icons/config/crown.png"; public static final String DATA_EXTRACTOR = "dataExtractor"; public static final String DATA_EXTRACTOR_ICON = "images/icons/config/metadata-extract.png"; public static final String IMPORT_RECORDS = "importRecords"; public static final String IMPORT_RECORDS_ICON = "images/icons/config/import.png"; public static final String IMPORT_SCHEMA_TYPES = "importSchemaTypes"; public static final String IMPORT_SCHEMA_TYPES_ICON = "images/icons/config/import-metadata.png"; public static final String IMPORT_SETTINGS = "importSettings"; public static final String IMPORT_SETTINGS_ICON = "images/icons/config/import-settings.png"; public static final String TRASH_BIN = "trashBin"; public static final String TRASH_BIN_ICON = "images/icons/config/garbage.png"; public static final String SEARCH_BOOST_BY_METADATA = "searchBoostByMetadata"; public static final String SEARCH_BOOST_BY_METADATA_ICON = "images/icons/config/boost-metadata-search.png"; public static final String SEARCH_BOOST_BY_QUERY = "searchBoostByQuery"; public static final String SEARCH_BOOST_BY_QUERY_ICON = "images/icons/config/boost-text-search.png"; public static final String PRINTABLE_MANAGEMENT = "printableManagement"; public static final String PRINTABLE_MANAGEMENT_ICON = "images/icons/config/printer.png"; public static final String ADMIN_MODULE = "adminModule"; public static final String HOME = "home"; public static final String TRASH = "trash"; public static final String BATCH_PROCESSES = "batchProcesses"; public static final String SYSTEM_CHECK = "systemCheck"; public static final String SYSTEM_CHECK_ICON = "images/icons/config/system-check.png"; public void configureNavigation(NavigationConfig config) { configureHeaderActionMenu(config); configureSystemAdmin(config); configureCollectionAdmin(config); configureMainLayoutNavigation(config); } private static void configureHeaderActionMenu(NavigationConfig config) { config.add(ConstellioHeader.ACTION_MENU, new NavigationItem.Active(BATCH_PROCESSES) { @Override public void activate(Navigation navigate) { navigate.to().batchProcesses(); } @Override public ComponentState getStateFor(User user, AppLayerFactory appLayerFactory) { return ComponentState.ENABLED; } }); } private void configureSystemAdmin(NavigationConfig config) { config.add(AdminView.SYSTEM_SECTION, new NavigationItem.Active(CONFIG, CONFIG_ICON) { @Override public void activate(Navigation navigate) { navigate.to().configManagement(); } @Override public ComponentState getStateFor(User user, AppLayerFactory appLayerFactory) { CredentialUserPermissionChecker userHas = appLayerFactory.getModelLayerFactory().newUserServices() .has(user.getUsername()); return visibleIf(userHas.globalPermissionInAnyCollection(CorePermissions.MANAGE_SYSTEM_CONFIGURATION)); } }); config.add(AdminView.SYSTEM_SECTION, new NavigationItem.Active(LDAP_CONFIG, LDAP_CONFIG_ICON) { @Override public void activate(Navigation navigate) { navigate.to().ldapConfigManagement(); } @Override public ComponentState getStateFor(User user, AppLayerFactory appLayerFactory) { CredentialUserPermissionChecker userHas = appLayerFactory.getModelLayerFactory().newUserServices() .has(user.getUsername()); return visibleIf(userHas.globalPermissionInAnyCollection(CorePermissions.MANAGE_LDAP)); } }); config.add(AdminView.SYSTEM_SECTION, new NavigationItem.Active(PRINTABLE_MANAGEMENT, PRINTABLE_MANAGEMENT_ICON) { @Override public void activate(Navigation navigate) { navigate.to().viewReport(); } @Override public ComponentState getStateFor(User user, AppLayerFactory appLayerFactory) { CredentialUserPermissionChecker userHas = appLayerFactory.getModelLayerFactory().newUserServices() .has(user.getUsername()); return visibleIf(userHas.globalPermissionInAnyCollection(CorePermissions.MANAGE_LABELS)); } }); config.add(AdminView.SYSTEM_SECTION, new NavigationItem.Active(GROUPS, GROUPS_ICON) { @Override public void activate(Navigation navigate) { navigate.to().listGlobalGroups(); } @Override public ComponentState getStateFor(User user, AppLayerFactory appLayerFactory) { CredentialUserPermissionChecker userHas = appLayerFactory.getModelLayerFactory().newUserServices() .has(user.getUsername()); return visibleIf(userHas.globalPermissionInAnyCollection(CorePermissions.MANAGE_SYSTEM_GROUPS)); } }); config.add(AdminView.SYSTEM_SECTION, new NavigationItem.Active(USERS, USERS_ICON) { @Override public void activate(Navigation navigate) { navigate.to().listUserCredentials(); } @Override public ComponentState getStateFor(User user, AppLayerFactory appLayerFactory) { CredentialUserPermissionChecker userHas = appLayerFactory.getModelLayerFactory().newUserServices() .has(user.getUsername()); return visibleIf(userHas.globalPermissionInAnyCollection(CorePermissions.MANAGE_SYSTEM_USERS)); } }); config.add(AdminView.SYSTEM_SECTION, new NavigationItem.Active(COLLECTIONS, COLLECTIONS_ICON) { @Override public void activate(Navigation navigate) { navigate.to().manageCollections(); } @Override public ComponentState getStateFor(User user, AppLayerFactory appLayerFactory) { CredentialUserPermissionChecker userHas = appLayerFactory.getModelLayerFactory().newUserServices() .has(user.getUsername()); return visibleIf(userHas.globalPermissionInAnyCollection(CorePermissions.MANAGE_SYSTEM_COLLECTIONS)); } }); config.add(AdminView.SYSTEM_SECTION, new NavigationItem.Active(PLUGINS, PLUGINS_ICON) { @Override public void activate(Navigation navigate) { navigate.to().pluginManagement(); } @Override public ComponentState getStateFor(User user, AppLayerFactory appLayerFactory) { CredentialUserPermissionChecker userHas = appLayerFactory.getModelLayerFactory().newUserServices() .has(user.getUsername()); return visibleIf(userHas.globalPermissionInAnyCollection(CorePermissions.MANAGE_SYSTEM_CONFIGURATION)); } }); config.add(AdminView.SYSTEM_SECTION, new NavigationItem.Active(IMPORT_USERS, IMPORT_USERS_ICON) { @Override public void activate(Navigation navigate) { navigate.to().importUsers(); } @Override public ComponentState getStateFor(User user, AppLayerFactory appLayerFactory) { CredentialUserPermissionChecker userHas = appLayerFactory.getModelLayerFactory().newUserServices() .has(user.getUsername()); return visibleIf(userHas.globalPermissionInAnyCollection(CorePermissions.MANAGE_SYSTEM_USERS)); } }); config.add(AdminView.SYSTEM_SECTION, new NavigationItem.Active(IMPORT_GROUPS, IMPORT_GROUPS_ICON) { @Override public void activate(Navigation navigate) { navigate.to().importGroups(); } @Override public ComponentState getStateFor(User user, AppLayerFactory appLayerFactory) { CredentialUserPermissionChecker userHas = appLayerFactory.getModelLayerFactory().newUserServices() .has(user.getUsername()); return visibleIf(userHas.globalPermissionInAnyCollection(CorePermissions.MANAGE_SYSTEM_DATA_IMPORTS)); } }); config.add(AdminView.SYSTEM_SECTION, new NavigationItem.Active(IMPORT_SETTINGS, IMPORT_SETTINGS_ICON) { @Override public void activate(Navigation navigate) { navigate.to().importSettings(); } @Override public ComponentState getStateFor(User user, AppLayerFactory appLayerFactory) { CredentialUserPermissionChecker userHas = appLayerFactory.getModelLayerFactory().newUserServices() .has(user.getUsername()); return visibleIf(userHas.globalPermissionInAnyCollection(CorePermissions.MANAGE_SYSTEM_DATA_IMPORTS)); } }); config.add(AdminView.SYSTEM_SECTION, new NavigationItem.Active(EXPORT, EXPORT_ICONS) { @Override public void activate(Navigation navigate) { navigate.to().exporter(); } @Override public ComponentState getStateFor(User user, AppLayerFactory appLayerFactory) { CredentialUserPermissionChecker userHas = appLayerFactory.getModelLayerFactory().newUserServices() .has(user.getUsername()); return visibleIf(userHas.globalPermissionInAnyCollection(CorePermissions.MANAGE_SYSTEM_DATA_IMPORTS)); } }); config.add(AdminView.SYSTEM_SECTION, new NavigationItem.Inactive(BIG_DATA, BIG_DATA_ICON)); config.add(AdminView.SYSTEM_SECTION, new NavigationItem.Active(UPDATE_CENTER, UPDATE_CENTER_ICON) { @Override public void activate(Navigation navigate) { navigate.to().updateManager(); } @Override public ComponentState getStateFor(User user, AppLayerFactory appLayerFactory) { CredentialUserPermissionChecker userHas = appLayerFactory.getModelLayerFactory().newUserServices() .has(user.getUsername()); return visibleIf(userHas.globalPermissionInAnyCollection(CorePermissions.MANAGE_SYSTEM_UPDATES)); } }); config.add(AdminView.SYSTEM_SECTION, new NavigationItem.Active(SYSTEM_CHECK, SYSTEM_CHECK_ICON) { @Override public void activate(Navigation navigate) { navigate.to().systemCheck(); } @Override public ComponentState getStateFor(User user, AppLayerFactory appLayerFactory) { UserServices userServices = appLayerFactory.getModelLayerFactory().newUserServices(); return visibleIf(userServices.getUser(user.getUsername()).isSystemAdmin() || userServices.has(user).allGlobalPermissionsInAnyCollection( CorePermissions.MANAGE_SYSTEM_COLLECTIONS, CorePermissions.MANAGE_SECURITY, CorePermissions.MANAGE_SYSTEM_SERVERS)); } }); } private void configureCollectionAdmin(NavigationConfig config) { config.add(AdminView.COLLECTION_SECTION, new NavigationItem.Active(TAXONOMIES, TAXONOMIES_ICON) { @Override public void activate(Navigation navigate) { navigate.to().listTaxonomies(); } @Override public ComponentState getStateFor(User user, AppLayerFactory appLayerFactory) { return visibleIf(user.hasAny(CorePermissions.MANAGE_TAXONOMIES, CorePermissions.MANAGE_SECURITY).globally()); } }); config.add(AdminView.COLLECTION_SECTION, new NavigationItem.Active(VALUE_DOMAINS, VALUE_DOMAINS_ICON) { @Override public void activate(Navigation navigate) { navigate.to().listValueDomains(); } @Override public ComponentState getStateFor(User user, AppLayerFactory appLayerFactory) { return visibleIf(user.has(CorePermissions.MANAGE_VALUELIST).globally()); } }); config.add(AdminView.COLLECTION_SECTION, new NavigationItem.Active(FACET_CONFIGURATION, FACET_CONFIGURATION_ICON) { @Override public void activate(Navigation navigate) { navigate.to().listFacetConfiguration(); } //TODO changer pour permission @Override public ComponentState getStateFor(User user, AppLayerFactory appLayerFactory) { return visibleIf(user.has(CorePermissions.MANAGE_VALUELIST).globally()); } }); config.add(AdminView.COLLECTION_SECTION, new NavigationItem.Active(METADATA_SCHEMAS, METADATA_SCHEMAS_ICON) { @Override public void activate(Navigation navigate) { navigate.to().listSchemaTypes(); } @Override public ComponentState getStateFor(User user, AppLayerFactory appLayerFactory) { return visibleIf(user.has(CorePermissions.MANAGE_METADATASCHEMAS).globally()); } }); config.add(AdminView.COLLECTION_SECTION, new NavigationItem.Active(SECURITY, SECURITY_ICON) { @Override public void activate(Navigation navigate) { navigate.to().collectionSecurity(); } @Override public ComponentState getStateFor(User user, AppLayerFactory appLayerFactory) { return visibleIf(user.has(CorePermissions.MANAGE_SECURITY).globally()); } }); config.add(AdminView.COLLECTION_SECTION, new NavigationItem.Active(ROLES, ROLES_ICON) { @Override public void activate(Navigation navigate) { navigate.to().permissionManagement(); } @Override public ComponentState getStateFor(User user, AppLayerFactory appLayerFactory) { return visibleIf(user.has(CorePermissions.MANAGE_SECURITY).globally()); } }); config.add(AdminView.COLLECTION_SECTION, new NavigationItem.Active(EMAIL_SERVER, EMAIL_SERVER_ICON) { @Override public void activate(Navigation navigate) { navigate.to().emailServerManagement(); } @Override public ComponentState getStateFor(User user, AppLayerFactory appLayerFactory) { return visibleIf(user.has(CorePermissions.MANAGE_EMAIL_SERVER).globally()); } }); config.add(AdminView.COLLECTION_SECTION, new NavigationItem.Active(DATA_EXTRACTOR, DATA_EXTRACTOR_ICON) { @Override public void activate(Navigation navigate) { navigate.to().listMetadataExtractors(); } @Override public ComponentState getStateFor(User user, AppLayerFactory appLayerFactory) { return visibleIf(user.has(CorePermissions.MANAGE_METADATAEXTRACTOR).globally()); } }); config.add(AdminView.COLLECTION_SECTION, new NavigationItem.Active(IMPORT_RECORDS, IMPORT_RECORDS_ICON) { @Override public void activate(Navigation navigate) { navigate.to().importRecords(); } @Override public ComponentState getStateFor(User user, AppLayerFactory appLayerFactory) { return visibleIf(user.has(CorePermissions.MANAGE_SYSTEM_DATA_IMPORTS).globally()); } }); config.add(AdminView.COLLECTION_SECTION, new NavigationItem.Active(IMPORT_SCHEMA_TYPES, IMPORT_SCHEMA_TYPES_ICON) { @Override public void activate(Navigation navigate) { navigate.to().importSchemaTypes(); } @Override public ComponentState getStateFor(User user, AppLayerFactory appLayerFactory) { return visibleIf(user.has(CorePermissions.MANAGE_METADATASCHEMAS).globally()); } }); config.add(AdminView.COLLECTION_SECTION, new NavigationItem.Active(IMPORT_AUTHORIZATIONS, IMPORT_AUTHORIZATIONS_ICON) { @Override public void activate(Navigation navigate) { navigate.to().importAuthorizations(); } @Override public ComponentState getStateFor(User user, AppLayerFactory appLayerFactory) { CredentialUserPermissionChecker userHas = appLayerFactory.getModelLayerFactory().newUserServices() .has(user.getUsername()); return visibleIf(userHas.globalPermissionInAnyCollection(CorePermissions.MANAGE_SYSTEM_DATA_IMPORTS)); } }); config.add(AdminView.COLLECTION_SECTION, new NavigationItem.Active(SEARCH_BOOST_BY_METADATA, SEARCH_BOOST_BY_METADATA_ICON) { @Override public void activate(Navigation navigate) { navigate.to().searchBoostByMetadatas(); } @Override public ComponentState getStateFor(User user, AppLayerFactory appLayerFactory) { return visibleIf(user.has(CorePermissions.MANAGE_SEARCH_BOOST).globally()); } }); config.add(AdminView.COLLECTION_SECTION, new NavigationItem.Active(SEARCH_BOOST_BY_QUERY, SEARCH_BOOST_BY_QUERY_ICON) { @Override public void activate(Navigation navigate) { navigate.to().searchBoostByQuerys(); } @Override public ComponentState getStateFor(User user, AppLayerFactory appLayerFactory) { return visibleIf(user.has(CorePermissions.MANAGE_SEARCH_BOOST).globally()); } }); config.add(AdminView.COLLECTION_SECTION, new NavigationItem.Active(TRASH_BIN, TRASH_BIN_ICON) { @Override public void activate(Navigation navigate) { navigate.to().trash(); } @Override public ComponentState getStateFor(User user, AppLayerFactory appLayerFactory) { return visibleIf(user.has(CorePermissions.MANAGE_TRASH).globally()); } }); } private void configureMainLayoutNavigation(NavigationConfig config) { config.add(MainLayout.MAIN_LAYOUT_NAVIGATION, new NavigationItem.Active(HOME, FontAwesome.HOME, RecordsManagementViewGroup.class) { @Override public void activate(Navigation navigate) { navigate.to().home(); } @Override public int getOrderValue() { return 10; } @Override public ComponentState getStateFor(User user, AppLayerFactory appLayerFactory) { return ComponentState.ENABLED; } }); config.add(MainLayout.MAIN_LAYOUT_NAVIGATION, new NavigationItem.Active(ADMIN_MODULE, FontAwesome.GEARS, AdminViewGroup.class) { @Override public void activate(Navigation navigate) { navigate.to().adminModule(); } @Override public int getOrderValue() { return 60; } @Override public ComponentState getStateFor(User user, AppLayerFactory appLayerFactory) { List<String> permissions = new ArrayList<>(); permissions.addAll(CorePermissions.COLLECTION_MANAGEMENT_PERMISSIONS); permissions.addAll(RMPermissionsTo.RM_COLLECTION_MANAGEMENT_PERMISSIONS); permissions.add(TasksPermissionsTo.MANAGE_WORKFLOWS); boolean canManageCollection = user.hasAny(permissions).globally(); UserServices userServices = appLayerFactory.getModelLayerFactory().newUserServices(); boolean canManageSystem = userServices.has(user.getUsername()) .anyGlobalPermissionInAnyCollection(CorePermissions.SYSTEM_MANAGEMENT_PERMISSIONS); return visibleIf(canManageCollection || canManageSystem); } }); config.add(MainLayout.MAIN_LAYOUT_NAVIGATION, new NavigationItem.Active(TRASH, FontAwesome.TRASH, TrashViewGroup.class) { @Override public void activate(Navigation navigate) { navigate.to().trash(); } @Override public int getOrderValue() { return 100; } @Override public ComponentState getStateFor(User user, AppLayerFactory appLayerFactory) { return visibleIf(user.has(CorePermissions.MANAGE_TRASH).globally()); } }); } }