package com.constellio.app.ui.pages.management.schemaRecords; import com.constellio.app.ui.entities.RecordVO; import com.constellio.app.ui.framework.buttons.*; import com.constellio.app.ui.framework.components.fields.BaseTextField; 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.handlers.OnEnterKeyHandler; import com.constellio.app.ui.pages.base.BaseViewImpl; import com.vaadin.data.Container; import com.vaadin.navigator.ViewChangeListener.ViewChangeEvent; import com.vaadin.ui.*; import com.vaadin.ui.Button.ClickEvent; import com.vaadin.ui.Button.ClickListener; import org.vaadin.dialogs.ConfirmDialog; import static com.constellio.app.ui.i18n.i18n.$; public class ListSchemaRecordsViewImpl extends BaseViewImpl implements ListSchemaRecordsView { ListSchemaRecordsPresenter presenter; VerticalLayout viewLayout; Table table; private HorizontalLayout searchAndAddButtonLayout; private HorizontalLayout searchLayout; public ListSchemaRecordsViewImpl() { this.presenter = new ListSchemaRecordsPresenter(this); } @Override protected String getTitle() { return $("ListSchemaRecordsView.viewTitle"); } @Override protected Component buildMainComponent(ViewChangeEvent event) { final String schemaName = event.getParameters(); presenter.forSchema(schemaName); viewLayout = new VerticalLayout(); viewLayout.setSizeFull(); Button addButton = new AddButton() { @Override public void buttonClick(ClickEvent event) { presenter.addLinkClicked(); } }; buildSearch(); searchAndAddButtonLayout = new HorizontalLayout(); searchAndAddButtonLayout.setWidth("100%"); searchAndAddButtonLayout.addComponents(searchLayout); searchAndAddButtonLayout.addComponents(searchLayout, addButton); searchAndAddButtonLayout.setComponentAlignment(addButton, Alignment.TOP_RIGHT); searchAndAddButtonLayout.setSpacing(true); table = buildRecordsTables(); viewLayout.addComponents(searchAndAddButtonLayout, table); return viewLayout; } private Table buildRecordsTables() { final RecordVODataProvider dataProvider = presenter.getDataProvider(); Container recordsContainer = new RecordVOLazyContainer(dataProvider); ButtonsContainer buttonsContainer = new ButtonsContainer(recordsContainer, "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 = dataProvider.getRecordVO(index); presenter.displayButtonClicked(entity); } }; } }); 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; RecordVO entity = dataProvider.getRecordVO(index); presenter.editButtonClicked(entity); } }; } }); buttonsContainer.addButton(new ContainerButton() { @Override protected Button newButtonInstance(final Object itemId, ButtonsContainer<?> container) { DeleteButton deleteButton = new DeleteButton() { @Override protected void confirmButtonClick(ConfirmDialog dialog) { Integer index = (Integer) itemId; RecordVO entity = dataProvider.getRecordVO(index); presenter.deleteButtonClicked(entity); } }; return deleteButton; } }); recordsContainer = buttonsContainer; RecordVOTable table = new RecordVOTable($("ListSchemaRecordsView.tableTitle", dataProvider.size()), recordsContainer); table.setWidth("100%"); table.setColumnHeader("buttons", ""); table.setColumnWidth(dataProvider.getSchema().getCode() + "_id", 120); table.setColumnWidth("buttons", 120); table.setPageLength(Math.min(15, dataProvider.size())); return table; } public void refreshTable() { Table newTable = buildRecordsTables(); viewLayout.replaceComponent(table, newTable); table = newTable; } @Override protected ClickListener getBackButtonClickListener() { return new ClickListener() { @Override public void buttonClick(ClickEvent event) { navigateTo().listValueDomains(); } }; } private void buildSearch() { searchLayout = new HorizontalLayout(); searchLayout.setSpacing(true); final TextField searchField = new BaseTextField(); searchField.focus(); searchField.setNullRepresentation(""); Button searchButton = new SearchButton(); searchButton.addClickListener(new ClickListener() { @Override public void buttonClick(ClickEvent event) { presenter.search(searchField.getValue()); } }); searchLayout.addComponents(searchField, searchButton); OnEnterKeyHandler onEnterHandler = new OnEnterKeyHandler() { @Override public void onEnterKeyPressed() { presenter.search(searchField.getValue()); } }; onEnterHandler.installOn(searchField); } }