From 9effe1630d97039b3e01cd9b58ed07e75be1d63c Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Mon, 25 Feb 2013 08:40:30 -0500 Subject: [PATCH] Merge pull request #75 from thefake/master --- src/com/gitblit/wicket/pages/ProjectPage.java | 195 ++++++------------------------------------------ 1 files changed, 24 insertions(+), 171 deletions(-) diff --git a/src/com/gitblit/wicket/pages/ProjectPage.java b/src/com/gitblit/wicket/pages/ProjectPage.java index be3cf38..7eba033 100644 --- a/src/com/gitblit/wicket/pages/ProjectPage.java +++ b/src/com/gitblit/wicket/pages/ProjectPage.java @@ -15,9 +15,6 @@ */ package com.gitblit.wicket.pages; -import java.io.File; -import java.io.FileInputStream; -import java.io.InputStreamReader; import java.text.MessageFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; @@ -31,17 +28,12 @@ import org.apache.wicket.Component; import org.apache.wicket.PageParameters; -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; -import org.eclipse.jgit.lib.Constants; import com.gitblit.GitBlit; import com.gitblit.Keys; @@ -50,13 +42,12 @@ import com.gitblit.models.Metric; import com.gitblit.models.ProjectModel; 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; import com.gitblit.wicket.GitBlitWebSession; +import com.gitblit.wicket.GitblitRedirectException; import com.gitblit.wicket.PageRegistration; import com.gitblit.wicket.PageRegistration.DropDownMenuItem; import com.gitblit.wicket.PageRegistration.DropDownMenuRegistration; @@ -66,9 +57,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 { @@ -76,7 +65,7 @@ public ProjectPage() { super(); - throw new RedirectException(GitBlitWebApp.get().getHomePage()); + throw new GitblitRedirectException(GitBlitWebApp.get().getHomePage()); } public ProjectPage(PageParameters params) { @@ -100,12 +89,12 @@ String projectName = WicketUtils.getProjectName(params); if (StringUtils.isEmpty(projectName)) { - throw new RedirectException(GitBlitWebApp.get().getHomePage()); + throw new GitblitRedirectException(GitBlitWebApp.get().getHomePage()); } ProjectModel project = getProjectModel(projectName); if (project == null) { - throw new RedirectException(GitBlitWebApp.get().getHomePage()); + throw new GitblitRedirectException(GitBlitWebApp.get().getHomePage()); } add(new Label("projectTitle", project.getDisplayName())); @@ -117,23 +106,14 @@ add(WicketUtils.syndicationDiscoveryLink(SyndicationServlet.getTitle(project.getDisplayName(), null), feedLink)); - String groupName = projectName; - if (project.isRoot) { - groupName = ""; - } else { - groupName += "/"; - } - // project markdown message - File pmkd = new File(GitBlit.getRepositoriesFolder(), groupName + "project.mkd"); - String pmessage = readMarkdown(projectName, pmkd); + String pmessage = transformMarkdown(project.projectMarkdown); Component projectMessage = new Label("projectMessage", pmessage) .setEscapeModelStrings(false).setVisible(pmessage.length() > 0); add(projectMessage); // markdown message above repositories list - File rmkd = new File(GitBlit.getRepositoriesFolder(), groupName + "repositories.mkd"); - String rmessage = readMarkdown(projectName, rmkd); + String rmessage = transformMarkdown(project.repositoriesMarkdown); Component repositoriesMessage = new Label("repositoriesMessage", rmessage) .setEscapeModelStrings(false).setVisible(rmessage.length() > 0); add(repositoriesMessage); @@ -148,143 +128,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", " ").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", 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); @@ -433,8 +286,8 @@ @Override protected List<ProjectModel> getProjectModels() { if (projectModels.isEmpty()) { - final UserModel user = GitBlitWebSession.get().getUser(); - List<ProjectModel> projects = GitBlit.self().getProjectModels(user); + List<RepositoryModel> repositories = getRepositoryModels(); + List<ProjectModel> projects = GitBlit.self().getProjectModels(repositories, false); projectModels.addAll(projects); } return projectModels; @@ -451,7 +304,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) { @@ -480,20 +338,15 @@ } return menu; } - - - private String readMarkdown(String projectName, File projectMessage) { + + private String transformMarkdown(String markdown) { String message = ""; - if (projectMessage.exists()) { + if (!StringUtils.isEmpty(markdown)) { // Read user-supplied message try { - FileInputStream fis = new FileInputStream(projectMessage); - InputStreamReader reader = new InputStreamReader(fis, - Constants.CHARACTER_ENCODING); - message = MarkdownUtils.transformMarkdown(reader); - reader.close(); + message = MarkdownUtils.transformMarkdown(markdown); } catch (Throwable t) { - message = getString("gb.failedToRead") + " " + projectMessage; + message = getString("gb.failedToRead") + " " + markdown; warn(message, t); } } -- Gitblit v1.9.1