summaryrefslogtreecommitdiffstats
path: root/src/com/gitblit/utils/ByteFormat.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/gitblit/utils/ByteFormat.java')
-rw-r--r--src/com/gitblit/utils/ByteFormat.java82
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;
+ }
+}