package com.constellio.app.ui.framework.components;
import static com.constellio.app.ui.i18n.i18n.$;
import java.util.List;
import com.constellio.app.ui.framework.buttons.WindowButton;
import com.constellio.app.ui.framework.buttons.WindowButton.WindowConfiguration;
import com.constellio.app.ui.framework.reports.NewReportWriterFactory;
import com.vaadin.data.Property.ValueChangeEvent;
import com.vaadin.data.Property.ValueChangeListener;
import com.vaadin.ui.AbstractSelect;
import com.vaadin.ui.AbstractSelect.ItemCaptionMode;
import com.vaadin.ui.Button;
import com.vaadin.ui.ComboBox;
import com.vaadin.ui.Component;
import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Label;
public class ReportSelector extends HorizontalLayout {
private final NewReportPresenter presenter;
private AbstractSelect selector;
private final Button button;
public ReportSelector(NewReportPresenter presenter) {
setSpacing(true);
this.presenter = presenter;
button = buildActivationButton();
selector = buildSelector();
addComponents(selector, button);
}
@Override
public void setEnabled(boolean enabled) {
selector.setEnabled(enabled);
button.setEnabled(enabled && selector.getValue() != null);
}
public String getSelectedReport() {
return (String) selector.getValue();
}
private AbstractSelect buildSelector() {
ComboBox comboBox = new ComboBox();
List<String> supportedReports = presenter.getSupportedReports();
if (supportedReports.isEmpty()) {
setVisible(false);
} else {
for (String report : supportedReports) {
comboBox.addItem(report);
comboBox.setItemCaption(report, $(report));
}
comboBox.setItemCaptionMode(ItemCaptionMode.EXPLICIT);
comboBox.setNullSelectionAllowed(false);
comboBox.addValueChangeListener(new ValueChangeListener() {
@Override
public void valueChange(ValueChangeEvent event) {
button.setEnabled(true);
}
});
}
return comboBox;
}
private Button buildActivationButton() {
return new WindowButton($("ReportSelector.go"), null, WindowConfiguration.modalDialog("75%", "75%")) {
@Override
protected Component buildWindowContent() {
NewReportWriterFactory factory = presenter.getReport(getSelectedReport());
if (factory == null) {
return new Label($("ReportViewer.noReportFactoryAvailable"));
} else {
return new ReportViewer(factory.getReportBuilder(presenter.getReportParameters(getSelectedReport())),
factory.getFilename(presenter.getReportParameters(getSelectedReport())));
}
}
@Override
protected String getWindowCaption() {
return $(getSelectedReport());
}
};
}
}