Skip to content

Commit

Permalink
SONAR-7400 Do not load active rules from index in rules WS
Browse files Browse the repository at this point in the history
  • Loading branch information
julienlancelot committed May 16, 2016
1 parent f5caef1 commit d239142
Showing 1 changed file with 22 additions and 21 deletions.
Expand Up @@ -24,6 +24,7 @@
import com.google.common.collect.ListMultimap; import com.google.common.collect.ListMultimap;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import com.google.common.collect.Multimap;
import java.util.Collection; import java.util.Collection;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
Expand Down Expand Up @@ -53,6 +54,7 @@
import org.sonarqube.ws.Rules.ShowResponse; import org.sonarqube.ws.Rules.ShowResponse;


import static com.google.common.base.Strings.nullToEmpty; import static com.google.common.base.Strings.nullToEmpty;
import static com.google.common.collect.FluentIterable.from;
import static com.google.common.collect.Sets.newHashSet; import static com.google.common.collect.Sets.newHashSet;
import static java.util.Collections.singletonList; import static java.util.Collections.singletonList;


Expand Down Expand Up @@ -88,36 +90,36 @@ private Collection<String> writeActiveRules(DbSession dbSession, SearchResponse.
if (profileKey != null) { if (profileKey != null) {
// Load details of active rules on the selected profile // Load details of active rules on the selected profile
List<ActiveRuleDto> activeRuleDtos = dbClient.activeRuleDao().selectByProfileKey(dbSession, profileKey); List<ActiveRuleDto> activeRuleDtos = dbClient.activeRuleDao().selectByProfileKey(dbSession, profileKey);
Map<RuleKey, ActiveRuleDto> activeRuleByRuleKey = from(activeRuleDtos).uniqueIndex(ActiveRuleToRuleKey.INSTANCE);
ListMultimap<ActiveRuleKey, ActiveRuleParamDto> activeRuleParamsByActiveRuleKey = activeRuleDtosToActiveRuleParamDtos(dbSession, activeRuleDtos); ListMultimap<ActiveRuleKey, ActiveRuleParamDto> activeRuleParamsByActiveRuleKey = activeRuleDtosToActiveRuleParamDtos(dbSession, activeRuleDtos);


for (RuleDto rule : rules) { for (RuleDto rule : rules) {
ActiveRule activeRule = loader.getActiveRule(ActiveRuleKey.of(profileKey, rule.getKey())); ActiveRuleDto activeRule = activeRuleByRuleKey.get(rule.getKey());
if (activeRule != null) { if (activeRule != null) {
qProfileKeys = writeActiveRules(rule.getKey(), singletonList(activeRule), activeRuleParamsByActiveRuleKey, activesBuilder); qProfileKeys = writeActiveRules(rule.getKey(), singletonList(activeRule), activeRuleParamsByActiveRuleKey, activesBuilder);
} }
} }
} else { } else {
// Load details of all active rules // Load details of all active rules
List<ActiveRuleDto> activeRuleDtos = dbClient.activeRuleDao().selectByRuleIds(dbSession, Lists.transform(rules, RuleDtoFunctions.toId())); List<ActiveRuleDto> activeRuleDtos = dbClient.activeRuleDao().selectByRuleIds(dbSession, Lists.transform(rules, RuleDtoFunctions.toId()));
Multimap<RuleKey, ActiveRuleDto> activeRulesByRuleKey = from(activeRuleDtos).index(ActiveRuleToRuleKey.INSTANCE);
ListMultimap<ActiveRuleKey, ActiveRuleParamDto> activeRuleParamsByActiveRuleKey = activeRuleDtosToActiveRuleParamDtos(dbSession, activeRuleDtos); ListMultimap<ActiveRuleKey, ActiveRuleParamDto> activeRuleParamsByActiveRuleKey = activeRuleDtosToActiveRuleParamDtos(dbSession, activeRuleDtos);

for (RuleDto rule : rules) { for (RuleDto rule : rules) {
List<ActiveRule> activeRules = loader.findActiveRulesByRule(rule.getKey()); qProfileKeys = writeActiveRules(rule.getKey(), activeRulesByRuleKey.get(rule.getKey()), activeRuleParamsByActiveRuleKey, activesBuilder);
qProfileKeys = writeActiveRules(rule.getKey(), activeRules, activeRuleParamsByActiveRuleKey, activesBuilder);
} }
} }


response.setActives(activesBuilder); response.setActives(activesBuilder);
return qProfileKeys; return qProfileKeys;
} }


private static Collection<String> writeActiveRules(RuleKey ruleKey, Collection<ActiveRule> activeRules, private static Collection<String> writeActiveRules(RuleKey ruleKey, Collection<ActiveRuleDto> activeRules,
ListMultimap<ActiveRuleKey, ActiveRuleParamDto> activeRuleParamsByActiveRuleKey, Rules.Actives.Builder activesBuilder) { ListMultimap<ActiveRuleKey, ActiveRuleParamDto> activeRuleParamsByActiveRuleKey, Rules.Actives.Builder activesBuilder) {
Collection<String> qProfileKeys = newHashSet(); Collection<String> qProfileKeys = newHashSet();
Rules.ActiveList.Builder activeRulesListResponse = Rules.ActiveList.newBuilder(); Rules.ActiveList.Builder activeRulesListResponse = Rules.ActiveList.newBuilder();
for (ActiveRule activeRule : activeRules) { for (ActiveRuleDto activeRule : activeRules) {
activeRulesListResponse.addActiveList(buildActiveRuleResponse(activeRule, activeRuleParamsByActiveRuleKey.get(activeRule.key()))); activeRulesListResponse.addActiveList(buildActiveRuleResponse(activeRule, activeRuleParamsByActiveRuleKey.get(activeRule.getKey())));
qProfileKeys.add(activeRule.key().qProfile()); qProfileKeys.add(activeRule.getKey().qProfile());
} }
activesBuilder activesBuilder
.getMutableActives() .getMutableActives()
Expand All @@ -141,30 +143,30 @@ private ListMultimap<ActiveRuleKey, ActiveRuleParamDto> activeRuleDtosToActiveRu
} }


