package com.constellio.app.ui.pages.search.savedSearch; import static com.constellio.app.ui.i18n.i18n.$; import org.vaadin.dialogs.ConfirmDialog; 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.buttons.WindowButton; import com.constellio.app.ui.framework.buttons.WindowButton.WindowConfiguration; import com.constellio.app.ui.framework.components.BaseForm; 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.pages.base.BaseViewImpl; import com.constellio.model.entities.records.wrappers.SavedSearch; import com.constellio.model.frameworks.validation.ValidationException; import com.vaadin.data.fieldgroup.PropertyId; import com.vaadin.navigator.ViewChangeListener.ViewChangeEvent; import com.vaadin.ui.Button; import com.vaadin.ui.CheckBox; import com.vaadin.ui.Component; import com.vaadin.ui.Table; import com.vaadin.ui.TextField; import com.vaadin.ui.VerticalLayout; public class SavedSearchViewImpl extends BaseViewImpl implements SavedSearchView { private final SavedSearchPresenter presenter; @PropertyId(SavedSearch.TITLE) private TextField titleField; @PropertyId(SavedSearch.PUBLIC) private CheckBox publicField; public SavedSearchViewImpl() { presenter = new SavedSearchPresenter(this); } @Override protected String getTitle() { return $("SavedSearchView.viewTitle"); } @Override protected Component buildMainComponent(ViewChangeEvent event) { VerticalLayout layout = new VerticalLayout(); layout.setSpacing(true); layout.addComponents(buildUserSearchesTable(), buildPublicSearchesTable()); return layout; } private Table buildUserSearchesTable() { final RecordVODataProvider dataProvider = presenter.getUserSearchesDataProvider(); final ButtonsContainer container = buildButtonsContainer(dataProvider); titleField = new BaseTextField($(SavedSearch.TITLE)); publicField = new CheckBox($(SavedSearch.PUBLIC)); container.addButton(new ContainerButton() { @Override protected Button newButtonInstance(final Object itemId, ButtonsContainer<?> container) { return new WindowButton(EditButton.ICON_RESOURCE, "", true, WindowConfiguration.modalDialog("45%", "45%")) { @Override protected Component buildWindowContent() { RecordVO recordVO = dataProvider.getRecordVO((int) itemId); return new BaseForm<RecordVO>(recordVO, SavedSearchViewImpl.this, titleField, publicField) { @Override protected void saveButtonClick(RecordVO viewObject) throws ValidationException { presenter.searchModificationRequested(viewObject); getWindow().close(); } @Override protected void cancelButtonClick(RecordVO viewObject) { getWindow().close(); } }; } }; } }); container.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; presenter.deleteButtonClicked(dataProvider.getRecordVO(index)); } }; } }); RecordVOTable table = new RecordVOTable($("SavedSearchView.userSearches", container.size()), container); table.setColumnHeader("buttons", ""); table.setWidth("100%"); table.setPageLength(container.size()); return table; } private Table buildPublicSearchesTable() { ButtonsContainer container = buildButtonsContainer(presenter.getPublicSearchesDataProvider()); RecordVOTable table = new RecordVOTable($("SavedSearchView.publicSearches", container.size()), container); table.setColumnHeader("buttons", ""); table.setWidth("100%"); table.setPageLength(container.size()); return table; } public ButtonsContainer buildButtonsContainer(final RecordVODataProvider dataProvider) { RecordVOLazyContainer recordVOLazyContainer = new RecordVOLazyContainer(dataProvider); ButtonsContainer buttonsContainer = new ButtonsContainer(recordVOLazyContainer, "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; presenter.searchButtonClicked(dataProvider.getRecordVO(index)); } }; } }); return buttonsContainer; } }