From fb9813874c811ae06604c30d875e9dce57df9874 Mon Sep 17 00:00:00 2001 From: SHaselbauer <sarah.haselbauer@akquinet.de> Date: Mon, 21 Jan 2013 16:28:11 -0500 Subject: [PATCH] Merge multiple owners feature (pull request #63, #66) --- src/com/gitblit/wicket/panels/ProjectRepositoryPanel.java | 144 ++++++++++++++++++++++++++++++----------------- 1 files changed, 92 insertions(+), 52 deletions(-) diff --git a/src/com/gitblit/wicket/panels/ProjectRepositoryPanel.java b/src/com/gitblit/wicket/panels/ProjectRepositoryPanel.java index 50f0d52..d4f2a3a 100644 --- a/src/com/gitblit/wicket/panels/ProjectRepositoryPanel.java +++ b/src/com/gitblit/wicket/panels/ProjectRepositoryPanel.java @@ -36,6 +36,7 @@ import com.gitblit.models.RepositoryModel; import com.gitblit.models.UserModel; import com.gitblit.utils.ArrayUtils; +import com.gitblit.utils.MultiConfigUtil; import com.gitblit.utils.StringUtils; import com.gitblit.wicket.GitBlitWebSession; import com.gitblit.wicket.WicketUtils; @@ -51,86 +52,104 @@ private static final long serialVersionUID = 1L; - public ProjectRepositoryPanel(String wicketId, Localizer localizer, Component parent, - final boolean isAdmin, final RepositoryModel entry, + private MultiConfigUtil multiConfigUtil = new MultiConfigUtil(); + + public ProjectRepositoryPanel(String wicketId, Localizer localizer, + Component parent, final boolean isAdmin, + final RepositoryModel entry, final Map<AccessRestrictionType, String> accessRestrictions) { super(wicketId); - 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 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); // repository swatch Component swatch; if (entry.isBare) { - swatch = new Label("repositorySwatch", " ").setEscapeModelStrings(false); + swatch = new Label("repositorySwatch", " ") + .setEscapeModelStrings(false); } else { swatch = new Label("repositorySwatch", "!"); - WicketUtils.setHtmlTooltip(swatch, localizer.getString("gb.workingCopyWarning", parent)); + WicketUtils.setHtmlTooltip(swatch, + localizer.getString("gb.workingCopyWarning", parent)); } WicketUtils.setCssBackground(swatch, entry.toString()); add(swatch); swatch.setVisible(showSwatch); PageParameters pp = WicketUtils.newRepositoryParameter(entry.name); - add(new LinkPanel("repositoryName", "list", StringUtils.getRelativePath(entry.projectPath, - StringUtils.stripDotGit(entry.name)), SummaryPage.class, pp)); - add(new Label("repositoryDescription", entry.description).setVisible(!StringUtils - .isEmpty(entry.description))); + add(new LinkPanel("repositoryName", "list", + StringUtils.getRelativePath(entry.projectPath, + StringUtils.stripDotGit(entry.name)), + SummaryPage.class, pp)); + add(new Label("repositoryDescription", entry.description) + .setVisible(!StringUtils.isEmpty(entry.description))); if (StringUtils.isEmpty(entry.originRepository)) { add(new Label("originRepository").setVisible(false)); } else { - Fragment forkFrag = new Fragment("originRepository", "originFragment", this); - forkFrag.add(new LinkPanel("originRepository", null, StringUtils.stripDotGit(entry.originRepository), - SummaryPage.class, WicketUtils.newRepositoryParameter(entry.originRepository))); + Fragment forkFrag = new Fragment("originRepository", + "originFragment", this); + forkFrag.add(new LinkPanel("originRepository", null, StringUtils + .stripDotGit(entry.originRepository), SummaryPage.class, + WicketUtils.newRepositoryParameter(entry.originRepository))); add(forkFrag); } - add(new BookmarkablePageLink<Void>("tickets", TicketsPage.class, pp).setVisible(entry.useTickets)); - add(new BookmarkablePageLink<Void>("docs", DocsPage.class, pp).setVisible(entry.useDocs)); + add(new BookmarkablePageLink<Void>("tickets", TicketsPage.class, pp) + .setVisible(entry.useTickets)); + add(new BookmarkablePageLink<Void>("docs", DocsPage.class, pp) + .setVisible(entry.useDocs)); if (entry.isFrozen) { - add(WicketUtils.newImage("frozenIcon", "cold_16x16.png", localizer.getString("gb.isFrozen", parent))); + add(WicketUtils.newImage("frozenIcon", "cold_16x16.png", + localizer.getString("gb.isFrozen", parent))); } else { add(WicketUtils.newClearPixel("frozenIcon").setVisible(false)); } if (entry.isFederated) { - add(WicketUtils.newImage("federatedIcon", "federated_16x16.png", localizer.getString("gb.isFederated", parent))); + add(WicketUtils.newImage("federatedIcon", "federated_16x16.png", + localizer.getString("gb.isFederated", parent))); } else { add(WicketUtils.newClearPixel("federatedIcon").setVisible(false)); } switch (entry.accessRestriction) { case NONE: - add(WicketUtils.newBlankImage("accessRestrictionIcon").setVisible(false)); + add(WicketUtils.newBlankImage("accessRestrictionIcon").setVisible( + false)); break; case PUSH: - add(WicketUtils.newImage("accessRestrictionIcon", "lock_go_16x16.png", + add(WicketUtils.newImage("accessRestrictionIcon", + "lock_go_16x16.png", accessRestrictions.get(entry.accessRestriction))); break; case CLONE: - add(WicketUtils.newImage("accessRestrictionIcon", "lock_pull_16x16.png", + add(WicketUtils.newImage("accessRestrictionIcon", + "lock_pull_16x16.png", accessRestrictions.get(entry.accessRestriction))); break; case VIEW: - add(WicketUtils.newImage("accessRestrictionIcon", "shield_16x16.png", + add(WicketUtils.newImage("accessRestrictionIcon", + "shield_16x16.png", accessRestrictions.get(entry.accessRestriction))); break; default: add(WicketUtils.newBlankImage("accessRestrictionIcon")); } - if (StringUtils.isEmpty(entry.owner)) { - add(new Label("repositoryOwner").setVisible(false)); + if (entry.getRepoAdministrators().size() < 1) { + add(new Label("repositoryAdministrators").setVisible(false)); } else { - UserModel ownerModel = GitBlit.self().getUserModel(entry.owner); - String owner = entry.owner; - if (ownerModel != null) { - owner = ownerModel.getDisplayName(); - } - add(new Label("repositoryOwner", owner + " (" + - localizer.getString("gb.owner", parent) + ")")); + add(new Label("repositoryAdministrators", + multiConfigUtil.convertCollectionToSingleLineString(entry + .getRepoAdministrators()) + + " (" + + localizer.getString("gb.repoAdministrators", parent) + ")")); } UserModel user = GitBlitWebSession.get().getUser(); @@ -138,15 +157,19 @@ user = UserModel.ANONYMOUS; } Fragment repositoryLinks; - boolean showOwner = entry.isOwner(user.username); + boolean isRepoAdministrator = entry.isRepoAdministrator(user.username); // owner of personal repository gets admin powers - boolean showAdmin = isAdmin || entry.isUsersPersonalRepository(user.username); + boolean showAdmin = isAdmin + || entry.isUsersPersonalRepository(user.username); - 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 || isRepoAdministrator) { + 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") { @@ -157,28 +180,41 @@ if (GitBlit.self().deleteRepositoryModel(entry)) { // redirect to the owning page if (entry.isPersonalRepository()) { - setResponsePage(getPage().getClass(), WicketUtils.newUsernameParameter(entry.projectPath.substring(1))); + setResponsePage( + getPage().getClass(), + WicketUtils + .newUsernameParameter(entry.projectPath + .substring(1))); } else { - setResponsePage(getPage().getClass(), WicketUtils.newProjectParameter(entry.projectPath)); + setResponsePage( + getPage().getClass(), + WicketUtils + .newProjectParameter(entry.projectPath)); } } else { - error(MessageFormat.format(getString("gb.repositoryDeleteFailed"), entry)); + error(MessageFormat.format( + getString("gb.repositoryDeleteFailed"), + entry)); } } }; - deleteLink.add(new JavascriptEventConfirmation("onclick", MessageFormat.format( - localizer.getString("gb.deleteRepository", parent), entry))); + deleteLink.add(new JavascriptEventConfirmation("onclick", + MessageFormat.format(localizer.getString( + "gb.deleteRepository", parent), entry))); repositoryLinks.add(deleteLink); } } else { - repositoryLinks = new Fragment("repositoryLinks", "repositoryUserLinks", this); + 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>("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)); + repositoryLinks.add(new BookmarkablePageLink<Void>("log", + LogPage.class, WicketUtils.newRepositoryParameter(entry.name)) + .setEnabled(entry.hasCommits)); add(repositoryLinks); @@ -190,17 +226,20 @@ } Label lastChangeLabel = new Label("repositoryLastChange", lastChange); add(lastChangeLabel); - WicketUtils.setCssClass(lastChangeLabel, getTimeUtils().timeAgoCss(entry.lastChange)); + WicketUtils.setCssClass(lastChangeLabel, + getTimeUtils().timeAgoCss(entry.lastChange)); if (entry.hasCommits) { // Existing repository add(new Label("repositorySize", entry.size).setVisible(showSize)); } else { // New repository - add(new Label("repositorySize", localizer.getString("gb.empty", parent)).setEscapeModelStrings(false)); + add(new Label("repositorySize", localizer.getString("gb.empty", + parent)).setEscapeModelStrings(false)); } - add(new ExternalLink("syndication", SyndicationServlet.asLink("", entry.name, null, 0))); + add(new ExternalLink("syndication", SyndicationServlet.asLink("", + entry.name, null, 0))); List<String> repositoryUrls = new ArrayList<String>(); if (gitServlet) { @@ -209,7 +248,8 @@ } repositoryUrls.addAll(GitBlit.self().getOtherCloneUrls(entry.name)); - String primaryUrl = ArrayUtils.isEmpty(repositoryUrls) ? "" : repositoryUrls.remove(0); + String primaryUrl = ArrayUtils.isEmpty(repositoryUrls) ? "" + : repositoryUrls.remove(0); add(new RepositoryUrlPanel("repositoryCloneUrl", primaryUrl)); } } -- Gitblit v1.9.1