package org.zstack.utils.data; public enum SizeUnit { BYTE { public long toByte(long s) { return s; } public long toKiloByte(long s) { return (s / (k / b)); } public long toMegaByte(long s) { return (s / (m / b)); } public long toGigaByte(long s) { return (s / (g / b)); } public long toTeraByte(long s) { return (s / (t / b)); } public long convert(long s, SizeUnit src) { return src.toByte(s); } }, KILOBYTE { public long toByte(long s) { return (s * (k / b)); } public long toKiloByte(long s) { return s; } public long toMegaByte(long s) { return (s / (m / k)); } public long toGigaByte(long s) { return (s / (g / k)); } public long toTeraByte(long s) { return (s / (t / k)); } public long convert(long s, SizeUnit src) { return src.toKiloByte(s); } }, MEGABYTE { public long toByte(long s) { return (s * (m / b)); } public long toKiloByte(long s) { return (s * (m / k)); } public long toMegaByte(long s) { return s; } public long toGigaByte(long s) { return (s / (g / m)); } public long toTeraByte(long s) { return (s / (t / m)); } public long convert(long s, SizeUnit src) { return src.toMegaByte(s); } }, GIGABYTE { public long toByte(long s) { return (s * (g / b)); } public long toKiloByte(long s) { return (s * (g / k)); } public long toMegaByte(long s) { return (s * (g / m)); } public long toGigaByte(long s) { return s; } public long toTeraByte(long s) { return (s / (t / g)); } public long convert(long s, SizeUnit src) { return src.toGigaByte(s); } }, TERABYTE { public long toByte(long s) { return (s * (t / b)); } public long toKiloByte(long s) { return (s * (t / k)); } public long toMegaByte(long s) { return (s * (t / m)); } public long toGigaByte(long s) { return (s * (t / g)); } public long toTeraByte(long s) { return s; } public long convert(long s, SizeUnit src) { return src.toTeraByte(s); } }; public static SizeUnit fromString(String s) { if ("b".equalsIgnoreCase(s)) { return BYTE; } else if ("k".equalsIgnoreCase(s)) { return KILOBYTE; } else if ("m".equalsIgnoreCase(s)) { return MEGABYTE; } else if ("g".equalsIgnoreCase(s)) { return GIGABYTE; } else if ("t".equalsIgnoreCase(s)) { return TERABYTE; } else { throw new IllegalArgumentException(String.format("unknown size unit[%s]", s)); } } private static final long b = 1; private static final long k = b * 1024; private static final long m = k * 1024; private static final long g = m * 1024; private static final long t = g * 1024; public long toByte(long s) { throw new AbstractMethodError(); } public long toKiloByte(long s) { throw new AbstractMethodError(); } public long toMegaByte(long s) { throw new AbstractMethodError(); } public long toGigaByte(long s) { throw new AbstractMethodError(); } public long toTeraByte(long s) { throw new AbstractMethodError(); } public long convert(long s, SizeUnit src) { throw new AbstractMethodError(); } }