| | |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | |
| | | import javax.inject.Singleton; |
| | | import javax.servlet.http.HttpServletRequest; |
| | | |
| | | import com.gitblit.Constants.AccessPermission; |
| | | import com.gitblit.manager.GitblitManager; |
| | | import com.gitblit.manager.IAuthenticationManager; |
| | | import com.gitblit.manager.IFederationManager; |
| | | import com.gitblit.manager.IGitblit; |
| | | import com.gitblit.manager.INotificationManager; |
| | | import com.gitblit.manager.IProjectManager; |
| | | import com.gitblit.manager.IRepositoryManager; |
| | |
| | | import com.gitblit.models.RepositoryModel; |
| | | import com.gitblit.models.RepositoryUrl; |
| | | import com.gitblit.models.UserModel; |
| | | import com.gitblit.tickets.BranchTicketService; |
| | | import com.gitblit.tickets.FileTicketService; |
| | | import com.gitblit.tickets.ITicketService; |
| | | import com.gitblit.tickets.NullTicketService; |
| | | import com.gitblit.tickets.RedisTicketService; |
| | | import com.gitblit.utils.StringUtils; |
| | | |
| | | import dagger.Module; |
| | | import dagger.ObjectGraph; |
| | | import dagger.Provides; |
| | | |
| | | /** |
| | | * GitBlit is the aggregate manager for the Gitblit webapp. It provides all |
| | |
| | | */ |
| | | public class GitBlit extends GitblitManager { |
| | | |
| | | private final ObjectGraph injector; |
| | | |
| | | private final ServicesManager servicesManager; |
| | | |
| | | private ITicketService ticketService; |
| | | |
| | | public GitBlit( |
| | | IRuntimeManager runtimeManager, |
| | |
| | | projectManager, |
| | | federationManager); |
| | | |
| | | this.injector = ObjectGraph.create(getModules()); |
| | | |
| | | this.servicesManager = new ServicesManager(this); |
| | | } |
| | | |
| | |
| | | super.start(); |
| | | logger.info("Starting services manager..."); |
| | | servicesManager.start(); |
| | | configureTicketService(); |
| | | return this; |
| | | } |
| | | |
| | |
| | | public GitBlit stop() { |
| | | super.stop(); |
| | | servicesManager.stop(); |
| | | ticketService.stop(); |
| | | return this; |
| | | } |
| | | |
| | | protected Object [] getModules() { |
| | | return new Object [] { new GitBlitModule()}; |
| | | } |
| | | |
| | | /** |
| | |
| | | } |
| | | return list; |
| | | } |
| | | |
| | | /** |
| | | * Detect renames and reindex as appropriate. |
| | | */ |
| | | @Override |
| | | public void updateRepositoryModel(String repositoryName, RepositoryModel repository, |
| | | boolean isCreate) throws GitBlitException { |
| | | RepositoryModel oldModel = null; |
| | | boolean isRename = !isCreate && !repositoryName.equalsIgnoreCase(repository.name); |
| | | if (isRename) { |
| | | oldModel = repositoryManager.getRepositoryModel(repositoryName); |
| | | } |
| | | |
| | | super.updateRepositoryModel(repositoryName, repository, isCreate); |
| | | |
| | | if (isRename && ticketService != null) { |
| | | ticketService.rename(oldModel, repository); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * Delete the repository and all associated tickets. |
| | | */ |
| | | @Override |
| | | public boolean deleteRepository(String repositoryName) { |
| | | RepositoryModel repository = repositoryManager.getRepositoryModel(repositoryName); |
| | | boolean success = repositoryManager.deleteRepository(repositoryName); |
| | | if (success && ticketService != null) { |
| | | return ticketService.deleteAll(repository); |
| | | } |
| | | return success; |
| | | } |
| | | |
| | | /** |
| | | * Returns the configured ticket service. |
| | | * |
| | | * @return a ticket service |
| | | */ |
| | | @Override |
| | | public ITicketService getTicketService() { |
| | | return ticketService; |
| | | } |
| | | |
| | | protected void configureTicketService() { |
| | | String clazz = settings.getString(Keys.tickets.service, NullTicketService.class.getName()); |
| | | if (StringUtils.isEmpty(clazz)) { |
| | | clazz = NullTicketService.class.getName(); |
| | | } |
| | | try { |
| | | Class<? extends ITicketService> serviceClass = (Class<? extends ITicketService>) Class.forName(clazz); |
| | | ticketService = injector.get(serviceClass).start(); |
| | | if (ticketService instanceof NullTicketService) { |
| | | logger.warn("No ticket service configured."); |
| | | } else if (ticketService.isReady()) { |
| | | logger.info("{} is ready.", ticketService); |
| | | } else { |
| | | logger.warn("{} is disabled.", ticketService); |
| | | } |
| | | } catch (Exception e) { |
| | | logger.error("failed to create ticket service " + clazz, e); |
| | | ticketService = injector.get(NullTicketService.class).start(); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * A nested Dagger graph is used for constructor dependency injection of |
| | | * complex classes. |
| | | * |
| | | * @author James Moger |
| | | * |
| | | */ |
| | | @Module( |
| | | library = true, |
| | | injects = { |
| | | IStoredSettings.class, |
| | | |
| | | // core managers |
| | | IRuntimeManager.class, |
| | | INotificationManager.class, |
| | | IUserManager.class, |
| | | IAuthenticationManager.class, |
| | | IRepositoryManager.class, |
| | | IProjectManager.class, |
| | | IFederationManager.class, |
| | | |
| | | // the monolithic manager |
| | | IGitblit.class, |
| | | |
| | | // ticket services |
| | | NullTicketService.class, |
| | | FileTicketService.class, |
| | | BranchTicketService.class, |
| | | RedisTicketService.class |
| | | } |
| | | ) |
| | | class GitBlitModule { |
| | | |
| | | @Provides @Singleton IStoredSettings provideSettings() { |
| | | return settings; |
| | | } |
| | | |
| | | @Provides @Singleton IRuntimeManager provideRuntimeManager() { |
| | | return runtimeManager; |
| | | } |
| | | |
| | | @Provides @Singleton INotificationManager provideNotificationManager() { |
| | | return notificationManager; |
| | | } |
| | | |
| | | @Provides @Singleton IUserManager provideUserManager() { |
| | | return userManager; |
| | | } |
| | | |
| | | @Provides @Singleton IAuthenticationManager provideAuthenticationManager() { |
| | | return authenticationManager; |
| | | } |
| | | |
| | | @Provides @Singleton IRepositoryManager provideRepositoryManager() { |
| | | return repositoryManager; |
| | | } |
| | | |
| | | @Provides @Singleton IProjectManager provideProjectManager() { |
| | | return projectManager; |
| | | } |
| | | |
| | | @Provides @Singleton IFederationManager provideFederationManager() { |
| | | return federationManager; |
| | | } |
| | | |
| | | @Provides @Singleton IGitblit provideGitblit() { |
| | | return GitBlit.this; |
| | | } |
| | | |
| | | @Provides @Singleton NullTicketService provideNullTicketService() { |
| | | return new NullTicketService( |
| | | runtimeManager, |
| | | notificationManager, |
| | | userManager, |
| | | repositoryManager); |
| | | } |
| | | |
| | | @Provides @Singleton FileTicketService provideFileTicketService() { |
| | | return new FileTicketService( |
| | | runtimeManager, |
| | | notificationManager, |
| | | userManager, |
| | | repositoryManager); |
| | | } |
| | | |
| | | @Provides @Singleton BranchTicketService provideBranchTicketService() { |
| | | return new BranchTicketService( |
| | | runtimeManager, |
| | | notificationManager, |
| | | userManager, |
| | | repositoryManager); |
| | | } |
| | | |
| | | @Provides @Singleton RedisTicketService provideRedisTicketService() { |
| | | return new RedisTicketService( |
| | | runtimeManager, |
| | | notificationManager, |
| | | userManager, |
| | | repositoryManager); |
| | | } |
| | | } |
| | | } |