import org.sonar.api.BatchComponent;
import org.sonar.api.resources.Resource;
import org.sonar.api.rule.RuleKey;
+import org.sonar.api.rule.Severity;
import org.sonar.api.rules.Violation;
import org.sonar.core.issue.DefaultIssue;
import org.sonar.core.issue.DefaultIssueBuilder;
.cost(violation.getCost())
.line(violation.getLineId())
.description(violation.getMessage())
- .severity(violation.getSeverity() != null ? violation.getSeverity().name() : null)
+ .severity(violation.getSeverity() != null ? violation.getSeverity().name() : Severity.MAJOR)
.build();
}
}
import com.google.common.base.Strings;
import com.google.common.collect.Maps;
+import javax.annotation.CheckForNull;
import javax.annotation.Nullable;
import java.io.Serializable;
import java.util.Date;
return diffs.get(field);
}
+ @CheckForNull
public String userLogin() {
return userLogin;
}
- public FieldDiffs setUserLogin(String s) {
+ public FieldDiffs setUserLogin(@Nullable String s) {
this.userLogin = s;
return this;
}
return new IssueChangeContext(null, date, true);
}
- public static IssueChangeContext createUser(Date date, String login) {
+ public static IssueChangeContext createUser(Date date, @Nullable String login) {
return new IssueChangeContext(login, date, false);
}
}
--- /dev/null
+/*
+ * 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.
+ */
+@ParametersAreNonnullByDefault
+package org.sonar.core.issue.db;
+
+import javax.annotation.ParametersAreNonnullByDefault;
\ No newline at end of file
}
public boolean doTransition(DefaultIssue issue, String transitionKey, IssueChangeContext issueChangeContext) {
- Transition transition = machine.state(issue.status()).transition(transitionKey);
+ Transition transition = stateOf(issue).transition(transitionKey);
if (transition != null && !transition.automatic()) {
functionExecutor.execute(transition.functions(), issue, issueChangeContext);
issue.setStatus(transition.to());
public void doAutomaticTransition(DefaultIssue issue, IssueChangeContext issueChangeContext) {
- Transition transition = machine.state(issue.status()).outAutomaticTransition(issue);
+ Transition transition = stateOf(issue).outAutomaticTransition(issue);
if (transition != null) {
functionExecutor.execute(transition.functions(), issue, issueChangeContext);
issue.setStatus(transition.to());
}
}
+ private State stateOf(DefaultIssue issue) {
+ State state = machine.state(issue.status());
+ if (state==null) {
+ throw new IllegalStateException("Unknown status: " + issue.status() + " [issue=" + issue.key() + "]");
+ }
+ return state;
+ }
+
StateMachine machine() {
return machine;
}
import java.util.List;
import static org.fest.assertions.Assertions.assertThat;
-import static org.mockito.Mockito.mock;
+import static org.fest.assertions.Fail.fail;
public class IssueWorkflowTest {
IssueWorkflow workflow = new IssueWorkflow(new FunctionExecutor(new IssueUpdater()));
workflow.start();
DefaultIssue issue = new DefaultIssue()
+ .setKey("ABCDE")
.setResolution(Issue.RESOLUTION_FIXED)
.setStatus(Issue.STATUS_RESOLVED)
.setNew(false)
assertThat(issue.closeDate()).isNotNull();
}
+ @Test
+ public void should_fail_if_unknown_status() throws Exception {
+ workflow.start();
+
+ DefaultIssue issue = new DefaultIssue()
+ .setKey("ABCDE")
+ .setResolution(Issue.RESOLUTION_FIXED)
+ .setStatus("xxx")
+ .setNew(false)
+ .setAlive(false);
+ try {
+ workflow.doAutomaticTransition(issue, IssueChangeContext.createScan(new Date()));
+ fail();
+ } catch (IllegalStateException e) {
+ assertThat(e).hasMessage("Unknown status: xxx [issue=ABCDE]");
+ }
+
+ }
private Collection<String> keys(List<Transition> transitions) {
return Collections2.transform(transitions, new Function<Transition, String>() {