/*
* Copyright 2016 ThoughtWorks, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.thoughtworks.go.server.initializers;
import com.thoughtworks.go.config.*;
import com.thoughtworks.go.config.registry.ConfigElementImplementationRegistrar;
import com.thoughtworks.go.domain.cctray.CcTrayActivityListener;
import com.thoughtworks.go.plugin.infra.commons.PluginsZip;
import com.thoughtworks.go.plugin.infra.monitor.DefaultPluginJarLocationMonitor;
import com.thoughtworks.go.server.cronjob.GoDiskSpaceMonitor;
import com.thoughtworks.go.server.dao.PipelineSqlMapDao;
import com.thoughtworks.go.server.domain.PipelineTimeline;
import com.thoughtworks.go.server.materials.DependencyMaterialUpdateNotifier;
import com.thoughtworks.go.server.materials.MaterialUpdateService;
import com.thoughtworks.go.server.materials.SCMMaterialSource;
import com.thoughtworks.go.server.persistence.OauthTokenSweeper;
import com.thoughtworks.go.server.security.GoCasServiceProperties;
import com.thoughtworks.go.server.security.LdapContextFactory;
import com.thoughtworks.go.server.security.RemoveAdminPermissionFilter;
import com.thoughtworks.go.server.service.*;
import com.thoughtworks.go.server.service.support.ResourceMonitoring;
import com.thoughtworks.go.server.service.support.toggle.FeatureToggleService;
import com.thoughtworks.go.server.service.support.toggle.Toggles;
import com.thoughtworks.go.server.util.ServletHelper;
import com.thoughtworks.go.service.ConfigRepository;
import com.thoughtworks.studios.shine.cruise.stage.details.StageResourceImporter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.stereotype.Component;
@Component
public class ApplicationInitializer implements ApplicationListener<ContextRefreshedEvent> {
@Autowired private CommandRepositoryInitializer commandRepositoryInitializer;
@Autowired private PluginsInitializer pluginsInitializer;
@Autowired private PluginsZip pluginsZip;
@Autowired private PipelineSqlMapDao pipelineSqlMapDao;
@Autowired private PipelineTimeline pipelineTimeline;
@Autowired private ConfigRepository configRepository;
@Autowired private InvalidConfigMessageRemover invalidConfigMessageRemover;
@Autowired private OauthTokenSweeper oauthTokenSweeper;
@Autowired private LdapContextFactory ldapContextFactory;
@Autowired private AgentService agentService;
@Autowired private GoConfigService goConfigService;
@Autowired private GoFileConfigDataSource goFileConfigDataSource;
@Autowired private EnvironmentConfigService environmentConfigService;
@Autowired private DefaultPluginJarLocationMonitor defaultPluginJarLocationMonitor;
@Autowired private CachedGoConfig cachedGoConfig;
@Autowired private ConsoleActivityMonitor consoleActivityMonitor;
@Autowired private BuildAssignmentService buildAssignmentService;
@Autowired private PipelineScheduler pipelineScheduler;
@Autowired private TimerScheduler timerScheduler;
@Autowired private ArtifactsDirHolder artifactsDirHolder;
@Autowired private MaterialUpdateService materialUpdateService;
@Autowired private RemoveAdminPermissionFilter removeAdminPermissionFilter;
@Autowired private PipelineLockService pipelineLockService;
@Autowired private StageResourceImporter stageResourceImporter;
@Autowired private GoCasServiceProperties goCasServiceProperties;
@Autowired private GoDiskSpaceMonitor goDiskSpaceMonitor;
@Autowired private BackupService backupService;
@Autowired private ArtifactsService artifactsService;
@Autowired private ConsoleService consoleService;
@Autowired private ConfigElementImplementationRegistrar configElementImplementationRegistrar;
@Autowired private ConfigCipherUpdater configCipherUpdater;
@Autowired private RailsAssetsService railsAssetsService;
@Autowired private FeatureToggleService featureToggleService;
@Autowired private CcTrayActivityListener ccTrayActivityListener;
@Autowired private ServerVersionInfoManager serverVersionInfoManager;
@Autowired private EntityHashingService entityHashingService;
@Autowired private DependencyMaterialUpdateNotifier dependencyMaterialUpdateNotifier;
@Autowired private SCMMaterialSource scmMaterialSource;
@Autowired private ResourceMonitoring resourceMonitoring;
@Override
public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent) {
if (!isRootApplicationContext(contextRefreshedEvent.getApplicationContext())) {
return;
}
try {
resourceMonitoring.enableIfDiagnosticsModeIsEnabled();
//plugin
defaultPluginJarLocationMonitor.initialize();
pluginsInitializer.initialize();
pluginsZip.create();
//config
configCipherUpdater.migrate(); // Should be done before configs get loaded
configElementImplementationRegistrar.initialize();
configRepository.initialize();
cachedGoConfig.upgradeConfig();
cachedGoConfig.loadConfigIfNull();
goConfigService.initialize();
entityHashingService.initialize();
//artifacts
artifactsDirHolder.initialize();
artifactsService.initialize();
//console logs
consoleService.initialize();
//change listener
environmentConfigService.initialize();
oauthTokenSweeper.initialize();
invalidConfigMessageRemover.initialize();
ldapContextFactory.initialize();
agentService.initialize();
pipelineLockService.initialize();
buildAssignmentService.initialize();
materialUpdateService.initialize();
pipelineScheduler.initialize();
removeAdminPermissionFilter.initialize();
pipelineTimeline.updateTimelineOnInit();
pipelineSqlMapDao.initialize();
commandRepositoryInitializer.initialize();
consoleActivityMonitor.populateActivityMap();
timerScheduler.initialize();
stageResourceImporter.initialize();
goCasServiceProperties.initialize();
goDiskSpaceMonitor.initialize();
backupService.initialize();
railsAssetsService.initialize();
ccTrayActivityListener.initialize();
ServletHelper.init();
// initialize static accessors
Toggles.initializeWith(featureToggleService);
serverVersionInfoManager.initialize();
dependencyMaterialUpdateNotifier.initialize();
scmMaterialSource.initialize();
} catch (Throwable throwable) {
throw new RuntimeException(throwable);
}
}
private boolean isRootApplicationContext(ApplicationContext applicationContext) {
return applicationContext.getParent() == null;
}
}