1 package net.sf.mavenhist.extractor;
2
3 import java.util.HashMap;
4
5 import net.sf.mavenhist.extractor.checkstyle.CheckstyleAllExtractor;
6 import net.sf.mavenhist.extractor.checkstyle.CheckstyleCheckedFilesExtractor;
7 import net.sf.mavenhist.extractor.checkstyle.CheckstyleErrorExtractor;
8 import net.sf.mavenhist.extractor.checkstyle.CheckstyleInfoExtractor;
9 import net.sf.mavenhist.extractor.checkstyle.CheckstyleWarningExtractor;
10 import net.sf.mavenhist.extractor.cobertura.CoberturaBranchPercentageExtractor;
11 import net.sf.mavenhist.extractor.cobertura.CoberturaLinesOfCodeExtractor;
12 import net.sf.mavenhist.extractor.cobertura.CoberturaLinesPercentageExtractor;
13 import net.sf.mavenhist.extractor.cpd.CPDDuplicatedLinesExtractor;
14 import net.sf.mavenhist.extractor.findbugs.FindbugsViolationFilesExtractor;
15 import net.sf.mavenhist.extractor.findbugs.FindbugsViolationsExtractor;
16 import net.sf.mavenhist.extractor.jncss.JNCSSCCNExtractor;
17 import net.sf.mavenhist.extractor.jncss.JNCSSClassesExtractor;
18 import net.sf.mavenhist.extractor.jncss.JNCSSFunctionsExtractor;
19 import net.sf.mavenhist.extractor.jncss.JNCSSFunctionsPerPackageExtractor;
20 import net.sf.mavenhist.extractor.jncss.JNCSSJavadocsExtractor;
21 import net.sf.mavenhist.extractor.jncss.JNCSSNCSSExtractor;
22 import net.sf.mavenhist.extractor.jncss.JNCSSPackagesExtractor;
23 import net.sf.mavenhist.extractor.junit.JUnitErrorsExtractor;
24 import net.sf.mavenhist.extractor.junit.JUnitFailuresExtractor;
25 import net.sf.mavenhist.extractor.junit.JUnitPassrateExtractor;
26 import net.sf.mavenhist.extractor.junit.JUnitTestsExtractor;
27 import net.sf.mavenhist.extractor.pmd.PMDFilesExtractor;
28 import net.sf.mavenhist.extractor.pmd.PMDViolationsExtractor;
29 import net.sf.mavenhist.extractor.surefire.TestErrorsExtractor;
30 import net.sf.mavenhist.extractor.surefire.TestFailuresExtractor;
31 import net.sf.mavenhist.extractor.surefire.TestPassrateExtractor;
32 import net.sf.mavenhist.extractor.surefire.TestSkippedExtractor;
33 import net.sf.mavenhist.extractor.surefire.TestTestsExtractor;
34 import net.sf.mavenhist.extractor.surefire.TestTimeExtractor;
35
36
37 /**
38 * This factory is capable to create different extractors.
39 */
40 public class ExtractorFactory {
41
42 private static HashMap hashMap;
43 private static ExtractorFactory extractorFactory;
44
45 /**
46 * Gets the singleton instance.
47 * @return the single instance.
48 */
49 public static ExtractorFactory getInstance() {
50 if (extractorFactory == null) {
51 extractorFactory = new ExtractorFactory();
52 ExtractorFactory.initialize();
53 }
54 return extractorFactory;
55 }
56
57 /**
58 * Gets a <code>ValueExtractor</code> for the specified id.
59 * @param id of the required extractor.
60 * @return found extractor or <code>null</code> if none is found.
61 */
62 public IValueExtractor getValueExtractor(String id) {
63 return (IValueExtractor) hashMap.get(id);
64 }
65
66 /**
67 * Initializes the internal map of all extractors.
68 */
69 private static void initialize() {
70 hashMap = new HashMap();
71 putInMap(new CheckstyleAllExtractor());
72 putInMap(new CheckstyleErrorExtractor());
73 putInMap(new CheckstyleWarningExtractor());
74 putInMap(new CheckstyleInfoExtractor());
75 putInMap(new CheckstyleCheckedFilesExtractor());
76
77 putInMap(new CoberturaLinesOfCodeExtractor());
78 putInMap(new CoberturaBranchPercentageExtractor());
79 putInMap(new CoberturaLinesPercentageExtractor());
80
81 putInMap(new FindbugsViolationFilesExtractor());
82 putInMap(new FindbugsViolationsExtractor());
83
84 putInMap(new JNCSSClassesExtractor());
85 putInMap(new JNCSSCCNExtractor());
86 putInMap(new JNCSSFunctionsExtractor());
87 putInMap(new JNCSSFunctionsPerPackageExtractor());
88 putInMap(new JNCSSJavadocsExtractor());
89 putInMap(new JNCSSNCSSExtractor());
90 putInMap(new JNCSSPackagesExtractor());
91
92 putInMap(new PMDViolationsExtractor());
93 putInMap(new PMDFilesExtractor());
94
95 /**
96 * Only for maven 1
97 */
98 putInMap(new JUnitErrorsExtractor());
99 putInMap(new JUnitFailuresExtractor());
100 putInMap(new JUnitPassrateExtractor());
101 putInMap(new JUnitTestsExtractor());
102
103 /**
104 * Only for maven 2
105 */
106 putInMap(new TestErrorsExtractor());
107 putInMap(new TestFailuresExtractor());
108 putInMap(new TestPassrateExtractor());
109 putInMap(new TestSkippedExtractor());
110 putInMap(new TestTestsExtractor());
111 putInMap(new TestTimeExtractor());
112
113 /**
114 * Only for maven 2
115 */
116 putInMap(new CPDDuplicatedLinesExtractor());
117 }
118
119 /**
120 * Helper method to put an extractor correctly into the map. Name as key and the extractor as
121 * value.
122 *
123 * @param extractor to put in the map.
124 */
125 private static void putInMap(INamedExtractor extractor) {
126 hashMap.put(extractor.getName(), extractor);
127 }
128
129 /**
130 * Gets an array of all available extractors.
131 *
132 * @return Array of all available extractors.
133 */
134 public IValueExtractor[] getAllExtractors() {
135 return (IValueExtractor[]) hashMap.values().toArray(new IValueExtractor[0]);
136 }
137 }