From 8f12b6262c12a394c9783ddb9b0d996839907ece Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Lievremont Date: Fri, 8 Nov 2013 10:14:55 +0100 Subject: [PATCH] SONAR-4832 Refactor session into a member for better readability of DB operations --- .../sonar/server/startup/RegisterRules.java | 46 ++++++++++--------- 1 file changed, 24 insertions(+), 22 deletions(-) diff --git a/sonar-server/src/main/java/org/sonar/server/startup/RegisterRules.java b/sonar-server/src/main/java/org/sonar/server/startup/RegisterRules.java index 6679e13aa11..f90b6908624 100644 --- a/sonar-server/src/main/java/org/sonar/server/startup/RegisterRules.java +++ b/sonar-server/src/main/java/org/sonar/server/startup/RegisterRules.java @@ -53,6 +53,8 @@ public final class RegisterRules { private final List repositories; private final RuleI18nManager ruleI18nManager; + private DatabaseSession session; + public RegisterRules(DatabaseSessionFactory sessionFactory, RuleRepository[] repos, RuleI18nManager ruleI18nManager, ProfilesManager profilesManager) { this.sessionFactory = sessionFactory; this.profilesManager = profilesManager; @@ -65,39 +67,39 @@ public final class RegisterRules { } public void start() { - DatabaseSession session = sessionFactory.getSession(); - RulesByRepository existingRules = new RulesByRepository(findAllRules(session)); + session = sessionFactory.getSession(); + RulesByRepository existingRules = new RulesByRepository(findAllRules()); - List registeredRules = registerRules(existingRules, session); + List registeredRules = registerRules(existingRules); LOG.info("Removing deprecated rules"); - disableDeprecatedRules(existingRules, registeredRules, session); - disableDeprecatedRepositories(existingRules, session); + disableDeprecatedRules(existingRules, registeredRules); + disableDeprecatedRepositories(existingRules); session.commit(); } - private List findAllRules(DatabaseSession session) { + private List findAllRules() { // the hardcoded repository "manual" is used for manual violations return session.createQuery("from " + Rule.class.getSimpleName() + " r WHERE r.pluginName<>:repository") .setParameter("repository", "manual") .getResultList(); } - private List registerRules(RulesByRepository existingRules, DatabaseSession session) { + private List registerRules(RulesByRepository existingRules) { TimeProfiler profiler = new TimeProfiler(); List registeredRules = newArrayList(); for (RuleRepository repository : repositories) { profiler.start("Register rules [" + repository.getKey() + "/" + StringUtils.defaultString(repository.getLanguage(), "-") + "]"); - registeredRules.addAll(registerRepositoryRules(repository, existingRules, session)); + registeredRules.addAll(registerRepositoryRules(repository, existingRules)); profiler.stop(); } // Template rules have to be registered after all rules in order for their parent to be updated. - registeredRules.addAll(registerTemplateRules(registeredRules, existingRules, session)); + registeredRules.addAll(registerTemplateRules(registeredRules, existingRules)); return registeredRules; } - private List registerRepositoryRules(RuleRepository repository, RulesByRepository existingRules, DatabaseSession session) { + private List registerRepositoryRules(RuleRepository repository, RulesByRepository existingRules) { List registeredRules = newArrayList(); Map ruleByKey = newHashMap(); for (Rule rule : repository.createRules()) { @@ -111,19 +113,19 @@ public final class RegisterRules { for (Rule persistedRule : existingRules.get(repository.getKey())) { Rule rule = ruleByKey.get(persistedRule.getKey()); if (rule != null) { - updateExistingRule(persistedRule, rule, session); + updateExistingRule(persistedRule, rule); session.saveWithoutFlush(persistedRule); ruleByKey.remove(rule.getKey()); } } - saveNewRules(ruleByKey.values(), session); + saveNewRules(ruleByKey.values()); return registeredRules; } /** * Template rules do not exists in rule repositories, only in database, they have to be updated from their parent. */ - private List registerTemplateRules(List registeredRules, RulesByRepository existingRules, DatabaseSession session) { + private List registerTemplateRules(List registeredRules, RulesByRepository existingRules) { List templateRules = newArrayList(); for (Rule persistedRule : existingRules.rules()) { Rule parent = persistedRule.getParent(); @@ -170,7 +172,7 @@ public final class RegisterRules { } } - private void updateExistingRule(Rule persistedRule, Rule rule, DatabaseSession session) { + private void updateExistingRule(Rule persistedRule, Rule rule) { LOG.debug("Update existing rule " + rule); persistedRule.setName(rule.getName()); @@ -183,7 +185,7 @@ public final class RegisterRules { persistedRule.setUpdatedAt(new Date()); // delete deprecated params - deleteDeprecatedParameters(persistedRule, rule, session); + deleteDeprecatedParameters(persistedRule, rule); // add new params and update existing params updateParameters(persistedRule, rule); @@ -203,7 +205,7 @@ public final class RegisterRules { } } - private void deleteDeprecatedParameters(Rule persistedRule, Rule rule, DatabaseSession session) { + private void deleteDeprecatedParameters(Rule persistedRule, Rule rule) { if (persistedRule.getParams() != null && persistedRule.getParams().size() > 0) { for (Iterator it = persistedRule.getParams().iterator(); it.hasNext(); ) { RuleParam persistedParam = it.next(); @@ -218,7 +220,7 @@ public final class RegisterRules { } } - private void saveNewRules(Collection rules, DatabaseSession session) { + private void saveNewRules(Collection rules) { for (Rule rule : rules) { LOG.debug("Save new rule " + rule); rule.setCreatedAt(new Date()); @@ -226,15 +228,15 @@ public final class RegisterRules { } } - private void disableDeprecatedRules(RulesByRepository existingRules, List registeredRules, DatabaseSession session) { + private void disableDeprecatedRules(RulesByRepository existingRules, List registeredRules) { for (Rule rule : existingRules.rules()) { if (!registeredRules.contains(rule)) { - disable(rule, session); + disable(rule); } } } - private void disableDeprecatedRepositories(RulesByRepository existingRules, DatabaseSession session) { + private void disableDeprecatedRepositories(RulesByRepository existingRules) { for (final String repositoryKey : existingRules.repositories()) { if (!Iterables.any(repositories, new Predicate() { public boolean apply(RuleRepository input) { @@ -242,13 +244,13 @@ public final class RegisterRules { } })) { for (Rule rule : existingRules.get(repositoryKey)) { - disable(rule, session); + disable(rule); } } } } - private void disable(Rule rule, DatabaseSession session) { + private void disable(Rule rule) { if (!rule.getStatus().equals(Rule.STATUS_REMOVED)) { LOG.info("Removing rule " + rule.ruleKey()); profilesManager.removeActivatedRules(rule); -- 2.39.5