package com.appdynamics.monitors.hadoop.input; import com.appdynamics.extensions.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.xml.bind.annotation.*; import java.util.Collections; import java.util.HashMap; import java.util.Map; /** * Created by abey.tom on 9/8/16. */ @XmlAccessorType(XmlAccessType.FIELD) public class MetricConverterGroup { public static final Logger logger = LoggerFactory.getLogger(MetricConverterGroup.class); @XmlAttribute(name = "name") private String name; @XmlElement(name = "converter") private MetricConverter[] converters; @XmlTransient private Map<String, String> converterMap; public String getName() { return name; } public void setName(String name) { this.name = name; } public MetricConverter[] getConverters() { return converters; } public void setConverters(MetricConverter[] converters) { this.converters = converters; } public String convert(String attr, String value) { if (converterMap == null) { converterMap = Collections.synchronizedMap(new HashMap<String, String>()); for (MetricConverter converter : converters) { converterMap.put(converter.getLabel(), converter.getValue()); } } String converted = converterMap.get(value); if (StringUtils.hasText(converted)) { return converted; } else if (converterMap.containsKey("$default")) { return converterMap.get("$default"); } else { logger.error("For the {}, the converter map {} has no value for [{}]" , attr, converterMap, value); return value; } } }