package com.constellio.app.ui.pages.events; import static com.constellio.app.ui.i18n.i18n.$; import java.util.Date; import com.constellio.app.ui.framework.buttons.DisplayButton; import com.constellio.app.ui.framework.components.DateRangePanel; import com.constellio.app.ui.framework.components.EventByIdSearchPanel; import com.constellio.app.ui.framework.components.EventReportGenerationPanel; import com.constellio.app.ui.framework.containers.ButtonsContainer; import com.constellio.app.ui.framework.containers.ButtonsContainer.ContainerButton; import com.constellio.app.ui.framework.containers.event.EventCategoryContainer; import com.constellio.app.ui.framework.data.event.EventStatistics; import com.constellio.app.ui.pages.base.BaseViewImpl; import com.vaadin.data.Container; import com.vaadin.event.ItemClickEvent; import com.vaadin.event.ItemClickEvent.ItemClickListener; import com.vaadin.navigator.ViewChangeListener.ViewChangeEvent; import com.vaadin.shared.ui.label.ContentMode; 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.Label; import com.vaadin.ui.Panel; import com.vaadin.ui.Table; import com.vaadin.ui.VerticalLayout; public class BaseEventCategoryViewImpl extends BaseViewImpl implements BaseEventCategoryView { public static final String TABLE_STYLE_CODE = "seleniumTableCode"; private static final String PROPERTY_BUTTONS = "buttons"; BaseEventCategoryPresenter presenter; private Panel reportGenerationPanel; private Panel fetchByIdPanel; private Panel dateRangePanel; private EventViewParameters eventViewParameters; VerticalLayout viewLayout; Table statisticsTable; public BaseEventCategoryViewImpl() { this.presenter = new BaseEventCategoryPresenter(this); } @Override final protected Component buildMainComponent(ViewChangeEvent event) { viewLayout = new VerticalLayout(); if (presenter.hasFetchById(eventViewParameters.getEventCategory())) { fetchByIdPanel = buildFetchByIdPanel(eventViewParameters.getEventId()); viewLayout.addComponent(fetchByIdPanel); viewLayout.setComponentAlignment(fetchByIdPanel, Alignment.MIDDLE_CENTER); } if (presenter.isByRangeDate(eventViewParameters.getEventCategory())) { viewLayout.addComponent(new Label(" ", ContentMode.HTML)); dateRangePanel = buildDateRangePanel(eventViewParameters.getEventStartDate(), eventViewParameters.getEventEndDate()); dateRangePanel.setWidthUndefined(); viewLayout.addComponent(dateRangePanel); viewLayout.setComponentAlignment(dateRangePanel, Alignment.MIDDLE_CENTER); } if (presenter.isWithReportPanel(eventViewParameters.getEventCategory())) { viewLayout.addComponent(new Label(" ", ContentMode.HTML)); reportGenerationPanel = buildReportGenerationPanel(eventViewParameters.getEventCategory()); reportGenerationPanel.setWidthUndefined(); viewLayout.addComponent(reportGenerationPanel); viewLayout.setComponentAlignment(reportGenerationPanel, Alignment.MIDDLE_CENTER); } statisticsTable = buildStatisticsTable(); viewLayout.addComponent(statisticsTable); viewLayout.setExpandRatio(statisticsTable, 1); return viewLayout; } private Panel buildDateRangePanel(Date startDate, Date endDate) { return new DateRangePanel(startDate, endDate) { @Override protected void okButtonClick() { refreshTable(); } }; } private Panel buildFetchByIdPanel(String id) { return new EventByIdSearchPanel(eventViewParameters.getEventCategory(), id); } private Panel buildReportGenerationPanel(EventCategory eventCategory) { return new EventReportGenerationPanel(eventCategory) { @Override protected String getReportTitle(EventCategory eventCategory) { return presenter.getReportTitle(eventCategory); } }; } private Table buildStatisticsTable() { final EventsCategoryDataProvider dataProvider = getEventListDataProvider(); if (dataProvider.size() == 0) { Table table = new Table(); table.setVisible(false); return table; } Container container = new EventCategoryContainer(dataProvider); ButtonsContainer buttonsContainer = new ButtonsContainer(container, PROPERTY_BUTTONS); addButtons(dataProvider, buttonsContainer); container = buttonsContainer; Table table = new Table("", container); table.setColumnHeader(EventCategoryContainer.LABEL, $("title")); table.setColumnHeader(EventCategoryContainer.VALUE, $("value")); table.setPageLength(table.getItemIds().size()); table.setWidth("100%"); table.setSelectable(true); table.setImmediate(true); table.setColumnHeader(PROPERTY_BUTTONS, ""); table.setColumnWidth(PROPERTY_BUTTONS, 120); table.addItemClickListener(new ItemClickListener() { @Override public void itemClick(ItemClickEvent event) { Integer index = (Integer) event.getItemId(); displayButtonClicked(index); } }); table.addStyleName(TABLE_STYLE_CODE); return table; } private void addButtons(final EventsCategoryDataProvider provider, ButtonsContainer buttonsContainer) { buttonsContainer.addButton(new ContainerButton() { @Override protected Button newButtonInstance(final Object itemId, ButtonsContainer<?> container) { DisplayButton displayButton = new DisplayButton() { @Override protected void buttonClick(ClickEvent event) { EventStatistics entity = provider.getEventStatistics((Integer) itemId); Float value = entity.getValue(); if(value != 0){ displayButtonClicked((Integer) itemId); } } }; EventStatistics entity = provider.getEventStatistics((Integer) itemId); Float value = entity.getValue(); boolean visible = value != 0; displayButton.setVisible(visible); return displayButton; } }); } public void refreshTable() { Table newTable = buildStatisticsTable(); viewLayout.replaceComponent(statisticsTable, newTable); statisticsTable = newTable; } @Override public Date getEventStartDate() { if (dateRangePanel == null) { return eventViewParameters.getEventStartDate(); } if (dateRangePanel instanceof DateRangePanel) { return ((DateRangePanel) dateRangePanel).getEventStartDate(); } else { return null; } } @Override public Date getEventEndDate() { if (dateRangePanel == null) { return eventViewParameters.getEventEndDate(); } if (dateRangePanel instanceof DateRangePanel) { return ((DateRangePanel) dateRangePanel).getEventEndDate(); } else { return null; } } @Override public String getEventId() { if (fetchByIdPanel == null) { return eventViewParameters.getEventId(); } else { return ((EventByIdSearchPanel) fetchByIdPanel).getIdValue(); } } protected void displayButtonClicked(Integer itemId) { presenter.displayEvent(itemId, eventViewParameters.getEventCategory()); } protected EventsCategoryDataProvider getEventListDataProvider() { return presenter.getEventListDataProvider(eventViewParameters.getEventCategory()); } @Override protected ClickListener getBackButtonClickListener() { return new ClickListener() { @Override public void buttonClick(ClickEvent event) { presenter.eventAudit(); } }; } @Override protected String getTitle() { String title = presenter.getTitle(eventViewParameters.getEventCategory()); return title; } @Override protected void initBeforeCreateComponents(ViewChangeEvent event) { eventViewParameters = new EventViewParameters(event.getParameters()); } }