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.Type;
30 import org.apache.maven.api.services.TypeRegistry;
31 import org.apache.maven.artifact.handler.ArtifactHandler;
32 import org.apache.maven.artifact.handler.DefaultArtifactHandler;
33 import org.apache.maven.eventspy.AbstractEventSpy;
34 import org.apache.maven.execution.ExecutionEvent;
35
36 import static java.util.Objects.requireNonNull;
37
38
39
40 @Named
41 @Singleton
42 public class DefaultArtifactHandlerManager extends AbstractEventSpy implements ArtifactHandlerManager {
43 private final TypeRegistry typeRegistry;
44
45 private final ConcurrentHashMap<String, ArtifactHandler> allHandlers;
46
47 @Inject
48 public DefaultArtifactHandlerManager(TypeRegistry typeRegistry) {
49 this.typeRegistry = requireNonNull(typeRegistry, "null typeRegistry");
50 this.allHandlers = new ConcurrentHashMap<>();
51 }
52
53 @Override
54 public void onEvent(Object event) {
55 if (event instanceof ExecutionEvent) {
56 ExecutionEvent executionEvent = (ExecutionEvent) event;
57 if (executionEvent.getType() == ExecutionEvent.Type.SessionEnded) {
58 allHandlers.clear();
59 }
60 }
61 }
62
63 public ArtifactHandler getArtifactHandler(String id) {
64 return allHandlers.computeIfAbsent(id, k -> {
65 Type type = typeRegistry.getType(id);
66 return new DefaultArtifactHandler(
67 id,
68 type.getExtension(),
69 type.getClassifier(),
70 null,
71 null,
72 type.isIncludesDependencies(),
73 type.getLanguage(),
74 type.isAddedToClassPath());
75 });
76 }
77
78 public void addHandlers(Map<String, ArtifactHandler> handlers) {
79 throw new UnsupportedOperationException("Adding handlers programmatically is not supported anymore");
80 }
81
82 @Deprecated
83 public Set<String> getHandlerTypes() {
84 throw new UnsupportedOperationException("Querying handlers programmatically is not supported anymore");
85 }
86 }