/*
* SonarQube
* Copyright (C) 2009-2017 SonarSource SA
* mailto:info AT sonarsource DOT com
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 3 of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
package org.sonar.core.i18n;
import javax.annotation.CheckForNull;
import javax.annotation.Nullable;
class DurationLabel {
private DurationLabel() {
// Utility class
}
public static Result label(long durationInMillis) {
double nbSeconds = durationInMillis / 1000.0;
double nbMinutes = nbSeconds / 60;
double nbHours = nbMinutes / 60;
double nbDays = nbHours / 24;
double nbYears = nbDays / 365;
return getMessage(nbSeconds, nbMinutes, nbHours, nbDays, nbYears);
}
private static Result getMessage(double nbSeconds, double nbMinutes, double nbHours, double nbDays, double nbYears) {
if (nbSeconds < 45) {
return message("seconds");
} else if (nbSeconds < 90) {
return message("minute");
} else if (nbMinutes < 45) {
return message("minutes", Math.round(nbMinutes));
} else if (nbMinutes < 90) {
return message("hour");
} else if (nbHours < 24) {
return message("hours", Math.round(nbHours));
} else if (nbHours < 48) {
return message("day");
} else if (nbDays < 30) {
return message("days", (long) (Math.floor(nbDays)));
} else if (nbDays < 60) {
return message("month");
} else if (nbDays < 365) {
return message("months", (long) (Math.floor(nbDays / 30)));
} else if (nbYears < 2) {
return message("year");
}
return message("years", (long) (Math.floor(nbYears)));
}
private static Result message(String key) {
return message(key, null);
}
private static Result message(String key, @Nullable Long value) {
String durationPrefix = "duration.";
return new Result(durationPrefix + key, value);
}
static class Result {
private String key;
private Long value;
public Result(String key, @Nullable Long value) {
this.key = key;
this.value = value;
}
public String key() {
return key;
}
@CheckForNull
public Long value() {
return value;
}
}
}