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