1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 package org.eluder.coveralls.maven.plugin.util;
25
26 import org.apache.maven.project.MavenProject;
27 import org.eluder.coveralls.maven.plugin.source.DirectorySourceLoader;
28 import org.eluder.coveralls.maven.plugin.source.MultiSourceLoader;
29 import org.eluder.coveralls.maven.plugin.source.ScanSourceLoader;
30 import org.eluder.coveralls.maven.plugin.source.SourceLoader;
31
32 import java.io.File;
33 import java.util.ArrayList;
34 import java.util.List;
35
36 public class SourceLoaderFactory {
37
38 private final File baseDir;
39 private final MavenProject project;
40 private final String sourceEncoding;
41 private List<File> sourceDirectories;
42 private boolean scanForSources;
43
44 public SourceLoaderFactory(final File baseDir, final MavenProject project, final String sourceEncoding) {
45 this.baseDir = baseDir;
46 this.project = project;
47 this.sourceEncoding = sourceEncoding;
48 }
49
50 public SourceLoaderFactory withSourceDirectories(final List<File> sourceDirectories) {
51 this.sourceDirectories = sourceDirectories;
52 return this;
53 }
54
55 public SourceLoaderFactory withScanForSources(final boolean scanForSources) {
56 this.scanForSources = scanForSources;
57 return this;
58 }
59
60 public SourceLoader createSourceLoader() {
61 MultiSourceLoader multiSourceLoader = new MultiSourceLoader();
62 List<File> directories = new ArrayList<>();
63 List<MavenProject> modules = new MavenProjectCollector(project).collect();
64 for (MavenProject module : modules) {
65 for (String sourceRoot : module.getCompileSourceRoots()) {
66 File sourceDirectory = new File(sourceRoot);
67 directories.add(sourceDirectory);
68 }
69 }
70 if (sourceDirectories != null) {
71 directories.addAll(sourceDirectories);
72 }
73 for (File directory: directories) {
74 if (directory.exists() && directory.isDirectory()) {
75 DirectorySourceLoader moduleSourceLoader = new DirectorySourceLoader(baseDir, directory, sourceEncoding);
76 multiSourceLoader.add(moduleSourceLoader);
77 }
78 }
79
80 if (scanForSources) {
81 for (File directory: directories) {
82 if (directory.exists() && directory.isDirectory()) {
83 ScanSourceLoader scanSourceLoader = new ScanSourceLoader(baseDir, directory, sourceEncoding);
84 multiSourceLoader.add(scanSourceLoader);
85 }
86 }
87 }
88 return multiSourceLoader;
89 }
90 }