package com.constellio.model.services.records; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import com.constellio.model.entities.records.Record; import com.constellio.model.entities.records.Transaction; public class RecordProvider { RecordServices recordServices; Map<String, Record> memoryList; Transaction transaction; public RecordProvider(RecordServices recordServices) { this(recordServices, null, Collections.<Record>emptyList(), null); } public RecordProvider(RecordServices recordServices, RecordProvider recordProvider, List<Record> records, Transaction transaction) { this.recordServices = recordServices; this.transaction = transaction; this.memoryList = new HashMap<>(); if (transaction != null) { memoryList.putAll(transaction.getReferencedRecords()); } if (recordProvider != null) { this.memoryList.putAll(recordProvider.memoryList); } if (records != null) { for (Record record : records) { this.memoryList.put(record.getId(), record); } } } public Record getRecord(String id) { Record record = memoryList.get(id); if (record == null && transaction != null) { record = transaction.getRecord(id); } if (record == null) { record = recordServices.getDocumentById(id); memoryList.put(id, record); } return record; } public boolean hasRecordInMemoryList(Object referenceValue) { if (referenceValue instanceof String) { return memoryList.containsKey((String) referenceValue); } else if (referenceValue instanceof List) { for (String referenceItem : (List<String>) referenceValue) { if (memoryList.containsKey(referenceItem)) { return true; } } } return false; } }