Skip to content

Commit

Permalink
SONAR-7291 Rename IssueUpdater to IssueFieldsSetter
Browse files Browse the repository at this point in the history
A new IssueUpdater used to update issue in db needs to be created
  • Loading branch information
julienlancelot committed Dec 12, 2016
1 parent 26a2390 commit ea21e55
Show file tree
Hide file tree
Showing 32 changed files with 101 additions and 121 deletions.
Expand Up @@ -64,8 +64,8 @@
import org.sonar.db.DefaultDatabase; import org.sonar.db.DefaultDatabase;
import org.sonar.db.purge.PurgeProfiler; import org.sonar.db.purge.PurgeProfiler;
import org.sonar.db.version.DatabaseVersion; import org.sonar.db.version.DatabaseVersion;
import org.sonar.process.logging.LogbackHelper;
import org.sonar.process.Props; import org.sonar.process.Props;
import org.sonar.process.logging.LogbackHelper;
import org.sonar.server.component.ComponentCleanerService; import org.sonar.server.component.ComponentCleanerService;
import org.sonar.server.component.ComponentFinder; import org.sonar.server.component.ComponentFinder;
import org.sonar.server.component.ComponentService; import org.sonar.server.component.ComponentService;
Expand All @@ -76,7 +76,7 @@
import org.sonar.server.debt.DebtModelPluginRepository; import org.sonar.server.debt.DebtModelPluginRepository;
import org.sonar.server.debt.DebtRulesXMLImporter; import org.sonar.server.debt.DebtRulesXMLImporter;
import org.sonar.server.event.NewAlerts; 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.IssueIndex;
import org.sonar.server.issue.index.IssueIndexer; import org.sonar.server.issue.index.IssueIndexer;
import org.sonar.server.issue.notification.ChangesOnMyIssueNotificationDispatcher; import org.sonar.server.issue.notification.ChangesOnMyIssueNotificationDispatcher;
Expand Down Expand Up @@ -345,7 +345,7 @@ private static Object[] level4Components() {
// issues // issues
IssueIndexer.class, IssueIndexer.class,
PermissionIndexer.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 FunctionExecutor.class, // used by IssueWorkflow
IssueWorkflow.class, // used in Web Services and CE's DebtCalculator IssueWorkflow.class, // used in Web Services and CE's DebtCalculator
NewIssuesEmailTemplate.class, NewIssuesEmailTemplate.class,
Expand Down
Expand Up @@ -32,7 +32,7 @@
import org.sonar.server.computation.task.projectanalysis.component.Component; 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.ScmInfo;
import org.sonar.server.computation.task.projectanalysis.scm.ScmInfoRepository; 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.apache.commons.lang.StringUtils.defaultIfEmpty;
import static org.sonar.core.issue.IssueChangeContext.createScan; import static org.sonar.core.issue.IssueChangeContext.createScan;
Expand All @@ -52,15 +52,15 @@ public class IssueAssigner extends IssueVisitor {


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


private String lastCommitAuthor = null; private String lastCommitAuthor = null;
private ScmInfo scmChangesets = null; private ScmInfo scmChangesets = null;


public IssueAssigner(AnalysisMetadataHolder analysisMetadataHolder, ScmInfoRepository scmInfoRepository, ScmAccountToUser scmAccountToUser, DefaultAssignee defaultAssignee, public IssueAssigner(AnalysisMetadataHolder analysisMetadataHolder, ScmInfoRepository scmInfoRepository, ScmAccountToUser scmAccountToUser, DefaultAssignee defaultAssignee,
IssueUpdater issueUpdater) { IssueFieldsSetter issueUpdater) {
this.scmInfoRepository = scmInfoRepository; this.scmInfoRepository = scmInfoRepository;
this.scmAccountToUser = scmAccountToUser; this.scmAccountToUser = scmAccountToUser;
this.defaultAssignee = defaultAssignee; this.defaultAssignee = defaultAssignee;
Expand Down
Expand Up @@ -26,7 +26,7 @@
import org.sonar.core.issue.IssueChangeContext; import org.sonar.core.issue.IssueChangeContext;
import org.sonar.core.util.Uuids; import org.sonar.core.util.Uuids;
import org.sonar.server.computation.task.projectanalysis.analysis.AnalysisMetadataHolder; 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; import org.sonar.server.issue.workflow.IssueWorkflow;


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


private final IssueWorkflow workflow; private final IssueWorkflow workflow;
private final IssueChangeContext changeContext; private final IssueChangeContext changeContext;
private final IssueUpdater updater; private final IssueFieldsSetter updater;
private final DebtCalculator debtCalculator; 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); this(IssueChangeContext.createScan(new Date(analysisMetadataHolder.getAnalysisDate())), workflow, updater, debtCalculator);
} }


@VisibleForTesting @VisibleForTesting
IssueLifecycle(IssueChangeContext changeContext, IssueWorkflow workflow, IssueUpdater updater, DebtCalculator debtCalculator) { IssueLifecycle(IssueChangeContext changeContext, IssueWorkflow workflow, IssueFieldsSetter updater, DebtCalculator debtCalculator) {
this.workflow = workflow; this.workflow = workflow;
this.updater = updater; this.updater = updater;
this.debtCalculator = debtCalculator; this.debtCalculator = debtCalculator;
Expand Down
Expand Up @@ -27,16 +27,16 @@
import org.sonar.server.computation.task.projectanalysis.component.Component; 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;
import org.sonar.server.computation.task.projectanalysis.filemove.MovedFilesRepository.OriginalFile; 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; import static com.google.common.base.Preconditions.checkState;


public class MovedIssueVisitor extends IssueVisitor { public class MovedIssueVisitor extends IssueVisitor {
private final AnalysisMetadataHolder analysisMetadataHolder; private final AnalysisMetadataHolder analysisMetadataHolder;
private final MovedFilesRepository movedFilesRepository; 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.analysisMetadataHolder = analysisMetadataHolder;
this.movedFilesRepository = movedFilesRepository; this.movedFilesRepository = movedFilesRepository;
this.issueUpdater = issueUpdater; this.issueUpdater = issueUpdater;
Expand Down
Expand Up @@ -38,7 +38,7 @@
import org.sonar.core.issue.FieldDiffs; import org.sonar.core.issue.FieldDiffs;
import org.sonar.db.issue.IssueChangeDto; import org.sonar.db.issue.IssueChangeDto;
import org.sonar.server.computation.task.projectanalysis.period.Period; 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; import static com.google.common.collect.FluentIterable.from;


Expand Down Expand Up @@ -108,7 +108,7 @@ private static boolean isBeforeOrEqual(@Nullable Date changeDate, Date periodDat
} }


private static FieldDiffs.Diff debtDiff(FieldDiffs diffs) { 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> { private enum ToFieldDiffs implements Function<IssueChangeDto, FieldDiffs> {
Expand All @@ -123,7 +123,7 @@ private enum HasDebtChange implements Predicate<FieldDiffs> {
INSTANCE; INSTANCE;
@Override @Override
public boolean apply(@Nonnull FieldDiffs diffs) { public boolean apply(@Nonnull FieldDiffs diffs) {
return diffs.diffs().containsKey(IssueUpdater.TECHNICAL_DEBT); return diffs.diffs().containsKey(IssueFieldsSetter.TECHNICAL_DEBT);
} }
} }
} }
Expand Up @@ -22,25 +22,24 @@
import com.google.common.base.Splitter; import com.google.common.base.Splitter;
import com.google.common.base.Strings; import com.google.common.base.Strings;
import com.google.common.collect.Sets; 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.Issue;
import org.sonar.api.issue.condition.IsUnResolved; 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.api.server.rule.RuleTagFormat;
import org.sonar.core.issue.DefaultIssue;
import org.sonar.server.user.UserSession; import org.sonar.server.user.UserSession;


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

@ServerSide @ServerSide
public abstract class AbstractChangeTagsAction extends Action { public abstract class AbstractChangeTagsAction extends Action {


private static final Splitter TAGS_SPLITTER = Splitter.on(',').trimResults().omitEmptyStrings(); 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); super(key);
this.issueUpdater = issueUpdater; this.issueUpdater = issueUpdater;
super.setConditions(new IsUnResolved()); super.setConditions(new IsUnResolved());
Expand Down
Expand Up @@ -20,17 +20,16 @@
package org.sonar.server.issue; package org.sonar.server.issue;


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

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


@ServerSide @ServerSide
public class AddTagsAction extends AbstractChangeTagsAction { public class AddTagsAction extends AbstractChangeTagsAction {


public static final String KEY = "add_tags"; public static final String KEY = "add_tags";


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


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


private final UserFinder userFinder; 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); super(ASSIGN_KEY);
this.userFinder = userFinder; this.userFinder = userFinder;
this.issueUpdater = issueUpdater; this.issueUpdater = issueUpdater;
Expand Down
Expand Up @@ -33,9 +33,9 @@ public class CommentAction extends Action {
public static final String COMMENT_KEY = "comment"; public static final String COMMENT_KEY = "comment";
public static final String COMMENT_PROPERTY = "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); super(COMMENT_KEY);
this.issueUpdater = issueUpdater; this.issueUpdater = issueUpdater;
} }
Expand Down
Expand Up @@ -51,9 +51,9 @@ public List<FieldDiffs> changes() {
private static void replacedTechnicalDebtByEffort(List<FieldDiffs> changes) { private static void replacedTechnicalDebtByEffort(List<FieldDiffs> changes) {
for (FieldDiffs fieldDiffs : changes) { for (FieldDiffs fieldDiffs : changes) {
Map<String, FieldDiffs.Diff> diffs = fieldDiffs.diffs(); Map<String, FieldDiffs.Diff> diffs = fieldDiffs.diffs();
if (diffs.containsKey(IssueUpdater.TECHNICAL_DEBT)) { if (diffs.containsKey(IssueFieldsSetter.TECHNICAL_DEBT)) {
FieldDiffs.Diff value = diffs.get(IssueUpdater.TECHNICAL_DEBT); FieldDiffs.Diff value = diffs.get(IssueFieldsSetter.TECHNICAL_DEBT);
diffs.remove(IssueUpdater.TECHNICAL_DEBT); diffs.remove(IssueFieldsSetter.TECHNICAL_DEBT);
diffs.put("effort", value); diffs.put("effort", value);
} }
} }
Expand Down
Expand Up @@ -45,10 +45,10 @@ public class IssueCommentService {


private final DbClient dbClient; private final DbClient dbClient;
private final IssueService issueService; private final IssueService issueService;
private final IssueUpdater updater; private final IssueFieldsSetter updater;
private final UserSession userSession; 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.dbClient = dbClient;
this.issueService = issueService; this.issueService = issueService;
this.updater = updater; this.updater = updater;
Expand Down
Expand Up @@ -19,20 +19,16 @@
*/ */
package org.sonar.server.issue; package org.sonar.server.issue;


import com.google.common.base.Function;
import com.google.common.base.Joiner; 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 com.google.common.collect.Sets;
import java.util.Calendar; import java.time.temporal.ChronoUnit;
import java.util.Collection; import java.util.Collection;
import java.util.Date; import java.util.Date;
import java.util.Locale; import java.util.Locale;
import java.util.Objects; import java.util.Objects;
import java.util.Set; import java.util.Set;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.time.DateUtils;
import org.sonar.api.ce.ComputeEngineSide; import org.sonar.api.ce.ComputeEngineSide;
import org.sonar.api.rules.RuleType; import org.sonar.api.rules.RuleType;
import org.sonar.api.server.ServerSide; import org.sonar.api.server.ServerSide;
Expand All @@ -42,6 +38,7 @@
import org.sonar.core.issue.DefaultIssue; import org.sonar.core.issue.DefaultIssue;
import org.sonar.core.issue.DefaultIssueComment; import org.sonar.core.issue.DefaultIssueComment;
import org.sonar.core.issue.IssueChangeContext; 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.Preconditions.checkState;
import static com.google.common.base.Strings.isNullOrEmpty; import static com.google.common.base.Strings.isNullOrEmpty;
Expand All @@ -51,7 +48,7 @@
*/ */
@ServerSide @ServerSide
@ComputeEngineSide @ComputeEngineSide
public class IssueUpdater { public class IssueFieldsSetter {


public static final String UNUSED = ""; public static final String UNUSED = "";
public static final String SEVERITY = "severity"; public static final String SEVERITY = "severity";
Expand Down Expand Up @@ -253,7 +250,7 @@ public void addComment(DefaultIssue issue, String text, IssueChangeContext conte
} }


public void setCloseDate(DefaultIssue issue, @Nullable Date d, IssueChangeContext context) { 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())) { if (!Objects.equals(dateWithoutMilliseconds, issue.closeDate())) {
issue.setCloseDate(d); issue.setCloseDate(d);
issue.setUpdateDate(context.date()); issue.setUpdateDate(context.date());
Expand Down Expand Up @@ -310,23 +307,13 @@ public boolean setAttribute(DefaultIssue issue, String key, @Nullable String val
} }


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


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

if (!oldTags.equals(newTags)) { if (!oldTags.equals(newTags)) {
issue.setFieldChange(context, TAGS, issue.setFieldChange(context, TAGS,
oldTags.isEmpty() ? null : CHANGELOG_TAG_JOINER.join(oldTags), oldTags.isEmpty() ? null : CHANGELOG_TAG_JOINER.join(oldTags),
Expand Down
Expand Up @@ -61,7 +61,7 @@ public class IssueService {
private final IssueIndex issueIndex; private final IssueIndex issueIndex;


private final IssueWorkflow workflow; private final IssueWorkflow workflow;
private final IssueUpdater issueUpdater; private final IssueFieldsSetter issueUpdater;
private final IssueStorage issueStorage; private final IssueStorage issueStorage;
private final NotificationManager notificationService; private final NotificationManager notificationService;
private final UserFinder userFinder; private final UserFinder userFinder;
Expand All @@ -70,7 +70,7 @@ public class IssueService {
public IssueService(DbClient dbClient, IssueIndex issueIndex, public IssueService(DbClient dbClient, IssueIndex issueIndex,
IssueWorkflow workflow, IssueWorkflow workflow,
IssueStorage issueStorage, IssueStorage issueStorage,
IssueUpdater issueUpdater, IssueFieldsSetter issueUpdater,
NotificationManager notificationService, NotificationManager notificationService,
UserFinder userFinder, UserFinder userFinder,
UserSession userSession) { UserSession userSession) {
Expand Down
Expand Up @@ -20,17 +20,16 @@
package org.sonar.server.issue; package org.sonar.server.issue;


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

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


@ServerSide @ServerSide
public class RemoveTagsAction extends AbstractChangeTagsAction { public class RemoveTagsAction extends AbstractChangeTagsAction {


public static final String KEY = "remove_tags"; public static final String KEY = "remove_tags";


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


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


public static final String SET_SEVERITY_KEY = "set_severity"; public static final String SET_SEVERITY_KEY = "set_severity";


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


public SetSeverityAction(IssueUpdater issueUpdater, UserSession userSession) { public SetSeverityAction(IssueFieldsSetter issueUpdater, UserSession userSession) {
super(SET_SEVERITY_KEY); super(SET_SEVERITY_KEY);
this.issueUpdater = issueUpdater; this.issueUpdater = issueUpdater;
this.userSession = userSession; this.userSession = userSession;
Expand Down
Expand Up @@ -35,9 +35,9 @@ public class SetTypeAction extends Action {
private static final String SET_TYPE_KEY = "set_type"; private static final String SET_TYPE_KEY = "set_type";
private static final String TYPE_PARAMETER = "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); super(SET_TYPE_KEY);
this.issueUpdater = issueUpdater; this.issueUpdater = issueUpdater;
super.setConditions(new IsUnResolved()); super.setConditions(new IsUnResolved());
Expand Down

0 comments on commit ea21e55

Please sign in to comment.