package com.constellio.app.ui.pages.management.schemas.display.report; import com.constellio.app.modules.rm.services.RMSchemasRecordsServices; import com.constellio.app.modules.rm.wrappers.Cart; import com.constellio.app.ui.entities.MetadataSchemaVO; import com.constellio.app.ui.entities.MetadataVO; import com.constellio.app.ui.entities.ReportVO; 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.data.Container; import com.vaadin.data.Property; import com.vaadin.data.util.BeanItemContainer; import com.vaadin.navigator.ViewChangeListener.ViewChangeEvent; import com.vaadin.ui.*; import com.vaadin.ui.Button.ClickEvent; import com.vaadin.ui.Button.ClickListener; import com.vaadin.ui.themes.ValoTheme; import org.apache.commons.lang3.StringUtils; import org.vaadin.tepi.listbuilder.ListBuilder; import java.util.*; import static com.constellio.app.ui.i18n.i18n.$; public class ReportConfigurationViewImpl extends BaseViewImpl implements ReportConfigurationView { ReportDisplayConfigPresenter presenter; public static final String BUTTONS_LAYOUT = "base-form-buttons-layout"; public static final String SAVE_BUTTON = "base-form-save"; public static final String CANCEL_BUTTON = "base-form_cancel"; public static final String DELETE_BUTTON = "base-form_delete"; private ComboBox selectedReportField; private Field newReportTitle; private Component tables; private Button deleteButton; public ReportConfigurationViewImpl() { this.presenter = new ReportDisplayConfigPresenter(this); } @Override protected String getTitle() { return $("ReportDisplayConfigView.viewTitle"); } @Override protected Component buildMainComponent(ViewChangeEvent event) { Map<String, String> params = ParamUtils.getParamsMap(event.getParameters()); presenter.setParameters(params); newReportTitle = new TextField($("ReportConfigurationView.newReportTitle")); final VerticalLayout viewLayout = new VerticalLayout(); selectedReportField = new ComboBox($("ReportConfigurationView.selectedReport")); Container container = new BeanItemContainer<>(ReportVO.class, presenter.getReports()); selectedReportField.setContainerDataSource(container); selectedReportField.setInputPrompt($("ReportConfigurationView.newReport")); selectedReportField.setItemCaptionMode(AbstractSelect.ItemCaptionMode.PROPERTY); selectedReportField.setItemCaptionPropertyId("title"); selectedReportField.addValueChangeListener(new Property.ValueChangeListener() { @Override public void valueChange(Property.ValueChangeEvent event) { Component newTable = buildTables(); viewLayout.replaceComponent(tables, newTable); tables = newTable; if (selectedReportField.getValue() != null){ newReportTitle.setVisible(false); deleteButton.setVisible(true); } else{ deleteButton.setVisible(false); newReportTitle.setVisible(true); } } }); viewLayout.addComponent(selectedReportField); viewLayout.addComponent(newReportTitle); viewLayout.setSizeFull(); tables = buildTables(); viewLayout.addComponent(tables); return viewLayout; } private Component buildTables() { MetadataVODataProvider metadataVOProvider = presenter.getDataProvider(); Set<String> metadataTitles = new HashSet<>(); Set<String> duplicatedTitles = new HashSet<>(); final ListBuilder select = new ListBuilder(); select.setColumns(30); select.setRightColumnCaption($("SearchDisplayConfigView.rightColumn")); select.setLeftColumnCaption($("SearchDisplayConfigView.leftColumn")); for (MetadataVO form : metadataVOProvider.listMetadataVO()) { if(!metadataTitles.add(form.getLabel())) { duplicatedTitles.add(form.getLabel()); } } for (MetadataVO form : metadataVOProvider.listMetadataVO()) { select.addItem(form); if(!duplicatedTitles.contains(form.getLabel())) { select.setItemCaption(form, form.getLabel() ); } else { select.setItemCaption(form, form.getLabel() + "(" + presenter.getSchemaName(form.getCode()) + ": " + form.getLocalCode() + ")"); } } select.setValue(presenter.getReportMetadatas()); Button saveButton = new Button($("save")); saveButton.addStyleName(SAVE_BUTTON); saveButton.addStyleName(ValoTheme.BUTTON_PRIMARY); saveButton.addClickListener(new ClickListener() { @Override public void buttonClick(ClickEvent event) { List<MetadataVO> values = (List) select.getValue(); if(values.size() == 0){ showErrorMessage($("ReportConfigurationView.selectedValuesEmpty")); } else if(StringUtils.isBlank(getSelectedReport())){ showErrorMessage($("ReportConfigurationView.reportTitleRequired")); } else{ presenter.saveButtonClicked(values); } } }); Button cancelButton = new Button($("cancel")); cancelButton.addStyleName(CANCEL_BUTTON); cancelButton.addClickListener(new ClickListener() { @Override public void buttonClick(ClickEvent event) { presenter.cancelButtonClicked(); } }); deleteButton = new Button($("delete")); deleteButton.addStyleName(DELETE_BUTTON); deleteButton.addClickListener(new ClickListener() { @Override public void buttonClick(ClickEvent event) { presenter.deleteButtonClicked(); } }); deleteButton.setVisible(false); HorizontalLayout buttonsLayout = new HorizontalLayout(); buttonsLayout.addStyleName(BUTTONS_LAYOUT); buttonsLayout.setSpacing(true); buttonsLayout.addComponent(saveButton); buttonsLayout.addComponent(cancelButton); buttonsLayout.addComponent(deleteButton); VerticalLayout viewLayout = new VerticalLayout(); viewLayout.setSizeFull(); viewLayout.setSpacing(true); viewLayout.addComponent(select); viewLayout.addComponent(buttonsLayout); return viewLayout; } @Override protected boolean isFullWidthIfActionMenuAbsent() { return true; } @Override public String getSelectedReport() { if(newReportTitle != null && newReportTitle.isVisible()){ return (String) newReportTitle.getValue(); } if(selectedReportField != null && selectedReportField.getValue() != null){ return ((ReportVO) selectedReportField.getValue()).getTitle(); }else{ return null; } } }