return this;
}
+ @Override
+ public IssueHandler.Context setEffortToFix(@Nullable Double d) {
+ updater.setEffortToFix(issue, d);
+ return this;
+ }
+
@Override
public IssueHandler.Context setAttribute(String key, @Nullable String value) {
throw new UnsupportedOperationException("TODO");
.createdDate(creationDate)
.componentKey(violation.getResource().getEffectiveKey())
.ruleKey(RuleKey.of(violation.getRule().getRepositoryKey(), violation.getRule().getKey()))
- .cost(violation.getCost())
+ .effortToFix(violation.getCost())
.line(violation.getLineId())
.description(violation.getMessage())
.severity(violation.getSeverity() != null ? violation.getSeverity().name() : Severity.MAJOR)
private boolean manualSeverity = false;
private String description;
private Integer line;
- private Double cost;
+ private Double effortToFix;
private String status;
private String resolution;
private String userLogin;
return this;
}
- public Double cost() {
- return cost;
+ public Double effortToFix() {
+ return effortToFix;
}
- public DefaultIssue setCost(@Nullable Double c) {
- Preconditions.checkArgument(c == null || c >= 0, "Cost must be positive (got " + c + ")");
- this.cost = c;
+ public DefaultIssue setEffortToFix(@Nullable Double d) {
+ Preconditions.checkArgument(d == null || d >= 0, "Effort to fix must be greater than or equal 0 (got " + d + ")");
+ this.effortToFix = d;
return this;
}
private Integer line;
private String description;
private String severity;
- private Double cost;
+ private Double effortToFix;
private boolean manual = false;
private Date createdDate;
private Map<String, String> attributes;
}
@Override
- public Issuable.IssueBuilder cost(@Nullable Double cost) {
- this.cost = cost;
+ public Issuable.IssueBuilder effortToFix(@Nullable Double d) {
+ this.effortToFix = d;
return this;
}
issue.setRuleKey(ruleKey);
issue.setDescription(description);
issue.setSeverity(Objects.firstNonNull(severity, Severity.MAJOR));
- issue.setCost(cost);
+ issue.setEffortToFix(effortToFix);
issue.setLine(line);
issue.setManual(manual);
issue.setManualSeverity(manual);
issue.setCloseDate(d);
}
+ public void setEffortToFix(DefaultIssue issue, @Nullable Double d) {
+ issue.setEffortToFix(d);
+ }
+
public boolean setAttribute(DefaultIssue issue, String key, @Nullable String value, IssueChangeContext context) {
String oldValue = issue.attribute(key);
if (!Objects.equal(oldValue, value)) {
private boolean manualIssue;
private String description;
private Integer line;
- private Double cost;
+ private Double effortToFix;
private String status;
private String resolution;
private String checksum;
return this;
}
- public Double getCost() {
- return cost;
+ public Double getEffortToFix() {
+ return effortToFix;
}
- public IssueDto setCost(@Nullable Double cost) {
- this.cost = cost;
+ public IssueDto setEffortToFix(@Nullable Double d) {
+ this.effortToFix = d;
return this;
}
.setKey(issue.key())
.setLine(issue.line())
.setDescription(issue.description())
- .setCost(issue.cost())
+ .setEffortToFix(issue.effortToFix())
.setResolution(issue.resolution())
.setStatus(issue.status())
.setSeverity(issue.severity())
issue.setStatus(status);
issue.setResolution(resolution);
issue.setDescription(description);
- issue.setCost(cost);
+ issue.setEffortToFix(effortToFix);
issue.setLine(line);
issue.setSeverity(severity);
issue.setUserLogin(userLogin);
i.manual_issue as manualIssue,
i.description as description,
i.line as line,
- i.cost as cost,
+ i.effort_to_fix as effortToFix,
i.status as status,
i.resolution as resolution,
i.checksum as checksum,
</sql>
<insert id="insert" parameterType="Issue" useGeneratedKeys="true" keyProperty="id">
- INSERT INTO issues (kee, resource_id, rule_id, severity, manual_severity, manual_issue, description, line, cost, status,
+ INSERT INTO issues (kee, resource_id, rule_id, severity, manual_severity, manual_issue, description, line, effort_to_fix, status,
resolution, checksum, user_login, assignee_login, author_login, attributes, issue_creation_date, issue_update_date,
issue_close_date, created_at, updated_at)
- VALUES (#{kee}, #{resourceId}, #{ruleId}, #{severity}, #{manualSeverity}, #{manualIssue}, #{description}, #{line}, #{cost}, #{status},
+ VALUES (#{kee}, #{resourceId}, #{ruleId}, #{severity}, #{manualSeverity}, #{manualIssue}, #{description}, #{line}, #{effortToFix}, #{status},
#{resolution}, #{checksum}, #{userLogin}, #{assignee}, #{authorLogin}, #{attributes}, #{issueCreationDate},
#{issueUpdateDate}, #{issueCloseDate}, #{createdAt}, #{updatedAt})
</insert>
<selectKey order="BEFORE" resultType="Long" keyProperty="id">
select issues_seq.NEXTVAL from DUAL
</selectKey>
- INSERT INTO issues (id, kee, resource_id, rule_id, severity, manual_severity, manual_issue, description, line, cost, status,
+ INSERT INTO issues (id, kee, resource_id, rule_id, severity, manual_severity, manual_issue, description, line, effort_to_fix, status,
resolution, checksum, user_login, assignee_login, author_login, attributes, issue_creation_date, issue_update_date,
issue_close_date, created_at, updated_at)
- VALUES (#{id}, #{kee}, #{resourceId}, #{ruleId}, #{severity}, #{manualSeverity}, #{manualIssue}, #{description}, #{line}, #{cost}, #{status},
+ VALUES (#{id}, #{kee}, #{resourceId}, #{ruleId}, #{severity}, #{manualSeverity}, #{manualIssue}, #{description}, #{line}, #{effortToFix}, #{status},
#{resolution}, #{checksum}, #{userLogin}, #{assignee}, #{authorLogin}, #{attributes}, #{issueCreationDate},
#{issueUpdateDate}, #{issueCloseDate}, #{createdAt}, #{updatedAt})
</insert>
manual_issue=#{manualIssue},
description=#{description},
line=#{line},
- cost=#{cost},
+ effort_to_fix=#{effortToFix},
status=#{status},
resolution=#{resolution},
checksum=#{checksum},
"MANUAL_ISSUE" BOOLEAN NOT NULL,
"DESCRIPTION" VARCHAR(4000),
"LINE" INTEGER,
- "COST" DOUBLE,
+ "EFFORT_TO_FIX" DOUBLE,
"STATUS" VARCHAR(20),
"RESOLUTION" VARCHAR(20),
"CHECKSUM" VARCHAR(1000),
.componentKey(componentKey)
.description("the desc")
.line(123)
- .cost(10000.0)
+ .effortToFix(10000.0)
.ruleKey(RuleKey.of("squid", "NullDereference"))
.severity(Severity.CRITICAL)
.attribute("JIRA", "FOO-123")
assertThat(issue).isNotNull();
assertThat(issue.key()).isNotNull();
- assertThat(issue.cost()).isEqualTo(10000.0);
+ assertThat(issue.effortToFix()).isEqualTo(10000.0);
assertThat(issue.componentKey()).isEqualTo(componentKey);
assertThat(issue.description()).isEqualTo("the desc");
assertThat(issue.line()).isEqualTo(123);
assertThat(issue.isManualIssue()).isFalse();
assertThat(issue.getDescription()).isNull();
assertThat(issue.getLine()).isEqualTo(200);
- assertThat(issue.getCost()).isEqualTo(4.2);
+ assertThat(issue.getEffortToFix()).isEqualTo(4.2);
assertThat(issue.getStatus()).isEqualTo("OPEN");
assertThat(issue.getResolution()).isEqualTo("FIXED");
assertThat(issue.getChecksum()).isEqualTo("XXX");
.setResourceId(1)
.setStatus(Issue.STATUS_CLOSED)
.setResolution(Issue.RESOLUTION_FALSE_POSITIVE)
- .setCost(15.0)
+ .setEffortToFix(15.0)
.setLine(6)
.setSeverity("BLOCKER")
.setDescription("message")
assertThat(issue.componentKey()).isEqualTo("component-key");
assertThat(issue.status()).isEqualTo(Issue.STATUS_CLOSED);
assertThat(issue.resolution()).isEqualTo(Issue.RESOLUTION_FALSE_POSITIVE);
- assertThat(issue.cost()).isEqualTo(15.0);
+ assertThat(issue.effortToFix()).isEqualTo(15.0);
assertThat(issue.line()).isEqualTo(6);
assertThat(issue.severity()).isEqualTo("BLOCKER");
assertThat(issue.description()).isEqualTo("message");
manual_issue="[false]"
description="[null]"
line="200"
- cost="4.2"
+ effort_to_fix="4.2"
status="OPEN"
resolution="FIXED"
checksum="XXX"
manual_issue="[false]"
description="[null]"
line="200"
- cost="4.2"
+ effort_to_fix="4.2"
status="OPEN"
resolution="FIXED"
checksum="XXX"
manual_issue="[false]"
description="[null]"
line="200"
- cost="4.2"
+ effort_to_fix="4.2"
status="OPEN"
resolution="FIXED"
checksum="XXX"
manual_issue="[false]"
description="[null]"
line="200"
- cost="4.2"
+ effort_to_fix="4.2"
status="OPEN"
resolution="FIXED"
checksum="XXX"
manual_issue="[false]"
description="[null]"
line="200"
- cost="4.2"
+ effort_to_fix="4.2"
status="OPEN"
resolution="FIXED"
checksum="XXX"
manual_issue="[false]"
description="[null]"
line="200"
- cost="4.2"
+ effort_to_fix="4.2"
status="OPEN"
resolution="FIXED"
checksum="XXX"
manual_issue="[false]"
description="[null]"
line="200"
- cost="[null]"
+ effort_to_fix="[null]"
status="OPEN"
resolution="[null]"
checksum="[null]"
manual_issue="[false]"
description="[null]"
line="120"
- cost="[null]"
+ effort_to_fix="[null]"
status="CLOSED"
resolution="FIXED"
checksum="[null]"
manual_issue="[false]"
description="[null]"
line="200"
- cost="4.2"
+ effort_to_fix="4.2"
status="OPEN"
resolution="FIXED"
checksum="XXX"
manual_issue="[false]"
description="[null]"
line="200"
- cost="4.2"
+ effort_to_fix="4.2"
status="OPEN"
resolution="FIXED"
checksum="XXX"
manual_issue="[false]"
description="[null]"
line="200"
- cost="4.2"
+ effort_to_fix="4.2"
status="OPEN"
resolution="FIXED"
checksum="XXX"
manual_issue="[false]"
description="[null]"
line="200"
- cost="4.2"
+ effort_to_fix="4.2"
status="OPEN"
resolution="FIXED"
checksum="XXX"
manual_issue="[false]"
description="[null]"
line="200"
- cost="4.2"
+ effort_to_fix="4.2"
status="OPEN"
resolution="FIXED"
checksum="XXX"
manual_issue="[false]"
description="[null]"
line="200"
- cost="4.2"
+ effort_to_fix="4.2"
status="OPEN"
resolution="FIXED"
checksum="XXX"
manual_issue="[false]"
description="[null]"
line="200"
- cost="4.2"
+ effort_to_fix="4.2"
status="OPEN"
resolution="FIXED"
checksum="XXX"
manual_issue="[false]"
description="[null]"
line="200"
- cost="4.2"
+ effort_to_fix="4.2"
status="OPEN"
resolution="FIXED"
checksum="XXX"
manual_issue="[false]"
description="[null]"
line="200"
- cost="4.2"
+ effort_to_fix="4.2"
status="OPEN"
resolution="FIXED"
checksum="XXX"
manual_issue="[false]"
description="[null]"
line="200"
- cost="4.2"
+ effort_to_fix="4.2"
status="OPEN"
resolution="FIXED"
checksum="XXX"
manual_issue="[false]"
description="[null]"
line="200"
- cost="4.2"
+ effort_to_fix="4.2"
status="OPEN"
resolution="FIXED"
checksum="XXX"
manual_issue="[false]"
description="[null]"
line="200"
- cost="4.2"
+ effort_to_fix="4.2"
status="OPEN"
resolution="FIXED"
checksum="XXX"
manual_issue="[false]"
description="[null]"
line="200"
- cost="4.2"
+ effort_to_fix="4.2"
status="OPEN"
resolution="FIXED"
checksum="XXX"
manual_issue="[false]"
description="[null]"
line="200"
- cost="[null]"
+ effort_to_fix="[null]"
status="OPEN"
resolution="[null]"
checksum="[null]"
manual_issue="[false]"
description="[null]"
line="120"
- cost="[null]"
+ effort_to_fix="[null]"
status="OPEN"
resolution="FIXED"
checksum="[null]"
manual_issue="[false]"
description="[null]"
line="120"
- cost="[null]"
+ effort_to_fix="[null]"
status="CLOSED"
resolution="FIXED"
checksum="[null]"
manual_issue="[false]"
description="[null]"
line="200"
- cost="4.2"
+ effort_to_fix="4.2"
status="OPEN"
resolution="FIXED"
checksum="XXX"
manual_issue="[false]"
description="[null]"
line="200"
- cost="4.2"
+ effort_to_fix="4.2"
status="OPEN"
resolution="FIXED"
checksum="XXX"
manual_issue="[false]"
description="[null]"
line="200"
- cost="4.2"
+ effort_to_fix="4.2"
status="OPEN"
resolution="FIXED"
checksum="XXX"
assignee_login="[null]"
author_login="[null]"
checksum="[null]"
- cost="[null]"
+ effort_to_fix="[null]"
description="[null]"
line="5000"
manual_issue="[false]"
assignee_login="loic"
author_login="simon"
checksum="FFFFF"
- cost="[null]"
+ effort_to_fix="[null]"
description="[null]"
line="5000"
manual_issue="[false]"
assignee_login="loic"
author_login="simon"
checksum="FFFFF"
- cost="[null]"
+ effort_to_fix="[null]"
description="[null]"
line="3000"
manual_issue="[false]"
manual_issue="[false]"
description="[null]"
line="200"
- cost="[null]"
+ effort_to_fix="[null]"
status="OPEN"
resolution="[null]"
checksum="[null]"
manual_issue="[false]"
description="[null]"
line="120"
- cost="[null]"
+ effort_to_fix="[null]"
status="OPEN"
resolution="FIXED"
checksum="[null]"
import org.sonar.api.component.Perspective;
import org.sonar.api.rule.RuleKey;
+import javax.annotation.Nullable;
import java.util.Collection;
/**
interface IssueBuilder {
IssueBuilder ruleKey(RuleKey ruleKey);
- IssueBuilder line(Integer line);
+ IssueBuilder line(@Nullable Integer line);
IssueBuilder description(String description);
IssueBuilder severity(String severity);
- IssueBuilder cost(Double cost);
+ IssueBuilder effortToFix(@Nullable Double d);
IssueBuilder manual(boolean b);
- IssueBuilder attribute(String key, String value);
+ IssueBuilder attribute(String key, @Nullable String value);
Issue build();
}
import org.sonar.api.rule.RuleKey;
import javax.annotation.CheckForNull;
-
import java.io.Serializable;
import java.util.Date;
import java.util.List;
public interface Issue extends Serializable {
int DESCRIPTION_MAX_SIZE = 4000;
+
String STATUS_OPEN = "OPEN";
String STATUS_REOPENED = "REOPENED";
String STATUS_RESOLVED = "RESOLVED";
@CheckForNull
Integer line();
+ /**
+ * Arbitrary distance to threshold for resolving the issue.
+ * <p/>
+ * For examples:
+ * <ul>
+ * <li>for the rule "Avoid too complex methods" : current complexity - max allowed complexity</li>
+ * <li>for the rule "Avoid Duplications" : number of duplicated blocks</li>
+ * <li>for the rule "Insufficient Line Coverage" : number of lines to cover to reach the accepted threshold</li>
+ * </ul>
+ */
@CheckForNull
- Double cost();
+ Double effortToFix();
String status();
Context setSeverity(String severity);
+ Context setEffortToFix(@Nullable Double effortToFix);
+
Context setAuthorLogin(@Nullable String login);
Context setAttribute(String key, @Nullable String value);
+++ /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.
- */
-package org.sonar.server.issue;
-
-import org.sonar.api.ServerComponent;
-import org.sonar.api.issue.Issue;
-import org.sonar.api.rule.RuleKey;
-import org.sonar.core.issue.DefaultIssue;
-import org.sonar.core.issue.DefaultIssueBuilder;
-import org.sonar.core.issue.FieldDiffs;
-import org.sonar.core.issue.IssueComment;
-import org.sonar.core.issue.workflow.Transition;
-import org.sonar.server.platform.UserSession;
-
-import java.util.List;
-import java.util.Map;
-
-/**
- * All the issue features that are not published to public API.
- * TODO to be renamed to WebIssuesInternal
- */
-public class JRubyInternalIssues implements ServerComponent {
-
- private final ServerIssueActions actions;
-
- public JRubyInternalIssues(ServerIssueActions actions) {
- this.actions = actions;
- }
-
- public List<Transition> listTransitions(String issueKey) {
- return actions.listTransitions(issueKey, UserSession.get());
- }
-
- public Issue doTransition(String issueKey, String transitionKey) {
- return actions.doTransition(issueKey, transitionKey, UserSession.get());
- }
-
- public Issue assign(String issueKey, String transitionKey) {
- return actions.assign(issueKey, transitionKey, UserSession.get());
- }
-
- public Issue setSeverity(String issueKey, String severity) {
- return actions.setSeverity(issueKey, severity, UserSession.get());
- }
-
- public IssueComment addComment(String issueKey, String comment) {
- return actions.addComment(issueKey, comment, UserSession.get());
- }
-
- public IssueComment[] comments(String issueKey) {
- return actions.comments(issueKey, UserSession.get());
- }
-
- public FieldDiffs[] changes(String issueKey) {
- return actions.changes(issueKey, UserSession.get());
- }
-
- public Issue create(Map<String, String> parameters) {
- String componentKey = parameters.get("component");
- // TODO verify authorization
- // TODO check existence of component
- DefaultIssueBuilder builder = new DefaultIssueBuilder().componentKey(componentKey);
- String line = parameters.get("line");
- builder.line(line != null ? Integer.parseInt(line) : null);
- builder.description(parameters.get("description"));
- builder.severity(parameters.get("severity"));
- // TODO verify existence of rule
- builder.ruleKey(RuleKey.parse(parameters.get("rule")));
- builder.manual(true);
- Issue issue = builder.build();
- return actions.create((DefaultIssue) issue, UserSession.get());
- }
-}
}
public Issue create(DefaultIssue issue, UserSession userSession) {
- // TODO merge with JRubyInternalIssues
+ // TODO merge with WebIssuesInternal
issue.setManual(true);
issue.setUserLogin(userSession.login());
--- /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.
+ */
+package org.sonar.server.issue;
+
+import org.sonar.api.ServerComponent;
+import org.sonar.api.issue.Issue;
+import org.sonar.api.rule.RuleKey;
+import org.sonar.core.issue.DefaultIssue;
+import org.sonar.core.issue.DefaultIssueBuilder;
+import org.sonar.core.issue.FieldDiffs;
+import org.sonar.core.issue.IssueComment;
+import org.sonar.core.issue.workflow.Transition;
+import org.sonar.server.platform.UserSession;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * All the issue features that are not published to public API.
+ * TODO to be renamed to WebIssuesInternal
+ */
+public class WebIssuesInternal implements ServerComponent {
+
+ private final ServerIssueActions actions;
+
+ public WebIssuesInternal(ServerIssueActions actions) {
+ this.actions = actions;
+ }
+
+ public List<Transition> listTransitions(String issueKey) {
+ return actions.listTransitions(issueKey, UserSession.get());
+ }
+
+ public Issue doTransition(String issueKey, String transitionKey) {
+ return actions.doTransition(issueKey, transitionKey, UserSession.get());
+ }
+
+ public Issue assign(String issueKey, String transitionKey) {
+ return actions.assign(issueKey, transitionKey, UserSession.get());
+ }
+
+ public Issue setSeverity(String issueKey, String severity) {
+ return actions.setSeverity(issueKey, severity, UserSession.get());
+ }
+
+ public IssueComment addComment(String issueKey, String comment) {
+ return actions.addComment(issueKey, comment, UserSession.get());
+ }
+
+ public IssueComment[] comments(String issueKey) {
+ return actions.comments(issueKey, UserSession.get());
+ }
+
+ public FieldDiffs[] changes(String issueKey) {
+ return actions.changes(issueKey, UserSession.get());
+ }
+
+ public Issue create(Map<String, String> parameters) {
+ String componentKey = parameters.get("component");
+ // TODO verify authorization
+ // TODO check existence of component
+ DefaultIssueBuilder builder = new DefaultIssueBuilder().componentKey(componentKey);
+ String line = parameters.get("line");
+ builder.line(line != null ? Integer.parseInt(line) : null);
+ builder.description(parameters.get("description"));
+ builder.severity(parameters.get("severity"));
+ String effortToFix = parameters.get("effortToFix");
+ builder.effortToFix(effortToFix!=null ? Double.parseDouble(effortToFix) : null);
+ // TODO verify existence of rule
+ builder.ruleKey(RuleKey.parse(parameters.get("rule")));
+ builder.manual(true);
+ Issue issue = builder.build();
+ return actions.create((DefaultIssue) issue, UserSession.get());
+ }
+}
servicesContainer.addSingleton(ServerIssueActions.class);
servicesContainer.addSingleton(ServerIssueFinder.class);
servicesContainer.addSingleton(WebIssuesApi.class);
- servicesContainer.addSingleton(JRubyInternalIssues.class);
+ servicesContainer.addSingleton(WebIssuesInternal.class);
// rules
servicesContainer.addSingleton(WebRules.class);
this.i18n = i18n;
}
- public String l10nRuleName(Rule rule) {
+ public String ruleL10nName(Rule rule) {
String name = i18n.getName(rule.getRepositoryKey(), rule.getKey(), UserSession.get().locale());
if (name == null) {
name = rule.getName();
return name;
}
- public String l10nRuleDescription(Rule rule) {
+ public String ruleL10nDescription(Rule rule) {
String desc = i18n.getDescription(rule.getRepositoryKey(), rule.getKey(), UserSession.get().locale());
if (desc == null) {
desc = rule.getDescription();
}
json[:severity] = issue.severity if issue.severity
json[:desc] = issue.description if issue.description
- json[:line] = issue.line if issue.line
- json[:cost] = issue.cost if issue.cost
+ json[:line] = issue.line.to_i if issue.line
+ json[:effortToFix] = issue.effortToFix.to_f if issue.effortToFix
json[:userLogin] = issue.userLogin if issue.userLogin
json[:assignee] = issue.assignee if issue.assignee
json[:creationDate] = format_java_datetime(issue.creationDate) if issue.creationDate
end
def rule_to_json(rule)
- l10n_name = Internal.rules.l10nRuleName(rule)
- l10n_desc = Internal.rules.l10nRuleDescription(rule)
+ l10n_name = Internal.rules.ruleL10nName(rule)
+ l10n_desc = Internal.rules.ruleL10nDescription(rule)
json = {:key => rule.getKey()}
json[:name] = l10n_name if l10n_name
json[:desc] = l10n_desc if l10n_desc
end
end
- issues = Api.issues.find(options).issues
- issues.each do |issue|
+ @issue_results = Api.issues.find(options)
+ @issue_results.issues.each do |issue|
# sorted by severity => from blocker to info
if @lines && issue.line && issue.line>0 && issue.line<=@lines.size
@lines[issue.line-1].add_issue(issue)
class Internal
def self.issues
- component(Java::OrgSonarServerIssue::JRubyInternalIssues.java_class)
+ component(Java::OrgSonarServerIssue::WebIssuesInternal.java_class)
end
def self.issues_api
<%= message('author') -%>:
</td>
<td class="val">
- <% author = @issue.user_login %>
+ <% author = @issue.userLogin %>
<%= author ? h(author) : '-' -%>
</td>
</tr>
<% if @issue.rule_key %>
- <% rule_name = Internal.rules.ruleName(I18n.locale, @issue.rule_key) %>
+ <% rule_name = Internal.rules.ruleL10nName(@issue.rule_key) %>
<tr>
<td class="key">
<%= message('rule') -%>:
Line
</th>
<th width="1%">
- Cost
+ Effort to Fix
</th>
<th>
User
<%= issue.line -%>
</td>
<td>
- <%= issue.cost -%>
+ <%= issue.effortToFix -%>
</td>
<td>
<%= issue.userLogin -%>
<img src="<%= ApplicationController.root_context -%>/images/priority/<%= issue.severity -%>.png">
<span class="rulename">
- <% rule_name = Internal.rules.ruleName(I18n.locale, issue.rule_key) %>
+ <% rule_name = Internal.rules.ruleL10nName(@issue_results.rule(issue)) %>
<a class="open-modal issue-rule-modal" modal-width="800" href="<%= url_for :controller => 'rules', :action => 'show', :id => issue.rule_key.to_s, :modal => 'true', :layout => 'false' -%>">
<%= h rule_name -%>
</a>
t.column :manual_issue, :boolean, :null => false
t.column :description, :string, :null => true, :limit => 4000
t.column :line, :integer, :null => true
- t.column :cost, :decimal, :null => true, :precision => 30, :scale => 20
+ t.column :effort_to_fix, :decimal, :null => true, :precision => 30, :scale => 20
t.column :status, :string , :null => true, :limit => 20
t.column :resolution, :string , :null => true, :limit => 20
t.column :checksum, :string , :null => true, :limit => 1000
UserSession.set(new UserSession(123, "emmerik", Locale.FRENCH));
when(i18n.getName("squid", "AvoidCycle", Locale.FRENCH)).thenReturn("Eviter les cycles");
- String name = facade.l10nRuleName(new Rule("squid", "AvoidCycle"));
+ String name = facade.ruleL10nName(new Rule("squid", "AvoidCycle"));
assertThat(name).isEqualTo("Eviter les cycles");
}
Rule rule = new Rule("squid", "AvoidCycle");
rule.setName("Avoid cycles");
- String name = facade.l10nRuleName(rule);
+ String name = facade.ruleL10nName(rule);
assertThat(name).isEqualTo("Avoid cycles");
}
UserSession.set(new UserSession(123, "emmerik", Locale.FRENCH));
when(i18n.getDescription("squid", "AvoidCycle", Locale.FRENCH)).thenReturn("Les cycles sont le mal");
- String desc = facade.l10nRuleDescription(new Rule("squid", "AvoidCycle"));
+ String desc = facade.ruleL10nDescription(new Rule("squid", "AvoidCycle"));
assertThat(desc).isEqualTo("Les cycles sont le mal");
}
Rule rule = new Rule("squid", "AvoidCycle");
rule.setDescription("Cycles are evil");
- String desc = facade.l10nRuleDescription(rule);
+ String desc = facade.ruleL10nDescription(rule);
assertThat(desc).isEqualTo("Cycles are evil");
}
return JsonUtils.getInteger(json, "line");
}
+ // TODO to be removed
public Double cost() {
- return JsonUtils.getDouble(json, "cost");
+ return JsonUtils.getDouble(json, "effortToFix");
+ }
+
+ public Double effortToFix() {
+ return JsonUtils.getDouble(json, "effortToFix");
}
public String status() {
return this;
}
+ // TODO to be removed
public NewIssue cost(Double d) {
params.put("cost", d);
return this;
}
+ public NewIssue effortToFix(Double d) {
+ params.put("effortToFix", d);
+ return this;
+ }
+
public NewIssue attribute(String key, String value) {
params.put("attr[" + key + "]", value);
return this;
assertThat(first.status()).isEqualTo("OPEN");
assertThat(first.assignee()).isEqualTo("karadoc");
assertThat(first.description()).isEqualTo("the desc");
- assertThat(first.cost()).isEqualTo(4.2);
+ assertThat(first.effortToFix()).isEqualTo(4.2);
assertThat(first.userLogin()).isEqualTo("perceval");
assertThat(first.creationDate()).isNotNull();
assertThat(first.updateDate()).isNotNull();
Issue second = list.get(1);
assertThat(second.key()).isEqualTo("FGHIJ");
assertThat(second.line()).isNull();
- assertThat(second.cost()).isNull();
+ assertThat(second.effortToFix()).isNull();
assertThat(second.description()).isNull();
assertThat(second.attribute("JIRA")).isNull();
assertThat(second.attributes()).isEmpty();
public void test_create() {
NewIssue newIssue = NewIssue.create()
.component("Action.java")
- .cost(4.2)
+ .effortToFix(4.2)
.description("the desc")
.line(123)
.rule("squid:AvoidCycle")
"resolution": "FIXED",
"status": "OPEN",
"assignee": "karadoc",
- "cost": 4.2,
+ "effortToFix": 4.2,
"desc": "the desc",
"title": "the title",
"userLogin": "perceval",