1 package org.apache.maven.tools.plugin.scanner;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import org.apache.maven.plugin.descriptor.InvalidPluginDescriptorException;
23 import org.apache.maven.plugin.descriptor.MojoDescriptor;
24 import org.apache.maven.tools.plugin.PluginToolsRequest;
25 import org.apache.maven.tools.plugin.extractor.ExtractionException;
26 import org.apache.maven.tools.plugin.extractor.MojoDescriptorExtractor;
27 import org.codehaus.plexus.logging.AbstractLogEnabled;
28 import org.codehaus.plexus.logging.Logger;
29 import org.codehaus.plexus.logging.console.ConsoleLogger;
30 import org.codehaus.plexus.util.StringUtils;
31
32 import java.util.HashSet;
33 import java.util.List;
34 import java.util.Map;
35 import java.util.Set;
36
37
38
39
40 public class DefaultMojoScanner
41 extends AbstractLogEnabled
42 implements MojoScanner
43 {
44
45 private Map<String, MojoDescriptorExtractor> mojoDescriptorExtractors;
46
47
48
49
50 private Set<String> activeExtractors;
51
52
53
54
55
56
57 public DefaultMojoScanner( Map<String, MojoDescriptorExtractor> extractors )
58 {
59 this.mojoDescriptorExtractors = extractors;
60
61 this.enableLogging( new ConsoleLogger( Logger.LEVEL_INFO, "standalone-scanner-logger" ) );
62 }
63
64
65
66
67 public DefaultMojoScanner()
68 {
69
70 }
71
72
73
74
75 public void populatePluginDescriptor( PluginToolsRequest request )
76 throws ExtractionException, InvalidPluginDescriptorException
77 {
78 Logger logger = getLogger();
79 Set<String> activeExtractorsInternal = getActiveExtractors();
80
81 logger.debug( "Using " + activeExtractorsInternal.size() + " mojo extractors." );
82
83 int numMojoDescriptors = 0;
84
85 for ( String extractorId : activeExtractorsInternal )
86 {
87 MojoDescriptorExtractor extractor = mojoDescriptorExtractors.get( extractorId );
88
89 if ( extractor == null )
90 {
91 throw new ExtractionException( "No mojo extractor with id: " + extractorId );
92 }
93
94 logger.debug( "Applying mojo extractor with id: " + extractorId );
95
96 List<MojoDescriptor> extractorDescriptors = extractor.execute( request );
97
98 logger.info( "Mojo extractor with id: " + extractorId + " found " + extractorDescriptors.size()
99 + " mojo descriptors." );
100 numMojoDescriptors += extractorDescriptors.size();
101
102 for ( MojoDescriptor descriptor : extractorDescriptors )
103 {
104 logger.debug( "Adding mojo: " + descriptor + " to plugin descriptor." );
105
106 descriptor.setPluginDescriptor( request.getPluginDescriptor() );
107
108 request.getPluginDescriptor().addMojo( descriptor );
109 }
110 }
111
112 if ( numMojoDescriptors == 0 && !request.isSkipErrorNoDescriptorsFound() )
113 {
114 throw new InvalidPluginDescriptorException(
115 "No mojo definitions were found for plugin: " + request.getPluginDescriptor().getPluginLookupKey()
116 + "." );
117 }
118 }
119
120
121
122
123
124
125 protected Set<String> getActiveExtractors()
126 {
127 Set<String> result = activeExtractors;
128
129 if ( result == null )
130 {
131 result = new HashSet<String>( mojoDescriptorExtractors.keySet() );
132 }
133
134 return result;
135 }
136
137 public void setActiveExtractors( Set<String> extractors )
138 {
139 if ( extractors == null )
140 {
141 this.activeExtractors = null;
142 }
143 else
144 {
145 this.activeExtractors = new HashSet<String>();
146
147 for ( String extractor : extractors )
148 {
149 if ( StringUtils.isNotEmpty( extractor ) )
150 {
151 this.activeExtractors.add( extractor );
152 }
153 }
154 }
155 }
156
157 }