/* * SonarQube * Copyright (C) 2009-2017 SonarSource SA * mailto:info AT sonarsource DOT com * * This program 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. * * This program 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.platform.platformlevel; import java.util.List; import org.sonar.api.profiles.AnnotationProfileParser; import org.sonar.api.profiles.XMLProfileParser; import org.sonar.api.profiles.XMLProfileSerializer; import org.sonar.api.resources.Languages; import org.sonar.api.resources.ResourceTypes; import org.sonar.api.rules.AnnotationRuleParser; import org.sonar.api.rules.XMLRuleParser; import org.sonar.api.server.rule.RulesDefinitionXmlLoader; import org.sonar.ce.CeModule; import org.sonar.ce.settings.ProjectSettingsFactory; import org.sonar.core.component.DefaultResourceTypes; import org.sonar.core.timemachine.Periods; import org.sonar.server.authentication.AuthenticationModule; import org.sonar.server.batch.BatchWsModule; import org.sonar.server.ce.ws.CeWsModule; import org.sonar.server.component.ComponentCleanerService; import org.sonar.server.component.ComponentFinder; import org.sonar.server.component.ComponentService; import org.sonar.server.component.ComponentUpdater; import org.sonar.server.component.index.ComponentIndex; import org.sonar.server.component.index.ComponentIndexDefinition; import org.sonar.server.component.index.ComponentIndexer; import org.sonar.server.component.ws.ComponentsWsModule; import org.sonar.server.debt.DebtModelPluginRepository; import org.sonar.server.debt.DebtModelXMLExporter; import org.sonar.server.debt.DebtRulesXMLImporter; import org.sonar.server.duplication.ws.DuplicationsJsonWriter; import org.sonar.server.duplication.ws.DuplicationsParser; import org.sonar.server.duplication.ws.DuplicationsWs; import org.sonar.server.email.ws.EmailsWsModule; import org.sonar.server.es.IndexCreator; import org.sonar.server.es.IndexDefinitions; import org.sonar.server.event.NewAlerts; import org.sonar.server.favorite.FavoriteModule; import org.sonar.server.issue.AddTagsAction; import org.sonar.server.issue.AssignAction; import org.sonar.server.issue.CommentAction; import org.sonar.server.issue.RemoveTagsAction; import org.sonar.server.issue.SetSeverityAction; import org.sonar.server.issue.SetTypeAction; import org.sonar.server.issue.TransitionAction; import org.sonar.server.issue.index.IssueIndexDefinition; import org.sonar.server.issue.index.IssueIndexer; import org.sonar.server.issue.index.IssueIteratorFactory; import org.sonar.server.issue.notification.ChangesOnMyIssueNotificationDispatcher; import org.sonar.server.issue.notification.DoNotFixNotificationDispatcher; import org.sonar.server.issue.notification.IssueChangesEmailTemplate; import org.sonar.server.issue.notification.MyNewIssuesEmailTemplate; import org.sonar.server.issue.notification.MyNewIssuesNotificationDispatcher; import org.sonar.server.issue.notification.NewIssuesEmailTemplate; import org.sonar.server.issue.notification.NewIssuesNotificationDispatcher; import org.sonar.server.issue.notification.NewIssuesNotificationFactory; import org.sonar.server.issue.ws.IssueWsModule; import org.sonar.server.language.ws.LanguageWs; import org.sonar.server.license.ws.LicensesWsModule; import org.sonar.server.measure.custom.ws.CustomMeasuresWsModule; import org.sonar.server.measure.index.ProjectsEsModule; import org.sonar.server.measure.ws.MeasuresWsModule; import org.sonar.server.measure.ws.TimeMachineWs; import org.sonar.server.metric.CoreCustomMetrics; import org.sonar.server.metric.DefaultMetricFinder; import org.sonar.server.metric.ws.MetricsWsModule; import org.sonar.server.notification.NotificationModule; import org.sonar.server.organization.BillingValidationsProxyImpl; import org.sonar.server.organization.OrganizationCreationImpl; import org.sonar.server.organization.OrganizationValidationImpl; import org.sonar.server.organization.ws.OrganizationsWsModule; import org.sonar.server.permission.GroupPermissionChanger; import org.sonar.server.permission.PermissionTemplateService; import org.sonar.server.permission.PermissionUpdater; import org.sonar.server.permission.UserPermissionChanger; import org.sonar.server.permission.index.PermissionIndexer; import org.sonar.server.permission.ws.PermissionsWsModule; import org.sonar.server.permission.ws.template.DefaultTemplatesResolverImpl; import org.sonar.server.platform.BackendCleanup; import org.sonar.server.platform.PersistentSettings; import org.sonar.server.platform.ServerLogging; import org.sonar.server.platform.SettingsChangeNotifier; import org.sonar.server.platform.monitoring.DatabaseMonitor; import org.sonar.server.platform.monitoring.EsMonitor; import org.sonar.server.platform.monitoring.JvmPropsMonitor; import org.sonar.server.platform.monitoring.PluginsMonitor; import org.sonar.server.platform.monitoring.SettingsMonitor; import org.sonar.server.platform.monitoring.SonarQubeMonitor; import org.sonar.server.platform.monitoring.SystemMonitor; import org.sonar.server.platform.web.WebPagesFilter; import org.sonar.server.platform.web.requestid.HttpRequestIdModule; import org.sonar.server.platform.ws.ChangeLogLevelAction; import org.sonar.server.platform.ws.DbMigrationStatusAction; import org.sonar.server.platform.ws.InfoAction; import org.sonar.server.platform.ws.L10nWs; import org.sonar.server.platform.ws.LogsAction; import org.sonar.server.platform.ws.MigrateDbAction; import org.sonar.server.platform.ws.PingAction; import org.sonar.server.platform.ws.RestartAction; import org.sonar.server.platform.ws.ServerWs; import org.sonar.server.platform.ws.StatusAction; import org.sonar.server.platform.ws.SystemWs; import org.sonar.server.platform.ws.UpgradesAction; import org.sonar.server.plugins.PluginDownloader; import org.sonar.server.plugins.ServerExtensionInstaller; import org.sonar.server.plugins.privileged.PrivilegedPluginsBootstraper; import org.sonar.server.plugins.privileged.PrivilegedPluginsStopper; import org.sonar.server.plugins.ws.AvailableAction; import org.sonar.server.plugins.ws.CancelAllAction; import org.sonar.server.plugins.ws.InstallAction; import org.sonar.server.plugins.ws.InstalledAction; import org.sonar.server.plugins.ws.PendingAction; import org.sonar.server.plugins.ws.PluginUpdateAggregator; import org.sonar.server.plugins.ws.PluginWSCommons; import org.sonar.server.plugins.ws.PluginsWs; import org.sonar.server.plugins.ws.UninstallAction; import org.sonar.server.plugins.ws.UpdatesAction; import org.sonar.server.project.ws.ProjectsWsModule; import org.sonar.server.projectanalysis.ProjectAnalysisModule; import org.sonar.server.projectlink.ws.ProjectLinksModule; import org.sonar.server.projecttag.ws.ProjectTagsWsModule; import org.sonar.server.property.InternalPropertiesImpl; import org.sonar.server.property.ws.PropertiesWs; import org.sonar.server.qualitygate.QualityGateModule; import org.sonar.server.qualityprofile.DefinedQProfileCreationImpl; import org.sonar.server.qualityprofile.DefinedQProfileRepositoryImpl; import org.sonar.server.qualityprofile.QProfileBackuperImpl; import org.sonar.server.qualityprofile.QProfileComparison; import org.sonar.server.qualityprofile.QProfileCopier; import org.sonar.server.qualityprofile.QProfileExporters; import org.sonar.server.qualityprofile.QProfileFactory; import org.sonar.server.qualityprofile.QProfileLookup; import org.sonar.server.qualityprofile.QProfileResetImpl; import org.sonar.server.qualityprofile.RuleActivator; import org.sonar.server.qualityprofile.RuleActivatorContextFactory; import org.sonar.server.qualityprofile.index.ActiveRuleIndexer; import org.sonar.server.qualityprofile.ws.OldRestoreAction; import org.sonar.server.qualityprofile.ws.ProfilesWs; import org.sonar.server.qualityprofile.ws.QProfilesWsModule; import org.sonar.server.qualityprofile.ws.SearchDataLoader; import org.sonar.server.root.ws.RootWsModule; import org.sonar.server.rule.CommonRuleDefinitionsImpl; import org.sonar.server.rule.DefaultRuleFinder; import org.sonar.server.rule.DeprecatedRulesDefinitionLoader; import org.sonar.server.rule.RuleCreator; import org.sonar.server.rule.RuleDefinitionsLoader; import org.sonar.server.rule.RuleUpdater; import org.sonar.server.rule.index.RuleIndexDefinition; import org.sonar.server.rule.index.RuleIndexer; import org.sonar.server.rule.ws.ActiveRuleCompleter; import org.sonar.server.rule.ws.RepositoriesAction; import org.sonar.server.rule.ws.RuleMapper; import org.sonar.server.rule.ws.RuleQueryFactory; import org.sonar.server.rule.ws.RuleWsSupport; import org.sonar.server.rule.ws.RulesWs; import org.sonar.server.rule.ws.TagsAction; import org.sonar.server.serverid.ws.ServerIdWsModule; import org.sonar.server.setting.ws.SettingsWsModule; import org.sonar.server.source.HtmlSourceDecorator; import org.sonar.server.source.SourceService; import org.sonar.server.source.ws.HashAction; import org.sonar.server.source.ws.IndexAction; import org.sonar.server.source.ws.LinesAction; import org.sonar.server.source.ws.RawAction; import org.sonar.server.source.ws.ScmAction; import org.sonar.server.source.ws.SourcesWs; import org.sonar.server.test.index.TestIndex; import org.sonar.server.test.index.TestIndexDefinition; import org.sonar.server.test.index.TestIndexer; import org.sonar.server.test.ws.CoveredFilesAction; import org.sonar.server.test.ws.TestsWs; import org.sonar.server.text.MacroInterpreter; import org.sonar.server.ui.DeprecatedViews; import org.sonar.server.ui.PageDecorations; import org.sonar.server.ui.PageRepository; import org.sonar.server.ui.ws.NavigationWsModule; import org.sonar.server.updatecenter.UpdateCenterModule; import org.sonar.server.user.DefaultUserFinder; import org.sonar.server.user.DeprecatedUserFinder; import org.sonar.server.user.NewUserNotifier; import org.sonar.server.user.SecurityRealmFactory; import org.sonar.server.user.UserSessionFactoryImpl; import org.sonar.server.user.UserUpdater; import org.sonar.server.user.index.UserIndex; import org.sonar.server.user.index.UserIndexDefinition; import org.sonar.server.user.index.UserIndexer; import org.sonar.server.user.ws.UsersWsModule; import org.sonar.server.usergroups.DefaultGroupCreatorImpl; import org.sonar.server.usergroups.DefaultGroupFinder; import org.sonar.server.usergroups.ws.UserGroupsModule; import org.sonar.server.usertoken.UserTokenModule; import org.sonar.server.util.TypeValidationModule; import org.sonar.server.view.index.ViewIndex; import org.sonar.server.view.index.ViewIndexDefinition; import org.sonar.server.view.index.ViewIndexer; import org.sonar.server.webhook.ws.WebhooksWsModule; import org.sonar.server.ws.DeprecatedPropertiesWsFilter; import org.sonar.server.ws.WebServiceEngine; import org.sonar.server.ws.WebServiceFilter; import org.sonar.server.ws.WebServiceReroutingFilter; import org.sonar.server.ws.ws.WebServicesWsModule; public class PlatformLevel4 extends PlatformLevel { private final List<Object> level4AddedComponents; public PlatformLevel4(PlatformLevel parent, List<Object> level4AddedComponents) { super("level4", parent); this.level4AddedComponents = level4AddedComponents; } @Override protected void configureLevel() { addIfStartupLeader(IndexCreator.class); add( PluginDownloader.class, DeprecatedViews.class, PageRepository.class, ResourceTypes.class, DefaultResourceTypes.get(), SettingsChangeNotifier.class, PageDecorations.class, Periods.class, ServerWs.class, BackendCleanup.class, IndexDefinitions.class, WebPagesFilter.class, // batch BatchWsModule.class, // update center UpdateCenterModule.class, // organizations OrganizationValidationImpl.class, OrganizationCreationImpl.class, OrganizationsWsModule.class, BillingValidationsProxyImpl.class, // quality profile DefinedQProfileRepositoryImpl.class, ActiveRuleIndexer.class, XMLProfileParser.class, XMLProfileSerializer.class, AnnotationProfileParser.class, QProfileLookup.class, QProfileComparison.class, SearchDataLoader.class, ProfilesWs.class, OldRestoreAction.class, RuleActivator.class, QProfileExporters.class, RuleActivatorContextFactory.class, QProfileFactory.class, QProfileCopier.class, QProfileBackuperImpl.class, QProfileResetImpl.class, DefinedQProfileCreationImpl.class, QProfilesWsModule.class, // rule RuleIndexDefinition.class, RuleIndexer.class, AnnotationRuleParser.class, XMLRuleParser.class, DefaultRuleFinder.class, DeprecatedRulesDefinitionLoader.class, RuleDefinitionsLoader.class, CommonRuleDefinitionsImpl.class, RulesDefinitionXmlLoader.class, RuleUpdater.class, RuleCreator.class, org.sonar.server.rule.ws.UpdateAction.class, RulesWs.class, RuleWsSupport.class, org.sonar.server.rule.ws.SearchAction.class, org.sonar.server.rule.ws.ShowAction.class, org.sonar.server.rule.ws.CreateAction.class, org.sonar.server.rule.ws.DeleteAction.class, org.sonar.server.rule.ws.ListAction.class, TagsAction.class, RuleMapper.class, ActiveRuleCompleter.class, RepositoriesAction.class, RuleQueryFactory.class, org.sonar.server.rule.ws.AppAction.class, // languages Languages.class, LanguageWs.class, org.sonar.server.language.ws.ListAction.class, // measure MetricsWsModule.class, MeasuresWsModule.class, CustomMeasuresWsModule.class, CoreCustomMetrics.class, DefaultMetricFinder.class, TimeMachineWs.class, QualityGateModule.class, // web services WebServiceEngine.class, WebServicesWsModule.class, WebServiceFilter.class, DeprecatedPropertiesWsFilter.class, WebServiceReroutingFilter.class, // localization L10nWs.class, org.sonar.server.platform.ws.IndexAction.class, // authentication AuthenticationModule.class, // users UserSessionFactoryImpl.class, SecurityRealmFactory.class, DeprecatedUserFinder.class, NewUserNotifier.class, DefaultUserFinder.class, UserIndexDefinition.class, UserIndexer.class, UserIndex.class, UserUpdater.class, UsersWsModule.class, UserTokenModule.class, // groups UserGroupsModule.class, DefaultGroupCreatorImpl.class, DefaultGroupFinder.class, // permissions DefaultTemplatesResolverImpl.class, PermissionsWsModule.class, PermissionTemplateService.class, PermissionUpdater.class, UserPermissionChanger.class, GroupPermissionChanger.class, // components ProjectsWsModule.class, ProjectsEsModule.class, ProjectTagsWsModule.class, ComponentsWsModule.class, ComponentService.class, ComponentUpdater.class, ComponentFinder.class, NewAlerts.class, NewAlerts.newMetadata(), ComponentCleanerService.class, ComponentIndexDefinition.class, ComponentIndex.class, ComponentIndexer.class, FavoriteModule.class, // views ViewIndexDefinition.class, ViewIndexer.class, ViewIndex.class, // issues IssueIndexDefinition.class, IssueIndexer.class, IssueIteratorFactory.class, PermissionIndexer.class, IssueWsModule.class, NewIssuesEmailTemplate.class, MyNewIssuesEmailTemplate.class, IssueChangesEmailTemplate.class, ChangesOnMyIssueNotificationDispatcher.class, ChangesOnMyIssueNotificationDispatcher.newMetadata(), NewIssuesNotificationDispatcher.class, NewIssuesNotificationDispatcher.newMetadata(), MyNewIssuesNotificationDispatcher.class, MyNewIssuesNotificationDispatcher.newMetadata(), DoNotFixNotificationDispatcher.class, DoNotFixNotificationDispatcher.newMetadata(), NewIssuesNotificationFactory.class, // issues actions AssignAction.class, SetTypeAction.class, SetSeverityAction.class, CommentAction.class, TransitionAction.class, AddTagsAction.class, RemoveTagsAction.class, // technical debt DebtModelPluginRepository.class, DebtModelXMLExporter.class, DebtRulesXMLImporter.class, // source HtmlSourceDecorator.class, SourceService.class, SourcesWs.class, org.sonar.server.source.ws.ShowAction.class, LinesAction.class, HashAction.class, RawAction.class, IndexAction.class, ScmAction.class, // Duplications DuplicationsParser.class, DuplicationsWs.class, DuplicationsJsonWriter.class, org.sonar.server.duplication.ws.ShowAction.class, // text MacroInterpreter.class, // Notifications NotificationModule.class, EmailsWsModule.class, // Tests TestsWs.class, CoveredFilesAction.class, org.sonar.server.test.ws.ListAction.class, TestIndexDefinition.class, TestIndex.class, TestIndexer.class, // Settings PersistentSettings.class, PropertiesWs.class, org.sonar.server.property.ws.IndexAction.class, SettingsWsModule.class, // Licences LicensesWsModule.class, TypeValidationModule.class, // Project Links ProjectLinksModule.class, // Project Analyses ProjectAnalysisModule.class, // System ServerLogging.class, RestartAction.class, InfoAction.class, PingAction.class, UpgradesAction.class, StatusAction.class, SystemWs.class, SystemMonitor.class, SettingsMonitor.class, SonarQubeMonitor.class, EsMonitor.class, PluginsMonitor.class, JvmPropsMonitor.class, DatabaseMonitor.class, MigrateDbAction.class, LogsAction.class, ChangeLogLevelAction.class, DbMigrationStatusAction.class, // Server id ServerIdWsModule.class, // Plugins WS PluginWSCommons.class, PluginUpdateAggregator.class, InstalledAction.class, AvailableAction.class, UpdatesAction.class, PendingAction.class, InstallAction.class, org.sonar.server.plugins.ws.UpdateAction.class, UninstallAction.class, CancelAllAction.class, PluginsWs.class, // privileged plugins PrivilegedPluginsBootstraper.class, PrivilegedPluginsStopper.class, // Compute engine (must be after Views and Developer Cockpit) CeModule.class, CeWsModule.class, InternalPropertiesImpl.class, ProjectSettingsFactory.class, // UI NavigationWsModule.class, // root RootWsModule.class, // webhooks WebhooksWsModule.class, // Http Request ID HttpRequestIdModule.class); addAll(level4AddedComponents); } @Override public PlatformLevel start() { ServerExtensionInstaller extensionInstaller = get(ServerExtensionInstaller.class); extensionInstaller.installExtensions(getContainer()); super.start(); return this; } }