
org.rapidoid.plugins.cache.AbstractCache Maven / Gradle / Ivy
package org.rapidoid.plugins.cache;
/*
* #%L
* rapidoid-plugins
* %%
* Copyright (C) 2014 - 2015 Nikolche Mihajlovski and contributors
* %%
* 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.
* #L%
*/
import org.rapidoid.annotation.Authors;
import org.rapidoid.annotation.Since;
import org.rapidoid.concurrent.Callback;
import org.rapidoid.concurrent.Future;
import org.rapidoid.concurrent.Promise;
import org.rapidoid.concurrent.Promises;
import org.rapidoid.u.U;
@Authors("Nikolche Mihajlovski")
@Since("4.1.0")
public abstract class AbstractCache implements ICache {
protected final String name;
protected final long timeToLiveMs;
protected final boolean allowsDifferentTTLThanInitialized;
public AbstractCache(String name, long timeToLiveMs, boolean allowsDifferentTTLThanInitialized) {
this.name = name;
this.timeToLiveMs = timeToLiveMs;
this.allowsDifferentTTLThanInitialized = allowsDifferentTTLThanInitialized;
}
@Override
public Future set(K key, V value, long timeToLiveMs) {
validateTTL(timeToLiveMs);
Promise promise = Promises.create();
set(key, value, timeToLiveMs, promise);
return promise;
}
@Override
public Future get(K key) {
Promise promise = Promises.create();
get(key, promise);
return promise;
}
@Override
public void set(K key, V value, Callback callback) {
set(key, value, timeToLiveMs, callback);
}
@Override
public Future set(K key, V value) {
return set(key, value, timeToLiveMs);
}
@Override
public void set(K key, V value, long timeToLiveMs, Callback callback) {
validateTTL(timeToLiveMs);
doSet(key, value, timeToLiveMs, callback);
}
@Override
public void get(K key, Callback callback) {
doGet(key, callback);
}
private void validateTTL(long ttl) {
U.argMust(
this.allowsDifferentTTLThanInitialized || ttl == this.timeToLiveMs,
"The cache implementation doesn't support different timeToLiveMs value than the initially specified: %s",
this.allowsDifferentTTLThanInitialized);
}
protected abstract void doSet(K key, V value, long timeToLiveMs, Callback callback);
protected abstract void doGet(K key, Callback callback);
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy