package com.codecademy.eventhub.storage; import com.codecademy.eventhub.base.DB; import java.io.Closeable; import java.io.IOException; public class IdMap implements Closeable { private static final String ID_KEY = "__eventtracker__id"; private final DB db; private int nextAvailableId; private IdMap(DB db, int nextAvailableId) { this.db = db; this.nextAvailableId = nextAvailableId; } public int incrementNextAvailableId() { int availableId = nextAvailableId; db.put(ID_KEY, "" + (++nextAvailableId)); return availableId; } public void put(String externalId, int id) { db.put(externalId, id); } public Integer get(String externalUserId) { String value = db.get(externalUserId); if (value == null) { //noinspection ReturnOfNull return null; } return Integer.parseInt(value); } public int getCurrentId() { return nextAvailableId; } @Override public void close() throws IOException { db.close(); } public static IdMap create(DB db) { String idString = db.get(ID_KEY); int currentId = idString == null ? 0 : Integer.parseInt(idString); return new IdMap(db, currentId); } }