1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.toolchain;
20
21 import javax.inject.Inject;
22 import javax.inject.Named;
23 import javax.inject.Singleton;
24
25 import java.util.ArrayList;
26 import java.util.Collections;
27 import java.util.HashMap;
28 import java.util.List;
29 import java.util.Map;
30
31 import org.apache.maven.execution.MavenSession;
32 import org.apache.maven.plugin.descriptor.PluginDescriptor;
33 import org.apache.maven.project.MavenProject;
34 import org.apache.maven.toolchain.model.ToolchainModel;
35 import org.codehaus.plexus.logging.Logger;
36
37
38
39
40 @Singleton
41 @Named
42 public class DefaultToolchainManager implements ToolchainManager {
43 @Inject
44 Logger logger;
45
46 @Inject
47 Map<String, ToolchainFactory> factories;
48
49 @Override
50 public Toolchain getToolchainFromBuildContext(String type, MavenSession session) {
51 Map<String, Object> context = retrieveContext(session);
52
53 ToolchainModel model = (ToolchainModel) context.get(getStorageKey(type));
54
55 if (model != null) {
56 List<Toolchain> toolchains = selectToolchains(Collections.singletonList(model), type, null);
57
58 if (!toolchains.isEmpty()) {
59 return toolchains.get(0);
60 }
61 }
62
63 return null;
64 }
65
66 @Override
67 public List<Toolchain> getToolchains(MavenSession session, String type, Map<String, String> requirements) {
68 List<ToolchainModel> models = session.getRequest().getToolchains().get(type);
69
70 return selectToolchains(models, type, requirements);
71 }
72
73 private List<Toolchain> selectToolchains(
74 List<ToolchainModel> models, String type, Map<String, String> requirements) {
75 List<Toolchain> toolchains = new ArrayList<>();
76
77 if (models != null) {
78 ToolchainFactory fact = factories.get(type);
79
80 if (fact == null) {
81 logger.error(
82 "Missing toolchain factory for type: " + type + ". Possibly caused by misconfigured project.");
83 } else {
84 for (ToolchainModel model : models) {
85 try {
86 ToolchainPrivate toolchain = fact.createToolchain(model);
87 if (requirements == null || toolchain.matchesRequirements(requirements)) {
88 toolchains.add(toolchain);
89 }
90 } catch (MisconfiguredToolchainException ex) {
91 logger.error("Misconfigured toolchain.", ex);
92 }
93 }
94 }
95 }
96 return toolchains;
97 }
98
99 Map<String, Object> retrieveContext(MavenSession session) {
100 Map<String, Object> context = null;
101
102 if (session != null) {
103 PluginDescriptor desc = new PluginDescriptor();
104 desc.setGroupId(PluginDescriptor.getDefaultPluginGroupId());
105 desc.setArtifactId(PluginDescriptor.getDefaultPluginArtifactId("toolchains"));
106
107 MavenProject current = session.getCurrentProject();
108
109 if (current != null) {
110
111 context = session.getPluginContext(desc, current);
112 }
113 }
114
115 return (context != null) ? context : new HashMap<String, Object>();
116 }
117
118 public static final String getStorageKey(String type) {
119 return "toolchain-" + type;
120 }
121 }