package com.constellio.app.ui.pages.base; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; public abstract class BaseSessionContext implements SessionContext { private List<SelectedRecordIdsChangeListener> selectedRecordIdsChangeListeners = new ArrayList<>(); @Override public List<String> getSelectedRecordIds() { return Collections.unmodifiableList(ensureSelectedRecordIds()); } @Override public Map<String, Long> getSelectedRecordSchemaTypeCodes() { return Collections.unmodifiableMap(ensureSelectedRecordSchemaTypeCodes()); } @Override public void addSelectedRecordId(String recordId, String schemaTypeCode) { List<String> selectedRecordIds = ensureSelectedRecordIds(); Map<String, Long> selectedRecordSchemaTypeCodes = ensureSelectedRecordSchemaTypeCodes(); if (!selectedRecordIds.contains(recordId)) { selectedRecordIds.add(recordId); if (selectedRecordSchemaTypeCodes.containsKey(schemaTypeCode)) { selectedRecordSchemaTypeCodes.put(schemaTypeCode, selectedRecordSchemaTypeCodes.get(schemaTypeCode) + 1); } else { selectedRecordSchemaTypeCodes.put(schemaTypeCode, 1L); } for (SelectedRecordIdsChangeListener listener : getSelectedRecordIdsChangeListeners()) { listener.recordIdAdded(recordId); } } } @Override public void removeSelectedRecordId(String recordId, String schemaTypeCode) { List<String> selectedRecordIds = ensureSelectedRecordIds(); if(selectedRecordIds.contains(recordId)) { selectedRecordIds.remove(recordId); Map<String, Long> selectedRecordSchemaTypeCodes = ensureSelectedRecordSchemaTypeCodes(); Long selectionCountForSchemaType = selectedRecordSchemaTypeCodes.get(schemaTypeCode); if (selectionCountForSchemaType == null) { selectionCountForSchemaType = 0L; } selectedRecordSchemaTypeCodes.put(schemaTypeCode, --selectionCountForSchemaType); if (selectionCountForSchemaType <= 0) { selectedRecordSchemaTypeCodes.remove(schemaTypeCode); } for (SelectedRecordIdsChangeListener listener : getSelectedRecordIdsChangeListeners()) { listener.recordIdRemoved(recordId); } } } @Override public void clearSelectedRecordIds() { List<String> selectedRecordIds = ensureSelectedRecordIds(); selectedRecordIds.clear(); Map<String, Long> selectedRecordSchemaTypeCodes = ensureSelectedRecordSchemaTypeCodes(); selectedRecordSchemaTypeCodes.clear(); for (SelectedRecordIdsChangeListener listener : getSelectedRecordIdsChangeListeners()) { listener.selectionCleared(); } } public List<SelectedRecordIdsChangeListener> getSelectedRecordIdsChangeListeners() { return Collections.unmodifiableList(selectedRecordIdsChangeListeners); } public void addSelectedRecordIdsChangeListener(SelectedRecordIdsChangeListener listener) { this.selectedRecordIdsChangeListeners.add(listener); } public void removeSelectedRecordIdsChangeListener(SelectedRecordIdsChangeListener listener) { this.selectedRecordIdsChangeListeners.remove(listener); } protected abstract List<String> ensureSelectedRecordIds(); protected abstract Map<String, Long> ensureSelectedRecordSchemaTypeCodes(); }