Files
sweetgum-server/src/main/java/database/maker/MakerInfoProvider.java
P0nk f2ca67aba4 Add tests for MakerInfoProvider
These are going to be handy soon,
as I'm about to add Caffeine for caching.
2023-03-04 21:02:04 +01:00

54 lines
1.7 KiB
Java

package database.maker;
import net.jcip.annotations.ThreadSafe;
import java.util.Map;
import java.util.Optional;
import java.util.concurrent.ConcurrentHashMap;
@ThreadSafe
public class MakerInfoProvider {
private final MakerDao makerDao;
private final Map<Integer, MakerReagent> reagentCache = new ConcurrentHashMap<>();
private final Map<Integer, MakerRecipe> recipeCache = new ConcurrentHashMap<>();
public MakerInfoProvider(MakerDao makerDao) {
if (makerDao == null) {
throw new IllegalArgumentException("MakerDao is null");
}
this.makerDao = makerDao;
}
public Optional<MakerReagent> getMakerReagent(int itemId) {
final MakerReagent cachedReagent = reagentCache.get(itemId);
if (cachedReagent != null) {
return Optional.of(cachedReagent);
}
final Optional<MakerReagent> reagentFromDb = makerDao.getReagent(itemId);
if (reagentFromDb.isEmpty()) {
return Optional.empty();
}
reagentCache.put(itemId, reagentFromDb.get());
return reagentFromDb;
}
public Optional<MakerRecipe> getMakerRecipe(int itemId) {
final MakerRecipe cachedRecipe = recipeCache.get(itemId);
if (cachedRecipe != null) {
return Optional.of(cachedRecipe);
}
final Optional<MakerRecipe> recipeFromDb = makerDao.getRecipe(itemId);
if (recipeFromDb.isEmpty()) {
return Optional.empty();
}
recipeCache.put(itemId, recipeFromDb.get());
return recipeFromDb;
}
public Optional<Integer> getStimulant(int itemId) {
return getMakerRecipe(itemId).map(MakerRecipe::catalyst);
}
}