package com.airbnb.airpal.core.store.jobs; import com.airbnb.airpal.api.Job; import com.airbnb.airpal.core.AirpalUser; import com.google.common.collect.ImmutableSet; import java.util.Collections; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; public class InMemoryActiveJobsStore implements ActiveJobsStore { private ConcurrentMap<String, Set<Job>> activeJobs = new ConcurrentHashMap<>(); @Override public Set<Job> getJobsForUser(AirpalUser user) { if (!activeJobs.containsKey(user.getUserName())) { return Collections.emptySet(); } return ImmutableSet.copyOf(activeJobs.get(user.getUserName())); } @Override public void jobStarted(Job job) { Set<Job> jobsForUser = activeJobs.get(job.getUser()); if (jobsForUser == null) { jobsForUser = Collections.newSetFromMap(new ConcurrentHashMap<Job, Boolean>()); activeJobs.putIfAbsent(job.getUser(), jobsForUser); } activeJobs.get(job.getUser()).add(job); } @Override public void jobFinished(Job job) { Set<Job> jobsForUser = activeJobs.get(job.getUser()); if (jobsForUser == null) { return; } jobsForUser.remove(job); } }