From 8a2e9c363346ef5bf48c8eba09cb8afa46fabeeb Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Tue, 24 May 2011 17:17:51 -0400 Subject: [PATCH] Delete/Rename repos & user. Edit link. Dropped crypt. Other git urls. --- src/com/gitblit/wicket/panels/RepositoriesPanel.java | 125 +++++++++++++++++++++++++++++++++++------ 1 files changed, 107 insertions(+), 18 deletions(-) diff --git a/src/com/gitblit/wicket/panels/RepositoriesPanel.java b/src/com/gitblit/wicket/panels/RepositoriesPanel.java index 6d05888..c141379 100644 --- a/src/com/gitblit/wicket/panels/RepositoriesPanel.java +++ b/src/com/gitblit/wicket/panels/RepositoriesPanel.java @@ -1,5 +1,6 @@ package com.gitblit.wicket.panels; +import java.text.MessageFormat; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; @@ -15,6 +16,7 @@ import org.apache.wicket.extensions.markup.html.repeater.util.SortableDataProvider; import org.apache.wicket.markup.html.basic.Label; import org.apache.wicket.markup.html.link.BookmarkablePageLink; +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; @@ -36,22 +38,21 @@ import com.gitblit.wicket.pages.EditRepositoryPage; import com.gitblit.wicket.pages.SummaryPage; - public class RepositoriesPanel extends BasePanel { private static final long serialVersionUID = 1L; - + public RepositoriesPanel(String wicketId, final boolean showAdmin, final Map<AccessRestrictionType, String> accessRestrictionTranslations) { super(wicketId); - + final UserModel user = GitBlitWebSession.get().getUser(); List<RepositoryModel> models = GitBlit.self().getRepositoryModels(user); - IDataProvider<RepositoryModel> dp; - + final IDataProvider<RepositoryModel> dp; + Fragment adminLinks = new Fragment("adminPanel", "adminLinks", this); adminLinks.add(new BookmarkablePageLink<Void>("newRepository", EditRepositoryPage.class)); add(adminLinks.setVisible(showAdmin)); - + if (GitBlit.self().settings().getString(Keys.web.repositoryListType, "flat").equalsIgnoreCase("grouped")) { Map<String, List<RepositoryModel>> groups = new HashMap<String, List<RepositoryModel>>(); for (RepositoryModel model : models) { @@ -69,24 +70,30 @@ List<RepositoryModel> groupedModels = new ArrayList<RepositoryModel>(); for (String root : roots) { List<RepositoryModel> subModels = groups.get(root); - groupedModels.add(new GroupRepositoryModel(root + " (" + subModels.size() + ")")); + groupedModels.add(new GroupRepositoryModel(root, subModels.size())); groupedModels.addAll(subModels); } - dp = new ListDataProvider<RepositoryModel>(groupedModels); + dp = new RepositoriesProvider(groupedModels); } else { - dp = new DataProvider(models); + dp = new SortableRepositoriesProvider(models); } DataView<RepositoryModel> dataView = new DataView<RepositoryModel>("row", dp) { private static final long serialVersionUID = 1L; int counter = 0; + @Override + protected void onBeforeRender() { + super.onBeforeRender(); + counter = 0; + } + public void populateItem(final Item<RepositoryModel> item) { final RepositoryModel entry = item.getModelObject(); if (entry instanceof GroupRepositoryModel) { Fragment row = new Fragment("rowContent", "groupRepositoryRow", this); item.add(row); - row.add(new Label("groupName", entry.name)); + row.add(new Label("groupName", entry.toString())); WicketUtils.setCssClass(item, "group"); return; } @@ -144,12 +151,30 @@ row.add(lastChangeLabel); WicketUtils.setCssClass(lastChangeLabel, TimeUtils.timeAgoCss(entry.lastChange)); - boolean showOwner = user != null && user.getUsername().equalsIgnoreCase(entry.owner); + boolean showOwner = user != null && user.getUsername().equalsIgnoreCase(entry.owner); if (showAdmin) { Fragment repositoryLinks = new Fragment("repositoryLinks", "repositoryAdminLinks", this); repositoryLinks.add(new BookmarkablePageLink<Void>("editRepository", EditRepositoryPage.class, WicketUtils.newRepositoryParameter(entry.name))); - repositoryLinks.add(new BookmarkablePageLink<Void>("renameRepository", EditRepositoryPage.class, WicketUtils.newRepositoryParameter(entry.name)).setEnabled(false)); - repositoryLinks.add(new BookmarkablePageLink<Void>("deleteRepository", EditRepositoryPage.class, WicketUtils.newRepositoryParameter(entry.name)).setEnabled(false)); + 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("Repository ''{0}'' deleted.", entry)); + if (dp instanceof SortableRepositoriesProvider) { + ((SortableRepositoriesProvider) dp).remove(entry); + } else { + ((RepositoriesProvider) dp).remove(entry); + } + } else { + error(MessageFormat.format("Failed to delete repository ''{0}''!", entry)); + } + } + }; + deleteLink.add(new JavascriptEventConfirmation("onclick", MessageFormat.format("Delete repository \"{0}\"?", entry))); + repositoryLinks.add(deleteLink); row.add(repositoryLinks); } else if (showOwner) { Fragment repositoryLinks = new Fragment("repositoryLinks", "repositoryOwnerLinks", this); @@ -179,16 +204,24 @@ add(fragment); } } - + private class GroupRepositoryModel extends RepositoryModel { private static final long serialVersionUID = 1L; - GroupRepositoryModel(String name) { + int count = 0; + + GroupRepositoryModel(String name, int count) { super(name, "", "", new Date(0)); + this.count = count; + } + + @Override + public String toString() { + return name + " (" + count + ")"; } } - + protected enum SortBy { repository, description, owner, date; } @@ -204,15 +237,71 @@ }; } - private class DataProvider extends SortableDataProvider<RepositoryModel> { + private class RepositoriesProvider extends ListDataProvider<RepositoryModel> { + + private static final long serialVersionUID = 1L; + + public RepositoriesProvider(List<RepositoryModel> list) { + super(list); + } + + @Override + public List<RepositoryModel> getData() { + return super.getData(); + } + + public void remove(RepositoryModel model) { + int index = getData().indexOf(model); + RepositoryModel groupModel = null; + if (index == (getData().size() - 1)) { + // last element + if (index > 0) { + // previous element is group header, then this is last + // repository in group. remove group too. + if (getData().get(index - 1) instanceof GroupRepositoryModel) { + groupModel = getData().get(index - 1); + } + } + } else if (index < (getData().size() - 1)) { + // not last element. check next element for group match. + if (getData().get(index - 1) instanceof GroupRepositoryModel && getData().get(index + 1) instanceof GroupRepositoryModel) { + // repository is sandwiched by group headers so this + // repository is the only element in the group. remove + // group. + groupModel = getData().get(index - 1); + } + } + + if (groupModel == null) { + // Find the group and decrement the count + for (int i = index; i >= 0; i--) { + if (getData().get(i) instanceof GroupRepositoryModel) { + ((GroupRepositoryModel) getData().get(i)).count--; + break; + } + } + } else { + // Remove the group header + getData().remove(groupModel); + } + + getData().remove(model); + } + } + + private class SortableRepositoriesProvider extends SortableDataProvider<RepositoryModel> { private static final long serialVersionUID = 1L; private List<RepositoryModel> list = null; - protected DataProvider(List<RepositoryModel> list) { + protected SortableRepositoriesProvider(List<RepositoryModel> list) { this.list = list; setSort(SortBy.date.name(), false); } + public void remove(RepositoryModel model) { + list.remove(model); + } + @Override public int size() { if (list == null) -- Gitblit v1.9.1