Browse Source

SONAR-7291 Rename IssueUpdater to IssueFieldsSetter

A new IssueUpdater used to update issue in db needs to be created
tags/6.3-RC1
Julien Lancelot 7 years ago
parent
commit
ea21e551a7
32 changed files with 101 additions and 121 deletions
  1. 3
    3
      server/sonar-ce/src/main/java/org/sonar/ce/container/ComputeEngineContainerImpl.java
  2. 3
    3
      server/sonar-server/src/main/java/org/sonar/server/computation/task/projectanalysis/issue/IssueAssigner.java
  3. 4
    4
      server/sonar-server/src/main/java/org/sonar/server/computation/task/projectanalysis/issue/IssueLifecycle.java
  4. 3
    3
      server/sonar-server/src/main/java/org/sonar/server/computation/task/projectanalysis/issue/MovedIssueVisitor.java
  5. 3
    3
      server/sonar-server/src/main/java/org/sonar/server/computation/task/projectanalysis/issue/NewEffortCalculator.java
  6. 7
    8
      server/sonar-server/src/main/java/org/sonar/server/issue/AbstractChangeTagsAction.java
  7. 2
    3
      server/sonar-server/src/main/java/org/sonar/server/issue/AddTagsAction.java
  8. 2
    2
      server/sonar-server/src/main/java/org/sonar/server/issue/AssignAction.java
  9. 2
    2
      server/sonar-server/src/main/java/org/sonar/server/issue/CommentAction.java
  10. 3
    3
      server/sonar-server/src/main/java/org/sonar/server/issue/IssueChangelog.java
  11. 2
    2
      server/sonar-server/src/main/java/org/sonar/server/issue/IssueCommentService.java
  12. 9
    22
      server/sonar-server/src/main/java/org/sonar/server/issue/IssueFieldsSetter.java
  13. 2
    2
      server/sonar-server/src/main/java/org/sonar/server/issue/IssueService.java
  14. 2
    3
      server/sonar-server/src/main/java/org/sonar/server/issue/RemoveTagsAction.java
  15. 2
    2
      server/sonar-server/src/main/java/org/sonar/server/issue/SetSeverityAction.java
  16. 2
    2
      server/sonar-server/src/main/java/org/sonar/server/issue/SetTypeAction.java
  17. 6
    6
      server/sonar-server/src/main/java/org/sonar/server/issue/workflow/FunctionExecutor.java
  18. 3
    3
      server/sonar-server/src/main/java/org/sonar/server/issue/workflow/IssueWorkflow.java
  19. 2
    2
      server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevel4.java
  20. 2
    2
      server/sonar-server/src/test/java/org/sonar/server/computation/task/projectanalysis/issue/IssueAssignerTest.java
  21. 2
    2
      server/sonar-server/src/test/java/org/sonar/server/computation/task/projectanalysis/issue/IssueLifecycleTest.java
  22. 2
    2
      server/sonar-server/src/test/java/org/sonar/server/computation/task/projectanalysis/issue/MovedIssueVisitorTest.java
  23. 3
    4
      server/sonar-server/src/test/java/org/sonar/server/issue/AddTagsActionTest.java
  24. 10
    7
      server/sonar-server/src/test/java/org/sonar/server/issue/AssignActionTest.java
  25. 1
    1
      server/sonar-server/src/test/java/org/sonar/server/issue/CommentActionTest.java
  26. 2
    2
      server/sonar-server/src/test/java/org/sonar/server/issue/IssueCommentServiceTest.java
  27. 8
    14
      server/sonar-server/src/test/java/org/sonar/server/issue/IssueFieldsSetterTest.java
  28. 3
    4
      server/sonar-server/src/test/java/org/sonar/server/issue/RemoveTagsActionTest.java
  29. 1
    1
      server/sonar-server/src/test/java/org/sonar/server/issue/SetSeverityActionTest.java
  30. 1
    1
      server/sonar-server/src/test/java/org/sonar/server/issue/SetTypeActionTest.java
  31. 2
    2
      server/sonar-server/src/test/java/org/sonar/server/issue/workflow/IssueWorkflowTest.java
  32. 2
    1
      sonar-plugin-api/src/main/java/org/sonar/api/server/rule/RuleTagFormat.java

+ 3
- 3
server/sonar-ce/src/main/java/org/sonar/ce/container/ComputeEngineContainerImpl.java View File

