org.roda.wui.common.client.tools.Humanize.java Source code

Java tutorial

Introduction

Here is the source code for org.roda.wui.common.client.tools.Humanize.java

Source

/**
 * The contents of this file are subject to the license and copyright
 * detailed in the LICENSE file at the root of the source
 * tree and available online at
 *
 * https://github.com/keeps/roda
 */
package org.roda.wui.common.client.tools;

import java.util.Date;

import com.google.gwt.core.client.GWT;
import com.google.gwt.i18n.client.DateTimeFormat;
import com.google.gwt.i18n.client.NumberFormat;

import config.i18n.client.ClientMessages;

public class Humanize {
    private static ClientMessages messages = (ClientMessages) GWT.create(ClientMessages.class);

    public static final long ONE_SECOND = 1000;
    public static final long SECONDS = 60;
    public static final long ONE_MINUTE = ONE_SECOND * 60;
    public static final long MINUTES = 60;
    public static final long ONE_HOUR = ONE_MINUTE * 60;
    public static final long HOURS = 24;
    public static final long ONE_DAY = ONE_HOUR * 24;

    public static final String BYTES = "B";
    public static final String KILOBYTES = "KB";
    public static final String MEGABYTES = "MB";
    public static final String GIGABYTES = "GB";
    public static final String TERABYTES = "TB";
    public static final String PETABYTES = "PB";

    public static final String[] UNITS = new String[] { BYTES, KILOBYTES, MEGABYTES, GIGABYTES, TERABYTES,
            PETABYTES };

    public static final double BYTES_IN_KILOBYTES = 1024L;
    public static final double BYTES_IN_MEGABYTES = 1048576L;
    public static final double BYTES_IN_GIGABYTES = 1073741824L;
    public static final double BYTES_IN_TERABYTES = 1099511627776L;
    public static final double BYTES_IN_PETABYTES = 1125899906842624L;

    public static final double[] BYTES_IN_UNITS = { 1, BYTES_IN_KILOBYTES, BYTES_IN_MEGABYTES, BYTES_IN_GIGABYTES,
            BYTES_IN_TERABYTES, BYTES_IN_PETABYTES };

    protected static final NumberFormat SMALL_NUMBER_FORMAT = NumberFormat.getFormat("0.#");
    protected static final NumberFormat NUMBER_FORMAT = NumberFormat.getFormat("#");

    public static final DateTimeFormat DATE_FORMAT = DateTimeFormat.getFormat("yyyy-MM-dd");
    public static final DateTimeFormat DATE_TIME_FORMAT = DateTimeFormat.getFormat("yyyy-MM-dd HH:mm:ss");
    public static final DateTimeFormat DATE_TIME_MS_FORMAT = DateTimeFormat.getFormat("yyyy-MM-dd HH:mm:ss.SSS");

    private Humanize() {
        // do nothing
    }

    public static Long parseFileSize(String size, String unit) {
        if (size != null && !size.isEmpty()) {
            String trimmedSize = size.trim();
            if (unit.equals(PETABYTES)) {
                return Math.round(Double.parseDouble(trimmedSize) * BYTES_IN_PETABYTES);
            } else if (unit.equals(TERABYTES)) {
                return Math.round(Double.parseDouble(trimmedSize) * BYTES_IN_TERABYTES);
            } else if (unit.equals(GIGABYTES)) {
                return Math.round(Double.parseDouble(trimmedSize) * BYTES_IN_GIGABYTES);
            } else if (unit.equals(MEGABYTES)) {
                return Math.round(Double.parseDouble(trimmedSize) * BYTES_IN_MEGABYTES);
            } else if (unit.equals(KILOBYTES)) {
                return Math.round(Double.parseDouble(trimmedSize) * BYTES_IN_KILOBYTES);
            } else if (unit.equals(BYTES)) {
                return Long.parseLong(trimmedSize);
            } else {
                throw new IllegalArgumentException(trimmedSize);
            }
        }

        return null;
    }

    public static String readableFileSize(long size) {
        if (size <= 0) {
            return "0 B";
        }

        int digitGroups = (int) (Math.log10(size) / Math.log10(1024));
        return NumberFormat.getFormat("#,##0.#").format(size / Math.pow(1024, digitGroups)) + " "
                + UNITS[digitGroups];
    }

