private String userLogin;
private String status;
private Date deadLine;
- private Date creationDate;
- private Date updateDate;
+ private Date createdAt;
+ private Date updatedAt;
private int totalIssues;
private int openIssues;
Date now = new Date();
actionPlan.setName(name);
actionPlan.setStatus(ActionPlan.STATUS_OPEN);
- actionPlan.setCreationDate(now).setUpdateDate(now);
+ actionPlan.setCreatedAt(now).setUpdatedAt(now);
return actionPlan;
}
return this;
}
- public Date creationDate() {
- return creationDate;
+ public Date createdAt() {
+ return createdAt;
}
- public ActionPlanStats setCreationDate(Date creationDate) {
- this.creationDate = creationDate;
+ public ActionPlanStats setCreatedAt(Date creationDate) {
+ this.createdAt = creationDate;
return this;
}
- public Date updateDate() {
- return updateDate;
+ public Date updatedAt() {
+ return updatedAt;
}
- public ActionPlanStats setUpdateDate(Date updateDate) {
- this.updateDate = updateDate;
+ public ActionPlanStats setUpdatedAt(Date updatedAt) {
+ this.updatedAt = updatedAt;
return this;
}
import org.apache.ibatis.session.SqlSession;
import org.sonar.api.BatchComponent;
import org.sonar.api.ServerComponent;
-import org.sonar.api.issue.ActionPlan;
import org.sonar.core.persistence.MyBatis;
import java.util.Collection;
this.mybatis = mybatis;
}
- private Collection<ActionPlanStatsDto> findByProjectId(Long projectId, String status, String sort, boolean asc) {
+ public Collection<ActionPlanStatsDto> findByProjectId(Long projectId) {
SqlSession session = mybatis.openSession();
try {
- return session.getMapper(ActionPlanStatsMapper.class).findByProjectId(projectId, status, sort, asc);
+ return session.getMapper(ActionPlanStatsMapper.class).findByProjectId(projectId);
} finally {
MyBatis.closeQuietly(session);
}
}
- public Collection<ActionPlanStatsDto> findOpenByProjectId(Long projectId) {
- return findByProjectId(projectId, ActionPlan.STATUS_OPEN, "DEADLINE", true);
- }
-
- public Collection<ActionPlanStatsDto> findClosedByProjectId(Long projectId) {
- return findByProjectId(projectId, ActionPlan.STATUS_CLOSED, "DEADLINE", false);
- }
-
}
.setStatus(status)
.setDeadLine(deadLine)
.setUserLogin(userLogin)
- .setCreationDate(createdAt)
- .setUpdateDate(updatedAt)
+ .setCreatedAt(createdAt)
+ .setUpdatedAt(updatedAt)
.setTotalIssues(totalIssues)
.setOpenIssues(openIssues);
}
/**
* @since3.6
*/
- Collection<ActionPlanStatsDto> findByProjectId(@Param("projectId") Long projectId, @Param("status")String status, @Param("sort")String sort, @Param("asc")boolean asc);
+ Collection<ActionPlanStatsDto> findByProjectId(@Param("projectId") Long projectId);
}
left join issues open_issues on open_issues.id = total_issues.id and open_issues.resolution is null
<where>
and ap.project_id = #{projectId}
- and ap.status = #{status}
</where>
group by ap.id, ap.kee, ap.name, ap.description, ap.user_login, ap.project_id, ap.status, ap.deadline, ap.created_at, ap.updated_at
- <if test="sort != null">
- order by
- <choose>
- <when test="'DEADLINE'.equals(sort)">
- ap.deadline
- </when>
- </choose>
- <choose>
- <when test="true.equals(asc)">
- asc
- </when>
- <otherwise>
- desc
- </otherwise>
- </choose>
- </if>
+ order by ap.deadline asc
</select>
</mapper>
\ No newline at end of file
}
@Test
- public void should_find_open_by_project() {
- setupData("should_find_open_by_project");
+ public void should_find_by_project() {
+ setupData("should_find_by_project");
- Collection<ActionPlanStatsDto> result = dao.findOpenByProjectId(1l);
- assertThat(result).isNotEmpty();
-
- ActionPlanStatsDto actionPlanStatsDto = result.iterator().next();
- assertThat(actionPlanStatsDto.getTotalIssues()).isEqualTo(3);
- assertThat(actionPlanStatsDto.getOpenIssues()).isEqualTo(1);
- }
-
- @Test
- public void should_find_closed_by_project() {
- setupData("should_find_closed_by_project");
-
- Collection<ActionPlanStatsDto> result = dao.findClosedByProjectId(1l);
+ Collection<ActionPlanStatsDto> result = dao.findByProjectId(1l);
assertThat(result).isNotEmpty();
ActionPlanStatsDto actionPlanStatsDto = result.iterator().next();
--- /dev/null
+<dataset>
+
+ <action_plans id="1" kee="ABC" project_id="1" name="SHORT_TERM" description="[null]" deadline="[null]"
+ user_login="igor" status="OPEN" created_at="[null]" updated_at="[null]" />
+
+ <issues
+ id="100"
+ kee="ABCDE"
+ resource_id="400"
+ rule_id="500"
+ severity="BLOCKER"
+ manual_severity="[false]"
+ manual_issue="[false]"
+ description="[null]"
+ line="200"
+ status="OPEN"
+ resolution="[null]"
+ checksum="XXX"
+ user_login="arthur"
+ assignee_login="perceval"
+ author_login="[null]"
+ attributes="JIRA=FOO-1234"
+ action_plan_key="ABC"
+ issue_creation_date="2013-04-16"
+ issue_update_date="2013-04-16"
+ issue_close_date="2013-04-16"
+ created_at="2013-04-16"
+ updated_at="2013-04-16"
+ />
+
+ <issues
+ id="101"
+ kee="ABCDF"
+ resource_id="400"
+ rule_id="500"
+ severity="BLOCKER"
+ manual_severity="[false]"
+ manual_issue="[false]"
+ description="[null]"
+ line="200"
+ status="CLOSED"
+ resolution="FIXED"
+ checksum="XXX"
+ user_login="arthur"
+ assignee_login="perceval"
+ author_login="[null]"
+ attributes="JIRA=FOO-1234"
+ action_plan_key="ABC"
+ issue_creation_date="2013-04-16"
+ issue_update_date="2013-04-16"
+ issue_close_date="2013-04-16"
+ created_at="2013-04-16"
+ updated_at="2013-04-16"
+ />
+
+ <issues
+ id="102"
+ kee="ABCDG"
+ resource_id="400"
+ rule_id="500"
+ severity="BLOCKER"
+ manual_severity="[false]"
+ manual_issue="[false]"
+ description="[null]"
+ line="200"
+ status="CLOSED"
+ resolution="FIXED"
+ checksum="XXX"
+ user_login="arthur"
+ assignee_login="perceval"
+ author_login="[null]"
+ attributes="JIRA=FOO-1234"
+ action_plan_key="ABC"
+ issue_creation_date="2013-04-16"
+ issue_update_date="2013-04-16"
+ issue_close_date="2013-04-16"
+ created_at="2013-04-16"
+ updated_at="2013-04-16"
+ />
+
+</dataset>
+++ /dev/null
-<dataset>
-
- <action_plans id="1" kee="ABC" project_id="1" name="SHORT_TERM" description="[null]" deadline="[null]"
- user_login="igor" status="CLOSED" created_at="[null]" updated_at="[null]" />
-
- <issues
- id="100"
- kee="ABCDE"
- resource_id="400"
- rule_id="500"
- severity="BLOCKER"
- manual_severity="[false]"
- manual_issue="[false]"
- description="[null]"
- line="200"
- status="OPEN"
- resolution="[null]"
- checksum="XXX"
- user_login="arthur"
- assignee_login="perceval"
- author_login="[null]"
- attributes="JIRA=FOO-1234"
- action_plan_key="ABC"
- issue_creation_date="2013-04-16"
- issue_update_date="2013-04-16"
- issue_close_date="2013-04-16"
- created_at="2013-04-16"
- updated_at="2013-04-16"
- />
-
- <issues
- id="101"
- kee="ABCDF"
- resource_id="400"
- rule_id="500"
- severity="BLOCKER"
- manual_severity="[false]"
- manual_issue="[false]"
- description="[null]"
- line="200"
- status="CLOSED"
- resolution="FIXED"
- checksum="XXX"
- user_login="arthur"
- assignee_login="perceval"
- author_login="[null]"
- attributes="JIRA=FOO-1234"
- action_plan_key="ABC"
- issue_creation_date="2013-04-16"
- issue_update_date="2013-04-16"
- issue_close_date="2013-04-16"
- created_at="2013-04-16"
- updated_at="2013-04-16"
- />
-
- <issues
- id="102"
- kee="ABCDG"
- resource_id="400"
- rule_id="500"
- severity="BLOCKER"
- manual_severity="[false]"
- manual_issue="[false]"
- description="[null]"
- line="200"
- status="CLOSED"
- resolution="FIXED"
- checksum="XXX"
- user_login="arthur"
- assignee_login="perceval"
- author_login="[null]"
- attributes="JIRA=FOO-1234"
- action_plan_key="ABC"
- issue_creation_date="2013-04-16"
- issue_update_date="2013-04-16"
- issue_close_date="2013-04-16"
- created_at="2013-04-16"
- updated_at="2013-04-16"
- />
-
-</dataset>
+++ /dev/null
-<dataset>
-
- <action_plans id="1" kee="ABC" project_id="1" name="SHORT_TERM" description="[null]" deadline="[null]"
- user_login="igor" status="OPEN" created_at="[null]" updated_at="[null]" />
-
- <issues
- id="100"
- kee="ABCDE"
- resource_id="400"
- rule_id="500"
- severity="BLOCKER"
- manual_severity="[false]"
- manual_issue="[false]"
- description="[null]"
- line="200"
- status="OPEN"
- resolution="[null]"
- checksum="XXX"
- user_login="arthur"
- assignee_login="perceval"
- author_login="[null]"
- attributes="JIRA=FOO-1234"
- action_plan_key="ABC"
- issue_creation_date="2013-04-16"
- issue_update_date="2013-04-16"
- issue_close_date="2013-04-16"
- created_at="2013-04-16"
- updated_at="2013-04-16"
- />
-
- <issues
- id="101"
- kee="ABCDF"
- resource_id="400"
- rule_id="500"
- severity="BLOCKER"
- manual_severity="[false]"
- manual_issue="[false]"
- description="[null]"
- line="200"
- status="CLOSED"
- resolution="FIXED"
- checksum="XXX"
- user_login="arthur"
- assignee_login="perceval"
- author_login="[null]"
- attributes="JIRA=FOO-1234"
- action_plan_key="ABC"
- issue_creation_date="2013-04-16"
- issue_update_date="2013-04-16"
- issue_close_date="2013-04-16"
- created_at="2013-04-16"
- updated_at="2013-04-16"
- />
-
- <issues
- id="102"
- kee="ABCDG"
- resource_id="400"
- rule_id="500"
- severity="BLOCKER"
- manual_severity="[false]"
- manual_issue="[false]"
- description="[null]"
- line="200"
- status="CLOSED"
- resolution="FIXED"
- checksum="XXX"
- user_login="arthur"
- assignee_login="perceval"
- author_login="[null]"
- attributes="JIRA=FOO-1234"
- action_plan_key="ABC"
- issue_creation_date="2013-04-16"
- issue_update_date="2013-04-16"
- issue_close_date="2013-04-16"
- created_at="2013-04-16"
- updated_at="2013-04-16"
- />
-
-</dataset>
return toActionPlans(actionPlanDtos);
}
- public List<ActionPlanStats> findOpenActionPlanStats(String projectKey) {
- Collection<ActionPlanStatsDto> actionPlanStatsDtos = actionPlanStatsDao.findOpenByProjectId(findProject(projectKey).getId());
- return newArrayList(Iterables.transform(actionPlanStatsDtos, new Function<ActionPlanStatsDto, ActionPlanStats>() {
- @Override
- public ActionPlanStats apply(ActionPlanStatsDto actionPlanStatsDto) {
- return actionPlanStatsDto.toActionPlanStat();
- }
- }));
- }
-
- public List<ActionPlanStats> findClosedActionPlanStats(String projectKey) {
- Collection<ActionPlanStatsDto> actionPlanStatsDtos = actionPlanStatsDao.findClosedByProjectId(findProject(projectKey).getId());
+ public List<ActionPlanStats> findActionPlanStats(String projectKey) {
+ Collection<ActionPlanStatsDto> actionPlanStatsDtos = actionPlanStatsDao.findByProjectId(findProject(projectKey).getId());
return newArrayList(Iterables.transform(actionPlanStatsDtos, new Function<ActionPlanStatsDto, ActionPlanStats>() {
@Override
public ActionPlanStats apply(ActionPlanStatsDto actionPlanStatsDto) {
return actionPlanService.findByKey(actionPlanKey);
}
- List<ActionPlanStats> findOpenActionPlanStats(String projectKey) {
- return actionPlanService.findOpenActionPlanStats(projectKey);
- }
-
- List<ActionPlanStats> findClosedActionPlanStats(String projectKey) {
- return actionPlanService.findClosedActionPlanStats(projectKey);
+ List<ActionPlanStats> findActionPlanStats(String projectKey) {
+ return actionPlanService.findActionPlanStats(projectKey);
}
public Result<ActionPlan> createActionPlan(Map<String, String> parameters) {
hash[:desc] = action_plan.description() if action_plan.description() && !action_plan.description().blank?
hash[:userLogin] = action_plan.userLogin() if action_plan.userLogin()
hash[:deadLine] = Api::Utils.format_datetime(action_plan.deadLine()) if action_plan.deadLine()
- hash[:creationDate] = Api::Utils.format_datetime(action_plan.creationDate()) if action_plan.creationDate()
- hash[:updateDate] = Api::Utils.format_datetime(action_plan.updateDate()) if action_plan.updateDate()
+ hash[:createdAt] = Api::Utils.format_datetime(action_plan.createdAt()) if action_plan.createdAt()
+ hash[:updatedAt] = Api::Utils.format_datetime(action_plan.updatedAt()) if action_plan.updatedAt()
hash
end
end
def load_action_plans
- @open_action_plans = Internal.issues.findOpenActionPlanStats(@resource.key)
- @closed_action_plans = Internal.issues.findClosedActionPlanStats(@resource.key)
+ @open_action_plans = Internal.issues.findActionPlanStats(@resource.key).select {|plan| plan.status() == 'OPEN'}
+ @closed_action_plans = Internal.issues.findActionPlanStats(@resource.key).select {|plan| plan.status() == 'CLOSED'}.sort{|plan1, plan2| plan2.deadLine() <=> plan1.deadLine()}
end
def find_by_key(key)
}
@Test
- public void should_find_open_action_plan_stats(){
+ public void should_find_action_plan_stats(){
when(resourceDao.getResource(any(ResourceQuery.class))).thenReturn(new ResourceDto().setId(1L).setKey("org.sonar.Sample"));
- when(actionPlanStatsDao.findOpenByProjectId(1L)).thenReturn(newArrayList(new ActionPlanStatsDto()));
+ when(actionPlanStatsDao.findByProjectId(1L)).thenReturn(newArrayList(new ActionPlanStatsDto()));
- Collection<ActionPlanStats> results = actionPlanService.findOpenActionPlanStats("org.sonar.Sample");
+ Collection<ActionPlanStats> results = actionPlanService.findActionPlanStats("org.sonar.Sample");
assertThat(results).hasSize(1);
}
public void should_throw_exception_if_project_not_found_when_find_open_action_plan_stats(){
when(resourceDao.getResource(any(ResourceQuery.class))).thenReturn(null);
- actionPlanService.findOpenActionPlanStats("org.sonar.Sample");
- }
-
- @Test
- public void should_find_closed_action_plan_stats(){
- when(resourceDao.getResource(any(ResourceQuery.class))).thenReturn(new ResourceDto().setId(1L).setKey("org.sonar.Sample"));
- when(actionPlanStatsDao.findClosedByProjectId(1L)).thenReturn(newArrayList(new ActionPlanStatsDto()));
-
- Collection<ActionPlanStats> results = actionPlanService.findClosedActionPlanStats("org.sonar.Sample");
- assertThat(results).hasSize(1);
- }
-
- @Test(expected = IllegalArgumentException.class)
- public void should_throw_exception_if_project_not_found_when_find_closed_action_plan_stats(){
- when(resourceDao.getResource(any(ResourceQuery.class))).thenReturn(null);
-
- actionPlanService.findClosedActionPlanStats("org.sonar.Sample");
+ actionPlanService.findActionPlanStats("org.sonar.Sample");
}
}