From c1f7fc1990c69bf870c8b3d5797574a8b4e9e82f Mon Sep 17 00:00:00 2001 From: Simon Brandhof Date: Mon, 6 May 2013 13:10:07 +0200 Subject: [PATCH] SONAR-3755 refactor saving of comments --- .../org/sonar/core/issue/DefaultIssue.java | 12 +++++------ .../org/sonar/core/issue/IssueComment.java | 11 ++++++++++ .../core/issue/db/ChangeDtoConverter.java | 17 ++-------------- .../org/sonar/core/issue/db/IssueStorage.java | 20 +++++++++++++++---- .../core/issue/db/ChangeDtoConverterTest.java | 15 -------------- .../sonar/core/issue/db/IssueStorageTest.java | 1 - .../server/issue/ServerIssueActions.java | 2 +- 7 files changed, 36 insertions(+), 42 deletions(-) diff --git a/sonar-core/src/main/java/org/sonar/core/issue/DefaultIssue.java b/sonar-core/src/main/java/org/sonar/core/issue/DefaultIssue.java index ca1fc13bc77..1fc3d764244 100644 --- a/sonar-core/src/main/java/org/sonar/core/issue/DefaultIssue.java +++ b/sonar-core/src/main/java/org/sonar/core/issue/DefaultIssue.java @@ -63,7 +63,7 @@ public class DefaultIssue implements Issue { private String authorLogin = null; private FieldDiffs diffs = null; private String actionPlanKey; - private List newComments = null; + private List comments = null; // functional dates private Date creationDate; @@ -344,15 +344,15 @@ public class DefaultIssue implements Issue { } public DefaultIssue addComment(IssueComment comment) { - if (newComments == null) { - newComments = Lists.newArrayList(); + if (comments == null) { + comments = Lists.newArrayList(); } - newComments.add(comment); + comments.add(comment); return this; } - public List newComments() { - return Objects.firstNonNull(newComments, Collections.emptyList()); + public List comments() { + return Objects.firstNonNull(comments, Collections.emptyList()); } @Override diff --git a/sonar-core/src/main/java/org/sonar/core/issue/IssueComment.java b/sonar-core/src/main/java/org/sonar/core/issue/IssueComment.java index 4dad7564f20..c944f656436 100644 --- a/sonar-core/src/main/java/org/sonar/core/issue/IssueComment.java +++ b/sonar-core/src/main/java/org/sonar/core/issue/IssueComment.java @@ -31,6 +31,7 @@ public class IssueComment implements Serializable { private Date createdAt, updatedAt; private String key; private String text; + private boolean isNew; public String text() { return text; @@ -81,6 +82,15 @@ public class IssueComment implements Serializable { return this; } + public boolean isNew() { + return isNew; + } + + public IssueComment setNew(boolean b) { + isNew = b; + return this; + } + public static IssueComment create(@Nullable String login, String text) { IssueComment comment = new IssueComment(); comment.setKey(UUID.randomUUID().toString()); @@ -88,6 +98,7 @@ public class IssueComment implements Serializable { comment.setUserLogin(login); comment.setText(text); comment.setCreatedAt(now).setUpdatedAt(now); + comment.setNew(true); return comment; } } diff --git a/sonar-core/src/main/java/org/sonar/core/issue/db/ChangeDtoConverter.java b/sonar-core/src/main/java/org/sonar/core/issue/db/ChangeDtoConverter.java index c5eaabf0b4d..52e729a874d 100644 --- a/sonar-core/src/main/java/org/sonar/core/issue/db/ChangeDtoConverter.java +++ b/sonar-core/src/main/java/org/sonar/core/issue/db/ChangeDtoConverter.java @@ -19,13 +19,10 @@ */ package org.sonar.core.issue.db; -import com.google.common.collect.Lists; -import org.sonar.core.issue.DefaultIssue; import org.sonar.core.issue.FieldDiffs; import org.sonar.core.issue.IssueComment; import java.util.Date; -import java.util.List; class ChangeDtoConverter { @@ -36,17 +33,6 @@ class ChangeDtoConverter { static final String TYPE_FIELD_CHANGE = "change"; static final String TYPE_COMMENT = "comment"; - static List extractChangeDtos(DefaultIssue issue) { - List dtos = Lists.newArrayList(); - for (IssueComment comment : issue.newComments()) { - dtos.add(commentToDto(issue.key(), comment)); - } - if (issue.diffs() != null) { - dtos.add(changeToDto(issue.key(), issue.diffs())); - } - return dtos; - } - static IssueChangeDto commentToDto(String issueKey, IssueComment comment) { IssueChangeDto dto = newDto(issueKey); dto.setKey(comment.key()); @@ -81,7 +67,8 @@ class ChangeDtoConverter { .setKey(dto.getKey()) .setCreatedAt(dto.getCreatedAt()) .setUpdatedAt(dto.getUpdatedAt()) - .setUserLogin(dto.getUserLogin()); + .setUserLogin(dto.getUserLogin()) + .setNew(false); } public static FieldDiffs dtoToChange(IssueChangeDto dto) { diff --git a/sonar-core/src/main/java/org/sonar/core/issue/db/IssueStorage.java b/sonar-core/src/main/java/org/sonar/core/issue/db/IssueStorage.java index 34bcec939d8..0a33e145c0f 100644 --- a/sonar-core/src/main/java/org/sonar/core/issue/db/IssueStorage.java +++ b/sonar-core/src/main/java/org/sonar/core/issue/db/IssueStorage.java @@ -25,6 +25,7 @@ import org.sonar.api.issue.Issue; import org.sonar.api.rules.Rule; import org.sonar.api.rules.RuleFinder; import org.sonar.core.issue.DefaultIssue; +import org.sonar.core.issue.IssueComment; import org.sonar.core.persistence.MyBatis; import java.util.Arrays; @@ -57,7 +58,6 @@ public abstract class IssueStorage { int componentId = componentId(issue); IssueDto dto = IssueDto.toDto(issue, componentId, ruleId); - // TODO set technical created/updated dates if (issue.isNew()) { session.insert(MYBATIS_INSERT_ISSUE, dto); } else /* TODO if hasChanges */ { @@ -67,9 +67,8 @@ public abstract class IssueStorage { conflicts.add(issue); } } - for (IssueChangeDto changeDto : ChangeDtoConverter.extractChangeDtos(issue)) { - session.insert(MYBATIS_INSERT_CHANGE, changeDto); - } + insertChanges(session, issue); + } session.commit(); // TODO log and fix conflicts @@ -78,6 +77,19 @@ public abstract class IssueStorage { } } + private void insertChanges(SqlSession session, DefaultIssue issue) { + for (IssueComment comment : issue.comments()) { + if (comment.isNew()) { + IssueChangeDto changeDto = ChangeDtoConverter.commentToDto(issue.key(), comment); + session.insert(MYBATIS_INSERT_CHANGE, changeDto); + } + } + if (issue.diffs() != null) { + IssueChangeDto changeDto = ChangeDtoConverter.changeToDto(issue.key(), issue.diffs()); + session.insert(MYBATIS_INSERT_CHANGE, changeDto); + } + } + protected abstract int componentId(DefaultIssue issue); private int ruleId(Issue issue) { diff --git a/sonar-core/src/test/java/org/sonar/core/issue/db/ChangeDtoConverterTest.java b/sonar-core/src/test/java/org/sonar/core/issue/db/ChangeDtoConverterTest.java index 28721482da7..3868e04c236 100644 --- a/sonar-core/src/test/java/org/sonar/core/issue/db/ChangeDtoConverterTest.java +++ b/sonar-core/src/test/java/org/sonar/core/issue/db/ChangeDtoConverterTest.java @@ -60,19 +60,4 @@ public class ChangeDtoConverterTest { assertThat(dto.getIssueKey()).isEqualTo("ABCDE"); assertThat(dto.getUserLogin()).isEqualTo("emmerik"); } - - @Test - public void test_toChangeDtos() throws Exception { - IssueChangeContext context = IssueChangeContext.createUser(new Date(), "emmerik"); - IssueComment comment = IssueComment.create("emmerik", "the comment"); - DefaultIssue issue = new DefaultIssue(); - issue.setFieldDiff(context, "severity", "INFO", "BLOCKER"); - issue.addComment(comment); - - List changeDtos = ChangeDtoConverter.extractChangeDtos(issue); - assertThat(changeDtos).hasSize(2); - assertThat(changeDtos.get(0).getChangeType()).isEqualTo("comment"); - assertThat(changeDtos.get(1).getChangeType()).isEqualTo("change"); - - } } diff --git a/sonar-core/src/test/java/org/sonar/core/issue/db/IssueStorageTest.java b/sonar-core/src/test/java/org/sonar/core/issue/db/IssueStorageTest.java index e2385041208..edf5cb15856 100644 --- a/sonar-core/src/test/java/org/sonar/core/issue/db/IssueStorageTest.java +++ b/sonar-core/src/test/java/org/sonar/core/issue/db/IssueStorageTest.java @@ -19,7 +19,6 @@ */ package org.sonar.core.issue.db; -import org.junit.Ignore; import org.junit.Test; import org.sonar.api.rule.RuleKey; import org.sonar.api.rules.Rule; diff --git a/sonar-server/src/main/java/org/sonar/server/issue/ServerIssueActions.java b/sonar-server/src/main/java/org/sonar/server/issue/ServerIssueActions.java index 8f7a6f5f13d..13f2b02ad48 100644 --- a/sonar-server/src/main/java/org/sonar/server/issue/ServerIssueActions.java +++ b/sonar-server/src/main/java/org/sonar/server/issue/ServerIssueActions.java @@ -123,7 +123,7 @@ public class ServerIssueActions implements ServerComponent { IssueChangeContext context = IssueChangeContext.createUser(new Date(), userSession.login()); issueUpdater.addComment(issue, comment, context); issueStorage.save(issue); - return issue.newComments().get(0); + return issue.comments().get(0); } public IssueComment[] comments(String issueKey, UserSession userSession) { -- 2.39.5