/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You 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 org.apache.nifi.util; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; import org.apache.nifi.controller.status.ConnectionStatus; import org.apache.nifi.controller.status.PortStatus; import org.apache.nifi.controller.status.ProcessGroupStatus; import org.apache.nifi.controller.status.ProcessorStatus; import org.apache.nifi.controller.status.RemoteProcessGroupStatus; /** * ComponentStatusReport is a util class that can be used to "flatten" a ProcessGroupStatus into a collection of Map's so that retrieval of a Status for a particular component is very efficient */ public class ComponentStatusReport { private final Map<String, ProcessGroupStatus> groupMap = new HashMap<>(); private final Map<String, ProcessorStatus> processorMap = new HashMap<>(); private final Map<String, ConnectionStatus> connectionMap = new HashMap<>(); private final Map<String, RemoteProcessGroupStatus> remoteGroupMap = new HashMap<>(); private final Map<String, PortStatus> inputPortMap = new HashMap<>(); private final Map<String, PortStatus> outputPortMap = new HashMap<>(); private ComponentStatusReport() { } public static ComponentStatusReport createEmpty() { return new ComponentStatusReport(); } public static ComponentStatusReport fromProcessGroupStatus(final ProcessGroupStatus status) { return fromProcessGroupStatus(status, ComponentType.values()); } public static ComponentStatusReport fromProcessGroupStatus(final ProcessGroupStatus status, final ComponentType... componentTypes) { final Set<ComponentType> componentTypeSet = new HashSet<>(); for (final ComponentType type : componentTypes) { componentTypeSet.add(type); } final ComponentStatusReport report = new ComponentStatusReport(); report.populate(status, componentTypeSet); return report; } private void populate(final ProcessGroupStatus status, final Set<ComponentType> componentTypes) { if (componentTypes.contains(ComponentType.PROCESS_GROUP)) { groupMap.put(status.getId(), status); } if (componentTypes.contains(ComponentType.PROCESSOR)) { for (final ProcessorStatus procStatus : status.getProcessorStatus()) { processorMap.put(procStatus.getId(), procStatus); } } if (componentTypes.contains(ComponentType.CONNECTION)) { for (final ConnectionStatus connStatus : status.getConnectionStatus()) { connectionMap.put(connStatus.getId(), connStatus); } } if (componentTypes.contains(ComponentType.REMOTE_PROCESS_GROUP)) { for (final RemoteProcessGroupStatus rpgStatus : status.getRemoteProcessGroupStatus()) { remoteGroupMap.put(rpgStatus.getId(), rpgStatus); } } if (componentTypes.contains(ComponentType.INPUT_PORT)) { for (final PortStatus portStatus : status.getInputPortStatus()) { inputPortMap.put(portStatus.getId(), portStatus); } } if (componentTypes.contains(ComponentType.OUTPUT_PORT)) { for (final PortStatus portStatus : status.getOutputPortStatus()) { outputPortMap.put(portStatus.getId(), portStatus); } } for (final ProcessGroupStatus childStatus : status.getProcessGroupStatus()) { populate(childStatus, componentTypes); } } public ProcessGroupStatus getProcessGroupStatus(final String groupId) { return groupMap.get(groupId); } public ProcessorStatus getProcessorStatus(final String processorId) { return processorMap.get(processorId); } public ConnectionStatus getConnectionStatus(final String connectionId) { return connectionMap.get(connectionId); } public RemoteProcessGroupStatus getRemoteProcessGroupStatus(final String remoteGroupId) { return remoteGroupMap.get(remoteGroupId); } public PortStatus getInputPortStatus(final String portId) { return inputPortMap.get(portId); } public PortStatus getOutputPortStatus(final String portId) { return outputPortMap.get(portId); } public static enum ComponentType { PROCESSOR, INPUT_PORT, OUTPUT_PORT, PROCESS_GROUP, CONNECTION, REMOTE_PROCESS_GROUP; } }