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.eclipse.aether.spi.log.Logger;
36 import org.eclipse.aether.spi.log.LoggerFactory;
37 import org.eclipse.aether.spi.log.NullLoggerFactory;
38
39
40
41 @Named
42 public class DefaultRepositoryEventDispatcher
43 implements RepositoryEventDispatcher, Service
44 {
45
46 private Logger logger = NullLoggerFactory.LOGGER;
47
48 private Collection<RepositoryListener> listeners = new ArrayList<RepositoryListener>();
49
50 public DefaultRepositoryEventDispatcher()
51 {
52
53 }
54
55 @Inject
56 DefaultRepositoryEventDispatcher( Set<RepositoryListener> listeners, LoggerFactory loggerFactory )
57 {
58 setRepositoryListeners( listeners );
59 setLoggerFactory( loggerFactory );
60 }
61
62 public DefaultRepositoryEventDispatcher setLoggerFactory( LoggerFactory loggerFactory )
63 {
64 this.logger = NullLoggerFactory.getSafeLogger( loggerFactory, getClass() );
65 return this;
66 }
67
68 public DefaultRepositoryEventDispatcher addRepositoryListener( RepositoryListener listener )
69 {
70 this.listeners.add( requireNonNull( listener, "repository listener cannot be null" ) );
71 return this;
72 }
73
74 public DefaultRepositoryEventDispatcher setRepositoryListeners( Collection<RepositoryListener> listeners )
75 {
76 if ( listeners == null )
77 {
78 this.listeners = new ArrayList<RepositoryListener>();
79 }
80 else
81 {
82 this.listeners = listeners;
83 }
84 return this;
85 }
86
87 public void initService( ServiceLocator locator )
88 {
89 setLoggerFactory( locator.getService( LoggerFactory.class ) );
90 setRepositoryListeners( locator.getServices( RepositoryListener.class ) );
91 }
92
93 public void dispatch( RepositoryEvent event )
94 {
95 if ( !listeners.isEmpty() )
96 {
97 for ( RepositoryListener listener : listeners )
98 {
99 dispatch( event, listener );
100 }
101 }
102
103 RepositoryListener listener = event.getSession().getRepositoryListener();
104
105 if ( listener != null )
106 {
107 dispatch( event, listener );
108 }
109 }
110
111 private void dispatch( RepositoryEvent event, RepositoryListener listener )
112 {
113 try
114 {
115 switch ( event.getType() )
116 {
117 case ARTIFACT_DEPLOYED:
118 listener.artifactDeployed( event );
119 break;
120 case ARTIFACT_DEPLOYING:
121 listener.artifactDeploying( event );
122 break;
123 case ARTIFACT_DESCRIPTOR_INVALID:
124 listener.artifactDescriptorInvalid( event );
125 break;
126 case ARTIFACT_DESCRIPTOR_MISSING:
127 listener.artifactDescriptorMissing( event );
128 break;
129 case ARTIFACT_DOWNLOADED:
130 listener.artifactDownloaded( event );
131 break;
132 case ARTIFACT_DOWNLOADING:
133 listener.artifactDownloading( event );
134 break;
135 case ARTIFACT_INSTALLED:
136 listener.artifactInstalled( event );
137 break;
138 case ARTIFACT_INSTALLING:
139 listener.artifactInstalling( event );
140 break;
141 case ARTIFACT_RESOLVED:
142 listener.artifactResolved( event );
143 break;
144 case ARTIFACT_RESOLVING:
145 listener.artifactResolving( event );
146 break;
147 case METADATA_DEPLOYED:
148 listener.metadataDeployed( event );
149 break;
150 case METADATA_DEPLOYING:
151 listener.metadataDeploying( event );
152 break;
153 case METADATA_DOWNLOADED:
154 listener.metadataDownloaded( event );
155 break;
156 case METADATA_DOWNLOADING:
157 listener.metadataDownloading( event );
158 break;
159 case METADATA_INSTALLED:
160 listener.metadataInstalled( event );
161 break;
162 case METADATA_INSTALLING:
163 listener.metadataInstalling( event );
164 break;
165 case METADATA_INVALID:
166 listener.metadataInvalid( event );
167 break;
168 case METADATA_RESOLVED:
169 listener.metadataResolved( event );
170 break;
171 case METADATA_RESOLVING:
172 listener.metadataResolving( event );
173 break;
174 default:
175 throw new IllegalStateException( "unknown repository event type " + event.getType() );
176 }
177 }
178 catch ( Exception e )
179 {
180 logError( e, listener );
181 }
182 catch ( LinkageError e )
183 {
184 logError( e, listener );
185 }
186 }
187
188 private void logError( Throwable e, Object listener )
189 {
190 String msg =
191 "Failed to dispatch repository event to " + listener.getClass().getCanonicalName() + ": " + e.getMessage();
192
193 if ( logger.isDebugEnabled() )
194 {
195 logger.warn( msg, e );
196 }
197 else
198 {
199 logger.warn( msg );
200 }
201 }
202
203 }