package org.netmelody.cieye.spies.jenkins; import static com.google.common.cache.CacheLoader.from; import org.netmelody.cieye.core.domain.TargetDetail; import org.netmelody.cieye.core.observation.KnownOffendersDirectory; import org.netmelody.cieye.spies.jenkins.jsondomain.Job; import com.google.common.base.Function; import com.google.common.cache.CacheBuilder; import com.google.common.cache.LoadingCache; public final class JobLaboratory { private final JenkinsCommunicator communicator; private final KnownOffendersDirectory detective; private final LoadingCache<String, JobAnalyser> analyserMap = CacheBuilder.newBuilder().build(from(toAnalysers())); public JobLaboratory(JenkinsCommunicator communicator, KnownOffendersDirectory detective) { this.communicator = communicator; this.detective = detective; } public TargetDetail analyseJob(Job jobDigest) { return analyserMap.getUnchecked(jobDigest.url).analyse(jobDigest); } public String lastBadBuildUrlFor(Job jobDigest) { if (analyserMap.asMap().containsKey(jobDigest.url)) { return analyserMap.getUnchecked(jobDigest.url).lastBadBuildUrl(); } return ""; } private Function<String, JobAnalyser> toAnalysers() { return new Function<String, JobAnalyser>() { @Override public JobAnalyser apply(String jobDigestUrl) { return new JobAnalyser(communicator, jobDigestUrl, detective); } }; } }