package com.thinkbiganalytics.nifi.rest.visitor; /*- * #%L * thinkbig-nifi-rest-client-api * %% * Copyright (C) 2017 ThinkBig Analytics * %% * 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.apache.nifi.web.api.dto.ProcessGroupDTO; import java.util.Map; import java.util.Optional; import java.util.concurrent.ConcurrentHashMap; /** * A cache of the visted process groups to help save time from calling out to NiFi REST client for process group/processor information */ public class NifiConnectionOrderVisitorCache { private Map<String, NifiConnectionOrderVisitorCachedItem> cache = new ConcurrentHashMap<>(); private Map<String, ProcessGroupDTO> processGroupCache = new ConcurrentHashMap<>(); public void add(ProcessGroupDTO processGroupDTO) { processGroupCache.computeIfAbsent(processGroupDTO.getId(), groupId -> processGroupDTO); } public Map<String,ProcessGroupDTO> getProcessGroupCache() { return processGroupCache; } public Optional<ProcessGroupDTO> getProcessGroup(String processGroupId) { return Optional.ofNullable(processGroupCache.get(processGroupId)); } /** * After walking a feed flow processgroup add the Nifi process group to the cache so any subsequent calls to find this group wont have to hit the NiFi REST client */ public void add(NifiConnectionOrderVisitorCachedItem visitedGroup) { cache.computeIfAbsent(visitedGroup.getProcessGroupId(), groupId -> visitedGroup); if (visitedGroup.getProcessGroup().getDto() != null) { add(visitedGroup.getProcessGroup().getDto()); } } }