void completeShow(DbSession dbSession, RuleDto rule, ShowResponse.Builder response) { void completeShow(DbSession dbSession, RuleDto rule, ShowResponse.Builder response) {
List<ActiveRule> activeRules = loader.findActiveRulesByRule(rule.getKey()); List<ActiveRuleDto> activeRuleDtos = dbClient.activeRuleDao().selectByRule(dbSession, rule);
List<ActiveRuleDto> activeRuleDtos = dbClient.activeRuleDao().selectByKeys(dbSession, Lists.transform(activeRules, ActiveRuleToKey.INSTANCE));
Map<Integer, ActiveRuleKey> activeRuleIdsByKey = new HashMap<>(); Map<Integer, ActiveRuleKey> activeRuleIdsByKey = new HashMap<>();
for (ActiveRuleDto activeRuleDto : activeRuleDtos) { for (ActiveRuleDto activeRuleDto : activeRuleDtos) {
activeRuleIdsByKey.put(activeRuleDto.getId(), activeRuleDto.getKey()); activeRuleIdsByKey.put(activeRuleDto.getId(), activeRuleDto.getKey());
} }


List<ActiveRuleParamDto> activeRuleParamDtos = dbClient.activeRuleDao().selectParamsByActiveRuleIds(dbSession, Lists.transform(activeRuleDtos, ActiveRuleDtoToId.INSTANCE)); List<ActiveRuleParamDto> activeRuleParamDtos = dbClient.activeRuleDao().selectParamsByActiveRuleIds(dbSession, Lists.transform(activeRuleDtos, ActiveRuleDtoToId.INSTANCE));
ListMultimap<ActiveRuleKey, ActiveRuleParamDto> activeRuleParamsByActiveRuleKey = ArrayListMultimap.create(activeRules.size(), 10); ListMultimap<ActiveRuleKey, ActiveRuleParamDto> activeRuleParamsByActiveRuleKey = ArrayListMultimap.create(activeRuleDtos.size(), 10);
for (ActiveRuleParamDto activeRuleParamDto : activeRuleParamDtos) { for (ActiveRuleParamDto activeRuleParamDto : activeRuleParamDtos) {
ActiveRuleKey activeRuleKey = activeRuleIdsByKey.get(activeRuleParamDto.getActiveRuleId()); ActiveRuleKey activeRuleKey = activeRuleIdsByKey.get(activeRuleParamDto.getActiveRuleId());
activeRuleParamsByActiveRuleKey.put(activeRuleKey, activeRuleParamDto); activeRuleParamsByActiveRuleKey.put(activeRuleKey, activeRuleParamDto);
} }


for (ActiveRule activeRule : activeRules) { for (ActiveRuleDto activeRule : activeRuleDtos) {
response.addActives(buildActiveRuleResponse(activeRule, activeRuleParamsByActiveRuleKey.get(activeRule.key()))); response.addActives(buildActiveRuleResponse(activeRule, activeRuleParamsByActiveRuleKey.get(activeRule.getKey())));
} }
} }


private static Rules.Active buildActiveRuleResponse(ActiveRule activeRule, List<ActiveRuleParamDto> parameters) { private static Rules.Active buildActiveRuleResponse(ActiveRuleDto activeRule, List<ActiveRuleParamDto> parameters) {
Rules.Active.Builder activeRuleResponse = Rules.Active.newBuilder(); Rules.Active.Builder activeRuleResponse = Rules.Active.newBuilder();
activeRuleResponse.setQProfile(activeRule.key().qProfile()); activeRuleResponse.setQProfile(activeRule.getKey().qProfile());
activeRuleResponse.setInherit(activeRule.inheritance().toString()); String inheritance = activeRule.getInheritance();
activeRuleResponse.setSeverity(activeRule.severity()); activeRuleResponse.setInherit(inheritance != null ? inheritance : ActiveRule.Inheritance.NONE.name());
activeRuleResponse.setSeverity(activeRule.getSeverityString());
Rules.Active.Param.Builder paramBuilder = Rules.Active.Param.newBuilder(); Rules.Active.Param.Builder paramBuilder = Rules.Active.Param.newBuilder();
for (ActiveRuleParamDto parameter : parameters) { for (ActiveRuleParamDto parameter : parameters) {
activeRuleResponse.addParams(paramBuilder.clear() activeRuleResponse.addParams(paramBuilder.clear()
Expand Down Expand Up @@ -224,13 +226,12 @@ private void writeProfile(Map<String, Rules.QProfile> profilesResponse, QualityP
profilesResponse.put(profile.getKey(), profileResponse.build()); profilesResponse.put(profile.getKey(), profileResponse.build());
} }


private enum ActiveRuleToKey implements Function<ActiveRule, ActiveRuleKey> { private enum ActiveRuleToRuleKey implements Function<ActiveRuleDto, RuleKey> {
INSTANCE; INSTANCE;


@Override @Override
public ActiveRuleKey apply(@Nonnull ActiveRule input) { public RuleKey apply(@Nonnull ActiveRuleDto input) {
return input.key(); return input.getKey().ruleKey();
} }
} }

} }

0 comments on commit d239142

Please sign in to comment.