/* * * * Copyright (c) 2016. David Sowerby * * * * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with * * the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 * * * * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on * * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the * * specific language governing permissions and limitations under the License. * */ package uk.q3c.krail.core.persist.cache.common; import com.google.common.base.Ticker; import com.google.common.cache.CacheBuilder; import com.google.common.cache.RemovalListener; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import java.util.concurrent.TimeUnit; /** * Considered just using a CacheBuilder instance to hold the configure, and then invoking build() in the provider, but * using a configuration object seems marginally better * <p> * Created by David Sowerby on 25/02/15. */ public class GuavaCacheConfiguration { private Integer concurrencyLevel; private Long expireAfterAccessDuration; private TimeUnit expireAfterAccessTimeUnit = TimeUnit.MINUTES; private Long expireAfterWriteDuration; private TimeUnit expireAfterWriteTimeUnit = TimeUnit.MINUTES; private Integer initialCapacity; private Integer maximumSize; private Long maximumWeight; private boolean recordStats = false; private Long refreshAfterWriteDuration; private TimeUnit refreshAfterWriteTimeUnit = TimeUnit.MINUTES; private RemovalListener<String, Object> removalListener; private boolean softValues; private Ticker ticker; private boolean weakKeys; private boolean weakValues; public Integer getConcurrencyLevel() { return concurrencyLevel; } public Long getExpireAfterAccessDuration() { return expireAfterAccessDuration; } public TimeUnit getExpireAfterAccessTimeUnit() { return expireAfterAccessTimeUnit; } public Long getExpireAfterWriteDuration() { return expireAfterWriteDuration; } public TimeUnit getExpireAfterWriteTimeUnit() { return expireAfterWriteTimeUnit; } public Integer getInitialCapacity() { return initialCapacity; } public Integer getMaximumSize() { return maximumSize; } public Long getMaximumWeight() { return maximumWeight; } public boolean isRecordStats() { return recordStats; } public Long getRefreshAfterWriteDuration() { return refreshAfterWriteDuration; } public TimeUnit getRefreshAfterWriteTimeUnit() { return refreshAfterWriteTimeUnit; } public RemovalListener<String, Object> getRemovalListener() { return removalListener; } public boolean isSoftValues() { return softValues; } public Ticker getTicker() { return ticker; } public boolean isWeakKeys() { return weakKeys; } public boolean isWeakValues() { return weakValues; } public GuavaCacheConfiguration concurrencyLevel(int level) { concurrencyLevel = level; return this; } public GuavaCacheConfiguration expireAfterWrite(long duration) { expireAfterWriteDuration = duration; return this; } public GuavaCacheConfiguration expireAfterWrite(long duration, TimeUnit timeUnit) { expireAfterWriteDuration = duration; expireAfterWriteTimeUnit = timeUnit; return this; } public GuavaCacheConfiguration expireAfterAccess(long duration) { expireAfterAccessDuration = duration; return this; } public GuavaCacheConfiguration expireAfterAccess(long duration, TimeUnit timeUnit) { expireAfterAccessDuration = duration; expireAfterAccessTimeUnit = timeUnit; return this; } public GuavaCacheConfiguration refreshAfterWrite(long duration) { refreshAfterWriteDuration = duration; return this; } public GuavaCacheConfiguration refreshAfterWrite(long duration, TimeUnit timeUnit) { refreshAfterWriteDuration = duration; refreshAfterWriteTimeUnit = timeUnit; return this; } public GuavaCacheConfiguration recordStats() { recordStats = true; return this; } public GuavaCacheConfiguration initialCapacity(int initialCapacity) { this.initialCapacity = initialCapacity; return this; } public GuavaCacheConfiguration maximumSize(int maximumSize) { this.maximumSize = maximumSize; return this; } public GuavaCacheConfiguration maximumWeight(long maximumWeight) { this.maximumWeight = maximumWeight; return this; } public GuavaCacheConfiguration softValue() { softValues = true; return this; } public GuavaCacheConfiguration weakValue() { weakValues = true; return this; } public GuavaCacheConfiguration weakKeys() { weakKeys = true; return this; } public GuavaCacheConfiguration ticker(Ticker ticker) { this.ticker = ticker; return this; } public GuavaCacheConfiguration removalListener(RemovalListener removalListener) { this.removalListener = removalListener; return this; } @SuppressFBWarnings("RV_RETURN_VALUE_IGNORED") public CacheBuilder<Object, Object> builder() { CacheBuilder<Object, Object> builder = CacheBuilder.newBuilder(); if (initialCapacity != null) { builder.initialCapacity(initialCapacity); } if (maximumSize != null) { builder.maximumSize(maximumSize); } if (maximumWeight != null) { builder.maximumWeight(maximumWeight); } if (concurrencyLevel != null) { builder.concurrencyLevel(concurrencyLevel); } if (weakKeys) { builder.weakKeys(); } if (weakValues) { builder.weakValues(); } if (softValues) { builder.softValues(); } if (expireAfterWriteDuration != null) { builder.expireAfterWrite(expireAfterWriteDuration, expireAfterWriteTimeUnit); } if (expireAfterAccessDuration != null) { builder.expireAfterAccess(expireAfterAccessDuration, expireAfterAccessTimeUnit); } if (refreshAfterWriteDuration != null) { builder.refreshAfterWrite(refreshAfterWriteDuration, refreshAfterWriteTimeUnit); } if (ticker != null) { builder.ticker(ticker); } if (removalListener != null) { builder.removalListener(removalListener); } if (recordStats) { builder.recordStats(); } return builder; } }