package org.netmelody.cieye.spies.jenkins; import static com.google.common.cache.CacheLoader.from; import java.util.concurrent.TimeUnit; import org.netmelody.cieye.spies.jenkins.jsondomain.BuildDetail; import com.google.common.base.Function; import com.google.common.cache.CacheBuilder; import com.google.common.cache.LoadingCache; public final class BuildDetailFetcher { private final LoadingCache<String, BuildDetail> buildDetails; public BuildDetailFetcher(final JenkinsCommunicator communicator) { buildDetails = CacheBuilder.newBuilder() .expireAfterWrite(2, TimeUnit.SECONDS) .build(from(new Function<String, BuildDetail>() { public BuildDetail apply(String buildUrl) { return communicator.buildDetailsFor(buildUrl); } })); } public BuildDetail detailsOf(String buildUrl) { return buildDetails.getUnchecked(buildUrl); } }