package com.constellio.app.modules.tasks.ui.pages; import static com.constellio.app.ui.framework.buttons.WindowButton.WindowConfiguration.modalDialog; import static com.constellio.app.ui.i18n.i18n.$; import java.util.List; import com.constellio.app.modules.tasks.TasksPermissionsTo; import com.constellio.app.modules.tasks.ui.components.TaskTable; import com.constellio.app.modules.tasks.ui.components.WorkflowTable; import com.constellio.app.ui.framework.buttons.AddButton; import com.constellio.app.ui.framework.buttons.WindowButton; import com.constellio.app.ui.framework.components.table.RecordVOTable; import com.constellio.app.ui.framework.data.RecordVODataProvider; import com.constellio.app.ui.framework.items.RecordVOItem; import com.constellio.app.ui.pages.base.BaseViewImpl; import com.vaadin.event.ItemClickEvent; import com.vaadin.event.ItemClickEvent.ItemClickListener; import com.vaadin.navigator.ViewChangeListener; import com.vaadin.navigator.ViewChangeListener.ViewChangeEvent; import com.vaadin.ui.Button; import com.vaadin.ui.Component; import com.vaadin.ui.TabSheet; import com.vaadin.ui.VerticalLayout; public class TaskManagementViewImpl extends BaseViewImpl implements TaskManagementView { private final TaskManagementPresenter presenter; private TabSheet sheet; public TaskManagementViewImpl() { this.presenter = new TaskManagementPresenter(this); } @Override protected String getTitle() { return $("TasksManagementView.viewTitle"); } @Override protected List<Button> buildActionMenuButtons(ViewChangeEvent event) { List<Button> buttons = super.buildActionMenuButtons(event); buttons.add(new AddButton($("TasksManagementView.add")) { @Override protected void buttonClick(ClickEvent event) { presenter.addTaskButtonClicked(); } }); if (presenter.areWorkflowsEnabled() && presenter.hasPermissionToStartWorkflow()) { Button startWorkflowButton = new StartWorkflowButton(); startWorkflowButton.setVisible(presenter.hasPermissionToStartWorkflow()); buttons.add(startWorkflowButton); } return buttons; } @Override protected Component buildMainComponent(ViewChangeListener.ViewChangeEvent event) { sheet = new TabSheet(); sheet.setSizeFull(); sheet.addSelectedTabChangeListener(new TabSheet.SelectedTabChangeListener() { @Override public void selectedTabChange(TabSheet.SelectedTabChangeEvent event) { reloadCurrentTab(); } }); for (String tabId : presenter.getTabs()) { sheet.addTab(buildEmptyTab(tabId)); } return sheet; } @Override public void reloadCurrentTab() { presenter.tabSelected(sheet.getSelectedTab().getId()); } @Override public void displayTasks(RecordVODataProvider provider) { VerticalLayout layout = getEmptiedSelectedTab(); layout.addComponent(new TaskTable(provider, presenter)); } @Override public void displayWorkflows(RecordVODataProvider provider) { VerticalLayout layout = getEmptiedSelectedTab(); layout.addComponent(new WorkflowTable(provider, presenter)); } private VerticalLayout buildEmptyTab(String tabId) { VerticalLayout tab = new VerticalLayout(); tab.setCaption(presenter.getTabCaption(tabId)); tab.setId(tabId); tab.setSpacing(true); return tab; } private VerticalLayout getEmptiedSelectedTab() { VerticalLayout tab = (VerticalLayout) sheet.getSelectedTab(); tab.removeAllComponents(); return tab; } private class StartWorkflowButton extends WindowButton { public StartWorkflowButton() { super($("TasksManagementView.startWorkflow"), $("TasksManagementView.startWorkflow"), modalDialog("75%", "75%")); } @Override protected Component buildWindowContent() { RecordVOTable table = new RecordVOTable(presenter.getWorkflows()); table.setWidth("98%"); table.addItemClickListener(new ItemClickListener() { @Override public void itemClick(ItemClickEvent event) { RecordVOItem item = (RecordVOItem) event.getItem(); presenter.workflowStartRequested(item.getRecord()); getWindow().close(); } }); return table; } } }