From b6a98c49f93f15f8d1b4dbe5211c758fed84cb3c Mon Sep 17 00:00:00 2001 From: Julien Lancelot Date: Mon, 8 Apr 2013 13:08:37 +0200 Subject: [PATCH] SONAR-3755 Move Issuable implementaiton to sonar-core --- .../org/sonar/core/issue/DefaultIssuable.java | 86 +++++++++++++++++++ .../sonar/core/issue/DefaultIssuableTest.java | 10 ++- .../java/org/sonar/api/issue/Issuable.java | 54 ++---------- 3 files changed, 98 insertions(+), 52 deletions(-) create mode 100644 sonar-core/src/main/java/org/sonar/core/issue/DefaultIssuable.java rename sonar-plugin-api/src/test/java/org/sonar/api/issue/IssuableTest.java => sonar-core/src/test/java/org/sonar/core/issue/DefaultIssuableTest.java (90%) diff --git a/sonar-core/src/main/java/org/sonar/core/issue/DefaultIssuable.java b/sonar-core/src/main/java/org/sonar/core/issue/DefaultIssuable.java new file mode 100644 index 00000000000..ff8fa76ac2b --- /dev/null +++ b/sonar-core/src/main/java/org/sonar/core/issue/DefaultIssuable.java @@ -0,0 +1,86 @@ +/* + * Sonar, open source software quality management tool. + * Copyright (C) 2008-2012 SonarSource + * mailto:contact AT sonarsource DOT com + * + * Sonar 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. + * + * Sonar 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 Sonar; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02 + */ + +package org.sonar.core.issue; + +import com.google.common.base.Objects; +import com.google.common.base.Predicate; +import com.google.common.collect.ArrayListMultimap; +import com.google.common.collect.Iterables; +import com.google.common.collect.ListMultimap; +import org.sonar.api.component.Component; +import org.sonar.api.issue.Issuable; +import org.sonar.api.issue.Issue; +import org.sonar.api.issue.IssueChangelog; + +import java.util.List; + +/** + * @since 3.6 + */ +public class DefaultIssuable implements Issuable { + + private List issues; + private ListMultimap issuesWithChangelogs; + + public DefaultIssuable(List issues) { + this.issues = issues; + this.issuesWithChangelogs = ArrayListMultimap.create(); + } + + public Issue apply(Issue issue, IssueChangelog issueChangelog) { + Issue existingIssue = findIssue(issue); + Issue.Builder builder = new Issue.Builder(existingIssue); + + if (!Objects.equal(existingIssue.severity(), issueChangelog.severity())) { + builder.severity(issueChangelog.severity()); + } + if (!Objects.equal(existingIssue.status(), issueChangelog.status())) { + builder.status(issueChangelog.status()); + } + if (!Objects.equal(existingIssue.resolution(), issueChangelog.resolution())) { + builder.resolution(issueChangelog.resolution()); + } + if (!Objects.equal(existingIssue.line(), issueChangelog.line())) { + builder.line(issueChangelog.line()); + // Do not add changelog if only line has changed + } + + issuesWithChangelogs.get(issue).add(issueChangelog); + return builder.build(); + } + + private Issue findIssue(final Issue issue) { + return Iterables.find(issues, new Predicate() { + public boolean apply(Issue currentIssue) { + return currentIssue.uuid().equals(issue.uuid()); + } + }); + } + + public List issues() { + return issues; + } + + @Override + public Component component() { + return null; + } +} diff --git a/sonar-plugin-api/src/test/java/org/sonar/api/issue/IssuableTest.java b/sonar-core/src/test/java/org/sonar/core/issue/DefaultIssuableTest.java similarity index 90% rename from sonar-plugin-api/src/test/java/org/sonar/api/issue/IssuableTest.java rename to sonar-core/src/test/java/org/sonar/core/issue/DefaultIssuableTest.java index de68aa73e2f..3e3fc39ad5b 100644 --- a/sonar-plugin-api/src/test/java/org/sonar/api/issue/IssuableTest.java +++ b/sonar-core/src/test/java/org/sonar/core/issue/DefaultIssuableTest.java @@ -18,25 +18,27 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02 */ -package org.sonar.api.issue; +package org.sonar.core.issue; import org.junit.Before; import org.junit.Test; +import org.sonar.api.issue.Issue; +import org.sonar.api.issue.IssueChangelog; import java.util.List; import static com.google.common.collect.Lists.newArrayList; import static org.fest.assertions.Assertions.assertThat; -public class IssuableTest { +public class DefaultIssuableTest { - private Issuable issuable; + private org.sonar.api.issue.Issuable issuable; private List issueList; @Before public void before(){ issueList = newArrayList(); - issuable = new Issuable(issueList); + issuable = new DefaultIssuable(issueList); } @Test diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/issue/Issuable.java b/sonar-plugin-api/src/main/java/org/sonar/api/issue/Issuable.java index fea96cceba2..2351dc454ec 100644 --- a/sonar-plugin-api/src/main/java/org/sonar/api/issue/Issuable.java +++ b/sonar-plugin-api/src/main/java/org/sonar/api/issue/Issuable.java @@ -20,63 +20,21 @@ package org.sonar.api.issue; -import com.google.common.base.Objects; -import com.google.common.base.Predicate; -import com.google.common.collect.ArrayListMultimap; -import com.google.common.collect.Iterables; -import com.google.common.collect.ListMultimap; import org.sonar.api.component.Component; +import org.sonar.api.component.Perspective; import java.util.List; /** * @since 3.6 */ -public class Issuable { +public interface Issuable extends Perspective { - private List issues; - private ListMultimap issuesWithChangelogs; + Issue apply(Issue issue, IssueChangelog issueChangelog); - public Issuable(List issues) { - this.issues = issues; - this.issuesWithChangelogs = ArrayListMultimap.create(); - } + List issues(); - public Issue apply(Issue issue, IssueChangelog issueChangelog) { - Issue existingIssue = findIssue(issue); - Issue.Builder builder = new Issue.Builder(existingIssue); + @Override + Component component(); - if (!Objects.equal(existingIssue.severity(), issueChangelog.severity())) { - builder.severity(issueChangelog.severity()); - } - if (!Objects.equal(existingIssue.status(), issueChangelog.status())) { - builder.status(issueChangelog.status()); - } - if (!Objects.equal(existingIssue.resolution(), issueChangelog.resolution())) { - builder.resolution(issueChangelog.resolution()); - } - if (!Objects.equal(existingIssue.line(), issueChangelog.line())) { - builder.line(issueChangelog.line()); - // Do not add changelog if only line has changed - } - - issuesWithChangelogs.get(issue).add(issueChangelog); - return builder.build(); - } - - private Issue findIssue(final Issue issue) { - return Iterables.find(issues, new Predicate() { - public boolean apply(Issue currentIssue) { - return currentIssue.uuid().equals(issue.uuid()); - } - }); - } - - public List issues() { - return issues; - } - - public Component component() { - return null; - } } -- 2.39.5