X-Git-Url: https://gerrit.onap.org/r/gitweb?a=blobdiff_plain;f=plans%2Fusecases%2Fpnf-sw-upgrade%2Fso%2Fsimulator%2Faai-simulator%2Fsrc%2Fmain%2Fjava%2Forg%2Fonap%2Fso%2Faaisimulator%2Fservice%2Fproviders%2FPnfCacheServiceProviderImpl.java;fp=plans%2Fusecases%2Fpnf-sw-upgrade%2Fso%2Fsimulator%2Faai-simulator%2Fsrc%2Fmain%2Fjava%2Forg%2Fonap%2Fso%2Faaisimulator%2Fservice%2Fproviders%2FPnfCacheServiceProviderImpl.java;h=cef6c5ab8958e42d03dfe6b1ac62553fff69567e;hb=9bbcb1be8d83cca5ba97dc4a2e86c525e51991e5;hp=0000000000000000000000000000000000000000;hpb=7405933ba6de25b33ca577e714f298b9fe82beee;p=integration%2Fcsit.git diff --git a/plans/usecases/pnf-sw-upgrade/so/simulator/aai-simulator/src/main/java/org/onap/so/aaisimulator/service/providers/PnfCacheServiceProviderImpl.java b/plans/usecases/pnf-sw-upgrade/so/simulator/aai-simulator/src/main/java/org/onap/so/aaisimulator/service/providers/PnfCacheServiceProviderImpl.java new file mode 100755 index 00000000..cef6c5ab --- /dev/null +++ b/plans/usecases/pnf-sw-upgrade/so/simulator/aai-simulator/src/main/java/org/onap/so/aaisimulator/service/providers/PnfCacheServiceProviderImpl.java @@ -0,0 +1,154 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2020 Nordix Foundation. + * ================================================================================ + * 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. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ +package org.onap.so.aaisimulator.service.providers; + +import org.onap.aai.domain.yang.v15.Pnf; +import org.onap.so.aaisimulator.utils.ShallowBeanCopy; +import org.onap.so.simulator.cache.provider.AbstractCacheServiceProvider; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cache.Cache; +import org.springframework.cache.CacheManager; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Optional; +import java.util.concurrent.ConcurrentHashMap; + +import static org.onap.so.aaisimulator.utils.CacheName.PNF_CACHE; + +/** + * @author Raj Gumma (raj.gumma@est.tech) + */ +@Service +public class PnfCacheServiceProviderImpl extends AbstractCacheServiceProvider implements PnfCacheServiceProvider { + + + private static final Logger LOGGER = LoggerFactory.getLogger(PnfCacheServiceProvider.class); + + private final Cache cache; + + @Autowired + public PnfCacheServiceProviderImpl(final CacheManager cacheManager) { + super(cacheManager); + cache = getCache(PNF_CACHE.getName()); + } + + @Override + public void putPnf(final String pnfId, final Pnf pnf) { + LOGGER.info("Adding pnf: {} with key: {} in cache ...", pnf, pnfId); + cache.put(pnfId, pnf); + } + + @Override + public Optional getPnf(final String pnfId) { + LOGGER.info("getting Pnf from cache using key: {}", pnfId); + final Pnf value = cache.get(pnfId, Pnf.class); + return Optional.ofNullable(value); + } + + @Override + public Optional getPnfId(final String pnfName) { + final Object nativeCache = cache.getNativeCache(); + if (nativeCache instanceof ConcurrentHashMap) { + @SuppressWarnings("unchecked") final ConcurrentHashMap concurrentHashMap = + (ConcurrentHashMap) nativeCache; + for (final Object key : concurrentHashMap.keySet()) { + final Optional optional = getPnf(key.toString()); + if (optional.isPresent()) { + final String cachedPnfName = optional.get().getPnfName(); + if (cachedPnfName != null && cachedPnfName.equals(cachedPnfName)) { + final String pnfId = optional.get().getPnfId(); + LOGGER.info("Found matching pnf for name: {}, pnf-id: {}", cachedPnfName, pnfId); + return Optional.of(pnfId); + } + } + } + } + return Optional.empty(); + } + + @Override + public boolean patchPnf(final String pnfId, final Pnf pnf) { + final Optional optional = getPnf(pnfId); + if (optional.isPresent()) { + final Pnf cachedPnf = optional.get(); + try { + ShallowBeanCopy.copy(pnf, cachedPnf); + return true; + } catch (final Exception exception) { + LOGGER.error("Unable to update Pnf for pnfId: {}", pnfId, exception); + } + } + LOGGER.error("Unable to find Pnf for pnfID : {}", pnfId); + return false; + } + + @Override + public List getPnfs(String selfLink) { + final Object nativeCache = cache.getNativeCache(); + if (nativeCache instanceof ConcurrentHashMap) { + @SuppressWarnings("unchecked") final ConcurrentHashMap concurrentHashMap = + (ConcurrentHashMap) nativeCache; + final List result = new ArrayList<>(); + + concurrentHashMap.keySet().stream().forEach(key -> { + final Optional optional = getPnf(key.toString()); + if (optional.isPresent()) { + final Pnf pnf = optional.get(); + final String pnfSelfLink = pnf.getSelflink(); + final String pnfId = pnf.getSelflink(); + + if (pnfSelfLink != null && pnfSelfLink.equals(selfLink)) { + LOGGER.info("Found matching pnf for selflink: {}, pnf-id: {}", pnfSelfLink, + pnfId); + result.add(pnf); + } + } + }); + return result; + } + LOGGER.error("No match found for selflink: {}", selfLink); + return Collections.emptyList(); + } + + @Override + public boolean deletePnf(String pnfId, String resourceVersion) { + final Optional optional = getPnf(pnfId); + if (optional.isPresent()) { + final Pnf pnf = optional.get(); + if (pnf.getResourceVersion() != null && pnf.getResourceVersion().equals(resourceVersion)) { + LOGGER.info("Will evict pnf from cache with pnfId: {}", pnf.getPnfId()); + cache.evict(pnfId); + return true; + } + } + LOGGER.error("Unable to find Pnf for pnfId: {} and resourceVersion: {} ...", pnfId, resourceVersion); + return false; + } + + @Override + public void clearAll() { + clearCache(cache.getName()); + } +}