1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.eclipse.aether.internal.impl;
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.Collection;
27 import java.util.Set;
28
29 import org.eclipse.aether.RepositoryEvent;
30 import org.eclipse.aether.RepositoryListener;
31 import org.eclipse.aether.impl.RepositoryEventDispatcher;
32 import org.eclipse.aether.spi.locator.Service;
33 import org.eclipse.aether.spi.locator.ServiceLocator;
34 import org.slf4j.Logger;
35 import org.slf4j.LoggerFactory;
36
37 import static java.util.Objects.requireNonNull;
38
39
40
41 @Singleton
42 @Named
43 public class DefaultRepositoryEventDispatcher implements RepositoryEventDispatcher, Service {
44
45 private static final Logger LOGGER = LoggerFactory.getLogger(DefaultRepositoryEventDispatcher.class);
46
47 private Collection<RepositoryListener> listeners = new ArrayList<>();
48
49 public DefaultRepositoryEventDispatcher() {
50
51 }
52
53 @Inject
54 DefaultRepositoryEventDispatcher(Set<RepositoryListener> listeners) {
55 setRepositoryListeners(listeners);
56 }
57
58 public DefaultRepositoryEventDispatcher addRepositoryListener(RepositoryListener listener) {
59 this.listeners.add(requireNonNull(listener, "repository listener cannot be null"));
60 return this;
61 }
62
63 public DefaultRepositoryEventDispatcher setRepositoryListeners(Collection<RepositoryListener> listeners) {
64 if (listeners == null) {
65 this.listeners = new ArrayList<>();
66 } else {
67 this.listeners = listeners;
68 }
69 return this;
70 }
71
72 public void initService(ServiceLocator locator) {
73 setRepositoryListeners(locator.getServices(RepositoryListener.class));
74 }
75
76 public void dispatch(RepositoryEvent event) {
77 requireNonNull(event, "event cannot be null");
78 if (!listeners.isEmpty()) {
79 for (RepositoryListener listener : listeners) {
80 dispatch(event, listener);
81 }
82 }
83
84 RepositoryListener listener = event.getSession().getRepositoryListener();
85
86 if (listener != null) {
87 dispatch(event, listener);
88 }
89 }
90
91 private void dispatch(RepositoryEvent event, RepositoryListener listener) {
92 try {
93 switch (event.getType()) {
94 case ARTIFACT_DEPLOYED:
95 listener.artifactDeployed(event);
96 break;
97 case ARTIFACT_DEPLOYING:
98 listener.artifactDeploying(event);
99 break;
100 case ARTIFACT_DESCRIPTOR_INVALID:
101 listener.artifactDescriptorInvalid(event);
102 break;
103 case ARTIFACT_DESCRIPTOR_MISSING:
104 listener.artifactDescriptorMissing(event);
105 break;
106 case ARTIFACT_DOWNLOADED:
107 listener.artifactDownloaded(event);
108 break;
109 case ARTIFACT_DOWNLOADING:
110 listener.artifactDownloading(event);
111 break;
112 case ARTIFACT_INSTALLED:
113 listener.artifactInstalled(event);
114 break;
115 case ARTIFACT_INSTALLING:
116 listener.artifactInstalling(event);
117 break;
118 case ARTIFACT_RESOLVED:
119 listener.artifactResolved(event);
120 break;
121 case ARTIFACT_RESOLVING:
122 listener.artifactResolving(event);
123 break;
124 case METADATA_DEPLOYED:
125 listener.metadataDeployed(event);
126 break;
127 case METADATA_DEPLOYING:
128 listener.metadataDeploying(event);
129 break;
130 case METADATA_DOWNLOADED:
131 listener.metadataDownloaded(event);
132 break;
133 case METADATA_DOWNLOADING:
134 listener.metadataDownloading(event);
135 break;
136 case METADATA_INSTALLED:
137 listener.metadataInstalled(event);
138 break;
139 case METADATA_INSTALLING:
140 listener.metadataInstalling(event);
141 break;
142 case METADATA_INVALID:
143 listener.metadataInvalid(event);
144 break;
145 case METADATA_RESOLVED:
146 listener.metadataResolved(event);
147 break;
148 case METADATA_RESOLVING:
149 listener.metadataResolving(event);
150 break;
151 default:
152 throw new IllegalStateException("unknown repository event type " + event.getType());
153 }
154 } catch (Exception | LinkageError e) {
155 logError(e, listener);
156 }
157 }
158
159 private void logError(Throwable e, Object listener) {
160 LOGGER.warn(
161 "Failed to dispatch repository event to {}", listener.getClass().getCanonicalName(), e);
162 }
163 }