package com.griddynamics.jagger.dbapi.util; import com.griddynamics.jagger.dbapi.dto.MetricNameDto; import com.griddynamics.jagger.dbapi.model.MetricNode; import java.util.Collection; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; public class MetricNameUtil { /** * Map Collection of MetricNameDto first of all by TaskDataDto id, after all by metric name (metric id) * * @param metricNameDtos collection of MetricNameDto to be mapped * @return Map <TaskDataDto.id, Map<metricName, MetricDto>> */ public static Map<Long, Map<String, MetricNameDto>> getMappedMetricDtos(Collection<MetricNameDto> metricNameDtos) { Map<Long, Map<String, MetricNameDto>> taskIdMap = new HashMap<>(); for (MetricNameDto metricName : metricNameDtos) { Set<Long> ids = metricName.getTaskIds(); for (Long id : ids) { if (!taskIdMap.containsKey(id)) { taskIdMap.put(id, new HashMap<>()); } Map<String, MetricNameDto> metricIdMap = taskIdMap.get(id); if (!metricIdMap.containsKey(metricName.getMetricName())) { metricIdMap.put(metricName.getMetricName(), metricName); } else { throw new IllegalStateException(metricName.toString() + " already in Map"); } } } return taskIdMap; } /** * Map Collection of MetricNameDto first of all by TaskDataDto id, after all by metric name (metric id) * * @param metricNameDtos collection of MetricNameDto to be mapped * @return Map <TaskDataDto.id, MetricNameDto> */ public static Map<Long, MetricNameDto> getMappedMetricDtosByTaskIds(Collection<MetricNameDto> metricNameDtos) { Map<Long, MetricNameDto> taskIdMap = new HashMap<>(); for (MetricNameDto metricName : metricNameDtos) { Set<Long> ids = metricName.getTaskIds(); ids.stream().filter(id -> !taskIdMap.containsKey(id)).forEach(id -> taskIdMap.put(id, metricName)); } return taskIdMap; } /** * Returns a set of MetricNameDto objects contained in metricNodes * * @param metricNodes collection of MetricNode objects * @return Set of MetricNameDto objects containing in metricNodes */ public static Set<MetricNameDto> getMetricNameDtoSet(Collection<MetricNode> metricNodes) { Set<MetricNameDto> metricNameDtoSet = new HashSet<>(); for (MetricNode metricNode : metricNodes) { metricNameDtoSet.addAll(metricNode.getMetricNameDtoList()); } return metricNameDtoSet; } }