From 1e1b85270f93b3bca624c99b478f3a9a23be2395 Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Sat, 29 Sep 2012 23:40:46 -0400
Subject: [PATCH] Preliminary implementation of server-side forking (issue 137)

---
 src/com/gitblit/wicket/pages/ProjectPage.java |  152 ++++----------------------------------------------
 1 files changed, 12 insertions(+), 140 deletions(-)

diff --git a/src/com/gitblit/wicket/pages/ProjectPage.java b/src/com/gitblit/wicket/pages/ProjectPage.java
index 808cc06..3679a6f 100644
--- a/src/com/gitblit/wicket/pages/ProjectPage.java
+++ b/src/com/gitblit/wicket/pages/ProjectPage.java
@@ -34,10 +34,7 @@
 import org.apache.wicket.RedirectException;
 import org.apache.wicket.behavior.HeaderContributor;
 import org.apache.wicket.markup.html.basic.Label;
-import org.apache.wicket.markup.html.link.BookmarkablePageLink;
 import org.apache.wicket.markup.html.link.ExternalLink;
-import org.apache.wicket.markup.html.link.Link;
-import org.apache.wicket.markup.html.panel.Fragment;
 import org.apache.wicket.markup.repeater.Item;
 import org.apache.wicket.markup.repeater.data.DataView;
 import org.apache.wicket.markup.repeater.data.ListDataProvider;
@@ -52,7 +49,6 @@
 import com.gitblit.models.RepositoryModel;
 import com.gitblit.models.UserModel;
 import com.gitblit.utils.ActivityUtils;
-import com.gitblit.utils.ArrayUtils;
 import com.gitblit.utils.MarkdownUtils;
 import com.gitblit.utils.StringUtils;
 import com.gitblit.wicket.GitBlitWebApp;
@@ -66,9 +62,7 @@
 import com.gitblit.wicket.charting.GoogleLineChart;
 import com.gitblit.wicket.charting.GooglePieChart;
 import com.gitblit.wicket.panels.ActivityPanel;
-import com.gitblit.wicket.panels.BasePanel.JavascriptEventConfirmation;
-import com.gitblit.wicket.panels.LinkPanel;
-import com.gitblit.wicket.panels.RepositoryUrlPanel;
+import com.gitblit.wicket.panels.ProjectRepositoryPanel;
 
 public class ProjectPage extends RootPage {
 	
@@ -148,143 +142,16 @@
 			}
 		});
 
-		final boolean showSwatch = GitBlit.getBoolean(Keys.web.repositoryListSwatches, true);
-		final boolean gitServlet = GitBlit.getBoolean(Keys.git.enableGitServlet, true);
-		final boolean showSize = GitBlit.getBoolean(Keys.web.showRepositorySizes, true);
-		
 		final ListDataProvider<RepositoryModel> dp = new ListDataProvider<RepositoryModel>(repositories);
