package com.constellio.app.ui.framework.components.table; import java.util.Collection; import java.util.HashMap; import java.util.Map; import com.constellio.app.ui.application.ConstellioUI; import com.constellio.app.ui.framework.items.RecordVOItem; import com.constellio.app.ui.pages.base.SessionContext; import com.constellio.app.ui.pages.base.SessionContext.SelectedRecordIdsChangeListener; import com.vaadin.data.Item; import com.vaadin.ui.Table; public abstract class RecordVOSelectionTableAdapter extends SelectionTableAdapter implements SelectedRecordIdsChangeListener { private Map<String, Object> recordIdsToItemIdsMap = new HashMap<>(); public RecordVOSelectionTableAdapter() { this(null); } public RecordVOSelectionTableAdapter(Table table) { super(table); } @Override public void attach() { SessionContext sessionContext = ConstellioUI.getCurrentSessionContext(); boolean listenerAlreadyAdded = false; for (SelectedRecordIdsChangeListener listener : sessionContext.getSelectedRecordIdsChangeListeners()) { if (listener == this) { listenerAlreadyAdded = true; } } if (!listenerAlreadyAdded) { sessionContext.addSelectedRecordIdsChangeListener(this); } super.attach(); } @Override public void detach() { SessionContext sessionContext = ConstellioUI.getCurrentSessionContext(); sessionContext.removeSelectedRecordIdsChangeListener(this); super.detach(); } private Object getItemId(String recordId) { Object itemId = recordIdsToItemIdsMap.get(recordId); if (itemId == null) { for (Object tableItemId : getLoadedItemIds()) { Item item = table.getItem(tableItemId); if (item instanceof RecordVOItem) { RecordVOItem recordVOItem = (RecordVOItem) table.getItem(tableItemId); String tableRecordId = recordVOItem.getRecord().getId(); if (tableRecordId.equals(recordId)) { itemId = tableItemId; recordIdsToItemIdsMap.put(recordId, itemId); break; } } } } return itemId; } private Collection<?> getLoadedItemIds() { return table.getVisibleItemIds(); } @Override public void recordIdAdded(String recordId) { if (table != null) { Object itemId = getItemId(recordId); if (itemId != null && !Boolean.TRUE.equals(isChecked(itemId))) { setChecked(itemId, true); } } } @Override public void recordIdRemoved(String recordId) { if (table != null) { Object itemId = getItemId(recordId); if (itemId != null && !Boolean.FALSE.equals(isChecked(itemId))) { setChecked(itemId, false); } } } @Override public void selectionCleared() { if (table != null) { for (Object itemId : getLoadedItemIds()) { if (!Boolean.FALSE.equals(isChecked(itemId))) { setChecked(itemId, false); } } } } }