From f9980ea7a6615f8bfef89fae7e6569c54bc749c3 Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Thu, 03 Jul 2014 17:00:40 -0400 Subject: [PATCH] Annotate managers with @Singleton --- src/main/java/com/gitblit/GitBlit.java | 235 ++++++++++++---------------------------------------------- 1 files changed, 51 insertions(+), 184 deletions(-) diff --git a/src/main/java/com/gitblit/GitBlit.java b/src/main/java/com/gitblit/GitBlit.java index 59408a6..7b9b904 100644 --- a/src/main/java/com/gitblit/GitBlit.java +++ b/src/main/java/com/gitblit/GitBlit.java @@ -17,12 +17,13 @@ import java.text.MessageFormat; import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashSet; +import java.util.Iterator; import java.util.List; +import java.util.Set; -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; @@ -33,21 +34,17 @@ import com.gitblit.manager.IRepositoryManager; import com.gitblit.manager.IRuntimeManager; import com.gitblit.manager.IUserManager; -import com.gitblit.manager.ServicesManager; 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.transport.ssh.IPublicKeyManager; import com.gitblit.utils.StringUtils; - -import dagger.Module; -import dagger.ObjectGraph; -import dagger.Provides; +import com.google.inject.AbstractModule; +import com.google.inject.Guice; +import com.google.inject.Inject; +import com.google.inject.Injector; +import com.google.inject.Singleton; /** * GitBlit is the aggregate manager for the Gitblit webapp. It provides all @@ -56,14 +53,14 @@ * @author James Moger * */ +@Singleton public class GitBlit extends GitblitManager { - private final ObjectGraph injector; - - private final ServicesManager servicesManager; + private final Injector injector; private ITicketService ticketService; + @Inject public GitBlit( IRuntimeManager runtimeManager, IPluginManager pluginManager, @@ -85,16 +82,12 @@ projectManager, federationManager); - this.injector = ObjectGraph.create(getModules()); - - this.servicesManager = new ServicesManager(this); + this.injector = Guice.createInjector(getModules()); } @Override public GitBlit start() { super.start(); - logger.info("Starting services manager..."); - servicesManager.start(); configureTicketService(); return this; } @@ -102,78 +95,12 @@ @Override public GitBlit stop() { super.stop(); - servicesManager.stop(); ticketService.stop(); return this; } - @Override - public boolean isServingRepositories() { - return servicesManager.isServingRepositories(); - } - - protected Object [] getModules() { - return new Object [] { new GitBlitModule()}; - } - - /** - * Returns a list of repository URLs and the user access permission. - * - * @param request - * @param user - * @param repository - * @return a list of repository urls - */ - @Override - public List<RepositoryUrl> getRepositoryUrls(HttpServletRequest request, UserModel user, RepositoryModel repository) { - if (user == null) { - user = UserModel.ANONYMOUS; - } - String username = StringUtils.encodeUsername(UserModel.ANONYMOUS.equals(user) ? "" : user.username); - - List<RepositoryUrl> list = new ArrayList<RepositoryUrl>(); - - // http/https url - if (settings.getBoolean(Keys.git.enableGitServlet, true)) { - AccessPermission permission = user.getRepositoryPermission(repository).permission; - if (permission.exceeds(AccessPermission.NONE)) { - list.add(new RepositoryUrl(getRepositoryUrl(request, username, repository), permission)); - } - } - - // ssh daemon url - String sshDaemonUrl = servicesManager.getSshDaemonUrl(request, user, repository); - if (!StringUtils.isEmpty(sshDaemonUrl)) { - AccessPermission permission = user.getRepositoryPermission(repository).permission; - if (permission.exceeds(AccessPermission.NONE)) { - list.add(new RepositoryUrl(sshDaemonUrl, permission)); - } - } - - // git daemon url - String gitDaemonUrl = servicesManager.getGitDaemonUrl(request, user, repository); - if (!StringUtils.isEmpty(gitDaemonUrl)) { - AccessPermission permission = servicesManager.getGitDaemonAccessPermission(user, repository); - if (permission.exceeds(AccessPermission.NONE)) { - list.add(new RepositoryUrl(gitDaemonUrl, permission)); - } - } - - // add all other urls - // {0} = repository - // {1} = username - for (String url : settings.getStrings(Keys.web.otherUrls)) { - if (url.contains("{1}")) { - // external url requires username, only add url IF we have one - if (!StringUtils.isEmpty(username)) { - list.add(new RepositoryUrl(MessageFormat.format(url, repository.name, username), null)); - } - } else { - // external url does not require username - list.add(new RepositoryUrl(MessageFormat.format(url, repository.name), null)); - } - } - return list; + protected AbstractModule [] getModules() { + return new AbstractModule [] { new GitBlitModule()}; } /** @@ -196,6 +123,24 @@ } /** + * Delete the user and all associated public ssh keys. + */ + @Override + public boolean deleteUser(String username) { + UserModel user = userManager.getUserModel(username); + return deleteUserModel(user); + } + + @Override + public boolean deleteUserModel(UserModel model) { + boolean success = userManager.deleteUserModel(model); + if (success) { + getPublicKeyManager().removeAllKeys(model.username); + } + return success; + } + + /** * Delete the repository and all associated tickets. */ @Override @@ -208,7 +153,7 @@ public boolean deleteRepositoryModel(RepositoryModel model) { boolean success = repositoryManager.deleteRepositoryModel(model); if (success && ticketService != null) { - return ticketService.deleteAll(model); + ticketService.deleteAll(model); } return success; } @@ -230,7 +175,7 @@ } try { Class<? extends ITicketService> serviceClass = (Class<? extends ITicketService>) Class.forName(clazz); - ticketService = injector.get(serviceClass).start(); + ticketService = injector.getInstance(serviceClass).start(); if (ticketService instanceof NullTicketService) { logger.warn("No ticket service configured."); } else if (ticketService.isReady()) { @@ -240,109 +185,31 @@ } } catch (Exception e) { logger.error("failed to create ticket service " + clazz, e); - ticketService = injector.get(NullTicketService.class).start(); + ticketService = injector.getInstance(NullTicketService.class).start(); } } /** - * A nested Dagger graph is used for constructor dependency injection of + * A nested Guice Module is used for constructor dependency injection of * complex classes. * * @author James Moger * */ - @Module( - library = true, - injects = { - IStoredSettings.class, + class GitBlitModule extends AbstractModule { - // 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); + @Override + protected void configure() { + bind(IStoredSettings.class).toInstance(settings); + bind(IRuntimeManager.class).toInstance(runtimeManager); + bind(IPluginManager.class).toInstance(pluginManager); + bind(INotificationManager.class).toInstance(notificationManager); + bind(IUserManager.class).toInstance(userManager); + bind(IAuthenticationManager.class).toInstance(authenticationManager); + bind(IRepositoryManager.class).toInstance(repositoryManager); + bind(IProjectManager.class).toInstance(projectManager); + bind(IFederationManager.class).toInstance(federationManager); + bind(IGitblit.class).toInstance(GitBlit.this); } } } -- Gitblit v1.9.1