blob: e005e4f948f0bcc6c80d0c4203099c6c7ee68500 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
|
/*
* Sonar, open source software quality management tool.
* Copyright (C) 2008-2012 SonarSource
* mailto:contact AT sonarsource DOT com
*
* Sonar 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.
*
* Sonar 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 Sonar; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02
*/
package org.sonar.batch.bootstrap;
import org.sonar.api.batch.InstantiationStrategy;
import org.sonar.api.resources.Project;
import org.sonar.api.resources.ResourceTypes;
import org.sonar.batch.DefaultFileLinesContextFactory;
import org.sonar.batch.DefaultResourceCreationLock;
import org.sonar.batch.ProjectConfigurator;
import org.sonar.batch.ProjectTree;
import org.sonar.batch.components.PastMeasuresLoader;
import org.sonar.batch.components.PastSnapshotFinder;
import org.sonar.batch.components.PastSnapshotFinderByDate;
import org.sonar.batch.components.PastSnapshotFinderByDays;
import org.sonar.batch.components.PastSnapshotFinderByPreviousAnalysis;
import org.sonar.batch.components.PastSnapshotFinderByPreviousVersion;
import org.sonar.batch.components.PastSnapshotFinderByVersion;
import org.sonar.batch.index.DefaultIndex;
import org.sonar.batch.index.DefaultPersistenceManager;
import org.sonar.batch.index.DefaultResourcePersister;
import org.sonar.batch.index.DependencyPersister;
import org.sonar.batch.index.EventPersister;
import org.sonar.batch.index.LinkPersister;
import org.sonar.batch.index.MeasurePersister;
import org.sonar.batch.index.MemoryOptimizer;
import org.sonar.batch.index.SourcePersister;
import org.sonar.core.metric.CacheMetricFinder;
import org.sonar.core.notification.DefaultNotificationManager;
import org.sonar.core.rule.CacheRuleFinder;
import org.sonar.core.user.DefaultUserFinder;
import org.sonar.jpa.dao.MeasuresDao;
/**
* Level-2 components. Connected to database.
*/
public class BatchModule extends Module {
@Override
protected void configure() {
container.addSingleton(ProjectTree.class);
container.addSingleton(ProjectConfigurator.class);
container.addSingleton(DefaultResourceCreationLock.class);
container.addSingleton(DefaultIndex.class);
container.addSingleton(DefaultFileLinesContextFactory.class);
container.addSingleton(DefaultPersistenceManager.class);
container.addSingleton(DependencyPersister.class);
container.addSingleton(EventPersister.class);
container.addSingleton(LinkPersister.class);
container.addSingleton(MeasurePersister.class);
container.addSingleton(MemoryOptimizer.class);
container.addSingleton(DefaultResourcePersister.class);
container.addSingleton(SourcePersister.class);
container.addSingleton(MeasuresDao.class);
container.addSingleton(CacheRuleFinder.class);
container.addSingleton(CacheMetricFinder.class);
container.addSingleton(PastSnapshotFinderByDate.class);
container.addSingleton(PastSnapshotFinderByDays.class);
container.addSingleton(PastSnapshotFinderByPreviousAnalysis.class);
container.addSingleton(PastSnapshotFinderByVersion.class);
container.addSingleton(PastSnapshotFinderByPreviousVersion.class);
container.addSingleton(PastMeasuresLoader.class);
container.addSingleton(PastSnapshotFinder.class);
container.addSingleton(DefaultNotificationManager.class);
container.addSingleton(DefaultUserFinder.class);
container.addSingleton(ResourceTypes.class);
container.addSingleton(MetricProvider.class);
addBatchExtensions();
}
private void addBatchExtensions() {
ExtensionInstaller installer = container.getComponentByType(ExtensionInstaller.class);
installer.install(container, InstantiationStrategy.BATCH);
}
@Override
protected void doStart() {
ProjectTree projectTree = container.getComponentByType(ProjectTree.class);
analyze(projectTree.getRootProject());
}
private void analyze(Project project) {
for (Project subProject : project.getModules()) {
analyze(subProject);
}
Module projectComponents = installChild(new ProjectModule(project));
try {
projectComponents.start();
} finally {
projectComponents.stop();
uninstallChild();
}
}
}
|