package dgm.modules.fsmon; import com.google.inject.Provider; /** * Adapter around a provider to cache it's value until you call invalidate */ class CachedProvider<T> implements Provider<T> { final Provider<T> sourceProvider; // current value is cached here T cached = null; public CachedProvider(Provider<T> sourceProvider) { this.sourceProvider = sourceProvider; invalidate(); } public T get() { return cached; } public boolean invalidate() { // create new cached final T d = sourceProvider.get(); // return old config if loading failed if (d == null) return false; cached = d; return true; } }