    public static String getDatesText(Date dateInitial, Date dateFinal, boolean extendedDate) {
        if (dateInitial == null && dateFinal == null) {
            return extendedDate ? messages.titleDatesEmpty() : messages.simpleDatesEmpty();
        } else if (dateInitial != null && dateFinal == null) {
            return extendedDate ? messages.titleDatesNoFinal(dateInitial)
                    : messages.simpleDatesNoFinal(dateInitial);
        } else if (dateInitial == null) {
            return extendedDate ? messages.titleDatesNoInitial(dateFinal)
                    : messages.simpleDatesNoInitial(dateFinal);
        } else {
            return extendedDate ? messages.titleDates(dateInitial, dateFinal)
                    : messages.simpleDates(dateInitial, dateFinal);
        }
    }

    public enum DHMSFormat {
        LONG, SHORT;
    }

    public static String durationInDHMS(Date start, Date end, DHMSFormat format) {
        Date endDate = end == null ? new Date() : end;
        long duration = endDate.getTime() - start.getTime();
        return DHMSFormat.LONG.equals(format) ? durationMillisToLongDHMS(duration)
                : durationMillisToShortDHMS(duration);
    }

    /**
     * converts time (in milliseconds) to human-readable format "<dd:>hh:mm:ss"
     */
    public static String durationMillisToShortDHMS(long duration) {
        long d = duration;
        int millis = (int) (d % ONE_SECOND);
        d /= ONE_SECOND;
        int seconds = (int) (d % SECONDS);
        d /= SECONDS;
        int minutes = (int) (d % MINUTES);
        d /= MINUTES;
        int hours = (int) (d % HOURS);
        int days = (int) (d / HOURS);

        if (days > 0) {
            return messages.durationDHMSShortDays(days, hours, minutes, seconds);
        } else if (hours > 0) {
            return messages.durationDHMSShortHours(hours, minutes, seconds);
        } else if (minutes > 0) {
            return messages.durationDHMSShortMinutes(minutes, seconds);
        } else if (seconds > 0) {
            return messages.durationDHMSShortSeconds(seconds);
        } else {
            return messages.durationDHMSShortMillis(millis);
        }
    }

    /**
     * converts time (in milliseconds) to human-readable format "<w> days,
     * <x> hours, <y> minutes and (z) seconds"
     */
    public static String durationMillisToLongDHMS(long duration) {
        long d = duration;
        d /= ONE_SECOND;
        int seconds = (int) (d % SECONDS);
        d /= SECONDS;
        int minutes = (int) (d % MINUTES);
        d /= MINUTES;
        int hours = (int) (d % HOURS);
        int days = (int) (d / HOURS);

        if (days > 0) {
            return messages.durationDHMSLongDays(days, hours, minutes, seconds);
        } else if (hours > 0) {
            return messages.durationDHMSLongHours(hours, minutes, seconds);
        } else if (minutes > 0) {
            return messages.durationDHMSLongMinutes(minutes, seconds);
        } else {
            return messages.durationDHMSLongSeconds(seconds);
        }
    }

    /**
     * Format a value in milliseconds as a string
     * 
     * @param value
     * @param showMillis
     * @return a formatted string for time duration
     */
    public static String formatValueMilliseconds(long value, boolean showMillis) {
        long hours = value / 3600000;
        long minutes = (value % 3600000) / 60000;
        long seconds = ((value % 3600000) % 60000) / 1000;
        long millis = value % 1000;

        NumberFormat numberFormat = NumberFormat.getFormat("00");
        NumberFormat millisFormat = NumberFormat.getFormat("000");

        if (showMillis) {
            return numberFormat.format(hours) + ":" + numberFormat.format(minutes) + ":"
                    + numberFormat.format(seconds) + "." + millisFormat.format(millis);
        } else {
            return numberFormat.format(hours) + ":" + numberFormat.format(minutes) + ":"
                    + numberFormat.format(seconds);
        }
    }

    public static String formatDate(Date date) {
        return DATE_FORMAT.format(date);
    }

    public static String formatDateTime(Date date) {
        return DATE_TIME_FORMAT.format(date);
    }

    public static String formatDateTimeMs(Date date) {
        return DATE_TIME_MS_FORMAT.format(date);
    }

}