From 5200b359257c2ab5e29781c2b05c6092fc8338f8 Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Fri, 29 Nov 2013 11:05:50 -0500 Subject: [PATCH] Eliminate static singleton calls from user services --- src/main/java/com/gitblit/SyndicationServlet.java | 73 ++++++++++++++++++++++++------------ 1 files changed, 49 insertions(+), 24 deletions(-) diff --git a/src/main/java/com/gitblit/SyndicationServlet.java b/src/main/java/com/gitblit/SyndicationServlet.java index baaf7eb..397545f 100644 --- a/src/main/java/com/gitblit/SyndicationServlet.java +++ b/src/main/java/com/gitblit/SyndicationServlet.java @@ -22,6 +22,8 @@ import java.util.List; import java.util.Map; +import javax.inject.Inject; +import javax.inject.Singleton; import javax.servlet.http.HttpServlet; import org.eclipse.jgit.lib.ObjectId; @@ -31,6 +33,9 @@ import org.slf4j.LoggerFactory; import com.gitblit.AuthenticationFilter.AuthenticatedRequest; +import com.gitblit.manager.IProjectManager; +import com.gitblit.manager.IRepositoryManager; +import com.gitblit.manager.IRuntimeManager; import com.gitblit.models.FeedEntryModel; import com.gitblit.models.ProjectModel; import com.gitblit.models.RefModel; @@ -38,26 +43,46 @@ import com.gitblit.models.UserModel; import com.gitblit.utils.HttpUtils; import com.gitblit.utils.JGitUtils; +import com.gitblit.utils.MessageProcessor; import com.gitblit.utils.StringUtils; import com.gitblit.utils.SyndicationUtils; /** * SyndicationServlet generates RSS 2.0 feeds and feed links. - * + * * Access to this servlet is protected by the SyndicationFilter. - * + * * @author James Moger - * + * */ +@Singleton public class SyndicationServlet extends HttpServlet { private static final long serialVersionUID = 1L; private transient Logger logger = LoggerFactory.getLogger(SyndicationServlet.class); + private final IStoredSettings settings; + + private final IRepositoryManager repositoryManager; + + private final IProjectManager projectManager; + + @Inject + public SyndicationServlet( + IRuntimeManager runtimeManager, + IRepositoryManager repositoryManager, + IProjectManager projectManager) { + + super(); + this.settings = runtimeManager.getSettings(); + this.repositoryManager = repositoryManager; + this.projectManager = projectManager; + } + /** * Create a feed link for the specified repository and branch/tag/commit id. - * + * * @param baseURL * @param repository * the repository name @@ -95,7 +120,7 @@ /** * Determines the appropriate title for a feed. - * + * * @param repository * @param objectId * @return title of the feed @@ -116,7 +141,7 @@ /** * Generates the feed content. - * + * * @param request * @param response * @throws javax.servlet.ServletException @@ -143,7 +168,7 @@ searchType = type; } } - int length = GitBlit.getInteger(Keys.web.syndicationEntries, 25); + int length = settings.getInteger(Keys.web.syndicationEntries, 25); if (StringUtils.isEmpty(objectId)) { objectId = org.eclipse.jgit.lib.Constants.HEAD; } @@ -162,12 +187,12 @@ } response.setContentType("application/rss+xml; charset=UTF-8"); - + boolean isProjectFeed = false; String feedName = null; String feedTitle = null; String feedDescription = null; - + List<String> repositories = null; if (repositoryName.indexOf('/') == -1 && !repositoryName.toLowerCase().endsWith(".git")) { // try to find a project @@ -175,25 +200,25 @@ if (request instanceof AuthenticatedRequest) { user = ((AuthenticatedRequest) request).getUser(); } - ProjectModel project = GitBlit.self().getProjectModel(repositoryName, user); + ProjectModel project = projectManager.getProjectModel(repositoryName, user); if (project != null) { isProjectFeed = true; repositories = new ArrayList<String>(project.repositories); - + // project feed feedName = project.name; feedTitle = project.title; feedDescription = project.description; } } - + if (repositories == null) { // could not find project, assume this is a repository repositories = Arrays.asList(repositoryName); } - boolean mountParameters = GitBlit.getBoolean(Keys.web.mountParameters, true); + boolean mountParameters = settings.getBoolean(Keys.web.mountParameters, true); String urlPattern; if (mountParameters) { // mounted parameters @@ -203,18 +228,18 @@ urlPattern = "{0}/commit/?r={1}&h={2}"; } String gitblitUrl = HttpUtils.getGitblitURL(request); - char fsc = GitBlit.getChar(Keys.web.forwardSlashCharacter, '/'); + char fsc = settings.getChar(Keys.web.forwardSlashCharacter, '/'); List<FeedEntryModel> entries = new ArrayList<FeedEntryModel>(); for (String name : repositories) { - Repository repository = GitBlit.self().getRepository(name); - RepositoryModel model = GitBlit.self().getRepositoryModel(name); + Repository repository = repositoryManager.getRepository(name); + RepositoryModel model = repositoryManager.getRepositoryModel(name); if (repository == null) { if (model.isCollectingGarbage) { logger.warn(MessageFormat.format("Temporarily excluding {0} from feed, busy collecting garbage", name)); - } + } continue; } if (!isProjectFeed) { @@ -223,7 +248,7 @@ feedTitle = model.name; feedDescription = model.description; } - + List<RevCommit> commits; if (StringUtils.isEmpty(searchString)) { // standard log/history lookup @@ -234,6 +259,7 @@ offset, length); } Map<ObjectId, List<RefModel>> allRefs = JGitUtils.getAllRefs(repository, model.showRemoteBranches); + MessageProcessor processor = new MessageProcessor(settings); // convert RevCommit to SyndicatedEntryModel for (RevCommit commit : commits) { @@ -244,11 +270,10 @@ StringUtils.encodeURL(model.name.replace('/', fsc)), commit.getName()); entry.published = commit.getCommitterIdent().getWhen(); entry.contentType = "text/html"; - String message = GitBlit.self().processCommitMessage(model.name, - commit.getFullMessage()); + String message = processor.processCommitMessage(model, commit.getFullMessage()); entry.content = message; entry.repository = model.name; - entry.branch = objectId; + entry.branch = objectId; entry.tags = new ArrayList<String>(); // add commit id and parent commit ids @@ -263,18 +288,18 @@ for (RefModel ref : refs) { entry.tags.add("ref:" + ref.getName()); } - } + } entries.add(entry); } } - + // sort & truncate the feed Collections.sort(entries); if (entries.size() > length) { // clip the list entries = entries.subList(0, length); } - + String feedLink; if (isProjectFeed) { // project feed -- Gitblit v1.9.1