package com.constellio.app.modules.tasks.navigation; import java.io.Serializable; import com.constellio.app.entities.navigation.NavigationConfig; import com.constellio.app.entities.navigation.NavigationItem; import com.constellio.app.modules.rm.RMConfigs; import com.constellio.app.modules.rm.navigation.RMViews; import com.constellio.app.modules.rm.ui.pages.document.DisplayDocumentView; import com.constellio.app.modules.rm.ui.pages.folder.DisplayFolderView; import com.constellio.app.modules.tasks.TasksPermissionsTo; import com.constellio.app.modules.tasks.ui.pages.TaskManagementViewImpl; import com.constellio.app.modules.tasks.ui.pages.TasksLogsViewImpl; import com.constellio.app.modules.tasks.ui.pages.tasks.AddEditTaskViewImpl; import com.constellio.app.modules.tasks.ui.pages.tasks.DisplayTaskViewImpl; import com.constellio.app.modules.tasks.ui.pages.viewGroups.TasksViewGroup; import com.constellio.app.modules.tasks.ui.pages.workflow.AddEditWorkflowViewImpl; import com.constellio.app.modules.tasks.ui.pages.workflow.DisplayWorkflowViewImpl; import com.constellio.app.modules.tasks.ui.pages.workflow.ListWorkflowsViewImpl; import com.constellio.app.modules.tasks.ui.pages.workflowInstance.DisplayWorkflowInstanceViewImpl; import com.constellio.app.services.factories.AppLayerFactory; import com.constellio.app.ui.application.ConstellioUI; import com.constellio.app.ui.application.Navigation; import com.constellio.app.ui.application.NavigatorConfigurationService; 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.model.entities.records.wrappers.User; import com.vaadin.navigator.View; import com.vaadin.server.FontAwesome; public class TasksNavigationConfiguration implements Serializable { public static final String TASK_MANAGEMENT = "taskManagement"; public static final String ADD_TASK = "addTask"; public static final String WORKFLOW_MANAGEMENT = "workflowManagement"; public static final String WORKFLOW_MANAGEMENT_ICON = "images/icons/config/workflows.png"; public static final String EDIT_TASK = "editTask"; public static final String DISPLAY_TASK = "displayTask"; public static final String ADD_WORKFLOW = "addWorkflow"; public static final String EDIT_WORKFLOW = "editWorkflow"; public static final String DISPLAY_WORKFLOW = "displayWorkflow"; public static final String LIST_WORKFLOWS = "listWorkflows"; public static final String LIST_TASKS_LOGS = "listTaksLogs"; public static final String DISPLAY_WORKFLOW_INSTANCE = "displayWorkflowInstance"; public static void configureNavigation(NavigationConfig config) { configureMainLayoutNavigation(config); configureHeaderActionMenu(config); configureCollectionAdmin(config); } public static void configureNavigation(NavigatorConfigurationService service) { service.register(ADD_TASK, AddEditTaskViewImpl.class); service.register(EDIT_TASK, AddEditTaskViewImpl.class); service.register(DISPLAY_TASK, DisplayTaskViewImpl.class); service.register(ADD_WORKFLOW, AddEditWorkflowViewImpl.class); service.register(EDIT_WORKFLOW, AddEditWorkflowViewImpl.class); service.register(DISPLAY_WORKFLOW, DisplayWorkflowViewImpl.class); service.register(LIST_WORKFLOWS, ListWorkflowsViewImpl.class); service.register(TASK_MANAGEMENT, TaskManagementViewImpl.class); service.register(LIST_TASKS_LOGS, TasksLogsViewImpl.class); service.register(DISPLAY_WORKFLOW_INSTANCE, DisplayWorkflowInstanceViewImpl.class); } private static void configureHeaderActionMenu(NavigationConfig config) { config.add(ConstellioHeader.ACTION_MENU, new NavigationItem.Active(ADD_TASK) { @Override public void activate(Navigation navigate) { View currentView = ConstellioUI.getCurrent().getCurrentView(); if (currentView instanceof DisplayFolderView) { DisplayFolderView displayFolderView = (DisplayFolderView) currentView; String folderId = displayFolderView.getRecord().getId(); navigate.to(TaskViews.class).addTaskToFolder(folderId); } else if (currentView instanceof DisplayDocumentView) { DisplayDocumentView displayFolderView = (DisplayDocumentView) currentView; String documentId = displayFolderView.getDocumentVO().getId(); navigate.to(TaskViews.class).addTaskToDocument(documentId); } else { navigate.to(TaskViews.class).addTask(); } } @Override public ComponentState getStateFor(User user, AppLayerFactory appLayerFactory) { return ComponentState.ENABLED; } }, 0); } private static void configureMainLayoutNavigation(NavigationConfig config) { config.add(MainLayout.MAIN_LAYOUT_NAVIGATION, new NavigationItem.Active(TASK_MANAGEMENT, FontAwesome.TASKS, TasksViewGroup.class) { @Override public void activate(Navigation navigate) { navigate.to(TaskViews.class).taskManagement(); } @Override public int getOrderValue() { return 30; } @Override public ComponentState getStateFor(User user, AppLayerFactory appLayerFactory) { return ComponentState.ENABLED; } }); } private static void configureCollectionAdmin(NavigationConfig config) { config.add(AdminView.COLLECTION_SECTION, new NavigationItem.Active(WORKFLOW_MANAGEMENT, WORKFLOW_MANAGEMENT_ICON) { @Override public void activate(Navigation navigate) { navigate.to(TaskViews.class).listWorkflows(); } @Override public ComponentState getStateFor(User user, AppLayerFactory appLayerFactory) { RMConfigs configs = new RMConfigs(appLayerFactory.getModelLayerFactory().getSystemConfigurationsManager()); if (!configs.areWorkflowsEnabled()) { return ComponentState.INVISIBLE; } return ComponentState.visibleIf(user.has(TasksPermissionsTo.MANAGE_WORKFLOWS).globally()); } }); } }