package org.ripple.power.database.secrecy; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; public class IndexedMapTable<T extends IndexedTableEntry> implements Table<T> { private static final long serialVersionUID = 1L; private final Map<String, Long> tableEntryIndexMap; private final SecureTable<T> backingMapTable; public IndexedMapTable(SecureTable<T> backingMapTable) { this.backingMapTable = backingMapTable; this.tableEntryIndexMap = new ConcurrentHashMap<>(); } public T getEntry(String strId) { if (this.tableEntryIndexMap.containsKey(strId)) { Long id = this.tableEntryIndexMap.get(strId); if (id != null) { return this.backingMapTable.getEntry(id); } } return null; } @Override public synchronized void putEntry(T entry) { String strId = entry.getIndexId().toLowerCase(); if (strId == null) { throw new NullPointerException("id not null"); } this.backingMapTable.putEntry(entry); this.tableEntryIndexMap.put(entry.getIndexId(), entry.getId()); } @Override public T getEntry(Long id) { return this.backingMapTable.getEntry(id); } @Override public List<T> getAll() { return this.backingMapTable.getAll(); } @Override public String getName() { return this.backingMapTable.getName(); } }