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