From 78f34d4e9c0030afb60ce848d087adee001aee09 Mon Sep 17 00:00:00 2001 From: Simon Brandhof Date: Tue, 13 May 2014 22:56:46 +0200 Subject: [PATCH] SONAR-5007 cleanup --- .../server/platform/ServerComponents.java | 17 +++++- .../{rule2 => qualityprofile}/ActiveRule.java | 12 ++-- .../qualityprofile/ActiveRuleDocument.java | 5 +- .../server/qualityprofile/ESActiveRule.java | 5 +- .../qualityprofile/ProfileRuleQuery.java | 3 +- .../server/qualityprofile/ProfilesBackup.java | 5 ++ .../qualityprofile/ProfilesManager.java | 5 ++ .../QProfileActiveRuleOperations.java | 4 ++ .../server/qualityprofile/QProfileBackup.java | 3 +- .../server/qualityprofile/QProfileLookup.java | 4 ++ .../qualityprofile/QProfileOperations.java | 4 ++ .../server/qualityprofile/QProfileRule.java | 4 ++ .../qualityprofile/QProfileRuleLookup.java | 4 ++ .../qualityprofile/QProfileRuleParam.java | 4 ++ .../server/qualityprofile/QProfiles.java | 3 +- .../qualityprofile/index/ActiveRuleDoc.java | 2 +- .../qualityprofile/index/ActiveRuleIndex.java | 8 +-- .../qualityprofile/index/package-info.java | 23 +++++++ .../persistence/package-info.java | 23 +++++++ .../org/sonar/server/rule/ESRuleTags.java | 4 ++ .../org/sonar/server/rule/RegisterRules.java | 5 +- .../main/java/org/sonar/server/rule/Rule.java | 4 ++ .../org/sonar/server/rule/RuleDocument.java | 4 ++ .../sonar/server/rule/RuleDocumentParser.java | 4 ++ .../java/org/sonar/server/rule/RuleNote.java | 4 ++ .../org/sonar/server/rule/RuleOperations.java | 4 ++ .../java/org/sonar/server/rule/RuleParam.java | 4 ++ .../org/sonar/server/rule/RuleRegistry.java | 6 +- .../sonar/server/rule/RuleTagDocument.java | 5 +- .../org/sonar/server/rule/RuleTagLookup.java | 4 ++ .../sonar/server/rule/RuleTagOperations.java | 4 ++ .../java/org/sonar/server/rule/RuleTags.java | 3 +- .../java/org/sonar/server/rule/Rules.java | 4 ++ .../org/sonar/server/rule2/RegisterRules.java | 55 +++++++---------- .../org/sonar/server/rule2/index/RuleDoc.java | 18 +----- .../sonar/server/rule2/index/RuleIndex.java | 16 ++--- .../server/rule2/index/RuleNormalizer.java | 1 - .../sonar/server/rule2/index/RuleResult.java | 2 +- .../server/rule2/index/package-info.java | 23 +++++++ .../server/rule2/persistence/RuleDao.java | 4 +- .../rule2/persistence/package-info.java | 23 +++++++ .../sonar/server/rule2/ws/SearchAction.java | 2 +- .../org/sonar/server/search/BaseIndex.java | 14 ++--- .../java/org/sonar/server/search/Index.java | 5 +- .../server/search/IndexSynchronizer.java | 59 ------------------ .../org/sonar/server/search/IndexUtils.java | 33 +++++----- .../org/sonar/server/search/NestedIndex.java | 12 ++-- .../java/org/sonar/server/search/Result.java | 61 ++++++++----------- .../server/search/action/package-info.java | 23 +++++++ .../sonar/server/rule2/RegisterRulesTest.java | 46 ++++---------- 50 files changed, 336 insertions(+), 258 deletions(-) rename sonar-server/src/main/java/org/sonar/server/{rule2 => qualityprofile}/ActiveRule.java (84%) create mode 100644 sonar-server/src/main/java/org/sonar/server/qualityprofile/index/package-info.java create mode 100644 sonar-server/src/main/java/org/sonar/server/qualityprofile/persistence/package-info.java create mode 100644 sonar-server/src/main/java/org/sonar/server/rule2/index/package-info.java create mode 100644 sonar-server/src/main/java/org/sonar/server/rule2/persistence/package-info.java delete mode 100644 sonar-server/src/main/java/org/sonar/server/search/IndexSynchronizer.java create mode 100644 sonar-server/src/main/java/org/sonar/server/search/action/package-info.java diff --git a/sonar-server/src/main/java/org/sonar/server/platform/ServerComponents.java b/sonar-server/src/main/java/org/sonar/server/platform/ServerComponents.java index 9c64c530317..7c2d6cad3e1 100644 --- a/sonar-server/src/main/java/org/sonar/server/platform/ServerComponents.java +++ b/sonar-server/src/main/java/org/sonar/server/platform/ServerComponents.java @@ -85,6 +85,7 @@ import org.sonar.jpa.session.ThreadLocalDatabaseSessionFactory; import org.sonar.server.authentication.ws.AuthenticationWs; import org.sonar.server.charts.ChartFactory; import org.sonar.server.cluster.LocalNonBlockingWorkQueue; +import org.sonar.server.cluster.LocalQueueWorker; import org.sonar.server.component.DefaultComponentFinder; import org.sonar.server.component.DefaultRubyComponentService; import org.sonar.server.component.ws.ComponentsWs; @@ -180,6 +181,8 @@ import org.sonar.server.qualityprofile.QProfileRuleLookup; import org.sonar.server.qualityprofile.QProfiles; import org.sonar.server.qualityprofile.RegisterQualityProfiles; import org.sonar.server.qualityprofile.RuleActivationContextFactory; +import org.sonar.server.qualityprofile.index.ActiveRuleIndex; +import org.sonar.server.qualityprofile.index.ActiveRuleNormalizer; import org.sonar.server.qualityprofile.persistence.ActiveRuleDao; import org.sonar.server.qualityprofile.ws.ProfilesWs; import org.sonar.server.qualityprofile.ws.QProfileRecreateBuiltInAction; @@ -204,6 +207,8 @@ import org.sonar.server.rule.ws.RuleTagsWs; import org.sonar.server.rule.ws.RulesWs; import org.sonar.server.rule2.RegisterRules; import org.sonar.server.rule2.RuleService; +import org.sonar.server.rule2.index.RuleIndex; +import org.sonar.server.rule2.index.RuleNormalizer; import org.sonar.server.rule2.persistence.RuleDao; import org.sonar.server.rule2.ws.RulesWebService; import org.sonar.server.rule2.ws.SearchAction; @@ -348,12 +353,18 @@ class ServerComponents { ThreadLocalDatabaseSessionFactory.class, new DatabaseSessionProvider(), ServerMetadataPersister.class, - ESNode.class, HttpDownloader.class, UriReader.class, - ServerIdGenerator.class + ServerIdGenerator.class, + + // Elasticsearch + ESNode.class, + RuleNormalizer.class, + ActiveRuleNormalizer.class, + RuleIndex.class, + ActiveRuleIndex.class, + LocalQueueWorker.class ); - components.addAll(IndexUtils.getIndexClasses()); return components; } diff --git a/sonar-server/src/main/java/org/sonar/server/rule2/ActiveRule.java b/sonar-server/src/main/java/org/sonar/server/qualityprofile/ActiveRule.java similarity index 84% rename from sonar-server/src/main/java/org/sonar/server/rule2/ActiveRule.java rename to sonar-server/src/main/java/org/sonar/server/qualityprofile/ActiveRule.java index 67f89dff54e..7d563040ec5 100644 --- a/sonar-server/src/main/java/org/sonar/server/rule2/ActiveRule.java +++ b/sonar-server/src/main/java/org/sonar/server/qualityprofile/ActiveRule.java @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software Foundation, * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -package org.sonar.server.rule2; +package org.sonar.server.qualityprofile; import org.sonar.core.qualityprofile.db.ActiveRuleKey; @@ -25,13 +25,13 @@ import java.util.Map; public interface ActiveRule { - public ActiveRuleKey key(); + ActiveRuleKey key(); - public Boolean override(); + String severity(); - public String severity(); + Boolean override(); - public String inherit(); + String inherit(); - public Map params(); + Map params(); } diff --git a/sonar-server/src/main/java/org/sonar/server/qualityprofile/ActiveRuleDocument.java b/sonar-server/src/main/java/org/sonar/server/qualityprofile/ActiveRuleDocument.java index a7aef2a9813..a659c755b71 100644 --- a/sonar-server/src/main/java/org/sonar/server/qualityprofile/ActiveRuleDocument.java +++ b/sonar-server/src/main/java/org/sonar/server/qualityprofile/ActiveRuleDocument.java @@ -19,7 +19,10 @@ */ package org.sonar.server.qualityprofile; - +/** + * @deprecated to be dropped in 4.4 + */ +@Deprecated public class ActiveRuleDocument { public static final String FIELD_ID = "id"; diff --git a/sonar-server/src/main/java/org/sonar/server/qualityprofile/ESActiveRule.java b/sonar-server/src/main/java/org/sonar/server/qualityprofile/ESActiveRule.java index 49664923678..47be3d63855 100644 --- a/sonar-server/src/main/java/org/sonar/server/qualityprofile/ESActiveRule.java +++ b/sonar-server/src/main/java/org/sonar/server/qualityprofile/ESActiveRule.java @@ -39,7 +39,6 @@ import org.sonar.core.qualityprofile.db.ActiveRuleDto; import org.sonar.core.qualityprofile.db.ActiveRuleParamDto; import org.sonar.server.es.ESIndex; import org.sonar.server.es.SearchQuery; -import org.sonar.server.rule.RuleDocument; import org.sonar.server.rule.RuleRegistry; import java.io.IOException; @@ -48,6 +47,10 @@ import java.util.List; import static com.google.common.collect.Lists.newArrayList; +/** + * @deprecated to be dropped in 4.4 + */ +@Deprecated public class ESActiveRule { public static final String TYPE_ACTIVE_RULE = "active_rule"; diff --git a/sonar-server/src/main/java/org/sonar/server/qualityprofile/ProfileRuleQuery.java b/sonar-server/src/main/java/org/sonar/server/qualityprofile/ProfileRuleQuery.java index 4080b760b33..ec4e3de3f8a 100644 --- a/sonar-server/src/main/java/org/sonar/server/qualityprofile/ProfileRuleQuery.java +++ b/sonar-server/src/main/java/org/sonar/server/qualityprofile/ProfileRuleQuery.java @@ -33,8 +33,9 @@ import java.util.*; import static com.google.common.collect.Lists.newArrayList; /** - * @since 4.2 + * @deprecated to be dropped in 4.4 */ +@Deprecated public class ProfileRuleQuery { public static final String SORT_BY_CREATION_DATE = "SORT_BY_CREATION_DATE"; diff --git a/sonar-server/src/main/java/org/sonar/server/qualityprofile/ProfilesBackup.java b/sonar-server/src/main/java/org/sonar/server/qualityprofile/ProfilesBackup.java index 8cc8c1922dd..2268a4b9630 100644 --- a/sonar-server/src/main/java/org/sonar/server/qualityprofile/ProfilesBackup.java +++ b/sonar-server/src/main/java/org/sonar/server/qualityprofile/ProfilesBackup.java @@ -31,9 +31,14 @@ import org.sonar.api.profiles.RulesProfile; import org.sonar.api.rules.*; import org.sonar.core.preview.PreviewCache; import org.sonar.jpa.dao.RulesDao; +import org.sonar.api.rules.ActiveRule; import java.util.*; +/** + * @deprecated to be dropped in 4.4 + */ +@Deprecated public class ProfilesBackup { private static final String KEY = "key"; diff --git a/sonar-server/src/main/java/org/sonar/server/qualityprofile/ProfilesManager.java b/sonar-server/src/main/java/org/sonar/server/qualityprofile/ProfilesManager.java index 27f32a4f516..80c3c507799 100644 --- a/sonar-server/src/main/java/org/sonar/server/qualityprofile/ProfilesManager.java +++ b/sonar-server/src/main/java/org/sonar/server/qualityprofile/ProfilesManager.java @@ -33,7 +33,12 @@ import org.sonar.jpa.dao.RulesDao; import javax.annotation.CheckForNull; import javax.annotation.Nullable; import java.util.List; +import org.sonar.api.rules.ActiveRule; +/** + * @deprecated to be dropped in 4.4 + */ +@Deprecated public class ProfilesManager extends BaseDao { private RulesDao rulesDao; diff --git a/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileActiveRuleOperations.java b/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileActiveRuleOperations.java index f4123b4d446..2791d17da9f 100644 --- a/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileActiveRuleOperations.java +++ b/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileActiveRuleOperations.java @@ -57,6 +57,10 @@ import java.util.List; import static com.google.common.collect.Lists.newArrayList; +/** + * @deprecated to be dropped in 4.4 + */ +@Deprecated public class QProfileActiveRuleOperations implements ServerComponent { private final MyBatis myBatis; diff --git a/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileBackup.java b/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileBackup.java index ac8ba2f6cff..bfb5e517357 100644 --- a/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileBackup.java +++ b/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileBackup.java @@ -56,8 +56,9 @@ import java.util.Map; import static com.google.common.collect.Lists.newArrayList; /** - * Used through ruby code
Internal.profile_backup
+ * @deprecated to be dropped in 4.4 */ +@Deprecated public class QProfileBackup implements ServerComponent { private final DatabaseSessionFactory sessionFactory; diff --git a/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileLookup.java b/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileLookup.java index b6c15ae3df6..2edcbc171eb 100644 --- a/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileLookup.java +++ b/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileLookup.java @@ -34,6 +34,10 @@ import java.util.List; import static com.google.common.collect.Lists.newArrayList; +/** + * @deprecated to be dropped in 4.4 + */ +@Deprecated public class QProfileLookup implements ServerComponent { private final MyBatis myBatis; diff --git a/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileOperations.java b/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileOperations.java index 90a70aa45ee..be0597a2fae 100644 --- a/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileOperations.java +++ b/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileOperations.java @@ -40,6 +40,10 @@ import javax.annotation.Nullable; import java.util.List; import java.util.Map; +/** + * @deprecated to be dropped in 4.4 + */ +@Deprecated public class QProfileOperations implements ServerComponent { public static final String PROFILE_PROPERTY_PREFIX = "sonar.profile."; diff --git a/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileRule.java b/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileRule.java index a9ecd599970..095ba6924d0 100644 --- a/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileRule.java +++ b/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileRule.java @@ -35,6 +35,10 @@ import java.util.Date; import java.util.List; import java.util.Map; +/** + * @deprecated to be dropped in 4.4 + */ +@Deprecated public class QProfileRule { public static final String INHERITED = "INHERITED"; diff --git a/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileRuleLookup.java b/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileRuleLookup.java index 84f700dbb5a..3c53aacb3cd 100644 --- a/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileRuleLookup.java +++ b/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileRuleLookup.java @@ -52,6 +52,10 @@ import static org.elasticsearch.index.query.QueryBuilders.multiMatchQuery; import static org.sonar.server.rule.RuleRegistry.INDEX_RULES; import static org.sonar.server.rule.RuleRegistry.TYPE_RULE; +/** + * @deprecated to be dropped in 4.4 + */ +@Deprecated public class QProfileRuleLookup implements ServerExtension { private static final int PAGE_SIZE = 100; diff --git a/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileRuleParam.java b/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileRuleParam.java index b10dd5bf9d9..b0757783610 100644 --- a/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileRuleParam.java +++ b/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfileRuleParam.java @@ -26,6 +26,10 @@ import org.sonar.server.rule.RuleParam; import javax.annotation.CheckForNull; import javax.annotation.Nullable; +/** + * @deprecated to be dropped in 4.4 + */ +@Deprecated public class QProfileRuleParam { private RuleParam param; diff --git a/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfiles.java b/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfiles.java index 89f3bd3aa96..4336713a596 100644 --- a/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfiles.java +++ b/sonar-server/src/main/java/org/sonar/server/qualityprofile/QProfiles.java @@ -36,8 +36,9 @@ import java.util.List; import java.util.Map; /** - * Used through ruby code
Internal.quality_profiles
+ * @deprecated to be dropped in 4.4 */ +@Deprecated public class QProfiles implements ServerComponent { private static final String LANGUAGE_PARAM = "language"; diff --git a/sonar-server/src/main/java/org/sonar/server/qualityprofile/index/ActiveRuleDoc.java b/sonar-server/src/main/java/org/sonar/server/qualityprofile/index/ActiveRuleDoc.java index c752306ebe8..7c25e121a7b 100644 --- a/sonar-server/src/main/java/org/sonar/server/qualityprofile/index/ActiveRuleDoc.java +++ b/sonar-server/src/main/java/org/sonar/server/qualityprofile/index/ActiveRuleDoc.java @@ -20,7 +20,7 @@ package org.sonar.server.qualityprofile.index; import org.sonar.core.qualityprofile.db.ActiveRuleKey; -import org.sonar.server.rule2.ActiveRule; +import org.sonar.server.qualityprofile.ActiveRule; import java.util.HashMap; import java.util.Map; diff --git a/sonar-server/src/main/java/org/sonar/server/qualityprofile/index/ActiveRuleIndex.java b/sonar-server/src/main/java/org/sonar/server/qualityprofile/index/ActiveRuleIndex.java index f5f844e53c5..5a82f7ff49d 100644 --- a/sonar-server/src/main/java/org/sonar/server/qualityprofile/index/ActiveRuleIndex.java +++ b/sonar-server/src/main/java/org/sonar/server/qualityprofile/index/ActiveRuleIndex.java @@ -42,7 +42,6 @@ import org.elasticsearch.action.get.GetResponse; import org.elasticsearch.common.xcontent.XContentBuilder; import org.sonar.api.rules.ActiveRule; import org.sonar.core.cluster.WorkQueue; -import org.sonar.core.profiling.Profiling; import org.sonar.core.qualityprofile.db.ActiveRuleDto; import org.sonar.core.qualityprofile.db.ActiveRuleKey; import org.sonar.server.rule2.index.RuleNormalizer; @@ -53,9 +52,8 @@ import java.io.IOException; public class ActiveRuleIndex extends NestedIndex { - - public ActiveRuleIndex(ActiveRuleNormalizer normalizer, WorkQueue workQueue, Profiling profiling, BaseIndex index) { - super(new ActiveRuleIndexDefinition(), normalizer, workQueue, profiling, index); + public ActiveRuleIndex(ActiveRuleNormalizer normalizer, WorkQueue workQueue, BaseIndex index) { + super(new ActiveRuleIndexDefinition(), normalizer, workQueue, index); } @Override @@ -88,4 +86,4 @@ public class ActiveRuleIndex extends NestedIndexInternal.rule_tags + * @deprecated to be dropped in 4.4 */ +@Deprecated public class RuleTags implements ServerExtension { private final RuleTagLookup ruleTagLookup; diff --git a/sonar-server/src/main/java/org/sonar/server/rule/Rules.java b/sonar-server/src/main/java/org/sonar/server/rule/Rules.java index dbdacbd35a0..625a62870a2 100644 --- a/sonar-server/src/main/java/org/sonar/server/rule/Rules.java +++ b/sonar-server/src/main/java/org/sonar/server/rule/Rules.java @@ -42,6 +42,10 @@ import java.util.Map; import static com.google.common.collect.Lists.newArrayList; +/** + * @deprecated to be dropped in 4.4 + */ +@Deprecated public class Rules implements ServerExtension { private final RuleDao ruleDao; diff --git a/sonar-server/src/main/java/org/sonar/server/rule2/RegisterRules.java b/sonar-server/src/main/java/org/sonar/server/rule2/RegisterRules.java index 9a7107833ee..577ec2b67db 100644 --- a/sonar-server/src/main/java/org/sonar/server/rule2/RegisterRules.java +++ b/sonar-server/src/main/java/org/sonar/server/rule2/RegisterRules.java @@ -35,15 +35,13 @@ import org.sonar.api.utils.System2; import org.sonar.api.utils.TimeProfiler; import org.sonar.check.Cardinality; import org.sonar.core.persistence.DbSession; -import org.sonar.core.persistence.MyBatis; import org.sonar.core.rule.RuleDto; import org.sonar.core.rule.RuleParamDto; import org.sonar.core.technicaldebt.db.CharacteristicDao; import org.sonar.core.technicaldebt.db.CharacteristicDto; +import org.sonar.server.db.DbClient; import org.sonar.server.qualityprofile.ProfilesManager; -import org.sonar.server.qualityprofile.persistence.ActiveRuleDao; import org.sonar.server.rule.RuleDefinitionsLoader; -import org.sonar.server.rule2.persistence.RuleDao; import javax.annotation.Nullable; import java.util.ArrayList; @@ -67,38 +65,33 @@ public class RegisterRules implements Startable { private final RuleDefinitionsLoader defLoader; private final ProfilesManager profilesManager; - private final MyBatis myBatis; - private final RuleDao ruleDao; - private final ActiveRuleDao activeRuleDao; + private final DbClient dbClient; private final CharacteristicDao characteristicDao; public RegisterRules(RuleDefinitionsLoader defLoader, ProfilesManager profilesManager, - MyBatis myBatis, RuleDao ruleDao, ActiveRuleDao activeRuleDao, + DbClient dbClient, CharacteristicDao characteristicDao) { - this(defLoader, profilesManager, myBatis, ruleDao, activeRuleDao, characteristicDao, System2.INSTANCE); + this(defLoader, profilesManager, dbClient, characteristicDao, System2.INSTANCE); } @VisibleForTesting RegisterRules(RuleDefinitionsLoader defLoader, ProfilesManager profilesManager, - MyBatis myBatis, RuleDao ruleDao, ActiveRuleDao activeRuleDao, + DbClient dbClient, CharacteristicDao characteristicDao, System2 system) { this.defLoader = defLoader; this.profilesManager = profilesManager; - this.myBatis = myBatis; - this.ruleDao = ruleDao; - this.activeRuleDao = activeRuleDao; + this.dbClient = dbClient; this.characteristicDao = characteristicDao; } @Override public void start() { TimeProfiler profiler = new TimeProfiler().start("Register rules"); - DbSession session = myBatis.openSession(false); + DbSession session = dbClient.openSession(false); try { - - Map allRules = getRulesByKey(session); + Map allRules = loadRules(session); RulesDefinition.Context context = defLoader.load(); for (RulesDefinition.ExtendedRepository repoDef : getRepositories(context)) { @@ -106,16 +99,14 @@ public class RegisterRules implements Startable { RuleKey ruleKey = RuleKey.of(ruleDef.repository().key(), ruleDef.key()); - RuleDto rule = allRules.containsKey(ruleKey) ? - allRules.remove(ruleKey) : - this.createRuleDto(ruleDef, session); + RuleDto rule = allRules.containsKey(ruleKey) ? allRules.remove(ruleKey) : createRuleDto(ruleDef, session); boolean executeUpdate = false; if (mergeRule(ruleDef, rule)) { executeUpdate = true; } - if(rule.getSubCharacteristicId() != null) { + if (rule.getSubCharacteristicId() != null) { CharacteristicDto characteristicDto = characteristicDao.selectById(rule.getSubCharacteristicId(), session); if (characteristicDto != null && mergeDebtDefinitions(ruleDef, rule, characteristicDto)) { executeUpdate = true; @@ -127,16 +118,15 @@ public class RegisterRules implements Startable { } if (executeUpdate) { - ruleDao.update(rule, session); + dbClient.ruleDao().update(rule, session); } mergeParams(ruleDef, rule, session); - } + session.commit(); } List activeRules = processRemainingDbRules(allRules.values(), session); removeActiveRulesOnStillExistingRepositories(activeRules, context); - session.commit(); } finally { @@ -151,9 +141,9 @@ public class RegisterRules implements Startable { // nothing } - private Map getRulesByKey(DbSession session) { + private Map loadRules(DbSession session) { Map rules = new HashMap(); - for (RuleDto rule : ruleDao.findByNonManual(session)) { + for (RuleDto rule : dbClient.ruleDao().findByNonManual(session)) { rules.put(rule.getKey(), rule); } return rules; @@ -185,7 +175,7 @@ public class RegisterRules implements Startable { .setStatus(ruleDef.status().name()) .setSystemTags(ruleDef.tags()); - return ruleDao.insert(ruleDto, session); + return dbClient.ruleDao().insert(ruleDto, session); } private boolean mergeRule(RulesDefinition.Rule def, RuleDto dto) { @@ -268,7 +258,7 @@ public class RegisterRules implements Startable { } private void mergeParams(RulesDefinition.Rule ruleDef, RuleDto rule, DbSession session) { - List paramDtos = ruleDao.findRuleParamsByRuleKey(rule.getKey(), session); + List paramDtos = dbClient.ruleDao().findRuleParamsByRuleKey(rule.getKey(), session); List existingParamDtoNames = new ArrayList(); for (RuleParamDto paramDto : paramDtos) { @@ -276,12 +266,12 @@ public class RegisterRules implements Startable { if (paramDef == null) { //TODO cascade on the activeRule upon RuleDeletion //activeRuleDao.removeRuleParam(paramDto, sqlSession); - ruleDao.removeRuleParam(rule, paramDto, session); + dbClient.ruleDao().removeRuleParam(rule, paramDto, session); } else { // TODO validate that existing active rules still match constraints // TODO store param name if (mergeParam(paramDto, paramDef)) { - ruleDao.updateRuleParam(rule, paramDto, session); + dbClient.ruleDao().updateRuleParam(rule, paramDto, session); } existingParamDtoNames.add(paramDto.getName()); } @@ -293,7 +283,7 @@ public class RegisterRules implements Startable { .setDescription(param.description()) .setDefaultValue(param.defaultValue()) .setType(param.type().toString()); - ruleDao.addRuleParam(rule, paramDto, session); + dbClient.ruleDao().addRuleParam(rule, paramDto, session); } } } @@ -338,7 +328,7 @@ public class RegisterRules implements Startable { boolean toBeRemoved = true; // Update custom rules from template if (ruleDto.getParentId() != null) { - RuleDto parent = ruleDao.getParent(ruleDto, session); + RuleDto parent = dbClient.ruleDao().getParent(ruleDto, session); if (parent != null && !Rule.STATUS_REMOVED.equals(parent.getStatus())) { ruleDto.setLanguage(parent.getLanguage()); ruleDto.setStatus(parent.getStatus()); @@ -347,7 +337,7 @@ public class RegisterRules implements Startable { ruleDto.setDefaultRemediationCoefficient(parent.getDefaultRemediationCoefficient()); ruleDto.setDefaultRemediationOffset(parent.getDefaultRemediationOffset()); ruleDto.setEffortToFixDescription(parent.getEffortToFixDescription()); - ruleDao.update(ruleDto, session); + dbClient.ruleDao().update(ruleDto, session); toBeRemoved = false; } } @@ -358,7 +348,7 @@ public class RegisterRules implements Startable { ruleDto.setTags(Collections.EMPTY_SET); } - ruleDao.update(ruleDto, session); + dbClient.ruleDao().update(ruleDto, session); removedRules.add(ruleDto); if (removedRules.size() % 100 == 0) { session.commit(); @@ -392,6 +382,7 @@ public class RegisterRules implements Startable { for (RuleDto rule : removedRules) { // SONAR-4642 Remove active rules only when repository still exists if (repositoryKeys.contains(rule.getRepositoryKey())) { + // TODO profilesManager.removeActivatedRules(rule.getId()); } } diff --git a/sonar-server/src/main/java/org/sonar/server/rule2/index/RuleDoc.java b/sonar-server/src/main/java/org/sonar/server/rule2/index/RuleDoc.java index c8f629274e3..41b5b32d9b7 100644 --- a/sonar-server/src/main/java/org/sonar/server/rule2/index/RuleDoc.java +++ b/sonar-server/src/main/java/org/sonar/server/rule2/index/RuleDoc.java @@ -26,12 +26,10 @@ import org.sonar.api.server.debt.DebtRemediationFunction; import org.sonar.api.server.rule.RuleParamType; import org.sonar.server.rule2.Rule; import org.sonar.server.rule2.RuleParam; -import org.sonar.server.rule2.index.RuleNormalizer; import org.sonar.server.rule2.index.RuleNormalizer.RuleField; +import org.sonar.server.search.IndexUtils; import javax.annotation.CheckForNull; -import java.text.ParseException; -import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -175,23 +173,13 @@ class RuleDoc implements Rule { @Override @CheckForNull public Date createdAt() { - SimpleDateFormat sdf = new SimpleDateFormat( "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'" ); - try { - return sdf.parse((String) fields.get(RuleField.CREATED_AT.key())); - } catch (ParseException e) { - throw new IllegalStateException("Cannot parse date", e); - } + return IndexUtils.parseDateTime((String) fields.get(RuleField.CREATED_AT.key())); } @Override @CheckForNull public Date updatedAt() { - SimpleDateFormat sdf = new SimpleDateFormat( "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'" ); - try { - return sdf.parse((String) fields.get(RuleField.UPDATED_AT.key())); - } catch (ParseException e) { - throw new IllegalStateException("Cannot parse date", e); - } + return IndexUtils.parseDateTime((String) fields.get(RuleField.UPDATED_AT.key())); } @Override diff --git a/sonar-server/src/main/java/org/sonar/server/rule2/index/RuleIndex.java b/sonar-server/src/main/java/org/sonar/server/rule2/index/RuleIndex.java index 01031a006dc..52c742ae386 100644 --- a/sonar-server/src/main/java/org/sonar/server/rule2/index/RuleIndex.java +++ b/sonar-server/src/main/java/org/sonar/server/rule2/index/RuleIndex.java @@ -19,6 +19,7 @@ */ package org.sonar.server.rule2.index; +import com.google.common.base.Preconditions; import com.google.common.collect.ImmutableSet; import org.elasticsearch.action.get.GetResponse; import org.elasticsearch.action.search.SearchRequestBuilder; @@ -37,7 +38,6 @@ import org.elasticsearch.search.sort.SortOrder; import org.sonar.api.rule.RuleKey; import org.sonar.api.rule.RuleStatus; import org.sonar.core.cluster.WorkQueue; -import org.sonar.core.profiling.Profiling; import org.sonar.core.rule.RuleDto; import org.sonar.server.es.ESNode; import org.sonar.server.rule2.Rule; @@ -71,9 +71,8 @@ public class RuleIndex extends BaseIndex { RuleNormalizer.RuleField.INTERNAL_KEY.key(), RuleNormalizer.RuleField.UPDATED_AT.key()); - public RuleIndex(RuleNormalizer normalizer, WorkQueue workQueue, - Profiling profiling, ESNode node) { - super(new RuleIndexDefinition(), normalizer, workQueue, profiling, node); + public RuleIndex(RuleNormalizer normalizer, WorkQueue workQueue, ESNode node) { + super(new RuleIndexDefinition(), normalizer, workQueue, node); } protected String getKeyValue(RuleKey key) { @@ -292,7 +291,6 @@ public class RuleIndex extends BaseIndex { } public RuleResult search(RuleQuery query, QueryOptions options) { - SearchRequestBuilder esSearch = this.buildRequest(query, options); FilterBuilder fb = this.getFilter(query, options); QueryBuilder qb = this.getQuery(query, options); @@ -306,14 +304,12 @@ public class RuleIndex extends BaseIndex { public Rule toDoc(GetResponse response) { - if (response == null) { - throw new IllegalStateException("Cannot construct Rule with null response!!!"); - } + Preconditions.checkArgument(response != null, "Cannot construct Rule with null response!!!"); return new RuleDoc(response.getSource()); } public Set terms(String... fields) { - Set tags = new HashSet(); + Set tags = new HashSet(); SearchRequestBuilder request = this.getClient() .prepareSearch(this.getIndexName()) @@ -324,7 +320,7 @@ public class RuleIndex extends BaseIndex { .global(true) .size(Integer.MAX_VALUE)); - SearchResponse esResponse = request.get(); + SearchResponse esResponse = request.get(); TermsFacet termFacet = esResponse .getFacets().facet("tags"); diff --git a/sonar-server/src/main/java/org/sonar/server/rule2/index/RuleNormalizer.java b/sonar-server/src/main/java/org/sonar/server/rule2/index/RuleNormalizer.java index df5ddb8120c..a2f73746b3a 100644 --- a/sonar-server/src/main/java/org/sonar/server/rule2/index/RuleNormalizer.java +++ b/sonar-server/src/main/java/org/sonar/server/rule2/index/RuleNormalizer.java @@ -24,7 +24,6 @@ import org.elasticsearch.common.xcontent.XContentBuilder; import org.sonar.api.rule.RuleKey; import org.sonar.check.Cardinality; import org.sonar.core.persistence.DbSession; -import org.sonar.core.persistence.MyBatis; import org.sonar.core.rule.RuleDto; import org.sonar.core.rule.RuleParamDto; import org.sonar.server.db.DbClient; diff --git a/sonar-server/src/main/java/org/sonar/server/rule2/index/RuleResult.java b/sonar-server/src/main/java/org/sonar/server/rule2/index/RuleResult.java index 0bc3a512f4a..5f4e39461cb 100644 --- a/sonar-server/src/main/java/org/sonar/server/rule2/index/RuleResult.java +++ b/sonar-server/src/main/java/org/sonar/server/rule2/index/RuleResult.java @@ -23,7 +23,7 @@ import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.search.SearchHit; import org.sonar.core.qualityprofile.db.ActiveRuleKey; import org.sonar.server.qualityprofile.index.ActiveRuleDoc; -import org.sonar.server.rule2.ActiveRule; +import org.sonar.server.qualityprofile.ActiveRule; import org.sonar.server.rule2.Rule; import org.sonar.server.search.Result; diff --git a/sonar-server/src/main/java/org/sonar/server/rule2/index/package-info.java b/sonar-server/src/main/java/org/sonar/server/rule2/index/package-info.java new file mode 100644 index 00000000000..06dac82451f --- /dev/null +++ b/sonar-server/src/main/java/org/sonar/server/rule2/index/package-info.java @@ -0,0 +1,23 @@ +/* + * SonarQube, open source software quality management tool. + * Copyright (C) 2008-2014 SonarSource + * mailto:contact AT sonarsource DOT com + * + * SonarQube is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * SonarQube is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +@ParametersAreNonnullByDefault +package org.sonar.server.rule2.index; + +import javax.annotation.ParametersAreNonnullByDefault; diff --git a/sonar-server/src/main/java/org/sonar/server/rule2/persistence/RuleDao.java b/sonar-server/src/main/java/org/sonar/server/rule2/persistence/RuleDao.java index 1e4ccf01333..e13b10f7877 100644 --- a/sonar-server/src/main/java/org/sonar/server/rule2/persistence/RuleDao.java +++ b/sonar-server/src/main/java/org/sonar/server/rule2/persistence/RuleDao.java @@ -24,7 +24,6 @@ import com.google.common.base.Preconditions; import com.google.common.collect.Lists; import org.apache.ibatis.session.ResultContext; import org.apache.ibatis.session.ResultHandler; -import org.sonar.api.ServerComponent; import org.sonar.api.rule.RuleKey; import org.sonar.api.utils.System2; import org.sonar.core.persistence.DbSession; @@ -43,7 +42,7 @@ import java.util.Collection; import java.util.List; import java.util.Map; -public class RuleDao extends BaseDao implements ServerComponent { +public class RuleDao extends BaseDao { public RuleDao() { super(new RuleIndexDefinition(), RuleMapper.class); @@ -138,7 +137,6 @@ public class RuleDao extends BaseDao implements Se Preconditions.checkNotNull(rule.getId(), "Rule id must be set"); Preconditions.checkNotNull(paramDto.getId(), "Param is not yet persisted must be set"); paramDto.setRuleId(rule.getId()); - System.out.println("paramDto = " + paramDto); session.enqueue(new EmbeddedIndexAction(this.getIndexType(), IndexAction.Method.UPDATE, paramDto, rule.getKey())); mapper(session).updateParameter(paramDto); return paramDto; diff --git a/sonar-server/src/main/java/org/sonar/server/rule2/persistence/package-info.java b/sonar-server/src/main/java/org/sonar/server/rule2/persistence/package-info.java new file mode 100644 index 00000000000..bbe1f0d5fdb --- /dev/null +++ b/sonar-server/src/main/java/org/sonar/server/rule2/persistence/package-info.java @@ -0,0 +1,23 @@ +/* + * SonarQube, open source software quality management tool. + * Copyright (C) 2008-2014 SonarSource + * mailto:contact AT sonarsource DOT com + * + * SonarQube is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * SonarQube is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +@ParametersAreNonnullByDefault +package org.sonar.server.rule2.persistence; + +import javax.annotation.ParametersAreNonnullByDefault; diff --git a/sonar-server/src/main/java/org/sonar/server/rule2/ws/SearchAction.java b/sonar-server/src/main/java/org/sonar/server/rule2/ws/SearchAction.java index c8e58a256ce..12d109ccb41 100644 --- a/sonar-server/src/main/java/org/sonar/server/rule2/ws/SearchAction.java +++ b/sonar-server/src/main/java/org/sonar/server/rule2/ws/SearchAction.java @@ -28,7 +28,7 @@ import org.sonar.api.server.ws.RequestHandler; import org.sonar.api.server.ws.Response; import org.sonar.api.server.ws.WebService; import org.sonar.api.utils.text.JsonWriter; -import org.sonar.server.rule2.ActiveRule; +import org.sonar.server.qualityprofile.ActiveRule; import org.sonar.server.rule2.Rule; import org.sonar.server.rule2.RuleParam; import org.sonar.server.rule2.RuleService; diff --git a/sonar-server/src/main/java/org/sonar/server/search/BaseIndex.java b/sonar-server/src/main/java/org/sonar/server/search/BaseIndex.java index 9a902c4c47a..6546a6d59c6 100644 --- a/sonar-server/src/main/java/org/sonar/server/search/BaseIndex.java +++ b/sonar-server/src/main/java/org/sonar/server/search/BaseIndex.java @@ -35,7 +35,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.sonar.core.cluster.WorkQueue; import org.sonar.core.db.Dto; -import org.sonar.core.profiling.Profiling; import org.sonar.server.es.ESNode; import java.io.IOException; @@ -49,15 +48,13 @@ public abstract class BaseIndex, K extends Serializable> private static final Logger LOG = LoggerFactory.getLogger(BaseIndex.class); - private final Profiling profiling; private final ESNode node; protected BaseNormalizer normalizer; protected final IndexDefinition indexDefinition; - public BaseIndex(IndexDefinition indexDefinition, BaseNormalizer normalizer, WorkQueue workQueue, - Profiling profiling, ESNode node) { + public BaseIndex(IndexDefinition indexDefinition, BaseNormalizer normalizer, + WorkQueue workQueue, ESNode node) { this.normalizer = normalizer; - this.profiling = profiling; this.node = node; this.indexDefinition = indexDefinition; } @@ -86,7 +83,7 @@ public abstract class BaseIndex, K extends Serializable> public void start() { /* Setup the index if necessary */ - this.initializeIndex(); + initializeIndex(); } @Override @@ -97,7 +94,6 @@ public abstract class BaseIndex, K extends Serializable> /* Cluster And ES Stats/Client methods */ protected void initializeIndex() { - String index = this.getIndexName(); IndicesExistsResponse indexExistsResponse = getClient().admin().indices() @@ -315,13 +311,12 @@ public abstract class BaseIndex, K extends Serializable> } - protected BoolFilterBuilder addMultiFieldTermFilter(Collection values, BoolFilterBuilder filter, String... fields) { if (values != null && !values.isEmpty()) { BoolFilterBuilder valuesFilter = FilterBuilders.boolFilter(); for (String value : values) { Collection filterBuilders = new ArrayList(); - for(String field:fields) { + for (String field : fields) { filterBuilders.add(FilterBuilders.termFilter(field, value)); } valuesFilter.should(FilterBuilders.orFilter(filterBuilders.toArray(new FilterBuilder[filterBuilders.size()]))); @@ -332,7 +327,6 @@ public abstract class BaseIndex, K extends Serializable> } - protected BoolFilterBuilder addTermFilter(String field, Collection values, BoolFilterBuilder filter) { if (values != null && !values.isEmpty()) { BoolFilterBuilder valuesFilter = FilterBuilders.boolFilter(); diff --git a/sonar-server/src/main/java/org/sonar/server/search/Index.java b/sonar-server/src/main/java/org/sonar/server/search/Index.java index 77371d61656..972339c295d 100644 --- a/sonar-server/src/main/java/org/sonar/server/search/Index.java +++ b/sonar-server/src/main/java/org/sonar/server/search/Index.java @@ -24,18 +24,19 @@ import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.index.query.FilterBuilder; import org.elasticsearch.index.query.QueryBuilder; import org.picocontainer.Startable; +import org.sonar.api.ServerComponent; import org.sonar.core.db.Dto; import javax.annotation.CheckForNull; import java.io.Serializable; -public interface Index, K extends Serializable> extends Startable { +public interface Index, K extends Serializable> extends Startable, ServerComponent { @CheckForNull D getByKey(K item); SearchResponse search(SearchRequestBuilder request, - FilterBuilder filter, QueryBuilder query); + FilterBuilder filter, QueryBuilder query); String getIndexType(); diff --git a/sonar-server/src/main/java/org/sonar/server/search/IndexSynchronizer.java b/sonar-server/src/main/java/org/sonar/server/search/IndexSynchronizer.java deleted file mode 100644 index 0cdda8eb974..00000000000 --- a/sonar-server/src/main/java/org/sonar/server/search/IndexSynchronizer.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * SonarQube, open source software quality management tool. - * Copyright (C) 2008-2014 SonarSource - * mailto:contact AT sonarsource DOT com - * - * SonarQube is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 3 of the License, or (at your option) any later version. - * - * SonarQube is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License - * along with this program; if not, write to the Free Software Foundation, - * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - */ -package org.sonar.server.search; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.sonar.core.cluster.WorkQueue; -import org.sonar.core.db.Dao; - -import java.io.Serializable; - -public class IndexSynchronizer { - - private static final Logger LOG = LoggerFactory.getLogger(IndexSynchronizer.class); - - private final Index index; - private final Dao dao; - private final WorkQueue workQueue; - - public IndexSynchronizer(Index index, Dao dao, WorkQueue workQueue) { - this.index = index; - this.dao = dao; - this.workQueue = workQueue; - } - - public IndexSynchronizer start() { - -// LOG.info("Starting synchronization thread for ", index.getClass().getSimpleName()); -// -// Long since = index.getLastSynchronization(); -// index.setLastSynchronization(System.currentTimeMillis()); -// -// for (K key : dao.keysOfRowsUpdatedAfter(since)) { -// if (LOG.isTraceEnabled()) { -// LOG.trace("Adding {} to workQueue for {}", key, index.getClass().getSimpleName()); -// } -// workQueue.enqueue(new KeyIndexAction(index.getIndexName(), IndexAction.Method.INSERT, key)); -// } - - return this; - } -} diff --git a/sonar-server/src/main/java/org/sonar/server/search/IndexUtils.java b/sonar-server/src/main/java/org/sonar/server/search/IndexUtils.java index 9ee63e345f5..99d6254c9c9 100644 --- a/sonar-server/src/main/java/org/sonar/server/search/IndexUtils.java +++ b/sonar-server/src/main/java/org/sonar/server/search/IndexUtils.java @@ -19,26 +19,23 @@ */ package org.sonar.server.search; -import com.google.common.collect.ImmutableList; -import org.sonar.server.cluster.LocalQueueWorker; -import org.sonar.server.qualityprofile.index.ActiveRuleIndex; -import org.sonar.server.qualityprofile.index.ActiveRuleNormalizer; -import org.sonar.server.rule2.index.RuleIndex; -import org.sonar.server.rule2.index.RuleNormalizer; +import java.text.DateFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; -import java.util.List; - -public final class IndexUtils { +public class IndexUtils { + private IndexUtils() { + // only static stuff + } - @SuppressWarnings("unchecked") - public static List getIndexClasses() { - return ImmutableList.of( - RuleNormalizer.class, - ActiveRuleNormalizer.class, - RuleIndex.class, - ActiveRuleIndex.class, - LocalQueueWorker.class - ); + public static Date parseDateTime(String s) { + DateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); + try { + return sdf.parse(s); + } catch (ParseException e) { + throw new IllegalArgumentException("Cannot parse ES date: " + s, e); + } } } diff --git a/sonar-server/src/main/java/org/sonar/server/search/NestedIndex.java b/sonar-server/src/main/java/org/sonar/server/search/NestedIndex.java index 07af4c7f813..af3d7d8fd87 100644 --- a/sonar-server/src/main/java/org/sonar/server/search/NestedIndex.java +++ b/sonar-server/src/main/java/org/sonar/server/search/NestedIndex.java @@ -25,7 +25,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.sonar.core.cluster.WorkQueue; import org.sonar.core.db.Dto; -import org.sonar.core.profiling.Profiling; import java.io.Serializable; @@ -34,11 +33,11 @@ public abstract class NestedIndex, K extends Serializable> private static final Logger LOG = LoggerFactory.getLogger(NestedIndex.class); - protected BaseIndex parentIndex; + protected BaseIndex parentIndex; public NestedIndex(IndexDefinition indexDefinition, BaseNormalizer normalizer, WorkQueue workQueue, - Profiling profiling, BaseIndex index) { - super(indexDefinition, normalizer, workQueue, profiling, index.getNode()); + BaseIndex index) { + super(indexDefinition, normalizer, workQueue, index.getNode()); this.parentIndex = index; } @@ -54,17 +53,16 @@ public abstract class NestedIndex, K extends Serializable> protected abstract String getIndexField(); - protected String getKeyValue(K key){ + protected String getKeyValue(K key) { return this.getParentKeyValue(key); } protected void initializeIndex() { - ; } @Override public D getByKey(K key) { - return toDoc( getClient().prepareGet(this.getIndexName(), this.indexDefinition.getIndexType(), this.getKeyValue(key)) + return toDoc(getClient().prepareGet(this.getIndexName(), this.indexDefinition.getIndexType(), this.getKeyValue(key)) .get()); } diff --git a/sonar-server/src/main/java/org/sonar/server/search/Result.java b/sonar-server/src/main/java/org/sonar/server/search/Result.java index eeef6d8a1b9..1ab0cfd1208 100644 --- a/sonar-server/src/main/java/org/sonar/server/search/Result.java +++ b/sonar-server/src/main/java/org/sonar/server/search/Result.java @@ -36,41 +36,34 @@ import java.util.Map; public abstract class Result { - private Collection hits; - private Map> facets; - private int total; - private int offset; - private long time; + private final Collection hits; + private final Map> facets; + private final long total; + private final long timeInMillis; public Result(SearchResponse response) { + this.hits = new ArrayList(); + this.total = (int) response.getHits().totalHits(); + this.timeInMillis = response.getTookInMillis(); - hits = new ArrayList(); - - if (response != null) { - this.total = (int) response.getHits().totalHits(); - this.time = response.getTookInMillis(); - - - for (SearchHit hit : response.getHits()) { - this.hits.add(getSearchResult(hit)); - } - + for (SearchHit hit : response.getHits()) { + this.hits.add(getSearchResult(hit)); + } - if (response.getFacets() != null && - !response.getFacets().facets().isEmpty()) { - this.facets = new HashMap>(); - for (Facet facet : response.getFacets().facets()) { - TermsFacet termFacet = (TermsFacet) facet; - List facetValues = new ArrayList(); - for (TermsFacet.Entry facetValue : termFacet.getEntries()) { - facetValues.add(new FacetValue(facetValue.getTerm().string(), - facetValue.getCount())); - } - this.facets.put(facet.getName(), facetValues); + if (response.getFacets() != null && + !response.getFacets().facets().isEmpty()) { + this.facets = new HashMap>(); + for (Facet facet : response.getFacets().facets()) { + TermsFacet termFacet = (TermsFacet) facet; + List facetValues = new ArrayList(); + for (TermsFacet.Entry facetValue : termFacet.getEntries()) { + facetValues.add(new FacetValue(facetValue.getTerm().string(), + facetValue.getCount())); } - } else { - this.facets = Collections.emptyMap(); + this.facets.put(facet.getName(), facetValues); } + } else { + this.facets = Collections.emptyMap(); } } @@ -90,16 +83,12 @@ public abstract class Result { return hits; } - public int getTotal() { + public long getTotal() { return total; } - public int getOffset() { - return offset; - } - - public long getTime() { - return time; + public long getTimeInMillis() { + return timeInMillis; } public Map> getFacets() { diff --git a/sonar-server/src/main/java/org/sonar/server/search/action/package-info.java b/sonar-server/src/main/java/org/sonar/server/search/action/package-info.java new file mode 100644 index 00000000000..15d2248a0ec --- /dev/null +++ b/sonar-server/src/main/java/org/sonar/server/search/action/package-info.java @@ -0,0 +1,23 @@ +/* + * SonarQube, open source software quality management tool. + * Copyright (C) 2008-2014 SonarSource + * mailto:contact AT sonarsource DOT com + * + * SonarQube is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 3 of the License, or (at your option) any later version. + * + * SonarQube is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + */ +@ParametersAreNonnullByDefault +package org.sonar.server.search.action; + +import javax.annotation.ParametersAreNonnullByDefault; diff --git a/sonar-server/src/test/java/org/sonar/server/rule2/RegisterRulesTest.java b/sonar-server/src/test/java/org/sonar/server/rule2/RegisterRulesTest.java index 960c739ad10..48346239f8e 100644 --- a/sonar-server/src/test/java/org/sonar/server/rule2/RegisterRulesTest.java +++ b/sonar-server/src/test/java/org/sonar/server/rule2/RegisterRulesTest.java @@ -24,9 +24,6 @@ import org.junit.Before; import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; -import org.mockito.ArgumentCaptor; -import org.mockito.Captor; -import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; import org.sonar.api.rule.RuleStatus; import org.sonar.api.rule.Severity; @@ -34,24 +31,18 @@ import org.sonar.api.server.rule.RulesDefinition; import org.sonar.api.utils.DateUtils; import org.sonar.api.utils.MessageException; import org.sonar.api.utils.System2; -import org.sonar.core.cluster.WorkQueue; import org.sonar.core.persistence.AbstractDaoTestCase; import org.sonar.core.persistence.DbSession; import org.sonar.core.persistence.MyBatis; import org.sonar.core.qualityprofile.db.QualityProfileDao; -import org.sonar.core.rule.RuleDto; -import org.sonar.core.rule.RuleTagDao; -import org.sonar.core.rule.RuleTagDto; import org.sonar.core.technicaldebt.db.CharacteristicDao; +import org.sonar.server.db.DbClient; import org.sonar.server.qualityprofile.ProfilesManager; import org.sonar.server.qualityprofile.persistence.ActiveRuleDao; -import org.sonar.server.rule.ESRuleTags; import org.sonar.server.rule.RuleDefinitionsLoader; -import org.sonar.server.rule.RuleRegistry; import org.sonar.server.rule.RuleRepositories; import org.sonar.server.rule2.persistence.RuleDao; -import java.util.Collection; import java.util.Date; import static org.fest.assertions.Assertions.assertThat; @@ -68,32 +59,15 @@ public class RegisterRulesTest extends AbstractDaoTestCase { "effort_to_fix_description"}; RegisterRules task; - - @Mock - ProfilesManager profilesManager; - - @Mock - RuleRegistry ruleRegistry; - - @Mock - ESRuleTags esRuleTags; - - @Captor - ArgumentCaptor> rulesCaptor; - - @Captor - ArgumentCaptor> ruleTagsCaptor; - + ProfilesManager profilesManager = mock(ProfilesManager.class); MyBatis myBatis; RuleDao ruleDao; - RuleTagDao ruleTagDao; ActiveRuleDao activeRuleDao; CharacteristicDao characteristicDao; System2 system; - WorkQueue queue; Date date = DateUtils.parseDateTime("2014-03-17T19:10:03+0100"); - - private DbSession session; + DbSession session; + DbClient dbClient; @Before public void before() { @@ -101,11 +75,13 @@ public class RegisterRulesTest extends AbstractDaoTestCase { when(system.now()).thenReturn(date.getTime()); myBatis = getMyBatis(); ruleDao = new RuleDao(); - ruleTagDao = new RuleTagDao(myBatis); activeRuleDao = new ActiveRuleDao(new QualityProfileDao(myBatis), ruleDao); + dbClient = new DbClient(getDatabase(), getMyBatis(), ruleDao, activeRuleDao, new QualityProfileDao(getMyBatis())); characteristicDao = new CharacteristicDao(myBatis); - task = new RegisterRules(new RuleDefinitionsLoader(mock(RuleRepositories.class), new RulesDefinition[]{new FakeRepository()}), - profilesManager, myBatis, ruleDao, activeRuleDao, characteristicDao, system); + task = new RegisterRules(new RuleDefinitionsLoader(mock(RuleRepositories.class), + new RulesDefinition[]{new FakeRepository()}), + profilesManager, dbClient, characteristicDao, system + ); session = myBatis.openSession(false); } @@ -289,7 +265,7 @@ public class RegisterRulesTest extends AbstractDaoTestCase { @Test public void test_high_number_of_rules() { task = new RegisterRules(new RuleDefinitionsLoader(mock(RuleRepositories.class), new RulesDefinition[]{new BigRepository()}), - profilesManager, myBatis, ruleDao, activeRuleDao, characteristicDao); + profilesManager, dbClient, characteristicDao); setupData("shared"); task.start(); @@ -305,7 +281,7 @@ public class RegisterRulesTest extends AbstractDaoTestCase { public void insert_extended_repositories() { task = new RegisterRules(new RuleDefinitionsLoader(mock(RuleRepositories.class), new RulesDefinition[]{ new FindbugsRepository(), new FbContribRepository()}), - profilesManager, myBatis, ruleDao, activeRuleDao, characteristicDao + profilesManager, dbClient, characteristicDao ); -- 2.39.5