package com.constellio.app.ui.pages.events; import java.util.List; import java.util.Map; import org.apache.commons.lang3.StringUtils; import com.constellio.app.ui.application.NavigatorConfigurationService; import com.constellio.app.ui.entities.MetadataValueVO; import com.constellio.app.ui.entities.RecordVO; import com.constellio.app.ui.framework.buttons.DisplayWindowButton; import com.constellio.app.ui.framework.components.table.RecordVOTable; import com.constellio.app.ui.framework.components.table.columns.RecordVOTableColumnsManager; import com.constellio.app.ui.framework.components.table.columns.TableColumnsManager; import com.constellio.app.ui.framework.containers.RecordVOLazyContainer; import com.constellio.app.ui.framework.data.RecordVODataProvider; import com.constellio.app.ui.framework.data.event.EventTypeUtils; import com.constellio.app.ui.framework.items.RecordVOItem; import com.constellio.app.ui.pages.base.BaseViewImpl; import com.constellio.app.ui.params.ParamUtils; import com.constellio.model.services.records.RecordServicesRuntimeException; import com.vaadin.data.Container; import com.vaadin.data.Item; import com.vaadin.event.ItemClickEvent; import com.vaadin.event.ItemClickEvent.ItemClickListener; import com.vaadin.navigator.ViewChangeListener.ViewChangeEvent; import com.vaadin.ui.Button; import com.vaadin.ui.Button.ClickListener; import com.vaadin.ui.Component; import com.vaadin.ui.Table; import com.vaadin.ui.VerticalLayout; public class EventViewImpl extends BaseViewImpl implements EventView { public static final String EVENT_TABLE_STYLE = "selenium-event-table"; private EventPresenter presenter; private Table table; private Map<String, String> parameters; public static final String OPEN_SESSION = "open_session"; public EventViewImpl() { this.presenter = new EventPresenter(this); } @Override protected Component buildMainComponent(ViewChangeEvent event) { VerticalLayout page = new VerticalLayout(); page.setSizeFull(); page.setSpacing(true); table = buildTable(); page.addComponent(table); return page; } private Table buildTable() { final RecordVODataProvider dataProvider = presenter.getDataProvider(); final String eventType = presenter.getEventType(); Container container = new RecordVOLazyContainer(dataProvider); String title = EventTypeUtils.getEventTypeCaption(eventType) + " (" + container.size() + ")"; final Boolean isRecordEvent = EventTypeUtils.isRecordEvent(eventType); final RecordVOTable table = new RecordVOTable(title, container, isRecordEvent) { @Override protected Component buildMetadataComponent(MetadataValueVO metadataValue, RecordVO recordVO) { if (presenter.isDeltaMetadata(metadataValue)) { return displayButton(metadataValue); } else { return super.buildMetadataComponent(metadataValue, recordVO); } } @Override protected RecordVO getRecordVOForTitleColumn(Item item) { try { if (isRecordEvent) { RecordVO eventVO = ((RecordVOItem) item).getRecord(); return presenter.getLinkedRecordVO(eventVO); } else { return super.getRecordVOForTitleColumn(item); } } catch (RecordServicesRuntimeException.NoSuchRecordWithId e) { return super.getRecordVOForTitleColumn(item); } } @Override protected String getTitleForRecordVO(RecordVO titleRecordVO, String prefix, String title) { if (isRecordEvent) { title += " (" + titleRecordVO.getId() + ")"; } return super.getTitleForRecordVO(titleRecordVO, prefix, title); } @Override public boolean isContextMenuPossible() { return false; } @Override protected TableColumnsManager newColumnsManager() { if (OPEN_SESSION.equalsIgnoreCase(presenter.getEventType())) { return new RecordVOTableColumnsManager() { @Override protected List<String> getDefaultVisibleColumnIds(Table table) { List<String> defaultVisibleColumnIds = super.getDefaultVisibleColumnIds(table); String usernameColumnId = "event_default_username"; String titleColumnId = "event_default_title"; if (!defaultVisibleColumnIds.contains(usernameColumnId)) { defaultVisibleColumnIds.add(usernameColumnId); defaultVisibleColumnIds.remove(titleColumnId); } return defaultVisibleColumnIds; } }; } else { return super.newColumnsManager(); } } }; if (isRecordEvent) { table.addItemClickListener(new ItemClickListener() { @Override public void itemClick(ItemClickEvent event) { Object itemId = event.getItemId(); RecordVOItem recordVOItem = (RecordVOItem) table.getItem(itemId); RecordVO recordVO = recordVOItem.getRecord(); presenter.recordLinkClicked(recordVO); } }); } // table.setPageLength(table.getItemIds().size()); table.setWidth("100%"); table.addStyleName(EVENT_TABLE_STYLE); return table; } private static Component displayButton(MetadataValueVO metadataValue) { final String delta = (metadataValue.getValue() != null) ? metadataValue.getValue().toString() : ""; DisplayWindowButton displayButton = new DisplayWindowButton("", delta) { @Override public boolean isVisible() { return super.isVisible() && StringUtils.isNotBlank(delta); } }; return displayButton; } @Override public Map<String, String> getParameters() { return parameters; } @Override protected String getTitle() { return EventTypeUtils.getEventTypeCaption(presenter.getEventType()); } public Table getTable() { return table; } @Override protected ClickListener getBackButtonClickListener() { return new ClickListener() { @Override public void buttonClick(Button.ClickEvent event) { presenter.backButtonClick(); } }; } @Override protected void initBeforeCreateComponents(ViewChangeEvent event) { String paramString = event.getParameters(); String viewNameAndParameters = NavigatorConfigurationService.EVENT_DISPLAY + "/" + paramString; parameters = ParamUtils.getParamsMap(viewNameAndParameters); } @Override protected boolean isFullWidthIfActionMenuAbsent() { return true; } }