package im.actor.runtime.storage.memory; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import im.actor.runtime.storage.ListEngineRecord; import im.actor.runtime.storage.ListStorage; public class MemoryListStorage implements ListStorage { private HashMap<Long, Record> records = new HashMap<Long, Record>(); @Override public void updateOrAdd(ListEngineRecord valueContainer) { records.put(valueContainer.getKey(), new Record(valueContainer.getKey(), valueContainer.getOrder(), valueContainer.getData(), valueContainer.getQuery())); } @Override public void updateOrAdd(List<ListEngineRecord> items) { for (ListEngineRecord r : items) { updateOrAdd(r); } } @Override public void delete(long key) { records.remove(key); } @Override public void delete(long[] keys) { for (long l : keys) { delete(l); } } @Override public void clear() { records.clear(); } @Override public ListEngineRecord loadItem(long key) { Record record = records.get(key); if (record != null) { return new ListEngineRecord(record.getId(), record.getOrder(), record.getQuery(), record.getData()); } return null; } @Override public List<ListEngineRecord> loadAllItems() { ArrayList<ListEngineRecord> res = new ArrayList<ListEngineRecord>(); for (long id : records.keySet()) { Record record = records.get(id); res.add(new ListEngineRecord(id, record.getOrder(), record.getQuery(), record.getData())); } return res; } @Override public boolean isEmpty() { return getCount() == 0; } @Override public int getCount() { return records.size(); } public Long getTopKey() { if (records.size() == 0) { return null; } long res = 0; long value = Long.MIN_VALUE; for (Long key : records.keySet()) { Record record = records.get(key); if (record.getOrder() >= value) { value = record.getOrder(); res = record.getId(); } } return res; } private class Record { private long id; private long order; private byte[] data; private String query; public Record(long id, long order, byte[] data, String query) { this.id = id; this.order = order; this.data = data; this.query = query; } public long getId() { return id; } public long getOrder() { return order; } public byte[] getData() { return data; } public String getQuery() { return query; } } }