@@ -64,8 +64,8 @@ import org.sonar.db.DbClient;
import org.sonar.db.DefaultDatabase;
import org.sonar.db.purge.PurgeProfiler;
import org.sonar.db.version.DatabaseVersion;
import org.sonar.process.logging.LogbackHelper;
import org.sonar.process.Props;
import org.sonar.process.logging.LogbackHelper;
import org.sonar.server.component.ComponentCleanerService;
import org.sonar.server.component.ComponentFinder;
import org.sonar.server.component.ComponentService;
@@ -76,7 +76,7 @@ import org.sonar.server.computation.taskprocessor.CeTaskProcessorModule;
import org.sonar.server.debt.DebtModelPluginRepository;
import org.sonar.server.debt.DebtRulesXMLImporter;
import org.sonar.server.event.NewAlerts;
import org.sonar.server.issue.IssueUpdater;
import org.sonar.server.issue.IssueFieldsSetter;
import org.sonar.server.issue.index.IssueIndex;
import org.sonar.server.issue.index.IssueIndexer;
import org.sonar.server.issue.notification.ChangesOnMyIssueNotificationDispatcher;
@@ -345,7 +345,7 @@ public class ComputeEngineContainerImpl implements ComputeEngineContainer {
// issues
IssueIndexer.class,
PermissionIndexer.class,
IssueUpdater.class, // used in Web Services and CE's DebtCalculator
IssueFieldsSetter.class, // used in Web Services and CE's DebtCalculator
FunctionExecutor.class, // used by IssueWorkflow
IssueWorkflow.class, // used in Web Services and CE's DebtCalculator
NewIssuesEmailTemplate.class,

+ 3
- 3
server/sonar-server/src/main/java/org/sonar/server/computation/task/projectanalysis/issue/IssueAssigner.java View File

@@ -32,7 +32,7 @@ import org.sonar.server.computation.task.projectanalysis.analysis.AnalysisMetada
import org.sonar.server.computation.task.projectanalysis.component.Component;
import org.sonar.server.computation.task.projectanalysis.scm.ScmInfo;
import org.sonar.server.computation.task.projectanalysis.scm.ScmInfoRepository;
import org.sonar.server.issue.IssueUpdater;
import org.sonar.server.issue.IssueFieldsSetter;

import static org.apache.commons.lang.StringUtils.defaultIfEmpty;
import static org.sonar.core.issue.IssueChangeContext.createScan;
@@ -52,7 +52,7 @@ public class IssueAssigner extends IssueVisitor {

private final ScmInfoRepository scmInfoRepository;
private final DefaultAssignee defaultAssignee;
private final IssueUpdater issueUpdater;
private final IssueFieldsSetter issueUpdater;
private final ScmAccountToUser scmAccountToUser;
private final IssueChangeContext changeContext;

@@ -60,7 +60,7 @@ public class IssueAssigner extends IssueVisitor {
private ScmInfo scmChangesets = null;

public IssueAssigner(AnalysisMetadataHolder analysisMetadataHolder, ScmInfoRepository scmInfoRepository, ScmAccountToUser scmAccountToUser, DefaultAssignee defaultAssignee,
IssueUpdater issueUpdater) {
IssueFieldsSetter issueUpdater) {
this.scmInfoRepository = scmInfoRepository;
this.scmAccountToUser = scmAccountToUser;
this.defaultAssignee = defaultAssignee;

+ 4
- 4
server/sonar-server/src/main/java/org/sonar/server/computation/task/projectanalysis/issue/IssueLifecycle.java View File

@@ -26,7 +26,7 @@ import org.sonar.core.issue.DefaultIssue;
import org.sonar.core.issue.IssueChangeContext;
import org.sonar.core.util.Uuids;
import org.sonar.server.computation.task.projectanalysis.analysis.AnalysisMetadataHolder;
import org.sonar.server.issue.IssueUpdater;
import org.sonar.server.issue.IssueFieldsSetter;
import org.sonar.server.issue.workflow.IssueWorkflow;

/**
@@ -41,15 +41,15 @@ public class IssueLifecycle {

private final IssueWorkflow workflow;
private final IssueChangeContext changeContext;
private final IssueUpdater updater;
private final IssueFieldsSetter updater;
private final DebtCalculator debtCalculator;

public IssueLifecycle(AnalysisMetadataHolder analysisMetadataHolder, IssueWorkflow workflow, IssueUpdater updater, DebtCalculator debtCalculator) {
public IssueLifecycle(AnalysisMetadataHolder analysisMetadataHolder, IssueWorkflow workflow, IssueFieldsSetter updater, DebtCalculator debtCalculator) {
this(IssueChangeContext.createScan(new Date(analysisMetadataHolder.getAnalysisDate())), workflow, updater, debtCalculator);
}

@VisibleForTesting
IssueLifecycle(IssueChangeContext changeContext, IssueWorkflow workflow, IssueUpdater updater, DebtCalculator debtCalculator) {
IssueLifecycle(IssueChangeContext changeContext, IssueWorkflow workflow, IssueFieldsSetter updater, DebtCalculator debtCalculator) {
this.workflow = workflow;
this.updater = updater;
this.debtCalculator = debtCalculator;

+ 3
- 3
server/sonar-server/src/main/java/org/sonar/server/computation/task/projectanalysis/issue/MovedIssueVisitor.java View File

@@ -27,16 +27,16 @@ import org.sonar.server.computation.task.projectanalysis.analysis.AnalysisMetada
import org.sonar.server.computation.task.projectanalysis.component.Component;
import org.sonar.server.computation.task.projectanalysis.filemove.MovedFilesRepository;
import org.sonar.server.computation.task.projectanalysis.filemove.MovedFilesRepository.OriginalFile;
import org.sonar.server.issue.IssueUpdater;
import org.sonar.server.issue.IssueFieldsSetter;

import static com.google.common.base.Preconditions.checkState;

public class MovedIssueVisitor extends IssueVisitor {
private final AnalysisMetadataHolder analysisMetadataHolder;
private final MovedFilesRepository movedFilesRepository;
private final IssueUpdater issueUpdater;
private final IssueFieldsSetter issueUpdater;

public MovedIssueVisitor(AnalysisMetadataHolder analysisMetadataHolder, MovedFilesRepository movedFilesRepository, IssueUpdater issueUpdater) {
public MovedIssueVisitor(AnalysisMetadataHolder analysisMetadataHolder, MovedFilesRepository movedFilesRepository, IssueFieldsSetter issueUpdater) {
this.analysisMetadataHolder = analysisMetadataHolder;
this.movedFilesRepository = movedFilesRepository;
this.issueUpdater = issueUpdater;

+ 3
- 3
server/sonar-server/src/main/java/org/sonar/server/computation/task/projectanalysis/issue/NewEffortCalculator.java View File

@@ -38,7 +38,7 @@ import org.sonar.core.issue.DefaultIssue;
import org.sonar.core.issue.FieldDiffs;
import org.sonar.db.issue.IssueChangeDto;
import org.sonar.server.computation.task.projectanalysis.period.Period;
import org.sonar.server.issue.IssueUpdater;
import org.sonar.server.issue.IssueFieldsSetter;

import static com.google.common.collect.FluentIterable.from;

@@ -108,7 +108,7 @@ public class NewEffortCalculator {
}

private static FieldDiffs.Diff debtDiff(FieldDiffs diffs) {
return diffs.diffs().get(IssueUpdater.TECHNICAL_DEBT);
return diffs.diffs().get(IssueFieldsSetter.TECHNICAL_DEBT);
}

private enum ToFieldDiffs implements Function<IssueChangeDto, FieldDiffs> {
@@ -123,7 +123,7 @@ public class NewEffortCalculator {
INSTANCE;
@Override
public boolean apply(@Nonnull FieldDiffs diffs) {
return diffs.diffs().containsKey(IssueUpdater.TECHNICAL_DEBT);
return diffs.diffs().containsKey(IssueFieldsSetter.TECHNICAL_DEBT);
}
}
}

+ 7
- 8
server/sonar-server/src/main/java/org/sonar/server/issue/AbstractChangeTagsAction.java View File

@@ -22,25 +22,24 @@ package org.sonar.server.issue;
import com.google.common.base.Splitter;
import com.google.common.base.Strings;
import com.google.common.collect.Sets;
import org.sonar.api.server.ServerSide;
import java.util.Collection;
import java.util.Map;
import java.util.Set;
import org.sonar.api.issue.Issue;
import org.sonar.api.issue.condition.IsUnResolved;
import org.sonar.core.issue.DefaultIssue;
import org.sonar.api.server.ServerSide;
import org.sonar.api.server.rule.RuleTagFormat;
import org.sonar.core.issue.DefaultIssue;
import org.sonar.server.user.UserSession;

import java.util.Collection;
import java.util.Map;
import java.util.Set;

@ServerSide
public abstract class AbstractChangeTagsAction extends Action {

private static final Splitter TAGS_SPLITTER = Splitter.on(',').trimResults().omitEmptyStrings();

private final IssueUpdater issueUpdater;
private final IssueFieldsSetter issueUpdater;

protected AbstractChangeTagsAction(String key, IssueUpdater issueUpdater) {
protected AbstractChangeTagsAction(String key, IssueFieldsSetter issueUpdater) {
super(key);
this.issueUpdater = issueUpdater;
super.setConditions(new IsUnResolved());

+ 2
- 3
server/sonar-server/src/main/java/org/sonar/server/issue/AddTagsAction.java View File

@@ -20,17 +20,16 @@
package org.sonar.server.issue;

import com.google.common.collect.Sets;
import org.sonar.api.server.ServerSide;

import java.util.Collection;
import java.util.Set;
import org.sonar.api.server.ServerSide;

@ServerSide
public class AddTagsAction extends AbstractChangeTagsAction {

public static final String KEY = "add_tags";

public AddTagsAction(IssueUpdater issueUpdater) {
public AddTagsAction(IssueFieldsSetter issueUpdater) {
super(KEY, issueUpdater);
}


+ 2
- 2
server/sonar-server/src/main/java/org/sonar/server/issue/AssignAction.java View File

@@ -37,9 +37,9 @@ public class AssignAction extends Action {
public static final String VERIFIED_ASSIGNEE = "verifiedAssignee";

private final UserFinder userFinder;
private final IssueUpdater issueUpdater;
private final IssueFieldsSetter issueUpdater;

public AssignAction(UserFinder userFinder, IssueUpdater issueUpdater) {
public AssignAction(UserFinder userFinder, IssueFieldsSetter issueUpdater) {
super(ASSIGN_KEY);
this.userFinder = userFinder;
this.issueUpdater = issueUpdater;

+ 2
- 2
server/sonar-server/src/main/java/org/sonar/server/issue/CommentAction.java View File

@@ -33,9 +33,9 @@ public class CommentAction extends Action {
public static final String COMMENT_KEY = "comment";
public static final String COMMENT_PROPERTY = "comment";

private final IssueUpdater issueUpdater;
private final IssueFieldsSetter issueUpdater;

public CommentAction(IssueUpdater issueUpdater) {
public CommentAction(IssueFieldsSetter issueUpdater) {
super(COMMENT_KEY);
this.issueUpdater = issueUpdater;
}

+ 3
- 3
server/sonar-server/src/main/java/org/sonar/server/issue/IssueChangelog.java View File

@@ -51,9 +51,9 @@ public class IssueChangelog {
private static void replacedTechnicalDebtByEffort(List<FieldDiffs> changes) {
for (FieldDiffs fieldDiffs : changes) {
Map<String, FieldDiffs.Diff> diffs = fieldDiffs.diffs();
if (diffs.containsKey(IssueUpdater.TECHNICAL_DEBT)) {
FieldDiffs.Diff value = diffs.get(IssueUpdater.TECHNICAL_DEBT);
diffs.remove(IssueUpdater.TECHNICAL_DEBT);
if (diffs.containsKey(IssueFieldsSetter.TECHNICAL_DEBT)) {
FieldDiffs.Diff value = diffs.get(IssueFieldsSetter.TECHNICAL_DEBT);
diffs.remove(IssueFieldsSetter.TECHNICAL_DEBT);
diffs.put("effort", value);
}
}

+ 2
- 2
server/sonar-server/src/main/java/org/sonar/server/issue/IssueCommentService.java View File

@@ -45,10 +45,10 @@ public class IssueCommentService {

private final DbClient dbClient;
private final IssueService issueService;
private final IssueUpdater updater;
private final IssueFieldsSetter updater;
private final UserSession userSession;

public IssueCommentService(DbClient dbClient, IssueService issueService, IssueUpdater updater, UserSession userSession) {
public IssueCommentService(DbClient dbClient, IssueService issueService, IssueFieldsSetter updater, UserSession userSession) {
this.dbClient = dbClient;
this.issueService = issueService;
this.updater = updater;

server/sonar-server/src/main/java/org/sonar/server/issue/IssueUpdater.java → server/sonar-server/src/main/java/org/sonar/server/issue/IssueFieldsSetter.java View File

@@ -19,12 +19,9 @@
*/
package org.sonar.server.issue;

import com.google.common.base.Function;
import com.google.common.base.Joiner;
import com.google.common.base.Predicate;
import com.google.common.collect.Collections2;
import com.google.common.collect.Sets;
import java.util.Calendar;
import java.time.temporal.ChronoUnit;
import java.util.Collection;
import java.util.Date;
import java.util.Locale;
@@ -32,7 +29,6 @@ import java.util.Objects;
import java.util.Set;
import javax.annotation.Nullable;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.time.DateUtils;
import org.sonar.api.ce.ComputeEngineSide;
import org.sonar.api.rules.RuleType;
import org.sonar.api.server.ServerSide;
@@ -42,6 +38,7 @@ import org.sonar.api.utils.Duration;
import org.sonar.core.issue.DefaultIssue;
import org.sonar.core.issue.DefaultIssueComment;
import org.sonar.core.issue.IssueChangeContext;
import org.sonar.core.util.stream.Collectors;

import static com.google.common.base.Preconditions.checkState;
import static com.google.common.base.Strings.isNullOrEmpty;
@@ -51,7 +48,7 @@ import static com.google.common.base.Strings.isNullOrEmpty;
*/
@ServerSide
@ComputeEngineSide
public class IssueUpdater {
public class IssueFieldsSetter {

public static final String UNUSED = "";
public static final String SEVERITY = "severity";
@@ -253,7 +250,7 @@ public class IssueUpdater {
}

public void setCloseDate(DefaultIssue issue, @Nullable Date d, IssueChangeContext context) {
Date dateWithoutMilliseconds = d == null ? null : DateUtils.truncate(d, Calendar.SECOND);
Date dateWithoutMilliseconds = d == null ? null : Date.from(d.toInstant().truncatedTo(ChronoUnit.SECONDS));
if (!Objects.equals(dateWithoutMilliseconds, issue.closeDate())) {
issue.setCloseDate(d);
issue.setUpdateDate(context.date());
@@ -310,23 +307,13 @@ public class IssueUpdater {
}

public boolean setTags(DefaultIssue issue, Collection<String> tags, IssueChangeContext context) {
Set<String> newTags = Sets.newHashSet(Collections2.transform(
Collections2.filter(tags, new Predicate<String>() {
@Override
public boolean apply(@Nullable String tag) {
return tag != null && !tag.isEmpty();
}
}), new Function<String, String>() {
@Override
public String apply(String tag) {
String lowerCaseTag = tag.toLowerCase(Locale.ENGLISH);
RuleTagFormat.validate(lowerCaseTag);
return lowerCaseTag;
}
}));
Set<String> newTags = tags.stream()
.filter(Objects::nonNull)
.filter(tag -> !tag.isEmpty())
.map(tag -> RuleTagFormat.validate(tag.toLowerCase(Locale.ENGLISH)))
.collect(Collectors.toSet());

Set<String> oldTags = Sets.newHashSet(issue.tags());

if (!oldTags.equals(newTags)) {
issue.setFieldChange(context, TAGS,
oldTags.isEmpty() ? null : CHANGELOG_TAG_JOINER.join(oldTags),

+ 2
- 2
server/sonar-server/src/main/java/org/sonar/server/issue/IssueService.java View File

@@ -61,7 +61,7 @@ public class IssueService {
private final IssueIndex issueIndex;

private final IssueWorkflow workflow;
private final IssueUpdater issueUpdater;
private final IssueFieldsSetter issueUpdater;
private final IssueStorage issueStorage;
private final NotificationManager notificationService;
private final UserFinder userFinder;
@@ -70,7 +70,7 @@ public class IssueService {
public IssueService(DbClient dbClient, IssueIndex issueIndex,
IssueWorkflow workflow,
IssueStorage issueStorage,
IssueUpdater issueUpdater,
IssueFieldsSetter issueUpdater,
NotificationManager notificationService,
UserFinder userFinder,
UserSession userSession) {

+ 2
- 3
server/sonar-server/src/main/java/org/sonar/server/issue/RemoveTagsAction.java View File

@@ -20,17 +20,16 @@
package org.sonar.server.issue;

import com.google.common.collect.Sets;
import org.sonar.api.server.ServerSide;

import java.util.Collection;
import java.util.Set;
import org.sonar.api.server.ServerSide;

@ServerSide
public class RemoveTagsAction extends AbstractChangeTagsAction {

public static final String KEY = "remove_tags";

public RemoveTagsAction(IssueUpdater issueUpdater) {
public RemoveTagsAction(IssueFieldsSetter issueUpdater) {
super(KEY, issueUpdater);
}


+ 2
- 2
server/sonar-server/src/main/java/org/sonar/server/issue/SetSeverityAction.java View File

@@ -35,10 +35,10 @@ public class SetSeverityAction extends Action {

public static final String SET_SEVERITY_KEY = "set_severity";

private final IssueUpdater issueUpdater;
private final IssueFieldsSetter issueUpdater;
private final UserSession userSession;

public SetSeverityAction(IssueUpdater issueUpdater, UserSession userSession) {
public SetSeverityAction(IssueFieldsSetter issueUpdater, UserSession userSession) {
super(SET_SEVERITY_KEY);
this.issueUpdater = issueUpdater;
this.userSession = userSession;

+ 2
- 2
server/sonar-server/src/main/java/org/sonar/server/issue/SetTypeAction.java View File

@@ -35,9 +35,9 @@ public class SetTypeAction extends Action {
private static final String SET_TYPE_KEY = "set_type";
private static final String TYPE_PARAMETER = "type";

private final IssueUpdater issueUpdater;
private final IssueFieldsSetter issueUpdater;

public SetTypeAction(IssueUpdater issueUpdater) {
public SetTypeAction(IssueFieldsSetter issueUpdater) {
super(SET_TYPE_KEY);
this.issueUpdater = issueUpdater;
super.setConditions(new IsUnResolved());

+ 6
- 6
server/sonar-server/src/main/java/org/sonar/server/issue/workflow/FunctionExecutor.java View File

@@ -20,21 +20,21 @@
package org.sonar.server.issue.workflow;

import javax.annotation.Nullable;
import org.sonar.api.issue.Issue;
import org.sonar.api.ce.ComputeEngineSide;
import org.sonar.api.issue.Issue;
import org.sonar.api.server.ServerSide;
import org.sonar.api.user.User;
import org.sonar.core.issue.DefaultIssue;
import org.sonar.core.issue.IssueChangeContext;
import org.sonar.server.issue.IssueUpdater;
import org.sonar.server.issue.IssueFieldsSetter;

@ServerSide
@ComputeEngineSide
public class FunctionExecutor {

private final IssueUpdater updater;
private final IssueFieldsSetter updater;

public FunctionExecutor(IssueUpdater updater) {
public FunctionExecutor(IssueFieldsSetter updater) {
this.updater = updater;
}

@@ -48,11 +48,11 @@ public class FunctionExecutor {
}

static class FunctionContext implements Function.Context {
private final IssueUpdater updater;
private final IssueFieldsSetter updater;
private final DefaultIssue issue;
private final IssueChangeContext changeContext;

FunctionContext(IssueUpdater updater, DefaultIssue issue, IssueChangeContext changeContext) {
FunctionContext(IssueFieldsSetter updater, DefaultIssue issue, IssueChangeContext changeContext) {
this.updater = updater;
this.issue = issue;
this.changeContext = changeContext;

+ 3
- 3
server/sonar-server/src/main/java/org/sonar/server/issue/workflow/IssueWorkflow.java View File

@@ -30,7 +30,7 @@ import org.sonar.api.server.ServerSide;
import org.sonar.api.web.UserRole;
import org.sonar.core.issue.DefaultIssue;
import org.sonar.core.issue.IssueChangeContext;
import org.sonar.server.issue.IssueUpdater;
import org.sonar.server.issue.IssueFieldsSetter;

@ServerSide
@ComputeEngineSide
@@ -38,10 +38,10 @@ public class IssueWorkflow implements Startable {

public static final String AUTOMATIC_CLOSE_TRANSITION = "automaticclose";
private final FunctionExecutor functionExecutor;
private final IssueUpdater updater;
private final IssueFieldsSetter updater;
private StateMachine machine;

public IssueWorkflow(FunctionExecutor functionExecutor, IssueUpdater updater) {
public IssueWorkflow(FunctionExecutor functionExecutor, IssueFieldsSetter updater) {
this.functionExecutor = functionExecutor;
this.updater = updater;
}

+ 2
- 2
server/sonar-server/src/main/java/org/sonar/server/platform/platformlevel/PlatformLevel4.java View File

@@ -65,9 +65,9 @@ import org.sonar.server.issue.InternalRubyIssueService;
import org.sonar.server.issue.IssueBulkChangeService;
import org.sonar.server.issue.IssueChangelogService;
import org.sonar.server.issue.IssueCommentService;
import org.sonar.server.issue.IssueFieldsSetter;
import org.sonar.server.issue.IssueQueryService;
import org.sonar.server.issue.IssueService;
import org.sonar.server.issue.IssueUpdater;
import org.sonar.server.issue.RemoveTagsAction;
import org.sonar.server.issue.ServerIssueStorage;
import org.sonar.server.issue.SetSeverityAction;
@@ -398,7 +398,7 @@ public class PlatformLevel4 extends PlatformLevel {
IssueIndexer.class,
PermissionIndexer.class,
ServerIssueStorage.class,
IssueUpdater.class,
IssueFieldsSetter.class,
FunctionExecutor.class,
IssueWorkflow.class,
IssueCommentService.class,

+ 2
- 2
server/sonar-server/src/test/java/org/sonar/server/computation/task/projectanalysis/issue/IssueAssignerTest.java View File

@@ -28,7 +28,7 @@ import org.sonar.server.computation.task.projectanalysis.analysis.AnalysisMetada
import org.sonar.server.computation.task.projectanalysis.component.Component;
import org.sonar.server.computation.task.projectanalysis.scm.Changeset;
import org.sonar.server.computation.task.projectanalysis.scm.ScmInfoRepositoryRule;
import org.sonar.server.issue.IssueUpdater;
import org.sonar.server.issue.IssueFieldsSetter;

import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.mock;
@@ -52,7 +52,7 @@ public class IssueAssignerTest {
ScmAccountToUser scmAccountToUser = mock(ScmAccountToUser.class);
DefaultAssignee defaultAssignee = mock(DefaultAssignee.class);

IssueAssigner underTest = new IssueAssigner(analysisMetadataHolder, scmInfoRepository, scmAccountToUser, defaultAssignee, new IssueUpdater());
IssueAssigner underTest = new IssueAssigner(analysisMetadataHolder, scmInfoRepository, scmAccountToUser, defaultAssignee, new IssueFieldsSetter());

@Test
public void nothing_to_do_if_no_changeset() throws Exception {

+ 2
- 2
server/sonar-server/src/test/java/org/sonar/server/computation/task/projectanalysis/issue/IssueLifecycleTest.java View File

@@ -27,7 +27,7 @@ import org.sonar.core.issue.DefaultIssue;
import org.sonar.core.issue.IssueChangeContext;
import org.sonar.db.protobuf.DbCommons;
import org.sonar.db.protobuf.DbIssues;
import org.sonar.server.issue.IssueUpdater;
import org.sonar.server.issue.IssueFieldsSetter;
import org.sonar.server.issue.workflow.IssueWorkflow;

import static com.google.common.collect.Lists.newArrayList;
@@ -52,7 +52,7 @@ public class IssueLifecycleTest {

IssueWorkflow workflow = mock(IssueWorkflow.class);

IssueUpdater updater = mock(IssueUpdater.class);
IssueFieldsSetter updater = mock(IssueFieldsSetter.class);

DebtCalculator debtCalculator = mock(DebtCalculator.class);


+ 2
- 2
server/sonar-server/src/test/java/org/sonar/server/computation/task/projectanalysis/issue/MovedIssueVisitorTest.java View File

@@ -31,7 +31,7 @@ import org.sonar.server.computation.task.projectanalysis.analysis.AnalysisMetada
import org.sonar.server.computation.task.projectanalysis.component.Component;
import org.sonar.server.computation.task.projectanalysis.component.ReportComponent;
import org.sonar.server.computation.task.projectanalysis.filemove.MovedFilesRepository;
import org.sonar.server.issue.IssueUpdater;
import org.sonar.server.issue.IssueFieldsSetter;

import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Matchers.any;
@@ -53,7 +53,7 @@ public class MovedIssueVisitorTest {
public AnalysisMetadataHolderRule analysisMetadataHolder = new AnalysisMetadataHolderRule();

private MovedFilesRepository movedFilesRepository = mock(MovedFilesRepository.class);
private MovedIssueVisitor underTest = new MovedIssueVisitor(analysisMetadataHolder, movedFilesRepository, new IssueUpdater());
private MovedIssueVisitor underTest = new MovedIssueVisitor(analysisMetadataHolder, movedFilesRepository, new IssueFieldsSetter());

@Before
public void setUp() throws Exception {

+ 3
- 4
server/sonar-server/src/test/java/org/sonar/server/issue/AddTagsActionTest.java View File

@@ -20,6 +20,8 @@
package org.sonar.server.issue;

import com.google.common.collect.ImmutableSet;
import java.util.Collection;
import java.util.Map;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
@@ -28,9 +30,6 @@ import org.mockito.Matchers;
import org.sonar.core.issue.DefaultIssue;
import org.sonar.core.issue.IssueChangeContext;

import java.util.Collection;
import java.util.Map;

import static com.google.common.collect.Maps.newHashMap;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.eq;
@@ -42,7 +41,7 @@ public class AddTagsActionTest {

private AddTagsAction action;

private IssueUpdater issueUpdater = mock(IssueUpdater.class);
private IssueFieldsSetter issueUpdater = mock(IssueFieldsSetter.class);

@Rule
public ExpectedException throwable = ExpectedException.none();

+ 10
- 7
server/sonar-server/src/test/java/org/sonar/server/issue/AssignActionTest.java View File

@@ -19,32 +19,35 @@
*/
package org.sonar.server.issue;

import java.util.List;
import java.util.Map;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.sonar.api.issue.Issue;
import org.sonar.core.issue.DefaultIssue;
import org.sonar.core.issue.IssueChangeContext;
import org.sonar.api.user.User;
import org.sonar.api.user.UserFinder;
import org.sonar.core.issue.DefaultIssue;
import org.sonar.core.issue.IssueChangeContext;
import org.sonar.core.user.DefaultUser;
import org.sonar.server.user.ThreadLocalUserSession;

import java.util.List;
import java.util.Map;

import static com.google.common.collect.Lists.newArrayList;
import static com.google.common.collect.Maps.newHashMap;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.*;
import static org.mockito.Mockito.any;
import static org.mockito.Mockito.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

public class AssignActionTest {

private AssignAction action;

private final UserFinder userFinder = mock(UserFinder.class);
private IssueUpdater issueUpdater = mock(IssueUpdater.class);
private IssueFieldsSetter issueUpdater = mock(IssueFieldsSetter.class);

@Rule
public ExpectedException throwable = ExpectedException.none();

+ 1
- 1
server/sonar-server/src/test/java/org/sonar/server/issue/CommentActionTest.java View File

@@ -42,7 +42,7 @@ public class CommentActionTest {

private CommentAction action;

private IssueUpdater issueUpdater = mock(IssueUpdater.class);
private IssueFieldsSetter issueUpdater = mock(IssueFieldsSetter.class);

@Before
public void before(){

+ 2
- 2
server/sonar-server/src/test/java/org/sonar/server/issue/IssueCommentServiceTest.java View File

@@ -33,11 +33,11 @@ import org.sonar.core.issue.IssueChangeContext;
import org.sonar.core.permission.GlobalPermissions;
import org.sonar.db.DbClient;
import org.sonar.db.DbSession;
import org.sonar.db.component.ComponentTesting;
import org.sonar.db.issue.IssueChangeDao;
import org.sonar.db.issue.IssueChangeDto;
import org.sonar.db.issue.IssueDto;
import org.sonar.db.rule.RuleTesting;
import org.sonar.db.component.ComponentTesting;
import org.sonar.server.exceptions.BadRequestException;
import org.sonar.server.exceptions.ForbiddenException;
import org.sonar.server.exceptions.NotFoundException;
@@ -68,7 +68,7 @@ public class IssueCommentServiceTest {
private IssueService issueService;

@Mock
private IssueUpdater updater;
private IssueFieldsSetter updater;

@Mock
private IssueChangeDao changeDao;

server/sonar-server/src/test/java/org/sonar/server/issue/IssueUpdaterTest.java → server/sonar-server/src/test/java/org/sonar/server/issue/IssueFieldsSetterTest.java View File

@@ -23,7 +23,6 @@ import java.util.Calendar;
import java.util.Date;
import java.util.Map;
import org.apache.commons.lang.time.DateUtils;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
@@ -35,14 +34,14 @@ import org.sonar.core.issue.IssueChangeContext;
import org.sonar.core.user.DefaultUser;

import static org.assertj.core.api.Assertions.assertThat;
import static org.sonar.server.issue.IssueUpdater.ASSIGNEE;
import static org.sonar.server.issue.IssueUpdater.RESOLUTION;
import static org.sonar.server.issue.IssueUpdater.SEVERITY;
import static org.sonar.server.issue.IssueUpdater.STATUS;
import static org.sonar.server.issue.IssueUpdater.TECHNICAL_DEBT;
import static org.sonar.server.issue.IssueUpdater.UNUSED;
import static org.sonar.server.issue.IssueFieldsSetter.ASSIGNEE;
import static org.sonar.server.issue.IssueFieldsSetter.RESOLUTION;
import static org.sonar.server.issue.IssueFieldsSetter.SEVERITY;
import static org.sonar.server.issue.IssueFieldsSetter.STATUS;
import static org.sonar.server.issue.IssueFieldsSetter.TECHNICAL_DEBT;
import static org.sonar.server.issue.IssueFieldsSetter.UNUSED;

public class IssueUpdaterTest {
public class IssueFieldsSetterTest {

@Rule
public ExpectedException thrown = ExpectedException.none();
@@ -50,12 +49,7 @@ public class IssueUpdaterTest {
DefaultIssue issue = new DefaultIssue();
IssueChangeContext context = IssueChangeContext.createUser(new Date(), "emmerik");

IssueUpdater updater;

@Before
public void setUp() {
updater = new IssueUpdater();
}
IssueFieldsSetter updater = new IssueFieldsSetter();

@Test
public void assign() {

+ 3
- 4
server/sonar-server/src/test/java/org/sonar/server/issue/RemoveTagsActionTest.java View File

@@ -20,6 +20,8 @@
package org.sonar.server.issue;

import com.google.common.collect.ImmutableSet;
import java.util.Collection;
import java.util.Map;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
@@ -28,9 +30,6 @@ import org.mockito.Matchers;
import org.sonar.core.issue.DefaultIssue;
import org.sonar.core.issue.IssueChangeContext;

import java.util.Collection;
import java.util.Map;

import static com.google.common.collect.Maps.newHashMap;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.eq;
@@ -42,7 +41,7 @@ public class RemoveTagsActionTest {

private RemoveTagsAction action;

private IssueUpdater issueUpdater = mock(IssueUpdater.class);
private IssueFieldsSetter issueUpdater = mock(IssueFieldsSetter.class);

@Rule
public ExpectedException throwable = ExpectedException.none();

+ 1
- 1
server/sonar-server/src/test/java/org/sonar/server/issue/SetSeverityActionTest.java View File

@@ -51,7 +51,7 @@ public class SetSeverityActionTest {

private SetSeverityAction action;

private IssueUpdater issueUpdater = mock(IssueUpdater.class);
private IssueFieldsSetter issueUpdater = mock(IssueFieldsSetter.class);

@Before
public void before() {

+ 1
- 1
server/sonar-server/src/test/java/org/sonar/server/issue/SetTypeActionTest.java View File

@@ -48,7 +48,7 @@ public class SetTypeActionTest {
public UserSessionRule userSessionRule = UserSessionRule.standalone();

UserSession userSessionMock = mock(UserSession.class);
IssueUpdater issueUpdater = mock(IssueUpdater.class);
IssueFieldsSetter issueUpdater = mock(IssueFieldsSetter.class);
SetTypeAction underTest;

@Before

+ 2
- 2
server/sonar-server/src/test/java/org/sonar/server/issue/workflow/IssueWorkflowTest.java View File

@@ -32,7 +32,7 @@ import org.sonar.api.issue.DefaultTransitions;
import org.sonar.api.rule.RuleKey;
import org.sonar.core.issue.DefaultIssue;
import org.sonar.core.issue.IssueChangeContext;
import org.sonar.server.issue.IssueUpdater;
import org.sonar.server.issue.IssueFieldsSetter;

import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.Assert.fail;
@@ -47,7 +47,7 @@ import static org.sonar.api.issue.Issue.STATUS_RESOLVED;

public class IssueWorkflowTest {

IssueUpdater updater = new IssueUpdater();
IssueFieldsSetter updater = new IssueFieldsSetter();
IssueWorkflow workflow = new IssueWorkflow(new FunctionExecutor(updater), updater);

@Test

+ 2
- 1
sonar-plugin-api/src/main/java/org/sonar/api/server/rule/RuleTagFormat.java View File

@@ -39,9 +39,10 @@ public class RuleTagFormat {
return StringUtils.isNotBlank(tag) && tag.matches(VALID_CHARACTERS_REGEX);
}

public static void validate(String tag) {
public static String validate(String tag) {
if (!isValid(tag)) {
throw new IllegalArgumentException(String.format("Tag '%s' is invalid. Rule tags accept only the characters: a-z, 0-9, '+', '-', '#', '.'", tag));
}
return tag;
}
}

Loading…
Cancel
Save