All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.unidal.helper.Formats Maven / Gradle / Ivy

The newest version!
package org.unidal.helper;

import java.text.DecimalFormat;
import java.text.MessageFormat;
import java.util.Date;

public class Formats {
	public static NumberFormat forNumber() {
		return NumberFormat.INSTANCE;
	}

	public static ObjectFormat forObject() {
		return ObjectFormat.INSTANCE;
	}

	public enum NumberFormat {
		INSTANCE;

		public String percentage(double divisor, double divident, int precision) {
			if (divident == 1e-6) {
				return "N/A";
			} else {
				StringBuilder sb = new StringBuilder();

				sb.append('0');

				if (precision > 0) {
					sb.append('.');
					for (int i = 0; i < precision; i++) {
						sb.append('0');
					}
				}

				sb.append('%');

				return new DecimalFormat(sb.toString()).format(divisor / divident);
			}
		}

		public String format(Number data, String pattern, String suffix) {
			if (pattern == null || pattern.length() == 0 || data == null) {
				return "";
			}

			StringBuilder sb = new StringBuilder(32);
			long base = 1000;

			if (suffix != null && suffix.length() > 0) {
				char ch = suffix.charAt(0);

				if (ch == 'B' || ch == 'b') {
					base = 1024;
				}
			}

			sb.append("{0,number,").append(pattern);
			sb.append('}');

			double value = data.doubleValue();
			long scale1 = 1;
			long scale2 = -1;
			boolean flag = value > 0;

			if (!flag) {
				value = -value;
			}

			while (value >= base) {
				scale1 *= base;
				value /= base;
			}

			// only available to base 1000
			if (value > 0 && value < 1 && base == 1000) {
				while (value < 1) {
					scale2 *= base;
					value *= base;
				}
			}

			if (scale1 == 1) {
				// add nothing
			} else if (scale1 == base) {
				sb.append('K');
			} else if (scale1 == base * base) {
				sb.append('M');
			} else if (scale1 == base * base * base) {
				sb.append('G');
			} else if (scale1 == base * base * base * base) {
				sb.append('T');
			} else if (scale1 == base * base * base * base * base) {
				sb.append('P');
			}

			if (scale2 == -1) {
				// add nothing
			} else if (scale2 == -base) {
				sb.append('m');
			} else if (scale2 == -base * base) {
				sb.append('u');
			} else if (scale2 == -base * base * base) {
				sb.append('n');
			}

			if (suffix != null) {
				sb.append(suffix);
			}

			MessageFormat format = new MessageFormat(sb.toString());

			return format.format(new Object[] { flag ? value : -value });
		}
	}

	public enum ObjectFormat {
		INSTANCE;

		public String shorten(String str, int maxLength) {
			int len = (str == null ? 0 : str.length());

			if (len < maxLength || len <= 3) {
				return str;
			}

			StringBuilder sb = new StringBuilder(maxLength);
			String dots = "...";
			int dotsLen = dots.length();
			int left = (maxLength - dotsLen) / 2;

			sb.append(str.substring(0, left));
			sb.append(dots);
			sb.append(str.substring(len - maxLength + left + dotsLen));

			return sb.toString();
		}

		public String format(Object data, String pattern) {
			if (pattern == null || pattern.length() == 0 || data == null) {
				return "";
			}

			StringBuilder sb = new StringBuilder(32);

			sb.append("{0");

			if (pattern.startsWith("number") || pattern.startsWith("date") || pattern.startsWith("choice")) {
				sb.append(',').append(pattern);
			} else if (data instanceof Date) {
				sb.append(",date,").append(pattern);
			} else if (data instanceof Number) {
				sb.append(",number,").append(pattern);
			}

			sb.append('}');

			MessageFormat format = new MessageFormat(sb.toString());

			return format.format(new Object[] { data });
		}
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy