package com.constellio.app.ui.pages.management.collections; import static com.constellio.app.ui.i18n.i18n.$; import org.vaadin.dialogs.ConfirmDialog; import com.constellio.app.ui.framework.buttons.AddButton; import com.constellio.app.ui.framework.buttons.DeleteButton; 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.CollectionVOLazyContainer; import com.constellio.app.ui.framework.data.CollectionVODataProvider; import com.constellio.app.ui.pages.base.BaseViewImpl; import com.constellio.model.services.collections.CollectionsListManagerListener; import com.vaadin.navigator.ViewChangeListener.ViewChangeEvent; import com.vaadin.ui.Alignment; 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.Table; import com.vaadin.ui.VerticalLayout; public class CollectionManagementViewImpl extends BaseViewImpl implements CollectionManagementView, CollectionsListManagerListener { public static final String TABLE_STYLE_CODE = "seleniumTableStyle"; public static final String EDIT_BUTTON_STYLE = "seleniumEditButtonStyle"; public static final String DELETE_BUTTON_STYLE = "seleniumDeleteButtonStyle"; public static final String ADD_BUTTON_STYLE = "seleniumAddButtonStyle"; private static final String PROPERTY_BUTTONS = "buttons"; private CollectionManagementPresenter presenter; private Table table; private VerticalLayout layout; public CollectionManagementViewImpl() { super(); this.presenter = new CollectionManagementPresenter(this); } @Override protected Component buildMainComponent(ViewChangeEvent event) { this.layout = new VerticalLayout(); layout.setSizeFull(); layout.setSpacing(true); Component addButton = new AddButton() { @Override protected void buttonClick(ClickEvent event) { presenter.addButtonClick(); } }; addButton.addStyleName(ADD_BUTTON_STYLE); layout.addComponent(addButton); layout.setComponentAlignment(addButton, Alignment.TOP_RIGHT); table = buildTable(); layout.addComponent(table); return layout; } private Table buildTable() { CollectionVODataProvider dataProvider = presenter.getDataProvider(); ButtonsContainer container = new ButtonsContainer<>(new CollectionVOLazyContainer(dataProvider), PROPERTY_BUTTONS); addButtons(dataProvider, container); RecordVOTable table = new RecordVOTable($(""), container); table.setColumnHeader(CollectionVOLazyContainer.CODE, $("code")); table.setColumnHeader(CollectionVOLazyContainer.NAME, $("name")); table.setPageLength(table.getItemIds().size()); table.setWidth("100%"); table.setSelectable(true); table.setImmediate(true); table.setColumnHeader(PROPERTY_BUTTONS, ""); table.setColumnWidth(PROPERTY_BUTTONS, 120); table.addStyleName(TABLE_STYLE_CODE); return table; } private void addButtons(final CollectionVODataProvider provider, ButtonsContainer buttonsContainer) { buttonsContainer.addButton(new ContainerButton() { @Override protected Button newButtonInstance(final Object itemId, ButtonsContainer<?> container) { EditButton button = new EditButton() { @Override protected void buttonClick(ClickEvent event) { presenter.editButtonClicked(provider, (Integer) itemId); } }; button.addStyleName(EDIT_BUTTON_STYLE); return button; } }); buttonsContainer.addButton(new ContainerButton() { @Override protected Button newButtonInstance(final Object itemId, ButtonsContainer<?> container) { DeleteButton button = new DeleteButton() { @Override protected void confirmButtonClick(ConfirmDialog dialog) { presenter.deleteButtonClicked(provider, (Integer) itemId); refreshTable(); } @Override public boolean isEnabled() { return super.isEnabled() && presenter.isDeletePossible(provider, (Integer) itemId); } }; button.addStyleName(DELETE_BUTTON_STYLE); if (!button.isEnabled()) { button.setVisible(false); } return button; } }); } @Override protected String getTitle() { return $("CollectionManagementView.viewTitle"); } public void refreshTable() { Table newTable = buildTable(); layout.replaceComponent(table, newTable); table = newTable; } @Override public void onCollectionCreated(String collection) { refreshTable(); } @Override public void onCollectionDeleted(String collection) { refreshTable(); } @Override protected ClickListener getBackButtonClickListener() { return new ClickListener() { @Override public void buttonClick(ClickEvent event) { presenter.backButtonClick(); } }; } }