package org.netmelody.cieye.server.observation; import java.util.concurrent.ExecutionException; import org.netmelody.cieye.core.logging.LogKeeper; import org.netmelody.cieye.core.logging.Logbook; import org.netmelody.cieye.server.CiEyeNewVersionChecker; import com.google.common.base.Function; import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheLoader; import com.google.common.cache.LoadingCache; import static java.lang.Boolean.TRUE; import static java.util.concurrent.TimeUnit.MINUTES; public final class GovernmentReport implements CiEyeNewVersionChecker { private static final Logbook LOG = LogKeeper.logbookFor(GovernmentReport.class); private final CiEyeNewVersionChecker checker; private final LoadingCache<Boolean, String> report = CacheBuilder.newBuilder() .expireAfterWrite(10, MINUTES) .build(CacheLoader.from(fetchReport())); public GovernmentReport(CiEyeNewVersionChecker checker) { this.checker = checker; } private Function<Boolean, String> fetchReport() { return new Function<Boolean, String>() { @Override public String apply(Boolean input) { return checker.getLatestVersion(); } }; } @Override public String getLatestVersion() { try { return report.get(TRUE); } catch (ExecutionException e) { LOG.error("Unable to determine latest version of CI-Eye", e); return ""; } } }