package com.constellio.app.modules.rm.ui.pages.decommissioning; import com.constellio.app.modules.rm.constants.RMPermissionsTo; import com.constellio.app.modules.rm.services.decommissioning.SearchType; import com.constellio.app.ui.entities.RecordVO; import com.constellio.app.ui.framework.buttons.DeleteButton; import com.constellio.app.ui.framework.buttons.DisplayButton; import com.constellio.app.ui.framework.buttons.EditButton; import com.constellio.app.ui.framework.components.table.RecordVOTable; 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.framework.data.RecordVODataProvider; import com.constellio.app.ui.pages.base.BaseViewImpl; import com.vaadin.navigator.ViewChangeListener.ViewChangeEvent; import com.vaadin.ui.*; import com.vaadin.ui.Button.ClickEvent; import com.vaadin.ui.Button.ClickListener; import com.vaadin.ui.TabSheet.SelectedTabChangeEvent; import com.vaadin.ui.TabSheet.SelectedTabChangeListener; import com.vaadin.ui.themes.ValoTheme; import org.vaadin.dialogs.ConfirmDialog; import static com.constellio.app.ui.i18n.i18n.$; public class DecommissioningMainViewImpl extends BaseViewImpl implements DecommissioningMainView { public static final String BUTTONS_PROPERTY_ID = "buttons"; public static final String CREATE = "create-"; private final DecommissioningMainPresenter presenter; private TabSheet sheet; public DecommissioningMainViewImpl() { presenter = new DecommissioningMainPresenter(this); } @Override protected boolean isFullWidthIfActionMenuAbsent() { return true; } @Override protected String getTitle() { return $("DecommissioningMainView.viewTitle"); } @Override protected Component buildMainComponent(ViewChangeEvent event) { sheet = new TabSheet(); sheet.setSizeFull(); sheet.addSelectedTabChangeListener(new SelectedTabChangeListener() { @Override public void selectedTabChange(SelectedTabChangeEvent event) { reloadCurrentTab(); } }); for (String tabId : presenter.getTabs()) { sheet.addTab(buildEmptyTab(tabId)); } return sheet; } @Override protected ClickListener getBackButtonClickListener() { return new ClickListener() { @Override public void buttonClick(ClickEvent event) { presenter.backButtonClicked(); } }; } @Override public void reloadCurrentTab() { presenter.tabSelected(sheet.getSelectedTab().getId()); } @Override public void displayListCreation() { VerticalLayout layout = getEmptiedSelectedTab(); Label foldersWithoutDateCaption = new Label($("DecommissioningMainView.create.foldersWithoutDate")); foldersWithoutDateCaption.addStyleName(ValoTheme.LABEL_H2); foldersWithoutDateCaption.setVisible(presenter.getUser().has(RMPermissionsTo.PROCESS_DECOMMISSIONING_LIST).onSomething()); VerticalLayout foldersWithoutDate = new VerticalLayout(foldersWithoutDateCaption); for (final SearchType type : presenter.getCriteriaForFoldersWithoutPlanifiedDate()) { Button button = new Button($("DecommissioningMainView.create." + type)); button.addStyleName(ValoTheme.BUTTON_LINK); button.addStyleName(CREATE + type); button.addClickListener(new ClickListener() { @Override public void buttonClick(ClickEvent event) { presenter.creationRequested(type); } }); foldersWithoutDate.addComponent(button); button.setEnabled(presenter.getUser().has(RMPermissionsTo.PROCESS_DECOMMISSIONING_LIST).onSomething()); button.setVisible(button.isEnabled()); } Label foldersWithDateCaption = new Label($("DecommissioningMainView.create.foldersWithDate")); foldersWithDateCaption.addStyleName(ValoTheme.LABEL_H2); VerticalLayout foldersWithDate = new VerticalLayout(foldersWithDateCaption); for (final SearchType type : presenter.getCriteriaForFoldersWithPlanifiedDate()) { Button button = new Button($("DecommissioningMainView.create." + type)); button.addStyleName(ValoTheme.BUTTON_LINK); button.addStyleName(CREATE + type); button.addClickListener(new ClickListener() { @Override public void buttonClick(ClickEvent event) { presenter.creationRequested(type); } }); foldersWithDate.addComponent(button); if(SearchType.transfer.equals(type)) { button.setEnabled(presenter.getUser().has(RMPermissionsTo.CREATE_TRANSFER_DECOMMISSIONING_LIST).globally() || presenter.getUser().has(RMPermissionsTo.PROCESS_DECOMMISSIONING_LIST).onSomething()); button.setVisible(button.isEnabled()); } else { button.setEnabled(presenter.getUser().has(RMPermissionsTo.PROCESS_DECOMMISSIONING_LIST).onSomething()); button.setVisible(button.isEnabled()); } } layout.addComponents(foldersWithoutDate, foldersWithDate); if (presenter.isDocumentDecommissioningSupported()) { Label documentsCaption = new Label($("DecommissioningMainView.create.documents")); documentsCaption.addStyleName(ValoTheme.LABEL_H2); VerticalLayout documents = new VerticalLayout(documentsCaption); for (final SearchType type : presenter.getCriteriaForDocuments()) { Button button = new Button($("DecommissioningMainView.create." + type)); button.addStyleName(ValoTheme.BUTTON_LINK); button.addStyleName(CREATE + type); button.addClickListener(new ClickListener() { @Override public void buttonClick(ClickEvent event) { presenter.creationRequested(type); } }); documents.addComponent(button); button.setEnabled(presenter.getUser().has(RMPermissionsTo.PROCESS_DECOMMISSIONING_LIST).onSomething()); button.setVisible(button.isEnabled()); } layout.addComponent(documents); documentsCaption.setVisible(presenter.getUser().has(RMPermissionsTo.PROCESS_DECOMMISSIONING_LIST).onSomething()); } } @Override public void displayEditableTable(final RecordVODataProvider dataProvider) { ButtonsContainer container = buildContainer(dataProvider); container.addButton(new ContainerButton() { @Override protected Button newButtonInstance(final Object itemId, ButtonsContainer<?> container) { return new DisplayButton() { @Override protected void buttonClick(ClickEvent event) { RecordVO entity = dataProvider.getRecordVO((int) itemId); presenter.displayButtonClicked(entity); } }; } }); container.addButton(new ContainerButton() { @Override protected Button newButtonInstance(final Object itemId, ButtonsContainer<?> container) { return new EditButton() { @Override protected void buttonClick(ClickEvent event) { RecordVO entity = dataProvider.getRecordVO((int) itemId); presenter.editButtonClicked(entity); } }; } }); container.addButton(new ContainerButton() { @Override protected Button newButtonInstance(final Object itemId, ButtonsContainer<?> container) { return new DeleteButton() { @Override protected void confirmButtonClick(ConfirmDialog dialog) { RecordVO entity = dataProvider.getRecordVO((int) itemId); presenter.deleteButtonClicked(entity); } @Override protected String getConfirmDialogMessage() { RecordVO entity = dataProvider.getRecordVO((int) itemId); return presenter.getDeleteConfirmMessage(entity); } }; } }); VerticalLayout layout = getEmptiedSelectedTab(); layout.addComponent(buildTable(container)); } @Override public void displayReadOnlyTable(final RecordVODataProvider dataProvider) { if (dataProvider.size() != 0) { ButtonsContainer container = buildContainer(dataProvider); container.addButton(new ContainerButton() { @Override protected Button newButtonInstance(final Object itemId, ButtonsContainer<?> container) { return new DisplayButton() { @Override protected void buttonClick(ClickEvent event) { RecordVO entity = dataProvider.getRecordVO((int) itemId); presenter.displayButtonClicked(entity); } }; } }); VerticalLayout layout = getEmptiedSelectedTab(); layout.addComponent(buildTable(container)); } } private VerticalLayout buildEmptyTab(String tabId) { VerticalLayout tab = new VerticalLayout(); tab.setCaption($("DecommissioningMainView.tab." + tabId)); tab.addStyleName(tabId); tab.setId(tabId); tab.setSpacing(true); return tab; } private VerticalLayout getEmptiedSelectedTab() { VerticalLayout tab = (VerticalLayout) sheet.getSelectedTab(); tab.removeAllComponents(); return tab; } private ButtonsContainer<RecordVOLazyContainer> buildContainer(RecordVODataProvider dataProvider) { RecordVOLazyContainer container = new RecordVOLazyContainer(dataProvider); return new ButtonsContainer<>(container, BUTTONS_PROPERTY_ID); } private Table buildTable(ButtonsContainer container) { RecordVOTable table = new RecordVOTable($("DecommissioningMainView.lists", container.size())); table.setContainerDataSource(container); table.setColumnHeader(BUTTONS_PROPERTY_ID, ""); table.setPageLength(Math.min(15, container.size())); table.setWidth("100%"); return table; } }