diff options
author | Julien Lancelot <julien.lancelot@gmail.com> | 2013-10-04 09:34:36 +0200 |
---|---|---|
committer | Julien Lancelot <julien.lancelot@gmail.com> | 2013-10-04 09:34:36 +0200 |
commit | 69363f7a5f50722bc41c0216c020a0fd38c7d5e1 (patch) | |
tree | f5c7c96987107e23ff6843075a52927ee749c11b | |
parent | 7564459620c70d2d620bf2d2a908b71bf3c0214f (diff) | |
download | sonarqube-69363f7a5f50722bc41c0216c020a0fd38c7d5e1.tar.gz sonarqube-69363f7a5f50722bc41c0216c020a0fd38c7d5e1.zip |
SONAR-4716 Display the remediation cost of each issue
4 files changed, 29 insertions, 63 deletions
diff --git a/plugins/sonar-core-plugin/src/main/resources/org/sonar/l10n/core.properties b/plugins/sonar-core-plugin/src/main/resources/org/sonar/l10n/core.properties index 5f12e68eee0..56028bc0908 100644 --- a/plugins/sonar-core-plugin/src/main/resources/org/sonar/l10n/core.properties +++ b/plugins/sonar-core-plugin/src/main/resources/org/sonar/l10n/core.properties @@ -528,6 +528,9 @@ issue.component_deleted=Removed issue.changelog.changed_to={0} changed to {1} issue.changelog.was=was {0} issue.changelog.removed={0} removed +issue.remedation_cost.x_days={0} days +issue.remedation_cost.x_hours={0} hours +issue.remedation_cost.x_minutes={0} minutes #------------------------------------------------------------------------------ diff --git a/sonar-core/src/main/java/org/sonar/core/technicaldebt/RemediationCostTimeUnit.java b/sonar-core/src/main/java/org/sonar/core/technicaldebt/RemediationCostTimeUnit.java index ae7d50ed9a7..67ae89e0159 100644 --- a/sonar-core/src/main/java/org/sonar/core/technicaldebt/RemediationCostTimeUnit.java +++ b/sonar-core/src/main/java/org/sonar/core/technicaldebt/RemediationCostTimeUnit.java @@ -19,15 +19,11 @@ */ package org.sonar.core.technicaldebt; -import javax.annotation.CheckForNull; - -import java.util.concurrent.TimeUnit; - public class RemediationCostTimeUnit { - private TimeUnitValue days; - private TimeUnitValue hours; - private TimeUnitValue minutes; + private long days; + private long hours; + private long minutes; private static final int ONE_HOUR_IN_MINUTE = 60; @@ -35,58 +31,33 @@ public class RemediationCostTimeUnit { int oneWorkingDay = hoursInDay * ONE_HOUR_IN_MINUTE; if (input >= oneWorkingDay) { long nbDays = input / oneWorkingDay; - this.days = new TimeUnitValue(nbDays, TimeUnit.DAYS); + this.days = nbDays; input = input - (nbDays * oneWorkingDay); - } else { - this.days = new TimeUnitValue(0L, TimeUnit.DAYS); } if (input >= ONE_HOUR_IN_MINUTE) { long nbHours = input / ONE_HOUR_IN_MINUTE; - this.hours = new TimeUnitValue(nbHours, TimeUnit.HOURS); + this.hours = nbHours; input = input - (nbHours * ONE_HOUR_IN_MINUTE); - } else { - this.hours = new TimeUnitValue(0L, TimeUnit.HOURS); } - this.minutes = new TimeUnitValue(input, TimeUnit.MINUTES); + this.minutes = input; } public static RemediationCostTimeUnit of(Long time, int hoursInDay) { return new RemediationCostTimeUnit(time, hoursInDay); } - @CheckForNull - public TimeUnitValue days() { + public long days() { return days; } - @CheckForNull - public TimeUnitValue hours() { + public long hours() { return hours; } - @CheckForNull - public TimeUnitValue minutes() { + public long minutes() { return minutes; } - public static class TimeUnitValue { - - private long value; - private TimeUnit unit; - - private TimeUnitValue(long value, TimeUnit unit) { - this.value = value; - this.unit = unit; - } - - public long value() { - return value; - } - - public TimeUnit unit() { - return unit; - } - } } diff --git a/sonar-core/src/test/java/org/sonar/core/technicaldebt/RemediationCostTimeUnitTest.java b/sonar-core/src/test/java/org/sonar/core/technicaldebt/RemediationCostTimeUnitTest.java index c655b69449c..ab611144e6c 100644 --- a/sonar-core/src/test/java/org/sonar/core/technicaldebt/RemediationCostTimeUnitTest.java +++ b/sonar-core/src/test/java/org/sonar/core/technicaldebt/RemediationCostTimeUnitTest.java @@ -21,8 +21,6 @@ package org.sonar.core.technicaldebt; import org.junit.Test; -import java.util.concurrent.TimeUnit; - import static org.fest.assertions.Assertions.assertThat; public class RemediationCostTimeUnitTest { @@ -44,27 +42,9 @@ public class RemediationCostTimeUnitTest { } private void checkTimes(RemediationCostTimeUnit remediationCostTimeUnit, Long expectedMinutes, Long expectedHours, Long expectedDays ) { - if (expectedMinutes != null) { - checkTime(remediationCostTimeUnit.minutes(), expectedMinutes, TimeUnit.MINUTES); - } else { - assertThat(remediationCostTimeUnit.minutes().value()).isEqualTo(0L); - } - if (expectedHours != null) { - checkTime(remediationCostTimeUnit.hours(), expectedHours, TimeUnit.HOURS); - } else { - assertThat(remediationCostTimeUnit.hours().value()).isEqualTo(0L); - } - if (expectedDays != null) { - checkTime(remediationCostTimeUnit.days(), expectedDays, TimeUnit.DAYS); - } else { - assertThat(remediationCostTimeUnit.days().value()).isEqualTo(0L); - } - } - - private void checkTime(RemediationCostTimeUnit.TimeUnitValue timeUnitValue, Long expectedValue, TimeUnit expectedUnit) { - assertThat(timeUnitValue.value()).isEqualTo(expectedValue); - assertThat(timeUnitValue.unit()).isEqualTo(expectedUnit); + assertThat(remediationCostTimeUnit.minutes()).isEqualTo(expectedMinutes); + assertThat(remediationCostTimeUnit.hours()).isEqualTo(expectedHours); + assertThat(remediationCostTimeUnit.days()).isEqualTo(expectedDays); } - } diff --git a/sonar-server/src/main/webapp/WEB-INF/app/views/issue/_issue.html.erb b/sonar-server/src/main/webapp/WEB-INF/app/views/issue/_issue.html.erb index 440c3949959..eaaa91a7084 100644 --- a/sonar-server/src/main/webapp/WEB-INF/app/views/issue/_issue.html.erb +++ b/sonar-server/src/main/webapp/WEB-INF/app/views/issue/_issue.html.erb @@ -39,8 +39,20 @@ <% if issue.remediationCost %> <img src="<%= ApplicationController.root_context -%>/images/sep12.png"/> - <span><%= issue.remediationCost -%></span> - + <% remediaction_cost_time_unit = Internal.issues.remediationCost(issue) + if remediaction_cost_time_unit + days = remediaction_cost_time_unit.days + hours = remediaction_cost_time_unit.hours + minutes = remediaction_cost_time_unit.minutes + message = '' + message += message('issue.remedation_cost.x_days', :params => days) + ' ' if days > 0 + message += message('issue.remedation_cost.x_hours', :params => hours) + ' ' if hours > 0 + # Do not display minutes if days is not null to not have too much information + message += message('issue.remedation_cost.x_minutes', :params => minutes) if minutes > 0 && days == 0 + %> + <span><%= message -%></span> + + <% end %> <% end %> </div> |