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;
}
}
}