package de.pbauerochse.worklogviewer.util; import org.apache.commons.lang3.StringUtils; import java.text.DecimalFormat; import java.text.MessageFormat; import java.text.NumberFormat; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.ResourceBundle; /** * @author Patrick Bauerochse * @since 14.04.15 */ public class FormattingUtil { public static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle.getBundle("i18n/ytwv"); private static DateTimeFormatter dateFormatter; private static DateTimeFormatter dateTimeFormatter; private static NumberFormat percentageFormatter; private static final int MINUTES_PER_HOUR = 60; public static String formatMinutes(long minutes) { return formatMinutes(minutes, false); } /** * Formats the given amount of minutes in Jira Style format * * @param minutes * @return */ public static String formatMinutes(long minutes, boolean full) { StringBuilder worklogFormatted = new StringBuilder(); int workhours = SettingsUtil.loadSettings().getWorkHoursADay(); if (workhours == 0) { throw ExceptionUtil.getIllegalStateException("exceptions.main.workhours.zero"); } final int minutesPerWorkday = workhours * MINUTES_PER_HOUR; long days = minutes / minutesPerWorkday; long remainingMinutes = minutes % minutesPerWorkday; long hours = remainingMinutes / MINUTES_PER_HOUR; remainingMinutes = remainingMinutes % MINUTES_PER_HOUR; if (days > 0) { worklogFormatted.append(days).append('d'); } if (hours > 0 || (full && days > 0)) { if (worklogFormatted.length() > 0) { worklogFormatted.append(' '); } worklogFormatted.append(hours).append('h'); } if (remainingMinutes > 0 || (full && (hours > 0 || days > 0))) { if (worklogFormatted.length() > 0) { worklogFormatted.append(' '); } worklogFormatted.append(remainingMinutes).append('m'); } return worklogFormatted.toString(); } public static String getFormatted(String messageKey) { return RESOURCE_BUNDLE.getString(messageKey); } public static String getFormatted(String messageKey, Object... parameters) { return MessageFormat.format(RESOURCE_BUNDLE.getString(messageKey), parameters); } public static String formatPercentage(double percentage) { if (percentageFormatter == null) { percentageFormatter = new DecimalFormat("#0.0%"); } return percentageFormatter.format(percentage); } public static String formatDate(LocalDate date) { if (date == null) return StringUtils.EMPTY; if (dateFormatter == null) { dateFormatter = DateTimeFormatter.ofPattern(getFormatted("date.column.format")); } return dateFormatter.format(date); } public static String formatDateTime(LocalDateTime date) { if (date == null) return StringUtils.EMPTY; if (dateTimeFormatter == null) { dateTimeFormatter = DateTimeFormatter.ofPattern(getFormatted("datetime.column.format")); } return dateTimeFormatter.format(date); } }