package com.constellio.app.ui.pages.management.schemas.schema; import static com.constellio.app.ui.i18n.i18n.$; import java.util.Map; import org.vaadin.dialogs.ConfirmDialog; import com.constellio.app.ui.entities.MetadataVO; 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.containers.ButtonsContainer; import com.constellio.app.ui.framework.containers.ButtonsContainer.ContainerButton; import com.constellio.app.ui.framework.containers.MetadataVOLazyContainer; import com.constellio.app.ui.framework.data.MetadataVODataProvider; 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.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.TabSheet; import com.vaadin.ui.Table; import com.vaadin.ui.VerticalLayout; public class AddEditSchemaMetadataViewImpl extends BaseViewImpl implements AddEditSchemaMetadataView, ClickListener { AddEditSchemaMetadataPresenter presenter; private final int batchSize = 100; public AddEditSchemaMetadataViewImpl() { this.presenter = new AddEditSchemaMetadataPresenter(this); } @Override protected void initBeforeCreateComponents(ViewChangeEvent event) { Map<String, String> params = ParamUtils.getParamsMap(event.getParameters()); presenter.setSchemaCode(params.get("schemaCode")); presenter.setParameters(params); } @Override protected boolean isFullWidthIfActionMenuAbsent() { return true; } @Override protected String getTitle() { return $("AddEditSchemaMetadataView.viewTitle", presenter.getSchemaVO().getLabel(getSessionContext().getCurrentLocale().getLanguage())); } @Override protected ClickListener getBackButtonClickListener() { return this; } @Override public void buttonClick(ClickEvent event) { presenter.backButtonClicked(); } @Override protected Component buildMainComponent(ViewChangeEvent event) { Button addButton = new AddButton() { @Override public void buttonClick(ClickEvent event) { presenter.addButtonClicked(); } }; VerticalLayout viewLayout = new VerticalLayout(); viewLayout.setSizeFull(); viewLayout.addComponents(addButton, buildTables()); viewLayout.setComponentAlignment(addButton, Alignment.TOP_RIGHT); return viewLayout; } private Component buildTables() { TabSheet tabSheet = new TabSheet(); tabSheet.setSizeFull(); Map<String, MetadataVODataProvider> dataProviders = presenter.getDataProviders(); for (String tabCaption : dataProviders.keySet()) { final MetadataVODataProvider dataProvider = dataProviders.get(tabCaption); MetadataVOLazyContainer recordsContainer = new MetadataVOLazyContainer(dataProvider, batchSize); ButtonsContainer<MetadataVOLazyContainer> buttonsContainer = new ButtonsContainer<>(recordsContainer, "buttons"); buttonsContainer.addButton(new ContainerButton() { @Override protected Button newButtonInstance(final Object itemId, ButtonsContainer<?> container) { return new EditButton() { @Override protected void buttonClick(ClickEvent event) { Integer index = (Integer) itemId; MetadataVO entity = dataProvider.getMetadataVO(index); presenter.editButtonClicked(entity); } }; } }); buttonsContainer.addButton(new ContainerButton() { @Override protected Button newButtonInstance(final Object itemId, ButtonsContainer<?> container) { return new DeleteButton() { @Override protected void confirmButtonClick(ConfirmDialog dialog) { Integer index = (Integer) itemId; MetadataVO entity = dataProvider.getMetadataVO(index); presenter.deleteButtonClicked(entity); } @Override public boolean isVisible() { Integer index = (Integer) itemId; MetadataVO entity = dataProvider.getMetadataVO(index); return presenter.isMetadataDeletable(entity); } }; } }); Table table = new Table($("AddEditSchemaMetadataView.tableTitle", recordsContainer.size()), buttonsContainer); table.setSizeFull(); table.setPageLength(Math.min(12, dataProvider.size())); table.setColumnHeader("caption", $("AddEditSchemaMetadataView.caption")); table.setColumnHeader("enabledCaption", $("AddEditSchemaMetadataView.enabledCaption")); table.setColumnHeader("valueCaption", $("AddEditSchemaMetadataView.valueCaption")); table.setColumnHeader("inputCaption", $("AddEditSchemaMetadataView.inputCaption")); table.setColumnHeader("requiredCaption", $("AddEditSchemaMetadataView.requiredCaption")); table.setColumnHeader("buttons", ""); table.setColumnWidth("buttons", 80); tabSheet.addTab(table, tabCaption); } return tabSheet; } }