digital.nedra.commons.starter.dao.dao.AbstractCacheableEntityDao Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of subentity-jdbc-dao-starter Show documentation
Show all versions of subentity-jdbc-dao-starter Show documentation
Spring Boot starter for storing data as an entity-subentity hierarchy with a parent-child relationship.
/*
* Copyright 2022 Nedra Team
*
* 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 digital.nedra.commons.starter.dao.dao;
import static java.util.Objects.nonNull;
import digital.nedra.commons.starter.dao.domain.Content;
import digital.nedra.commons.starter.dao.domain.Entity;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import lombok.AccessLevel;
import lombok.RequiredArgsConstructor;
import org.springframework.cache.Cache;
@RequiredArgsConstructor(access = AccessLevel.PROTECTED)
public abstract class AbstractCacheableEntityDao> {
private final Cache cache;
protected List getFromCache(List ids,
Map actualSubEntityVersions,
Map missingIds) {
List result = new ArrayList<>();
for (String i : ids) {
@SuppressWarnings("unchecked")
T fromCache = (T) Optional.ofNullable(cache.get(i))
.map(Cache.ValueWrapper::get)
.orElse(null);
if (nonNull(fromCache) && fromCache.getVersion().equals(actualSubEntityVersions.get(i))) {
result.add(fromCache);
} else {
missingIds.put(i, actualSubEntityVersions.get(i));
}
}
return result;
}
protected void updateCacheItem(T entityForUpdate) {
cache.put(entityForUpdate.getId(), entityForUpdate);
}
protected void updateCacheItem(String key, T value) {
cache.put(key, value);
}
}