package com.constellio.app.modules.rm.ui.pages.containers;
import static com.constellio.app.ui.i18n.i18n.$;
import java.util.ArrayList;
import java.util.List;
import com.constellio.app.ui.entities.RecordVO;
import com.constellio.app.ui.framework.buttons.DisplayButton;
import com.constellio.app.ui.framework.components.table.RecordVOTable;
import com.constellio.app.ui.framework.containers.AdminUnitsWithContainersCountContainer;
import com.constellio.app.ui.framework.containers.ButtonsContainer;
import com.constellio.app.ui.framework.containers.ButtonsContainer.ContainerButton;
import com.constellio.app.ui.framework.containers.RecordVOLazyContainer;
import com.constellio.app.ui.pages.base.BaseViewImpl;
import com.constellio.app.ui.params.ParamUtils;
import com.vaadin.navigator.ViewChangeListener.ViewChangeEvent;
import com.vaadin.ui.Button;
import com.vaadin.ui.Button.ClickEvent;
import com.vaadin.ui.Button.ClickListener;
import com.vaadin.ui.Component;
import com.vaadin.ui.CustomComponent;
import com.vaadin.ui.TabSheet;
import com.vaadin.ui.TabSheet.SelectedTabChangeEvent;
import com.vaadin.ui.TabSheet.SelectedTabChangeListener;
import com.vaadin.ui.TabSheet.Tab;
public class ContainersByAdministrativeUnitsViewImpl extends BaseViewImpl implements ContainersByAdministrativeUnitsView {
private List<ContainersViewTab> tabs = new ArrayList<>();
private TabSheet tabSheet;
private ContainersByAdministrativeUnitsPresenter presenter;
public ContainersByAdministrativeUnitsViewImpl() {
tabSheet = new TabSheet();
tabSheet.addStyleName("containers-by-admin-units");
tabSheet.addSelectedTabChangeListener(new SelectedTabChangeListener() {
@Override
public void selectedTabChange(SelectedTabChangeEvent event) {
Component selectedComponent = tabSheet.getSelectedTab();
Tab selectedTab = tabSheet.getTab(selectedComponent);
if (selectedTab != null) {
int indexOfSelectedTab = tabSheet.getTabPosition(selectedTab);
ContainersViewTab tabSource = tabs.get(indexOfSelectedTab);
String tabName = tabSource.getTabName();
PlaceHolder tabComponent = (PlaceHolder) selectedTab.getComponent();
if (tabComponent.getComponentCount() == 0) {
tabComponent.setCompositionRoot(getRecordsList(selectedTab));
}
ParamUtils.setParams(tabName);
}
}
});
presenter = new ContainersByAdministrativeUnitsPresenter(this);
}
@Override
protected ClickListener getBackButtonClickListener() {
return new ClickListener() {
@Override
public void buttonClick(ClickEvent event) {
presenter.backButtonClicked();
}
};
}
private Component getRecordsList(Tab selectedTab) {
int indexOfSelectedTab = tabSheet.getTabPosition(selectedTab);
final ContainersViewTab tabSource = tabs.get(indexOfSelectedTab);
RecordVOLazyContainer recordVOLazyContainer = new RecordVOLazyContainer(tabSource.getDataProvider());
AdminUnitsWithContainersCountContainer adaptedContainer = new AdminUnitsWithContainersCountContainer(
recordVOLazyContainer, getCollection(), getSessionContext().getCurrentUser().getId(), tabSource.getTabName());
ButtonsContainer buttonsContainer = new ButtonsContainer(adaptedContainer, "buttons");
buttonsContainer.addButton(new ContainerButton() {
@Override
protected Button newButtonInstance(final Object itemId, ButtonsContainer<?> container) {
return new DisplayButton() {
@Override
protected void buttonClick(ClickEvent event) {
Integer index = (Integer) itemId;
RecordVO entity = tabSource.getDataProvider().getRecordVO(index);
presenter.displayButtonClicked(tabSource.getTabName(), entity);
}
};
}
});
RecordVOTable table = new RecordVOTable($("ContainersByAdministrativeUnitsView.tableTitle"), buttonsContainer);
table.setWidth("100%");
table.setColumnHeader("buttons", "");
table.setColumnHeader(AdminUnitsWithContainersCountContainer.CONTAINERS_COUNT, $("containersCount"));
table.setColumnHeader(AdminUnitsWithContainersCountContainer.SUB_ADMINISTRATIVE_UNITS_COUNT,
$("subAdministrativeUnitsCount"));
table.setPageLength(Math.min(15, buttonsContainer.size()));
return table;
}
@Override
protected void initBeforeCreateComponents(ViewChangeEvent event) {
presenter.forParams(event.getParameters());
}
@Override
protected Component buildMainComponent(ViewChangeEvent event) {
return tabSheet;
}
@Override
public List<ContainersViewTab> getTabs() {
return tabs;
}
@Override
public void setTabs(List<ContainersViewTab> tabs) {
this.tabs = tabs;
tabSheet.removeAllComponents();
for (final ContainersViewTab tab : tabs) {
String tabName = tab.getTabName();
String tabCaption = $("ContainersByAdministrativeUnitsView.tab." + tabName);
tabSheet.addTab(new PlaceHolder(), tabCaption);
}
if (tabs.isEmpty()) {
tabSheet.setVisible(false);
}
}
@Override
public void selectTab(ContainersViewTab tab) {
int indexOfTab = tabs.indexOf(tab);
tabSheet.setSelectedTab(indexOfTab);
}
private static class PlaceHolder extends CustomComponent {
@Override
public void setCompositionRoot(Component compositionRoot) {
super.setCompositionRoot(compositionRoot);
}
}
@Override
protected String getTitle() {
return $("ContainersByAdministrativeUnitsView.viewTitle");
}
}