/*- * ============LICENSE_START======================================================= * VID * ================================================================================ * Copyright (C) 2017 - 2020 AT&T Intellectual Property. All rights reserved. * ================================================================================ * 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. * ============LICENSE_END========================================================= */ package org.onap.vid.services; import static java.util.stream.Collectors.toSet; import static org.onap.vid.utils.KotlinUtilsKt.JACKSON_OBJECT_MAPPER; import com.fasterxml.jackson.databind.JsonNode; import com.google.common.collect.ImmutableList; import java.util.Collection; import java.util.HashMap; import java.util.Map; import java.util.Objects; import java.util.Set; import javax.inject.Inject; import javax.ws.rs.core.Response; import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate; import org.onap.vid.aai.AaiClientInterface; import org.onap.vid.asdc.parser.ServiceModelInflator; import org.onap.vid.asdc.parser.ServiceModelInflator.Names; import org.onap.vid.model.ServiceModel; import org.onap.vid.model.aaiTree.AAITreeNode; import org.springframework.stereotype.Component; @Component public class AAITreeNodesEnricher { private final AaiClientInterface aaiClient; private final ServiceModelInflator serviceModelInflator; private static final EELFLoggerDelegate LOGGER = EELFLoggerDelegate.getLogger(AAITreeNodesEnricher.class); @Inject public AAITreeNodesEnricher( AaiClientInterface aaiClient, ServiceModelInflator serviceModelInflator ) { this.aaiClient = aaiClient; this.serviceModelInflator = serviceModelInflator; } void enrichNodesWithModelCustomizationName(Collection nodes, ServiceModel serviceModel) { final Map customizationNameByVersionId = serviceModelInflator.toNamesByVersionId(serviceModel); nodes.forEach(node -> { final Names names = customizationNameByVersionId.get(node.getModelVersionId()); if (names != null) { node.setKeyInModel(names.getModelKey()); node.setModelCustomizationName(names.getModelCustomizationName()); } }); } public void enrichNodesWithModelVersionAndModelName(Collection nodes) { Collection invariantIDs = getModelInvariantIds(nodes); Map modelVersionByModelVersionId = new HashMap<>(); Map modelNameByModelVersionId = new HashMap<>(); JsonNode models = getModels(aaiClient, invariantIDs); if (models!=null) { for (JsonNode model : models) { JsonNode modelVersions = model.get("model-vers").get("model-ver"); for (JsonNode modelVersion : modelVersions) { final String modelVersionId = modelVersion.get("model-version-id").asText(); modelVersionByModelVersionId.put(modelVersionId, modelVersion.get("model-version").asText()); modelNameByModelVersionId.put(modelVersionId, modelVersion.get("model-name").asText()); } } } nodes.forEach(node -> { node.setModelVersion(modelVersionByModelVersionId.get(node.getModelVersionId())); node.setModelName(modelNameByModelVersionId.get(node.getModelVersionId())); }); } private JsonNode getModels(AaiClientInterface aaiClient, Collection invariantIDs) { Response response = aaiClient.getVersionByInvariantId(ImmutableList.copyOf(invariantIDs)); try { JsonNode responseJson = JACKSON_OBJECT_MAPPER.readTree(response.readEntity(String.class)); return responseJson.get("model"); } catch (Exception e) { LOGGER.error(EELFLoggerDelegate.errorLogger, "Failed to getVersionByInvariantId from A&AI", e); } return JACKSON_OBJECT_MAPPER.createObjectNode(); } private Set getModelInvariantIds(Collection nodes) { return nodes.stream() .map(AAITreeNode::getModelInvariantId) .filter(Objects::nonNull) .collect(toSet()); } }