package com.constellio.app.modules.rm.ui.pages.decommissioning; import static com.constellio.app.ui.i18n.i18n.$; import java.util.List; import com.constellio.app.modules.rm.navigation.RMViews; import com.constellio.app.modules.rm.services.decommissioning.DecommissioningListParams; import com.constellio.app.modules.rm.services.decommissioning.SearchType; import com.constellio.app.modules.rm.wrappers.AdministrativeUnit; import com.constellio.app.ui.framework.buttons.WindowButton; import com.constellio.app.ui.framework.components.BaseForm; import com.constellio.app.ui.framework.components.SearchResultTable; import com.constellio.app.ui.framework.components.fields.BaseTextArea; import com.constellio.app.ui.framework.components.fields.BaseTextField; import com.constellio.app.ui.framework.components.fields.lookup.LookupRecordField; import com.constellio.app.ui.pages.search.AdvancedSearchCriteriaComponent; import com.constellio.app.ui.pages.search.SearchViewImpl; import com.constellio.app.ui.pages.search.criteria.Criterion; import com.constellio.model.frameworks.validation.ValidationException; import com.vaadin.data.Property.ValueChangeEvent; import com.vaadin.data.Property.ValueChangeListener; import com.vaadin.data.fieldgroup.PropertyId; import com.vaadin.navigator.ViewChangeListener; 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.HorizontalLayout; import com.vaadin.ui.Label; import com.vaadin.ui.VerticalLayout; import com.vaadin.ui.themes.ValoTheme; public class DecommissioningBuilderViewImpl extends SearchViewImpl<DecommissioningBuilderPresenter> implements DecommissioningBuilderView { public static final String FILING_SPACE = "filing-space"; public static final String ADMIN_UNIT = "admin-unit"; public static final String SEARCH = "search"; public static final String CREATE_LIST = "create-list"; private AdvancedSearchCriteriaComponent criteria; private Button searchButton; private Button addToListButton; private LookupRecordField adminUnit; public DecommissioningBuilderViewImpl() { presenter = new DecommissioningBuilderPresenter(this); presenter.resetFacetAndOrder(); criteria = new AdvancedSearchCriteriaComponent(presenter); adminUnit = new LookupRecordField(AdministrativeUnit.SCHEMA_TYPE) { @Override public boolean isEnabled() { return presenter.isAddMode(); } }; addStyleName("search-decommissioning"); } @Override protected void initBeforeCreateComponents(ViewChangeListener.ViewChangeEvent event) { presenter.forParams(event.getParameters()); super.initBeforeCreateComponents(event); } @Override protected String getTitle() { SearchType type = presenter.getSearchType(); return $("DecommissioningBuilderView.viewTitle." + type); } @Override protected ClickListener getBackButtonClickListener() { return new ClickListener() { @Override public void buttonClick(ClickEvent event) { if(presenter.isAddMode()) { navigate().to(RMViews.class).decommissioning(); } else if (presenter.getDecommissioningList().getDecommissioningListType().isFolderList()) { navigate().to(RMViews.class).displayDecommissioningList(presenter.getDecommissioningList().getId()); } else { navigate().to(RMViews.class).displayDocumentDecommissioningList(presenter.getDecommissioningList().getId()); } } }; } @Override public void addEmptyCriterion() { criteria.addEmptyCriterion(); } @Override public void setCriteriaSchemaType(String schemaType) { criteria.setSchemaType(schemaType); } @Override public void setSearchCriteria(List<Criterion> criteria) { this.criteria.setSearchCriteria(criteria); } @Override public void setAdministrativeUnit(String administrativeUnitID) { this.adminUnit.setValue(administrativeUnitID); } @Override public List<Criterion> getSearchCriteria() { return criteria.getSearchCriteria(); } @Override protected Component buildSearchUI() { Button addCriterion = new Button($("DecommissioningBuilderView.addCriterion")); addCriterion.addStyleName(ValoTheme.BUTTON_LINK); addCriterion.addClickListener(new ClickListener() { @Override public void buttonClick(ClickEvent event) { presenter.addCriterionRequested(); } }); HorizontalLayout top = new HorizontalLayout(buildAdministrativeUnitComponent(), addCriterion); top.setComponentAlignment(addCriterion, Alignment.BOTTOM_RIGHT); top.setWidth("100%"); criteria.setWidth("100%"); searchButton = new Button($("DecommissioningBuilderView.search")); searchButton.addStyleName(ValoTheme.BUTTON_PRIMARY); searchButton.addStyleName(SEARCH); searchButton.setEnabled(presenter.mustDisplayResults()); searchButton.addClickListener(new ClickListener() { @Override public void buttonClick(ClickEvent event) { presenter.searchRequested(); } }); VerticalLayout searchUI = new VerticalLayout(top, criteria, searchButton); searchUI.setSpacing(true); searchButton.setEnabled(adminUnit.getValue() != null); return searchUI; } @Override protected Component buildSummary(SearchResultTable results) { Button createList = new DecommissioningButton($("DecommissioningBuilderView.createDecommissioningList")); createList.addStyleName(ValoTheme.BUTTON_LINK); createList.addStyleName(CREATE_LIST); return results.createSummary(buildSelectAllButton(), buildAddToSelectionButton(), createList, buildAddToListButton()); } private Component buildAdministrativeUnitComponent() { Label label = new Label($("DecommissioningBuilderView.administrativeUnit")); adminUnit.setRequired(true); adminUnit.addValueChangeListener(new ValueChangeListener() { @Override public void valueChange(ValueChangeEvent event) { searchButton.setEnabled(adminUnit.getValue() != null); presenter.administrativeUnitSelected(adminUnit.getValue()); presenter.saveTemporarySearch(false); } }); adminUnit.addStyleName(ADMIN_UNIT); HorizontalLayout layout = new HorizontalLayout(label, adminUnit); layout.setComponentAlignment(label, Alignment.MIDDLE_LEFT); layout.setSpacing(true); return layout; } @Override public Boolean computeStatistics() { return false; } public class DecommissioningButton extends WindowButton { public static final String TITLE = "dl-title"; public static final String DESCRIPTION = "dl-description"; @PropertyId("title") private BaseTextField title; @PropertyId("description") private BaseTextArea description; public DecommissioningButton(String caption) { super(caption, caption); } @Override protected Component buildWindowContent() { title = new BaseTextField($("DecommissioningBuilderView.title")); title.setRequired(true); title.setId(TITLE); description = new BaseTextArea($("DecommissioningBuilderView.description")); description.setId(DESCRIPTION); return new BaseForm<DecommissioningListParams>( new DecommissioningListParams(), this, title, description) { @Override protected void saveButtonClick(DecommissioningListParams params) throws ValidationException { getWindow().close(); params.setSelectedRecordIds(getSelectedRecordIds()); presenter.decommissioningListCreationRequested(params); } @Override protected void cancelButtonClick(DecommissioningListParams params) { getWindow().close(); } }; } @Override public boolean isVisible(){ return presenter.isAddMode(); } } private Button buildAddToListButton() { addToListButton = new Button($("DecommissioningBuilderView.addToList")) { @Override public boolean isVisible() { return !presenter.isAddMode(); } }; addToListButton.addClickListener(new ClickListener() { @Override public void buttonClick(ClickEvent event) { presenter.addToListButtonClicked(getSelectedRecordIds()); } }); return addToListButton; } }