package org.zstack.utils;
import org.zstack.utils.data.SizeUnit;
import java.util.Arrays;
import java.util.List;
/**
*/
public class SizeUtils {
private static final String T_SUFFIX = "T";
private static final String t_SUFFIX = "t";
private static final String G_SUFFIX = "G";
private static final String g_SUFFIX = "g";
private static final String M_SUFFIX = "M";
private static final String m_SUFFIX = "m";
private static final String K_SUFFIX = "K";
private static final String k_SUFFIX = "k";
private static final String B_SUFFIX = "B";
private static final String b_SUFFIX = "b";
private static final List<String> validSuffix = Arrays.asList(
T_SUFFIX,
t_SUFFIX,
G_SUFFIX,
g_SUFFIX,
M_SUFFIX,
m_SUFFIX,
K_SUFFIX,
k_SUFFIX,
B_SUFFIX,
b_SUFFIX
);
private static boolean isPositiveNumber(String str) {
return str.matches("\\d+");
}
public static boolean isSizeString(String str) {
String suffix = str.substring(str.length() - 1);
if (!validSuffix.contains(suffix)) {
return isPositiveNumber(str);
} else {
String num = str.substring(0, str.length()-1);
return isPositiveNumber(num);
}
}
public static long sizeStringToBytes(String str) {
String numStr = str.substring(0, str.length() - 1);
String suffix = str.substring(str.length() - 1);
if (!validSuffix.contains(suffix)) {
return Long.valueOf(str);
}
Long size = Long.valueOf(numStr);
if (suffix.equals(T_SUFFIX) || suffix.equals(t_SUFFIX)) {
return SizeUnit.TERABYTE.toByte(size);
} else if (suffix.equals(G_SUFFIX) || suffix.equals(g_SUFFIX)) {
return SizeUnit.GIGABYTE.toByte(size);
} else if (suffix.equals(M_SUFFIX) || suffix.equals(m_SUFFIX)) {
return SizeUnit.MEGABYTE.toByte(size);
} else if (suffix.equals(K_SUFFIX) || suffix.equals(k_SUFFIX)) {
return SizeUnit.KILOBYTE.toByte(size);
} else if (suffix.equals(B_SUFFIX) || suffix.equals(b_SUFFIX)) {
return SizeUnit.BYTE.toByte(size);
}
throw new RuntimeException("should not be here," + str);
}
}