James Moger
2012-02-16 3cc6e2de29a0fa33dd585e938e1614a6dd5f9755
src/com/gitblit/wicket/panels/BranchesPanel.java
@@ -21,21 +21,26 @@
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.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.apache.wicket.model.StringResourceModel;
import org.eclipse.jgit.lib.Constants;
import org.eclipse.jgit.lib.Repository;
import com.gitblit.Constants;
import com.gitblit.SyndicationServlet;
import com.gitblit.models.RefModel;
import com.gitblit.models.RepositoryModel;
import com.gitblit.utils.JGitUtils;
import com.gitblit.utils.StringUtils;
import com.gitblit.wicket.LinkPanel;
import com.gitblit.wicket.WicketUtils;
import com.gitblit.wicket.models.RefModel;
import com.gitblit.wicket.models.RepositoryModel;
import com.gitblit.wicket.pages.BranchesPage;
import com.gitblit.wicket.pages.CommitPage;
import com.gitblit.wicket.pages.LogPage;
import com.gitblit.wicket.pages.MetricsPage;
import com.gitblit.wicket.pages.SearchPage;
import com.gitblit.wicket.pages.SummaryPage;
import com.gitblit.wicket.pages.TreePage;
@@ -43,14 +48,17 @@
   private static final long serialVersionUID = 1L;
   public BranchesPanel(String wicketId, final RepositoryModel model, Repository r, final int maxCount) {
   private final boolean hasBranches;
   public BranchesPanel(String wicketId, final RepositoryModel model, Repository r,
         final int maxCount) {
      super(wicketId);
      // branches
      List<RefModel> branches = new ArrayList<RefModel>();
      branches.addAll(JGitUtils.getLocalBranches(r, maxCount));
      branches.addAll(JGitUtils.getLocalBranches(r, false, maxCount));
      if (model.showRemoteBranches) {
         branches.addAll(JGitUtils.getRemoteBranches(r, maxCount));
         branches.addAll(JGitUtils.getRemoteBranches(r, false, maxCount));
      }
      Collections.sort(branches);
      Collections.reverse(branches);
@@ -61,32 +69,67 @@
      if (maxCount > 0) {
         // summary page
         // show branches page link
         add(new LinkPanel("branches", "title", new StringResourceModel("gb.branches", this, null), BranchesPage.class, WicketUtils.newRepositoryParameter(model.name)));
         add(new LinkPanel("branches", "title", new StringResourceModel("gb.branches", this,
               null), BranchesPage.class, WicketUtils.newRepositoryParameter(model.name)));
      } else {
         // branches page
         // show repository summary page link
         add(new LinkPanel("branches", "title", model.name, SummaryPage.class, WicketUtils.newRepositoryParameter(model.name)));
         add(new LinkPanel("branches", "title", model.name, SummaryPage.class,
               WicketUtils.newRepositoryParameter(model.name)));
      }
      ListDataProvider<RefModel> branchesDp = new ListDataProvider<RefModel>(branches);
      DataView<RefModel> branchesView = new DataView<RefModel>("branch", branchesDp) {
         private static final long serialVersionUID = 1L;
         int counter = 0;
         int counter;
         public void populateItem(final Item<RefModel> item) {
            final RefModel entry = item.getModelObject();
            item.add(WicketUtils.createDateLabel("branchDate", entry.getDate(), getTimeZone()));
            item.add(new LinkPanel("branchName", "list name", StringUtils.trimString(entry.getDisplayName(), 28), LogPage.class, WicketUtils.newObjectParameter(model.name, entry.getName())));
            item.add(new LinkPanel("branchName", "list name", StringUtils.trimString(
                  entry.displayName, 28), LogPage.class, WicketUtils.newObjectParameter(
                  model.name, entry.getName())));
            // only show branch type on the branches page
            boolean remote = entry.getName().startsWith(Constants.R_REMOTES);
            item.add(new Label("branchType", remote ? getString("gb.remote") : getString("gb.local")).setVisible(maxCount <= 0));
            String author = entry.getAuthorIdent().getName();
            LinkPanel authorLink = new LinkPanel("branchAuthor", "list", author,
                  SearchPage.class, WicketUtils.newSearchParameter(model.name,
                        entry.getName(), author, Constants.SearchType.AUTHOR));
            setPersonSearchTooltip(authorLink, author, Constants.SearchType.AUTHOR);
            item.add(authorLink);
            item.add(new BookmarkablePageLink<Void>("log", LogPage.class, WicketUtils.newObjectParameter(model.name, entry.getName())));
            item.add(new BookmarkablePageLink<Void>("tree", TreePage.class, WicketUtils.newObjectParameter(model.name, entry.getName())));
            // short message
            String shortMessage = entry.getShortMessage();
            String trimmedMessage = StringUtils.trimShortLog(shortMessage);
            LinkPanel shortlog = new LinkPanel("branchLog", "list subject", trimmedMessage,
                  CommitPage.class, WicketUtils.newObjectParameter(model.name,
                        entry.getName()));
            if (!shortMessage.equals(trimmedMessage)) {
               WicketUtils.setHtmlTooltip(shortlog, shortMessage);
            }
            item.add(shortlog);
            if (maxCount <= 0) {
               Fragment fragment = new Fragment("branchLinks", "branchPageLinks", this);
               fragment.add(new BookmarkablePageLink<Void>("log", LogPage.class, WicketUtils
                     .newObjectParameter(model.name, entry.getName())));
               fragment.add(new BookmarkablePageLink<Void>("tree", TreePage.class, WicketUtils
                     .newObjectParameter(model.name, entry.getName())));
               fragment.add(new BookmarkablePageLink<Void>("metrics", MetricsPage.class,
                     WicketUtils.newObjectParameter(model.name, entry.getName())));
               fragment.add(new ExternalLink("syndication", SyndicationServlet.asLink(
                     getRequest().getRelativePathPrefixToContextRoot(), model.name,
                     entry.getName(), 0)));
               item.add(fragment);
            } else {
               Fragment fragment = new Fragment("branchLinks", "branchPanelLinks", this);
               fragment.add(new BookmarkablePageLink<Void>("log", LogPage.class, WicketUtils
                     .newObjectParameter(model.name, entry.getName())));
               fragment.add(new BookmarkablePageLink<Void>("tree", TreePage.class, WicketUtils
                     .newObjectParameter(model.name, entry.getName())));
               item.add(fragment);
            }
            WicketUtils.setAlternatingBackground(item, counter);
            counter++;
         }
@@ -95,7 +138,17 @@
      if (branches.size() < maxCount || maxCount <= 0) {
         add(new Label("allBranches", "").setVisible(false));
      } else {
         add(new LinkPanel("allBranches", "link", new StringResourceModel("gb.allBranches", this, null), BranchesPage.class, WicketUtils.newRepositoryParameter(model.name)));
         add(new LinkPanel("allBranches", "link", new StringResourceModel("gb.allBranches",
               this, null), BranchesPage.class, WicketUtils.newRepositoryParameter(model.name)));
      }
      // We always have 1 branch
      hasBranches = (branches.size() > 1)
            || ((branches.size() == 1) && !branches.get(0).displayName
                  .equalsIgnoreCase("master"));
   }
   public BranchesPanel hideIfEmpty() {
      setVisible(hasBranches);
      return this;
   }
}