1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.artifact.handler.manager;
20
21 import javax.inject.Inject;
22 import javax.inject.Named;
23 import javax.inject.Singleton;
24
25 import java.util.Map;
26 import java.util.Set;
27 import java.util.concurrent.ConcurrentHashMap;
28
29 import org.apache.maven.api.JavaPathType;
30 import org.apache.maven.api.Type;
31 import org.apache.maven.api.services.TypeRegistry;
32 import org.apache.maven.artifact.handler.ArtifactHandler;
33 import org.apache.maven.artifact.handler.DefaultArtifactHandler;
34 import org.apache.maven.eventspy.AbstractEventSpy;
35 import org.apache.maven.execution.ExecutionEvent;
36
37 import static java.util.Objects.requireNonNull;
38
39
40
41 @Named
42 @Singleton
43 public class DefaultArtifactHandlerManager extends AbstractEventSpy implements ArtifactHandlerManager {
44 private final TypeRegistry typeRegistry;
45
46 private final ConcurrentHashMap<String, ArtifactHandler> allHandlers;
47
48 @Inject
49 public DefaultArtifactHandlerManager(TypeRegistry typeRegistry) {
50 this.typeRegistry = requireNonNull(typeRegistry, "null typeRegistry");
51 this.allHandlers = new ConcurrentHashMap<>();
52 }
53
54 @Override
55 public void onEvent(Object event) {
56 if (event instanceof ExecutionEvent executionEvent) {
57 if (executionEvent.getType() == ExecutionEvent.Type.SessionEnded) {
58 allHandlers.clear();
59 }
60 }
61 }
62
63 @Override
64 public ArtifactHandler getArtifactHandler(String id) {
65 return allHandlers.computeIfAbsent(id, k -> {
66 Type type = typeRegistry.require(id);
67 return new DefaultArtifactHandler(
68 id,
69 type.getExtension(),
70 type.getClassifier(),
71 null,
72 null,
73 type.isIncludesDependencies(),
74 type.getLanguage().id(),
75 type.getPathTypes().contains(JavaPathType.CLASSES));
76
77 });
78
79
80
81
82 }
83
84 @Override
85 public void addHandlers(Map<String, ArtifactHandler> handlers) {
86 throw new UnsupportedOperationException("Adding handlers programmatically is not supported anymore");
87 }
88
89 @Deprecated
90 public Set<String> getHandlerTypes() {
91 throw new UnsupportedOperationException("Querying handlers programmatically is not supported anymore");
92 }
93 }