| 
									
										
										
										
											2018-08-23 11:48:42 +02:00
										 |  |  | package sonia.scm;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import com.google.common.annotations.VisibleForTesting;
 | 
					
						
							|  |  |  | import com.google.common.base.Strings;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-10 14:52:32 +02:00
										 |  |  | import javax.inject.Inject;
 | 
					
						
							| 
									
										
										
										
											2018-08-23 11:48:42 +02:00
										 |  |  | import javax.inject.Provider;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /**
 | 
					
						
							|  |  |  |  * Injection Provider for the {@link PushStateDispatcher}. The provider will return a {@link ProxyPushStateDispatcher}
 | 
					
						
							|  |  |  |  * if the system property {@code PushStateDispatcherProvider#PROPERTY_TARGET} is set to a proxy target url, otherwise
 | 
					
						
							| 
									
										
										
										
											2018-09-10 14:52:32 +02:00
										 |  |  |  * a {@link TemplatingPushStateDispatcher} is used.
 | 
					
						
							| 
									
										
										
										
											2018-08-23 11:48:42 +02:00
										 |  |  |  *
 | 
					
						
							|  |  |  |  * @since 2.0.0
 | 
					
						
							|  |  |  |  */
 | 
					
						
							|  |  |  | public class PushStateDispatcherProvider implements Provider<PushStateDispatcher> {
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   @VisibleForTesting
 | 
					
						
							|  |  |  |   static final String PROPERTY_TARGET = "sonia.scm.ui.proxy";
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-10 14:52:32 +02:00
										 |  |  |   private Provider<TemplatingPushStateDispatcher> templatingPushStateDispatcherProvider;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   @Inject
 | 
					
						
							|  |  |  |   public PushStateDispatcherProvider(Provider<TemplatingPushStateDispatcher> templatingPushStateDispatcherProvider) {
 | 
					
						
							|  |  |  |     this.templatingPushStateDispatcherProvider = templatingPushStateDispatcherProvider;
 | 
					
						
							|  |  |  |   }
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-08-23 11:48:42 +02:00
										 |  |  |   @Override
 | 
					
						
							|  |  |  |   public PushStateDispatcher get() {
 | 
					
						
							|  |  |  |     String target = System.getProperty(PROPERTY_TARGET);
 | 
					
						
							|  |  |  |     if (Strings.isNullOrEmpty(target)) {
 | 
					
						
							| 
									
										
										
										
											2018-09-10 14:52:32 +02:00
										 |  |  |       return templatingPushStateDispatcherProvider.get();
 | 
					
						
							| 
									
										
										
										
											2018-08-23 11:48:42 +02:00
										 |  |  |     }
 | 
					
						
							|  |  |  |     return new ProxyPushStateDispatcher(target);
 | 
					
						
							|  |  |  |   }
 | 
					
						
							|  |  |  | }
 |