package com.constellio.app.modules.robots.ui.components.criteria; import static com.constellio.app.ui.i18n.i18n.$; import java.util.List; import com.constellio.app.modules.robots.ui.pages.AddEditRobotPresenter; import com.constellio.app.ui.pages.search.AdvancedSearchCriteriaComponent; import com.constellio.app.ui.pages.search.criteria.Criterion; 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.CustomField; import com.vaadin.ui.VerticalLayout; import com.vaadin.ui.themes.ValoTheme; public class AdvancedSearchCriteriaField extends CustomField<List<Criterion>> { private final AddEditRobotPresenter presenter; private AdvancedSearchCriteriaComponent component; public AdvancedSearchCriteriaField(AddEditRobotPresenter presenter) { this.presenter = presenter; component = new AdvancedSearchCriteriaComponent(presenter); } public AdvancedSearchCriteriaField setSchemaType(String schemaType) { component.setSchemaType(schemaType); return this; } public AdvancedSearchCriteriaField addEmptyCriterion() { component.addEmptyCriterion(); return this; } @Override @SuppressWarnings("unchecked") public Class<? extends List<Criterion>> getType() { return (Class) List.class; } @Override protected Component initContent() { Button addCriterion = new Button($("add")); addCriterion.addClickListener(new ClickListener() { @Override public void buttonClick(ClickEvent event) { presenter.addCriterionRequested(); } }); addCriterion.addStyleName(ValoTheme.BUTTON_LINK); SearchResultTableComponent searchResultTableComponent = new SearchResultTableComponent(presenter, component, presenter.getCurrentUserVO()); component.setWidth("100%"); VerticalLayout layout = new VerticalLayout(addCriterion, component, searchResultTableComponent); layout.setComponentAlignment(addCriterion, Alignment.TOP_RIGHT); layout.setSpacing(true); layout.setWidth("100%"); return layout; } @Override protected void setInternalValue(List<Criterion> newValue) { super.setInternalValue(newValue); if (newValue.isEmpty()) { component.removeAllItems(); component.addEmptyCriterion(); } else { component.setSearchCriteria(newValue); } } @Override protected List<Criterion> getInternalValue() { return component.getSearchCriteria(); } }