diff options
Diffstat (limited to 'src/com/gitblit/utils/ByteFormat.java')
-rw-r--r-- | src/com/gitblit/utils/ByteFormat.java | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/src/com/gitblit/utils/ByteFormat.java b/src/com/gitblit/utils/ByteFormat.java new file mode 100644 index 00000000..a726368f --- /dev/null +++ b/src/com/gitblit/utils/ByteFormat.java @@ -0,0 +1,82 @@ +/* + * Copyright 2011 Squeal Group. Licensed under the Eclipse Public License, + * Version 1.0 (http://www.eclipse.org/legal/epl-v10.html). + * Initial Developer: Squeal Group + */ +package com.gitblit.utils; + +import java.text.DecimalFormat; +import java.text.FieldPosition; +import java.text.Format; +import java.text.ParsePosition; + +/** + * A formatter for formatting byte sizes. For example, formatting 12345 byes + * results in "12.1 K" and 1234567 results in "1.18 MB". + * + */ +public class ByteFormat extends Format { + + private static final long serialVersionUID = 1L; + + public ByteFormat() { + } + + // Implemented from the Format class + + /** + * Formats a long which represent a number of bytes. + */ + public String format(long bytes) { + return format(Long.valueOf(bytes)); + } + + /** + * Formats a long which represent a number of kilobytes. + */ + public String formatKB(long kilobytes) { + return format(Long.valueOf(kilobytes * 1024)); + } + + /** + * Format the given object (must be a Long). + * + * @param obj + * assumed to be the number of bytes as a Long. + * @param buf + * the StringBuffer to append to. + * @param pos + * @return A formatted string representing the given bytes in more + * human-readable form. + */ + public StringBuffer format(Object obj, StringBuffer buf, FieldPosition pos) { + if (obj instanceof Long) { + long numBytes = ((Long) obj).longValue(); + if (numBytes < 1024) { + DecimalFormat formatter = new DecimalFormat("#,##0"); + buf.append(formatter.format((double) numBytes)).append(" b"); + } else if (numBytes < 1024 * 1024) { + DecimalFormat formatter = new DecimalFormat("#,##0.0"); + buf.append(formatter.format((double) numBytes / 1024.0)).append(" KB"); + } else if (numBytes < 1024 * 1024 * 1024) { + DecimalFormat formatter = new DecimalFormat("#,##0.0"); + buf.append(formatter.format((double) numBytes / (1024.0 * 1024.0))).append(" MB"); + } else { + DecimalFormat formatter = new DecimalFormat("#,##0.0"); + buf.append(formatter.format((double) numBytes / (1024.0 * 1024.0 * 1024.0))).append(" GB"); + } + } + return buf; + } + + /** + * In this implementation, returns null always. + * + * @param source + * @param pos + * @return returns null in this implementation. + */ + public Object parseObject(String source, ParsePosition pos) { + return null; + } +} |