From c0611465343b95ee1d8108ec89858f11bd2da535 Mon Sep 17 00:00:00 2001 From: Stephane Gamard Date: Wed, 21 May 2014 11:42:13 +0200 Subject: [PATCH] DAOv.2 - Created IndexClient as counterpart of DbClient. --- .../server/platform/ServerComponents.java | 132 ++++++++++++++++-- .../org/sonar/server/search/IndexClient.java | 48 +++++++ .../server/search/IndexClientMediumTest.java | 22 +++ 3 files changed, 189 insertions(+), 13 deletions(-) create mode 100644 sonar-server/src/main/java/org/sonar/server/search/IndexClient.java create mode 100644 sonar-server/src/test/java/org/sonar/server/search/IndexClientMediumTest.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 999e20e5645..d92f34f77ce 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 @@ -52,7 +52,13 @@ import org.sonar.core.measure.db.MeasureFilterDao; import org.sonar.core.metric.DefaultMetricFinder; import org.sonar.core.notification.DefaultNotificationManager; import org.sonar.core.permission.PermissionFacade; -import org.sonar.core.persistence.*; +import org.sonar.core.persistence.DaoUtils; +import org.sonar.core.persistence.DatabaseVersion; +import org.sonar.core.persistence.DefaultDatabase; +import org.sonar.core.persistence.MyBatis; +import org.sonar.core.persistence.PreviewDatabaseFactory; +import org.sonar.core.persistence.SemaphoreUpdater; +import org.sonar.core.persistence.SemaphoresImpl; import org.sonar.core.preview.PreviewCache; import org.sonar.core.profiling.Profiling; import org.sonar.core.purge.PurgeProfiler; @@ -88,10 +94,32 @@ import org.sonar.server.db.DbClient; import org.sonar.server.db.EmbeddedDatabaseFactory; import org.sonar.server.db.migrations.DatabaseMigrations; import org.sonar.server.db.migrations.DatabaseMigrator; -import org.sonar.server.debt.*; +import org.sonar.server.debt.DebtCharacteristicsXMLImporter; +import org.sonar.server.debt.DebtModelBackup; +import org.sonar.server.debt.DebtModelLookup; +import org.sonar.server.debt.DebtModelOperations; +import org.sonar.server.debt.DebtModelPluginRepository; +import org.sonar.server.debt.DebtModelService; +import org.sonar.server.debt.DebtModelXMLExporter; +import org.sonar.server.debt.DebtRulesXMLImporter; import org.sonar.server.es.ESIndex; import org.sonar.server.es.ESNode; -import org.sonar.server.issue.*; +import org.sonar.server.issue.ActionService; +import org.sonar.server.issue.AssignAction; +import org.sonar.server.issue.CommentAction; +import org.sonar.server.issue.DefaultIssueFinder; +import org.sonar.server.issue.InternalRubyIssueService; +import org.sonar.server.issue.IssueBulkChangeService; +import org.sonar.server.issue.IssueChangelogFormatter; +import org.sonar.server.issue.IssueChangelogService; +import org.sonar.server.issue.IssueCommentService; +import org.sonar.server.issue.IssueService; +import org.sonar.server.issue.IssueStatsFinder; +import org.sonar.server.issue.PlanAction; +import org.sonar.server.issue.PublicRubyIssueService; +import org.sonar.server.issue.ServerIssueStorage; +import org.sonar.server.issue.SetSeverityAction; +import org.sonar.server.issue.TransitionAction; import org.sonar.server.issue.actionplan.ActionPlanService; import org.sonar.server.issue.actionplan.ActionPlanWs; import org.sonar.server.issue.filter.IssueFilterService; @@ -113,24 +141,77 @@ import org.sonar.server.permission.ws.PermissionsWs; import org.sonar.server.platform.ws.RestartHandler; import org.sonar.server.platform.ws.ServerWs; import org.sonar.server.platform.ws.SystemWs; -import org.sonar.server.plugins.*; +import org.sonar.server.plugins.BatchWs; +import org.sonar.server.plugins.InstalledPluginReferentialFactory; +import org.sonar.server.plugins.PluginDownloader; +import org.sonar.server.plugins.ServerExtensionInstaller; +import org.sonar.server.plugins.ServerPluginJarInstaller; +import org.sonar.server.plugins.ServerPluginJarsInstaller; +import org.sonar.server.plugins.ServerPluginRepository; +import org.sonar.server.plugins.UpdateCenterClient; +import org.sonar.server.plugins.UpdateCenterMatrixFactory; import org.sonar.server.qualitygate.QgateProjectFinder; import org.sonar.server.qualitygate.QualityGates; import org.sonar.server.qualitygate.RegisterQualityGates; -import org.sonar.server.qualitygate.ws.*; -import org.sonar.server.qualityprofile.*; +import org.sonar.server.qualitygate.ws.QGatesAppAction; +import org.sonar.server.qualitygate.ws.QGatesCopyAction; +import org.sonar.server.qualitygate.ws.QGatesCreateAction; +import org.sonar.server.qualitygate.ws.QGatesCreateConditionAction; +import org.sonar.server.qualitygate.ws.QGatesDeleteConditionAction; +import org.sonar.server.qualitygate.ws.QGatesDeselectAction; +import org.sonar.server.qualitygate.ws.QGatesDestroyAction; +import org.sonar.server.qualitygate.ws.QGatesListAction; +import org.sonar.server.qualitygate.ws.QGatesRenameAction; +import org.sonar.server.qualitygate.ws.QGatesSearchAction; +import org.sonar.server.qualitygate.ws.QGatesSelectAction; +import org.sonar.server.qualitygate.ws.QGatesSetAsDefaultAction; +import org.sonar.server.qualitygate.ws.QGatesShowAction; +import org.sonar.server.qualitygate.ws.QGatesUnsetDefaultAction; +import org.sonar.server.qualitygate.ws.QGatesUpdateConditionAction; +import org.sonar.server.qualitygate.ws.QGatesWs; +import org.sonar.server.qualityprofile.ActiveRuleService; +import org.sonar.server.qualityprofile.DefaultProfilesCache; +import org.sonar.server.qualityprofile.ESActiveRule; +import org.sonar.server.qualityprofile.ProfilesManager; +import org.sonar.server.qualityprofile.QProfileActiveRuleOperations; +import org.sonar.server.qualityprofile.QProfileBackup; +import org.sonar.server.qualityprofile.QProfileLookup; +import org.sonar.server.qualityprofile.QProfileOperations; +import org.sonar.server.qualityprofile.QProfileProjectLookup; +import org.sonar.server.qualityprofile.QProfileProjectOperations; +import org.sonar.server.qualityprofile.QProfileRepositoryExporter; +import org.sonar.server.qualityprofile.QProfileRuleLookup; +import org.sonar.server.qualityprofile.QProfiles; +import org.sonar.server.qualityprofile.QualityProfileService; 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.*; -import org.sonar.server.rule.*; +import org.sonar.server.qualityprofile.ws.BulkRuleActivationActions; +import org.sonar.server.qualityprofile.ws.ProfilesWs; +import org.sonar.server.qualityprofile.ws.QProfileRecreateBuiltInAction; +import org.sonar.server.qualityprofile.ws.QProfilesWs; +import org.sonar.server.qualityprofile.ws.RuleActivationActions; +import org.sonar.server.rule.DeprecatedRulesDefinition; +import org.sonar.server.rule.RubyRuleService; +import org.sonar.server.rule.RuleDefinitionsLoader; +import org.sonar.server.rule.RuleOperations; +import org.sonar.server.rule.RuleRegistry; +import org.sonar.server.rule.RuleRepositories; +import org.sonar.server.rule.Rules; 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.*; +import org.sonar.server.rule2.ws.RuleMapping; +import org.sonar.server.rule2.ws.RulesWebService; +import org.sonar.server.rule2.ws.SearchAction; +import org.sonar.server.rule2.ws.SetNoteAction; +import org.sonar.server.rule2.ws.SetTagsAction; +import org.sonar.server.rule2.ws.TagsAction; +import org.sonar.server.search.IndexClient; import org.sonar.server.source.CodeColorizers; import org.sonar.server.source.DeprecatedSourceDecorator; import org.sonar.server.source.HtmlSourceDecorator; @@ -139,7 +220,20 @@ import org.sonar.server.source.ws.ScmAction; import org.sonar.server.source.ws.ScmWriter; import org.sonar.server.source.ws.ShowAction; import org.sonar.server.source.ws.SourcesWs; -import org.sonar.server.startup.*; +import org.sonar.server.startup.CleanPreviewAnalysisCache; +import org.sonar.server.startup.CopyRequirementsFromCharacteristicsToRules; +import org.sonar.server.startup.GeneratePluginIndex; +import org.sonar.server.startup.GwtPublisher; +import org.sonar.server.startup.JdbcDriverDeployer; +import org.sonar.server.startup.LogServerId; +import org.sonar.server.startup.RegisterDashboards; +import org.sonar.server.startup.RegisterDebtModel; +import org.sonar.server.startup.RegisterMetrics; +import org.sonar.server.startup.RegisterNewMeasureFilters; +import org.sonar.server.startup.RegisterPermissionTemplates; +import org.sonar.server.startup.RegisterServletFilters; +import org.sonar.server.startup.RenameDeprecatedPropertyKeys; +import org.sonar.server.startup.ServerMetadataPersister; import org.sonar.server.test.CoverageService; import org.sonar.server.test.ws.CoverageShowAction; import org.sonar.server.test.ws.CoverageWs; @@ -151,9 +245,20 @@ import org.sonar.server.ui.JRubyProfiling; import org.sonar.server.ui.PageDecorations; import org.sonar.server.ui.Views; import org.sonar.server.updatecenter.ws.UpdateCenterWs; -import org.sonar.server.user.*; +import org.sonar.server.user.DefaultUserService; +import org.sonar.server.user.DoPrivileged; +import org.sonar.server.user.GroupMembershipFinder; +import org.sonar.server.user.GroupMembershipService; +import org.sonar.server.user.NewUserNotifier; +import org.sonar.server.user.SecurityRealmFactory; import org.sonar.server.user.ws.UsersWs; -import org.sonar.server.util.*; +import org.sonar.server.util.BooleanTypeValidation; +import org.sonar.server.util.FloatTypeValidation; +import org.sonar.server.util.IntegerTypeValidation; +import org.sonar.server.util.StringListTypeValidation; +import org.sonar.server.util.StringTypeValidation; +import org.sonar.server.util.TextTypeValidation; +import org.sonar.server.util.TypeValidations; import org.sonar.server.ws.ListingWs; import org.sonar.server.ws.WebServiceEngine; @@ -261,7 +366,8 @@ class ServerComponents { ActiveRuleNormalizer.class, RuleIndex.class, ActiveRuleIndex.class, - LocalQueueWorker.class + LocalQueueWorker.class, + IndexClient.class ); return components; } diff --git a/sonar-server/src/main/java/org/sonar/server/search/IndexClient.java b/sonar-server/src/main/java/org/sonar/server/search/IndexClient.java new file mode 100644 index 00000000000..0aca2e3672a --- /dev/null +++ b/sonar-server/src/main/java/org/sonar/server/search/IndexClient.java @@ -0,0 +1,48 @@ +/* + * 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.sonar.api.ServerComponent; +import org.sonar.core.persistence.Database; +import org.sonar.core.persistence.MyBatis; + +import java.util.HashMap; +import java.util.Map; + +/** + * Facade for all Index components + */ +public class IndexClient implements ServerComponent { + + private final Map, Index> indexComponents; + + public IndexClient(Database db, MyBatis myBatis, Index... indexComponents) { + + this.indexComponents = new HashMap, Index>(); + + for(Index indexComponent : indexComponents){ + this.indexComponents.put(indexComponent.getClass(), indexComponent); + } + } + + public K get(Class clazz){ + return (K) this.indexComponents.get(clazz); + } +} diff --git a/sonar-server/src/test/java/org/sonar/server/search/IndexClientMediumTest.java b/sonar-server/src/test/java/org/sonar/server/search/IndexClientMediumTest.java new file mode 100644 index 00000000000..9cc7977f52f --- /dev/null +++ b/sonar-server/src/test/java/org/sonar/server/search/IndexClientMediumTest.java @@ -0,0 +1,22 @@ +package org.sonar.server.search; + +import org.junit.ClassRule; +import org.junit.Test; +import org.sonar.server.rule2.index.RuleIndex; +import org.sonar.server.tester.ServerTester; + +import static org.fest.assertions.Assertions.assertThat; + +public class IndexClientMediumTest{ + + @ClassRule + public static ServerTester tester = new ServerTester(); + + + @Test + public void get_index_class(){ + IndexClient indexClient = tester.get(IndexClient.class); + assertThat(tester.get(RuleIndex.class)) + .isEqualTo(indexClient.get(RuleIndex.class)); + } +} \ No newline at end of file -- 2.39.5