svci/src/main/java/biz/nellemann/svci/CapacityToDoubleConverter.java

56 lines
1.5 KiB
Java

package biz.nellemann.svci;
import com.fasterxml.jackson.databind.util.StdConverter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* Jackson Converter
* Converts a "storage capacity" presented as a String with a unit (eg. MB) to a Double value in TB.
*/
public class CapacityToDoubleConverter extends StdConverter<String, Double> {
private final static Logger log = LoggerFactory.getLogger(CapacityToDoubleConverter.class);
final private Pattern p = Pattern.compile("(^\\d*\\.?\\d*)\\s?(\\D{2})$");
@Override
public Double convert(String value) {
Matcher m = p.matcher(value);
if(!m.matches()) {
return null;
}
double input = Double.parseDouble(m.group(1));
String unit = m.group(2);
log.debug("Input: {} {}", input, unit);
double output = input;
switch (unit.toUpperCase()) {
case "PB":
output = input * 1000;
break;
case "TB":
output = input;
break;
case "GB":
output = input / 1000;
break;
case "MB":
output = input / 1_000_000;
break;
default:
log.warn("convert() - Unit {} not supported.", unit);
break;
}
log.debug("Output: {} TB", output);
return output;
}
}