-		DataView<RepositoryModel> dataView = new DataView<RepositoryModel>("repository", dp) {
+		DataView<RepositoryModel> dataView = new DataView<RepositoryModel>("repositoryList", dp) {
 			private static final long serialVersionUID = 1L;
 
 			public void populateItem(final Item<RepositoryModel> item) {
 				final RepositoryModel entry = item.getModelObject();
-
-				// repository swatch
-				Component swatch;
-				if (entry.isBare){
-					swatch = new Label("repositorySwatch", "&nbsp;").setEscapeModelStrings(false);
-				} else {
-					swatch = new Label("repositorySwatch", "!");
-					WicketUtils.setHtmlTooltip(swatch, getString("gb.workingCopyWarning"));
-				}
-				WicketUtils.setCssBackground(swatch, entry.toString());
-				item.add(swatch);
-				swatch.setVisible(showSwatch);
 				
-				PageParameters pp = WicketUtils.newRepositoryParameter(entry.name);
-				item.add(new LinkPanel("repositoryName", "list", StringUtils.getRelativePath(projectPath, StringUtils.stripDotGit(entry.name)), SummaryPage.class, pp));
-				item.add(new Label("repositoryDescription", entry.description).setVisible(!StringUtils.isEmpty(entry.description)));
-				
-				item.add(new BookmarkablePageLink<Void>("tickets", TicketsPage.class, pp).setVisible(entry.useTickets));
-				item.add(new BookmarkablePageLink<Void>("docs", DocsPage.class, pp).setVisible(entry.useDocs));
-
-				if (entry.isFrozen) {
-					item.add(WicketUtils.newImage("frozenIcon", "cold_16x16.png",
-							getString("gb.isFrozen")));
-				} else {
-					item.add(WicketUtils.newClearPixel("frozenIcon").setVisible(false));
-				}
-
-				if (entry.isFederated) {
-					item.add(WicketUtils.newImage("federatedIcon", "federated_16x16.png",
-							getString("gb.isFederated")));
-				} else {
-					item.add(WicketUtils.newClearPixel("federatedIcon").setVisible(false));
-				}
-				switch (entry.accessRestriction) {
-				case NONE:
-					item.add(WicketUtils.newBlankImage("accessRestrictionIcon").setVisible(false));
-					break;
-				case PUSH:
-					item.add(WicketUtils.newImage("accessRestrictionIcon", "lock_go_16x16.png",
-							getAccessRestrictions().get(entry.accessRestriction)));
-					break;
-				case CLONE:
-					item.add(WicketUtils.newImage("accessRestrictionIcon", "lock_pull_16x16.png",
-							getAccessRestrictions().get(entry.accessRestriction)));
-					break;
-				case VIEW:
-					item.add(WicketUtils.newImage("accessRestrictionIcon", "shield_16x16.png",
-							getAccessRestrictions().get(entry.accessRestriction)));
-					break;
-				default:
-					item.add(WicketUtils.newBlankImage("accessRestrictionIcon"));
-				}
-
-				item.add(new Label("repositoryOwner", StringUtils.isEmpty(entry.owner) ? "" : (entry.owner + " (" + getString("gb.owner") + ")")));
-				
-				
-				UserModel user = GitBlitWebSession.get().getUser();
-				Fragment repositoryLinks;				
-				boolean showOwner = user != null && user.username.equalsIgnoreCase(entry.owner);
-				if (showAdmin || showOwner) {
-					repositoryLinks = new Fragment("repositoryLinks",
-							showAdmin ? "repositoryAdminLinks" : "repositoryOwnerLinks", this);
-					repositoryLinks.add(new BookmarkablePageLink<Void>("editRepository",
-							EditRepositoryPage.class, WicketUtils
-									.newRepositoryParameter(entry.name)));
-					if (showAdmin) {
-						Link<Void> deleteLink = new Link<Void>("deleteRepository") {
-
-							private static final long serialVersionUID = 1L;
-
-							@Override
-							public void onClick() {
-								if (GitBlit.self().deleteRepositoryModel(entry)) {
-									info(MessageFormat.format(getString("gb.repositoryDeleted"), entry));
-									// TODO dp.remove(entry);
-								} else {
-									error(MessageFormat.format(getString("gb.repositoryDeleteFailed"), entry));
-								}
-							}
-						};
-						deleteLink.add(new JavascriptEventConfirmation("onclick", MessageFormat.format(
-								getString("gb.deleteRepository"), entry)));
-						repositoryLinks.add(deleteLink);
-					}
-				} else {
-					repositoryLinks = new Fragment("repositoryLinks", "repositoryUserLinks", this);
-				}
-				
-				repositoryLinks.add(new BookmarkablePageLink<Void>("tree", TreePage.class,
-						WicketUtils.newRepositoryParameter(entry.name)).setEnabled(entry.hasCommits));
-
-				repositoryLinks.add(new BookmarkablePageLink<Void>("log", LogPage.class,
-						WicketUtils.newRepositoryParameter(entry.name)).setEnabled(entry.hasCommits));
-
-				item.add(repositoryLinks);
-				
-				String lastChange;
-				if (entry.lastChange.getTime() == 0) {
-					lastChange = "--";
-				} else {
-					lastChange = getTimeUtils().timeAgo(entry.lastChange);
-				}
-				Label lastChangeLabel = new Label("repositoryLastChange", lastChange);
-				item.add(lastChangeLabel);
-				WicketUtils.setCssClass(lastChangeLabel, getTimeUtils().timeAgoCss(entry.lastChange));
-				
-				if (entry.hasCommits) {
-					// Existing repository
-					item.add(new Label("repositorySize", entry.size).setVisible(showSize));
-				} else {
-					// New repository
-					item.add(new Label("repositorySize", getString("gb.empty"))
-							.setEscapeModelStrings(false));
-				}
-				
-				item.add(new ExternalLink("syndication", SyndicationServlet.asLink("",
-						entry.name, null, 0)));
-				
-				List<String> repositoryUrls = new ArrayList<String>();
-				if (gitServlet) {
-					// add the Gitblit repository url
-					repositoryUrls.add(getRepositoryUrl(entry));
-				}
-				repositoryUrls.addAll(GitBlit.self().getOtherCloneUrls(entry.name));
-				
-				String primaryUrl = ArrayUtils.isEmpty(repositoryUrls) ? "" : repositoryUrls.remove(0);
-				item.add(new RepositoryUrlPanel("repositoryCloneUrl", primaryUrl));
+				ProjectRepositoryPanel row = new ProjectRepositoryPanel("repository", 
+						getLocalizer(), this, showAdmin, entry, getAccessRestrictions());
+				item.add(row);
 			}
 		};
 		add(dataView);
@@ -434,7 +301,7 @@
 	protected List<ProjectModel> getProjectModels() {
 		if (projectModels.isEmpty()) {
 			final UserModel user = GitBlitWebSession.get().getUser();
-			List<ProjectModel> projects = GitBlit.self().getProjectModels(user);
+			List<ProjectModel> projects = GitBlit.self().getProjectModels(user, false);
 			projectModels.addAll(projects);
 		}
 		return projectModels;
@@ -451,7 +318,12 @@
 	
 	protected List<DropDownMenuItem> getProjectsMenu() {
 		List<DropDownMenuItem> menu = new ArrayList<DropDownMenuItem>();
-		List<ProjectModel> projects = getProjectModels();
+		List<ProjectModel> projects = new ArrayList<ProjectModel>();
+		for (ProjectModel model : getProjectModels()) {
+			if (!model.isUserProject()) {
+				projects.add(model);
+			}
+		}
 		int maxProjects = 15;
 		boolean showAllProjects = projects.size() > maxProjects;
 		if (showAllProjects) {

--
Gitblit v1.9.1