From 147633993d037d2c39623e06c3d66e1b61662734 Mon Sep 17 00:00:00 2001 From: Simon Brandhof Date: Fri, 24 May 2013 14:12:09 +0200 Subject: [PATCH] SONAR-4290 order action plans by chronological deadline --- .../issue/ActionPlanDeadlineComparator.java | 45 ++++++++++++++ .../sonar/core/issue/DefaultActionPlan.java | 2 +- .../sonar/core/issue/db/ActionPlanDao.java | 6 +- .../sonar/core/issue/db/ActionPlanDto.java | 3 +- .../sonar/core/issue/db/ActionPlanMapper.java | 6 +- .../sonar/core/issue/db/ActionPlanMapper.xml | 1 - .../ActionPlanDeadlineComparatorTest.java | 59 +++++++++++++++++++ .../sonar/server/issue/ActionPlanService.java | 14 +++-- 8 files changed, 122 insertions(+), 14 deletions(-) create mode 100644 sonar-core/src/main/java/org/sonar/core/issue/ActionPlanDeadlineComparator.java create mode 100644 sonar-core/src/test/java/org/sonar/core/issue/ActionPlanDeadlineComparatorTest.java diff --git a/sonar-core/src/main/java/org/sonar/core/issue/ActionPlanDeadlineComparator.java b/sonar-core/src/main/java/org/sonar/core/issue/ActionPlanDeadlineComparator.java new file mode 100644 index 00000000000..0deb1837dbf --- /dev/null +++ b/sonar-core/src/main/java/org/sonar/core/issue/ActionPlanDeadlineComparator.java @@ -0,0 +1,45 @@ +/* + * SonarQube, open source software quality management tool. + * Copyright (C) 2008-2013 SonarSource + * mailto:contact AT sonarsource DOT com + * + * SonarQube 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. + * + * SonarQube 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.issue; + +import org.sonar.api.issue.ActionPlan; + +import java.util.Comparator; +import java.util.Date; + +/** + * Sort action plans by chronological deadlines. Plans without deadline are + * located after plans with deadline. + */ +public class ActionPlanDeadlineComparator implements Comparator { + + @Override + public int compare(ActionPlan a1, ActionPlan a2) { + Date d1 = a1.deadLine(); + Date d2 = a2.deadLine(); + if (d1 != null && d2 != null) { + return d1.compareTo(d2); + } + if (d1 != null) { + return -1; + } + return 1; + } +} diff --git a/sonar-core/src/main/java/org/sonar/core/issue/DefaultActionPlan.java b/sonar-core/src/main/java/org/sonar/core/issue/DefaultActionPlan.java index be6fb18bd63..4c5bac02e0c 100644 --- a/sonar-core/src/main/java/org/sonar/core/issue/DefaultActionPlan.java +++ b/sonar-core/src/main/java/org/sonar/core/issue/DefaultActionPlan.java @@ -40,7 +40,7 @@ public class DefaultActionPlan implements ActionPlan { private Date createdAt; private Date updatedAt; - private DefaultActionPlan(){ + public DefaultActionPlan(){ } diff --git a/sonar-core/src/main/java/org/sonar/core/issue/db/ActionPlanDao.java b/sonar-core/src/main/java/org/sonar/core/issue/db/ActionPlanDao.java index 37544cd0c60..5e00190c152 100644 --- a/sonar-core/src/main/java/org/sonar/core/issue/db/ActionPlanDao.java +++ b/sonar-core/src/main/java/org/sonar/core/issue/db/ActionPlanDao.java @@ -82,7 +82,7 @@ public class ActionPlanDao implements BatchComponent, ServerComponent { } } - public Collection findByKeys(Collection keys) { + public List findByKeys(Collection keys) { if (keys.isEmpty()) { return Collections.emptyList(); } @@ -95,7 +95,7 @@ public class ActionPlanDao implements BatchComponent, ServerComponent { } } - public Collection findOpenByProjectId(Long projectId) { + public List findOpenByProjectId(Long projectId) { SqlSession session = mybatis.openSession(); try { return session.getMapper(ActionPlanMapper.class).findOpenByProjectId(projectId); @@ -104,7 +104,7 @@ public class ActionPlanDao implements BatchComponent, ServerComponent { } } - public Collection findByNameAndProjectId(String name, Long projectId) { + public List findByNameAndProjectId(String name, Long projectId) { SqlSession session = mybatis.openSession(); try { return session.getMapper(ActionPlanMapper.class).findByNameAndProjectId(name, projectId); diff --git a/sonar-core/src/main/java/org/sonar/core/issue/db/ActionPlanDto.java b/sonar-core/src/main/java/org/sonar/core/issue/db/ActionPlanDto.java index d736e68715b..88ace09db2b 100644 --- a/sonar-core/src/main/java/org/sonar/core/issue/db/ActionPlanDto.java +++ b/sonar-core/src/main/java/org/sonar/core/issue/db/ActionPlanDto.java @@ -177,7 +177,8 @@ public class ActionPlanDto { } public DefaultActionPlan toActionPlan() { - return DefaultActionPlan.create(name) + return new DefaultActionPlan() + .setName(name) .setKey(kee) .setProjectKey(projectKey) .setDescription(description) diff --git a/sonar-core/src/main/java/org/sonar/core/issue/db/ActionPlanMapper.java b/sonar-core/src/main/java/org/sonar/core/issue/db/ActionPlanMapper.java index 245bb1a9eef..8ca67acbaaa 100644 --- a/sonar-core/src/main/java/org/sonar/core/issue/db/ActionPlanMapper.java +++ b/sonar-core/src/main/java/org/sonar/core/issue/db/ActionPlanMapper.java @@ -36,11 +36,11 @@ public interface ActionPlanMapper { void delete(@Param("key") String key); - Collection findByKeys(@Param("keys") List > keys); + List findByKeys(@Param("keys") List > keys); ActionPlanDto findByKey(@Param("key") String key); - Collection findOpenByProjectId(@Param("projectId") Long projectId); + List findOpenByProjectId(@Param("projectId") Long projectId); - Collection findByNameAndProjectId(@Param("name")String name, @Param("projectId") Long projectId); + List findByNameAndProjectId(@Param("name")String name, @Param("projectId") Long projectId); } diff --git a/sonar-core/src/main/resources/org/sonar/core/issue/db/ActionPlanMapper.xml b/sonar-core/src/main/resources/org/sonar/core/issue/db/ActionPlanMapper.xml index 2e091afd2ba..663284e21ac 100644 --- a/sonar-core/src/main/resources/org/sonar/core/issue/db/ActionPlanMapper.xml +++ b/sonar-core/src/main/resources/org/sonar/core/issue/db/ActionPlanMapper.xml @@ -78,7 +78,6 @@ and ap.status='OPEN' and ap.project_id=p.id - order by deadline