public Tracking<DefaultIssue, DefaultIssue> track(Component component) { Input<DefaultIssue> rawInput = rawInputFactory.create(component); Input<DefaultIssue> openBaseIssuesInput = baseInputFactory.create(component); NonClosedTracking<DefaultIssue, DefaultIssue> openIssueTracking = tracker.trackNonClosed(rawInput, openBaseIssuesInput); if (openIssueTracking.isComplete() || analysisMetadataHolder.isFirstAnalysis()) { return openIssueTracking; } Input<DefaultIssue> closedIssuesBaseInput = closedIssuesInputFactory.create(component); Tracking<DefaultIssue, DefaultIssue> closedIssuesTracking = tracker.trackClosed(openIssueTracking, closedIssuesBaseInput); // changes of closed issues need to be loaded in order to: // - compute right transition from workflow // - recover fields values from before they were closed Set<DefaultIssue> matchesClosedIssues = closedIssuesTracking.getMatchedRaws().values().stream() .filter(t -> Issue.STATUS_CLOSED.equals(t.getStatus())) .collect(MoreCollectors.toSet()); componentIssuesLoader.loadLatestDiffChangesForReopeningOfClosedIssues(matchesClosedIssues); return closedIssuesTracking; }
private static DefaultIssue newDefaultIssue(String projectUuid) { DefaultIssue defaultIssue = new DefaultIssue(); defaultIssue.setKey("issue_" + issueIdCounter++); defaultIssue.setProjectUuid(projectUuid); defaultIssue.setType(RuleType.values()[new Random().nextInt(RuleType.values().length)]); defaultIssue.setStatus(POSSIBLE_STATUSES[new Random().nextInt(POSSIBLE_STATUSES.length)]); String[] possibleResolutions = possibleResolutions(defaultIssue.getStatus()); if (possibleResolutions.length > 0) { defaultIssue.setResolution(possibleResolutions[new Random().nextInt(possibleResolutions.length)]); } return defaultIssue; }