package com.constellio.app.modules.es.ui.pages;
import static com.constellio.app.ui.i18n.i18n.$;
import java.util.ArrayList;
import java.util.List;
import com.constellio.app.ui.framework.buttons.BaseButton;
import com.constellio.app.ui.framework.components.BaseDisplay;
import com.constellio.app.ui.framework.components.BaseDisplay.CaptionAndComponent;
import com.constellio.app.ui.framework.components.fields.BaseTextField;
import com.constellio.app.ui.framework.components.table.BasePagedTable;
import com.constellio.app.ui.framework.containers.RecordVOWithDistinctSchemaTypesLazyContainer;
import com.constellio.app.ui.pages.base.BaseViewImpl;
import com.vaadin.navigator.ViewChangeListener.ViewChangeEvent;
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;
public class ConnectorReportViewImpl extends BaseViewImpl implements ConnectorReportView {
private ConnectorReportPresenter presenter;
private BasePagedTable<RecordVOWithDistinctSchemaTypesLazyContainer> table;
private HorizontalLayout tableControls;
private BaseTextField filterField;
private VerticalLayout mainLayout;
private String title;
public ConnectorReportViewImpl() {
presenter = new ConnectorReportPresenter(this);
}
@Override
protected void initBeforeCreateComponents(ViewChangeEvent event) {
super.initBeforeCreateComponents(event);
presenter.forParams(event.getParameters());
}
@Override
protected Component buildMainComponent(ViewChangeEvent event) {
mainLayout = new VerticalLayout();
mainLayout.setSpacing(true);
BaseDisplay statsDisplay = buildStatsDisplay();
HorizontalLayout filterComponent = buildFilterComponent();
RecordVOWithDistinctSchemaTypesLazyContainer container = new RecordVOWithDistinctSchemaTypesLazyContainer(
presenter.getDataProvider(), presenter.getReportMetadataList());
table = buildTable(container);
table.setColumnHeader("url", $("ConnectorReportView.url"));
table.setColumnHeader("fetchedDateTime", $("ConnectorReportView.fetchedDateTime"));
table.setColumnHeader("errorCode", $("ConnectorReportView.errorCode"));
table.setColumnHeader("errorMessage", $("ConnectorReportView.errorMessage"));
table.setColumnHeader("subject", $("ConnectorReportView.subject"));
table.setColumnHeader("downloadTime", $("ConnectorReportView.downloadTime"));
table.setColumnHeader("copyOf", $("ConnectorReportView.copyOf"));
table.setColumnHeader("title", $("ConnectorReportView.title"));
table.setColumnHeader("type", $("ConnectorReportView.type"));
tableControls = table.createControls();
mainLayout.addComponents(statsDisplay, filterComponent, table, tableControls);
return mainLayout;
}
private HorizontalLayout buildFilterComponent() {
HorizontalLayout filterComponent = new HorizontalLayout();
filterComponent.setSpacing(true);
filterField = new BaseTextField();
BaseButton filterButton = new BaseButton($("ConnectorReportView.filterButton")) {
@Override
protected void buttonClick(ClickEvent event) {
presenter.filterButtonClicked();
}
};
filterComponent.addComponents(filterField, filterButton);
return filterComponent;
}
private BaseDisplay buildStatsDisplay() {
List<CaptionAndComponent> components = new ArrayList<>();
components.add(new CaptionAndComponent(new Label($("ConnectorReportView.totalDocsFound")),
new Label(presenter.getTotalDocumentsCount().toString())));
components.add(new CaptionAndComponent(new Label($("ConnectorReportView.fetchedDocsFound")),
new Label(presenter.getFetchedDocumentsCount().toString())));
components.add(new CaptionAndComponent(new Label($("ConnectorReportView.unfetchedDocsFound")),
new Label(presenter.getUnfetchedDocumentsCount().toString())));
return new BaseDisplay(components);
}
private BasePagedTable buildTable(RecordVOWithDistinctSchemaTypesLazyContainer container) {
table = new BasePagedTable<>(container);
table.addStyleName("connector-report-table");
table.setContainerDataSource(container);
table.setWidth("100%");
return table;
}
@Override
public void filterTable() {
RecordVOWithDistinctSchemaTypesLazyContainer container = new RecordVOWithDistinctSchemaTypesLazyContainer(
presenter.getFilteredDataProvider(filterField.getValue()), presenter.getReportMetadataList());
BasePagedTable<RecordVOWithDistinctSchemaTypesLazyContainer> newTable = buildTable(container);
newTable.setColumnHeader("url", $("ConnectorReportView.url"));
newTable.setColumnHeader("fetchedDateTime", $("ConnectorReportView.fetchedDateTime"));
newTable.setColumnHeader("errorCode", $("ConnectorReportView.errorCode"));
newTable.setColumnHeader("errorMessage", $("ConnectorReportView.errorMessage"));
HorizontalLayout newTableControls = newTable.createControls();
mainLayout.replaceComponent(table, newTable);
mainLayout.replaceComponent(tableControls, newTableControls);
table = newTable;
tableControls = newTableControls;
}
@Override
protected String getTitle() {
return title;
}
@Override
public void setTitle(String title) {
this.title = title;
}
@Override
protected ClickListener getBackButtonClickListener() {
return new ClickListener() {
@Override
public void buttonClick(ClickEvent event) {
presenter.backButtonClicked();
}
};
}
}