package com.meteogroup.grib2geotiff.util;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.SimpleDateFormat;
import com.meteogroup.grib2geotiff.RecordMetadata;
public class TargetPathGenerator {
private final static SimpleDateFormat ISO8601_WINDOWS = new SimpleDateFormat("yyyy-MM-dd'T'HH-mm-ss'Z'");
private final static SimpleDateFormat ISO8601_UNIX = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
public static String generateTargePath(RecordMetadata metadata) {
SimpleDateFormat sdf = getDataFormatByOs();
StringBuffer targetDirectory = generateTargetDirectory(metadata, sdf);
StringBuffer targetFilename = generateTargetFileName(metadata, sdf);
return targetDirectory.toString()
+ "/"
+ targetFilename.toString();
}
private static StringBuffer generateTargetFileName(RecordMetadata metadata,
SimpleDateFormat sdf) {
StringBuffer targetFilename = new StringBuffer(metadata.getName());
if (metadata.getLevelType1() != null) {
BigDecimal bd = new BigDecimal(metadata.getLevelValue1())
.stripTrailingZeros()
.setScale(0, RoundingMode.HALF_UP);
targetFilename.append("_")
.append(bd.longValue());
}
if (metadata.getLevelType2() != null) {
BigDecimal bd = new BigDecimal(metadata.getLevelValue2())
.stripTrailingZeros()
.setScale(0, RoundingMode.HALF_UP);
targetFilename.append("_")
.append(bd.longValue());
}
targetFilename.append("_")
.append(sdf.format(metadata.getForecastTime()));
return targetFilename;
}
private static StringBuffer generateTargetDirectory(
RecordMetadata metadata, SimpleDateFormat sdf) {
StringBuffer targetDirectory = new StringBuffer()
.append(sdf.format(metadata.getReferenceTime())).append("/")
.append(metadata.getCategory()).append("/")
.append(metadata.getName());
return targetDirectory;
}
private static SimpleDateFormat getDataFormatByOs() {
SimpleDateFormat sdf = ISO8601_UNIX;
if (System.getProperty("os.name").startsWith("Windows")) {
sdf = ISO8601_WINDOWS;
}
return sdf;
}
}