Example usage for org.apache.wicket.markup.repeater.data DataView DataView

List of usage examples for org.apache.wicket.markup.repeater.data DataView DataView

Introduction

In this page you can find the example usage for org.apache.wicket.markup.repeater.data DataView DataView.

Prototype

protected DataView(String id, IDataProvider<T> dataProvider) 

Source Link

Usage

From source file:com.gitblit.wicket.panels.HistoryPanel.java

License:Apache License

public HistoryPanel(String wicketId, final String repositoryName, final String objectId, final String path,
        Repository r, int limit, int pageOffset, boolean showRemoteRefs) {
    super(wicketId);
    boolean pageResults = limit <= 0;
    int itemsPerPage = app().settings().getInteger(Keys.web.itemsPerPage, 50);
    if (itemsPerPage <= 1) {
        itemsPerPage = 50;/*w  w w .  j ava 2  s  . co m*/
    }

    RevCommit commit = JGitUtils.getCommit(r, objectId);
    PathModel matchingPath = null;
    Map<String, SubmoduleModel> submodules = new HashMap<String, SubmoduleModel>();

    if (commit == null) {
        // commit missing
        String msg = MessageFormat.format("Failed to find history of **{0}** *{1}*", path, objectId);
        logger().error(msg + " " + repositoryName);
        add(new Label("commitHeader", MarkdownUtils.transformMarkdown(msg)).setEscapeModelStrings(false));
        add(new Label("breadcrumbs"));
    } else {
        // commit found
        List<PathChangeModel> paths = JGitUtils.getFilesInCommit(r, commit);
        add(new CommitHeaderPanel("commitHeader", repositoryName, commit));
        add(new PathBreadcrumbsPanel("breadcrumbs", repositoryName, path, objectId));
        for (SubmoduleModel model : JGitUtils.getSubmodules(r, commit.getTree())) {
            submodules.put(model.path, model);
        }

        for (PathModel p : paths) {
            if (p.path.equals(path)) {
                matchingPath = p;
                break;
            }
        }
        if (matchingPath == null) {
            // path not in commit
            // manually locate path in tree
            TreeWalk tw = new TreeWalk(r);
            tw.reset();
            tw.setRecursive(true);
            try {
                tw.addTree(commit.getTree());
                tw.setFilter(PathFilterGroup.createFromStrings(Collections.singleton(path)));
                while (tw.next()) {
                    if (tw.getPathString().equals(path)) {
                        matchingPath = new PathChangeModel(tw.getPathString(), tw.getPathString(), null, 0,
                                tw.getRawMode(0), tw.getObjectId(0).getName(), commit.getId().getName(),
                                ChangeType.MODIFY);
                    }
                }
            } catch (Exception e) {
            } finally {
                tw.close();
            }
        }
    }

    final boolean isTree = matchingPath == null ? true : matchingPath.isTree();
    final boolean isSubmodule = matchingPath == null ? false : matchingPath.isSubmodule();

    // submodule
    final String submodulePath;
    final boolean hasSubmodule;
    if (isSubmodule) {
        SubmoduleModel submodule = getSubmodule(submodules, repositoryName,
                matchingPath == null ? null : matchingPath.path);
        submodulePath = submodule.gitblitPath;
        hasSubmodule = submodule.hasSubmodule;
    } else {
        submodulePath = "";
        hasSubmodule = false;
    }

    final Map<ObjectId, List<RefModel>> allRefs = JGitUtils.getAllRefs(r, showRemoteRefs);
    List<RevCommit> commits;
    if (pageResults) {
        // Paging result set
        commits = JGitUtils.getRevLog(r, objectId, path, pageOffset * itemsPerPage, itemsPerPage);
    } else {
        // Fixed size result set
        commits = JGitUtils.getRevLog(r, objectId, path, 0, limit);
    }

    // inaccurate way to determine if there are more commits.
    // works unless commits.size() represents the exact end.
    hasMore = commits.size() >= itemsPerPage;

    final int hashLen = app().settings().getInteger(Keys.web.shortCommitIdLength, 6);
    ListDataProvider<RevCommit> dp = new ListDataProvider<RevCommit>(commits);
    DataView<RevCommit> logView = new DataView<RevCommit>("commit", dp) {
        private static final long serialVersionUID = 1L;
        int counter;

        @Override
        public void populateItem(final Item<RevCommit> item) {
            final RevCommit entry = item.getModelObject();
            final Date date = JGitUtils.getAuthorDate(entry);

            item.add(WicketUtils.createDateLabel("commitDate", date, getTimeZone(), getTimeUtils()));

            // author search link
            String author = entry.getAuthorIdent().getName();
            LinkPanel authorLink = new LinkPanel("commitAuthor", "list", author, GitSearchPage.class,
                    WicketUtils.newSearchParameter(repositoryName, null, author, Constants.SearchType.AUTHOR));
            setPersonSearchTooltip(authorLink, author, Constants.SearchType.AUTHOR);
            item.add(authorLink);

            // merge icon
            if (entry.getParentCount() > 1) {
                item.add(WicketUtils.newImage("commitIcon", "commit_merge_16x16.png"));
            } else {
                item.add(WicketUtils.newBlankImage("commitIcon"));
            }

            String shortMessage = entry.getShortMessage();
            String trimmedMessage = shortMessage;
            if (allRefs.containsKey(entry.getId())) {
                trimmedMessage = StringUtils.trimString(shortMessage, Constants.LEN_SHORTLOG_REFS);
            } else {
                trimmedMessage = StringUtils.trimString(shortMessage, Constants.LEN_SHORTLOG);
            }
            LinkPanel shortlog = new LinkPanel("commitShortMessage", "list subject", trimmedMessage,
                    CommitPage.class, WicketUtils.newObjectParameter(repositoryName, entry.getName()));
            if (!shortMessage.equals(trimmedMessage)) {
                WicketUtils.setHtmlTooltip(shortlog, shortMessage);
            }
            item.add(shortlog);

            item.add(new RefsPanel("commitRefs", repositoryName, entry, allRefs));

            if (isTree) {
                // tree
                item.add(new Label("hashLabel", getString("gb.tree") + "@"));
                LinkPanel commitHash = new LinkPanel("hashLink", null, entry.getName().substring(0, hashLen),
                        TreePage.class, WicketUtils.newObjectParameter(repositoryName, entry.getName()));
                WicketUtils.setCssClass(commitHash, "shortsha1");
                WicketUtils.setHtmlTooltip(commitHash, entry.getName());
                item.add(commitHash);

                Fragment links = new Fragment("historyLinks", "treeLinks", HistoryPanel.this);
                links.add(new BookmarkablePageLink<Void>("commitdiff", CommitDiffPage.class,
                        WicketUtils.newObjectParameter(repositoryName, entry.getName())));
                item.add(links);
            } else if (isSubmodule) {
                // submodule
                Repository repository = app().repositories().getRepository(repositoryName);
                String submoduleId = JGitUtils.getSubmoduleCommitId(repository, path, entry);
                repository.close();
                if (StringUtils.isEmpty(submoduleId)) {
                    // not a submodule at this commit, just a matching path
                    item.add(new Label("hashLabel").setVisible(false));
                    item.add(new Label("hashLink").setVisible(false));
                } else {
                    // really a submodule
                    item.add(new Label("hashLabel", submodulePath + "@"));
                    LinkPanel commitHash = new LinkPanel("hashLink", null, submoduleId.substring(0, hashLen),
                            TreePage.class, WicketUtils.newObjectParameter(submodulePath, submoduleId));
                    WicketUtils.setCssClass(commitHash, "shortsha1");
                    WicketUtils.setHtmlTooltip(commitHash, submoduleId);
                    item.add(commitHash.setEnabled(hasSubmodule));
                }
                Fragment links = new Fragment("historyLinks", "treeLinks", HistoryPanel.this);
                links.add(new BookmarkablePageLink<Void>("commitdiff", CommitDiffPage.class,
                        WicketUtils.newObjectParameter(repositoryName, entry.getName())));
                item.add(links);
            } else {
                // commit
                item.add(new Label("hashLabel", getString("gb.blob") + "@"));
                LinkPanel commitHash = new LinkPanel("hashLink", null, entry.getName().substring(0, hashLen),
                        BlobPage.class, WicketUtils.newPathParameter(repositoryName, entry.getName(), path));
                WicketUtils.setCssClass(commitHash, "sha1");
                WicketUtils.setHtmlTooltip(commitHash, entry.getName());
                item.add(commitHash);

                Fragment links = new Fragment("historyLinks", "blobLinks", HistoryPanel.this);
                links.add(new BookmarkablePageLink<Void>("commitdiff", CommitDiffPage.class,
                        WicketUtils.newObjectParameter(repositoryName, entry.getName())));
                links.add(new BookmarkablePageLink<Void>("difftocurrent", BlobDiffPage.class,
                        WicketUtils.newBlobDiffParameter(repositoryName, entry.getName(), objectId, path))
                                .setEnabled(counter > 0));
                item.add(links);
            }

            WicketUtils.setAlternatingBackground(item, counter);
            counter++;
        }
    };
    add(logView);

    // determine to show pager, more, or neither
    if (limit <= 0) {
        // no display limit
        add(new Label("moreHistory", "").setVisible(false));
    } else {
        if (pageResults) {
            // paging
            add(new Label("moreHistory", "").setVisible(false));
        } else {
            // more
            if (commits.size() == limit) {
                // show more
                add(new LinkPanel("moreHistory", "link", new StringResourceModel("gb.moreHistory", this, null),
                        HistoryPage.class, WicketUtils.newPathParameter(repositoryName, objectId, path)));
            } else {
                // no more
                add(new Label("moreHistory", "").setVisible(false));
            }
        }
    }
}

From source file:com.gitblit.wicket.panels.LogPanel.java

License:Apache License

public LogPanel(String wicketId, final String repositoryName, final String objectId, Repository r, int limit,
        int pageOffset, boolean showRemoteRefs) {
    super(wicketId);
    boolean pageResults = limit <= 0;
    int itemsPerPage = app().settings().getInteger(Keys.web.itemsPerPage, 50);
    if (itemsPerPage <= 1) {
        itemsPerPage = 50;//from   w  w  w  .jav a  2s.c o m
    }

    final Map<ObjectId, List<RefModel>> allRefs = JGitUtils.getAllRefs(r, showRemoteRefs);
    List<RevCommit> commits;
    if (pageResults) {
        // Paging result set
        commits = JGitUtils.getRevLog(r, objectId, pageOffset * itemsPerPage, itemsPerPage);
    } else {
        // Fixed size result set
        commits = JGitUtils.getRevLog(r, objectId, 0, limit);
    }

    // inaccurate way to determine if there are more commits.
    // works unless commits.size() represents the exact end.
    hasMore = commits.size() >= itemsPerPage;

    final String baseUrl = WicketUtils.getGitblitURL(getRequest());
    final boolean showGraph = app().settings().getBoolean(Keys.web.showBranchGraph, true);

    MarkupContainer graph = new WebMarkupContainer("graph");
    add(graph);
    if (!showGraph || commits.isEmpty()) {
        // not showing or nothing to show
        graph.setVisible(false);
    } else {
        // set the rowspan on the graph row and +1 for the graph row itself
        graph.add(new AttributeModifier("rowspan", "" + (commits.size() + 1)));
        graph.add(new ExternalImage("image",
                BranchGraphServlet.asLink(baseUrl, repositoryName, commits.get(0).name(), commits.size())));
    }

    // header
    if (pageResults) {
        // shortlog page
        add(new Label("header", objectId));
    } else {
        // summary page
        // show shortlog page link
        add(new LinkPanel("header", "title", objectId, LogPage.class,
                WicketUtils.newRepositoryParameter(repositoryName)));
    }

    final int hashLen = app().settings().getInteger(Keys.web.shortCommitIdLength, 6);
    ListDataProvider<RevCommit> dp = new ListDataProvider<RevCommit>(commits);
    DataView<RevCommit> logView = new DataView<RevCommit>("commit", dp) {
        private static final long serialVersionUID = 1L;
        int counter;

        @Override
        public void populateItem(final Item<RevCommit> item) {
            final RevCommit entry = item.getModelObject();
            final Date date = JGitUtils.getAuthorDate(entry);
            final boolean isMerge = entry.getParentCount() > 1;

            item.add(WicketUtils.createDateLabel("commitDate", date, getTimeZone(), getTimeUtils()));

            // author search link
            String author = entry.getAuthorIdent().getName();
            LinkPanel authorLink = new LinkPanel("commitAuthor", "list", author, GitSearchPage.class,
                    WicketUtils.newSearchParameter(repositoryName, null, author, Constants.SearchType.AUTHOR));
            setPersonSearchTooltip(authorLink, author, Constants.SearchType.AUTHOR);
            item.add(authorLink);

            // merge icon
            if (isMerge) {
                item.add(WicketUtils.newImage("commitIcon", "commit_merge_16x16.png"));
            } else {
                item.add(WicketUtils.newBlankImage("commitIcon"));
            }

            // short message
            String shortMessage = entry.getShortMessage();
            String trimmedMessage = shortMessage;
            if (allRefs.containsKey(entry.getId())) {
                trimmedMessage = StringUtils.trimString(shortMessage, Constants.LEN_SHORTLOG_REFS);
            } else {
                trimmedMessage = StringUtils.trimString(shortMessage, Constants.LEN_SHORTLOG);
            }
            LinkPanel shortlog = new LinkPanel("commitShortMessage", "list subject" + (isMerge ? " merge" : ""),
                    trimmedMessage, CommitPage.class,
                    WicketUtils.newObjectParameter(repositoryName, entry.getName()));
            if (!shortMessage.equals(trimmedMessage)) {
                WicketUtils.setHtmlTooltip(shortlog, shortMessage);
            }
            item.add(shortlog);

            item.add(new RefsPanel("commitRefs", repositoryName, entry, allRefs));

            // commit hash link
            LinkPanel commitHash = new LinkPanel("hashLink", null, entry.getName().substring(0, hashLen),
                    CommitPage.class, WicketUtils.newObjectParameter(repositoryName, entry.getName()));
            WicketUtils.setCssClass(commitHash, "shortsha1");
            WicketUtils.setHtmlTooltip(commitHash, entry.getName());
            item.add(commitHash);

            item.add(new BookmarkablePageLink<Void>("diff", CommitDiffPage.class,
                    WicketUtils.newObjectParameter(repositoryName, entry.getName()))
                            .setEnabled(entry.getParentCount() > 0));
            item.add(new BookmarkablePageLink<Void>("tree", TreePage.class,
                    WicketUtils.newObjectParameter(repositoryName, entry.getName())));

            String clazz = counter % 2 == 0 ? "light commit" : "dark commit";
            WicketUtils.setCssClass(item, clazz);

            counter++;
        }
    };
    add(logView);

    // determine to show pager, more, or neither
    if (limit <= 0) {
        // no display limit
        add(new Label("moreLogs", "").setVisible(false));
    } else {
        if (pageResults) {
            // paging
            add(new Label("moreLogs", "").setVisible(false));
        } else {
            // more
            if (commits.size() == limit) {
                // show more
                add(new LinkPanel("moreLogs", "link", new StringResourceModel("gb.moreLogs", this, null),
                        LogPage.class, WicketUtils.newRepositoryParameter(repositoryName)));
            } else {
                // no more
                add(new Label("moreLogs", "").setVisible(false));
            }
        }
    }
}

From source file:com.gitblit.wicket.panels.NavigationPanel.java

License:Apache License

public NavigationPanel(String id, final Class<? extends BasePage> pageClass, List<NavLink> navLinks) {
    super(id);/*from   w  w w  . jav a2 s. c  o m*/

    ListDataProvider<NavLink> refsDp = new ListDataProvider<NavLink>(navLinks);
    DataView<NavLink> linksView = new DataView<NavLink>("navLink", refsDp) {
        private static final long serialVersionUID = 1L;

        @Override
        public void populateItem(final Item<NavLink> item) {
            NavLink navLink = item.getModelObject();
            String linkText = navLink.translationKey;
            try {
                // try to lookup translation key
                linkText = getString(navLink.translationKey);
            } catch (Exception e) {
            }

            if (navLink.hiddenPhone) {
                WicketUtils.setCssClass(item, "hidden-phone");
            }
            if (navLink instanceof ExternalNavLink) {
                // other link
                ExternalNavLink link = (ExternalNavLink) navLink;
                Component c = new LinkPanel("link", null, linkText, link.url);
                c.setRenderBodyOnly(true);
                item.add(c);
            } else if (navLink instanceof DropDownPageMenuNavLink) {
                // drop down menu
                DropDownPageMenuNavLink reg = (DropDownPageMenuNavLink) navLink;
                Component c = new DropDownMenu("link", linkText, reg);
                c.setRenderBodyOnly(true);
                item.add(c);
                WicketUtils.setCssClass(item, "dropdown");
            } else if (navLink instanceof DropDownMenuNavLink) {
                // drop down menu
                DropDownMenuNavLink reg = (DropDownMenuNavLink) navLink;
                Component c = new DropDownMenu("link", linkText, reg);
                c.setRenderBodyOnly(true);
                item.add(c);
                WicketUtils.setCssClass(item, "dropdown");
            } else if (navLink instanceof PageNavLink) {
                PageNavLink reg = (PageNavLink) navLink;
                // standard page link
                Component c = new LinkPanel("link", null, linkText, reg.pageClass, reg.params);
                c.setRenderBodyOnly(true);
                if (reg.pageClass.equals(pageClass)) {
                    WicketUtils.setCssClass(item, "active");
                }
                item.add(c);
            }
        }
    };
    add(linksView);
}

From source file:com.gitblit.wicket.panels.PagerPanel.java

License:Apache License

public PagerPanel(String wicketId, final int currentPage, final int totalPages,
        final Class<? extends BasePage> pageClass, final PageParameters baseParams) {
    super(wicketId);
    List<PageObject> pages = new ArrayList<PageObject>();
    int[] deltas;
    if (currentPage == 1) {
        // [1], 2, 3, 4, 5
        deltas = new int[] { 0, 1, 2, 3, 4 };
    } else if (currentPage == 2) {
        // 1, [2], 3, 4, 5
        deltas = new int[] { -1, 0, 1, 2, 3 };
    } else {/*from ww  w  .j a v  a 2 s  .  co m*/
        // 1, 2, [3], 4, 5
        deltas = new int[] { -2, -1, 0, 1, 2 };
    }

    if (totalPages > 0 && currentPage > 1) {
        pages.add(new PageObject("\u2190", currentPage - 1));
    }
    for (int delta : deltas) {
        int page = currentPage + delta;
        if (page > 0 && page <= totalPages) {
            pages.add(new PageObject("" + page, page));
        }
    }
    if (totalPages > 0 && currentPage < totalPages) {
        pages.add(new PageObject("\u2192", currentPage + 1));
    }

    ListDataProvider<PageObject> pagesProvider = new ListDataProvider<PageObject>(pages);
    final DataView<PageObject> pagesView = new DataView<PageObject>("page", pagesProvider) {
        private static final long serialVersionUID = 1L;

        @Override
        public void populateItem(final Item<PageObject> item) {
            PageObject pageItem = item.getModelObject();
            PageParameters pageParams = new PageParameters(baseParams);
            pageParams.add("pg", pageItem.page);
            LinkPanel link = new LinkPanel("pageLink", null, pageItem.text, pageClass, pageParams);
            link.setRenderBodyOnly(true);
            item.add(link);
            if (pageItem.page == currentPage || pageItem.page < 1 || pageItem.page > totalPages) {
                WicketUtils.setCssClass(item, "disabled");
                link.setEnabled(false);
            }
        }
    };
    add(pagesView);
}

From source file:com.gitblit.wicket.panels.PathBreadcrumbsPanel.java

License:Apache License

public PathBreadcrumbsPanel(String id, final String repositoryName, String pathName, final String objectId) {
    super(id);//from  w w  w .j  a  va 2  s  .com
    List<BreadCrumb> crumbs = new ArrayList<BreadCrumb>();
    crumbs.add(new BreadCrumb("[" + repositoryName + "]", ROOT, false));

    if (pathName != null && pathName.length() > 0) {
        String[] paths = pathName.split("/");
        StringBuilder sb = new StringBuilder();

        for (int i = 0; i < paths.length; i++) {
            String path = paths[i];
            sb.append(path);
            crumbs.add(new BreadCrumb(path, sb.toString(), i == (paths.length - 1)));
            sb.append('/');
        }
    }

    ListDataProvider<BreadCrumb> crumbsDp = new ListDataProvider<BreadCrumb>(crumbs);
    DataView<BreadCrumb> pathsView = new DataView<BreadCrumb>("path", crumbsDp) {
        private static final long serialVersionUID = 1L;

        @Override
        public void populateItem(final Item<BreadCrumb> item) {
            final BreadCrumb entry = item.getModelObject();
            String path = entry.path;
            if (path.equals(ROOT)) {
                path = null;
            }
            if (entry.isLeaf) {
                item.add(new Label("pathLink", entry.name));
                item.add(new Label("pathSeparator", "").setVisible(false));
            } else {
                item.add(new LinkPanel("pathLink", null, entry.name, TreePage.class,
                        WicketUtils.newPathParameter(repositoryName, objectId, path)));
                item.add(new Label("pathSeparator", "/"));
            }
        }
    };
    add(pathsView);
}

From source file:com.gitblit.wicket.panels.PushesPanel.java

License:Apache License

protected void setup(List<PushLogEntry> pushes, final boolean showRepo) {
    final int hashLen = GitBlit.getInteger(Keys.web.shortCommitIdLength, 6);

    String dateFormat = GitBlit.getString(Keys.web.datestampLongFormat, "EEEE, MMMM d, yyyy");
    final TimeZone timezone = getTimeZone();
    final DateFormat df = new SimpleDateFormat(dateFormat);
    df.setTimeZone(timezone);/*from   w  w  w .  j a v a  2 s. com*/
    final Calendar cal = Calendar.getInstance(timezone);

    ListDataProvider<PushLogEntry> dp = new ListDataProvider<PushLogEntry>(pushes);
    DataView<PushLogEntry> pushView = new DataView<PushLogEntry>("push", dp) {
        private static final long serialVersionUID = 1L;

        public void populateItem(final Item<PushLogEntry> pushItem) {
            final PushLogEntry push = pushItem.getModelObject();
            String fullRefName = push.getChangedRefs().get(0);
            String shortRefName = fullRefName;
            boolean isTag = false;
            boolean isPull = false;
            if (shortRefName.startsWith(Constants.R_HEADS)) {
                shortRefName = shortRefName.substring(Constants.R_HEADS.length());
            } else if (shortRefName.startsWith(Constants.R_TAGS)) {
                shortRefName = shortRefName.substring(Constants.R_TAGS.length());
                isTag = true;
            } else if (shortRefName.startsWith(Constants.R_PULL)) {
                shortRefName = "#" + shortRefName.substring(Constants.R_PULL.length());
                if (shortRefName.endsWith("/head")) {
                    // strip pull request head from name 
                    shortRefName = shortRefName.substring(0, shortRefName.length() - "/head".length());
                }
                isPull = true;
            }
            boolean isDigest = push instanceof DailyLogEntry;

            String fuzzydate;
            TimeUtils tu = getTimeUtils();
            Date pushDate = push.date;
            if (TimeUtils.isToday(pushDate, timezone)) {
                fuzzydate = tu.today();
            } else if (TimeUtils.isYesterday(pushDate, timezone)) {
                fuzzydate = tu.yesterday();
            } else {
                // calculate a fuzzy time ago date
                cal.setTime(pushDate);
                cal.set(Calendar.HOUR_OF_DAY, 0);
                cal.set(Calendar.MINUTE, 0);
                cal.set(Calendar.SECOND, 0);
                cal.set(Calendar.MILLISECOND, 0);
                pushDate = cal.getTime();
                fuzzydate = getTimeUtils().timeAgo(pushDate);
            }
            pushItem.add(new Label("whenPushed", fuzzydate + ", " + df.format(pushDate)));

            Label pushIcon = new Label("pushIcon");
            if (showRepo) {
                // if we are showing the repo, we are showing multiple
                // repos.  use the repository hash color to differentiate
                // the icon.
                String color = StringUtils.getColor(StringUtils.stripDotGit(push.repository));
                WicketUtils.setCssStyle(pushIcon, "color: " + color);
            }
            if (isTag) {
                WicketUtils.setCssClass(pushIcon, "iconic-tag");
            } else if (isPull) {
                WicketUtils.setCssClass(pushIcon, "iconic-share");
            } else if (isDigest) {
                WicketUtils.setCssClass(pushIcon, "iconic-loop");
            } else {
                WicketUtils.setCssClass(pushIcon, "iconic-upload");
            }
            pushItem.add(pushIcon);

            if (isDigest && !isTag) {
                pushItem.add(new Label("whoPushed").setVisible(false));
            } else {
                if (push.user.username.equals(push.user.emailAddress)
                        && push.user.emailAddress.indexOf('@') > -1) {
                    // username is an email address - 1.2.1 push log bug
                    pushItem.add(new Label("whoPushed", push.user.getDisplayName()));
                } else {
                    // link to user account page
                    pushItem.add(new LinkPanel("whoPushed", null, push.user.getDisplayName(), UserPage.class,
                            WicketUtils.newUsernameParameter(push.user.username)));
                }
            }

            String preposition = "gb.of";
            boolean isDelete = false;
            boolean isRewind = false;
            String what;
            String by = null;
            switch (push.getChangeType(fullRefName)) {
            case CREATE:
                if (isTag) {
                    // new tag
                    if (isDigest) {
                        what = getString("gb.createdNewTag");
                        preposition = "gb.in";
                    } else {
                        what = getString("gb.pushedNewTag");
                        preposition = "gb.to";
                    }
                } else if (isPull) {
                    // merged pull request
                    what = getString("gb.mergedPullRequest");
                    preposition = "gb.in";
                } else {
                    // new branch
                    if (isDigest) {
                        what = getString("gb.createdNewBranch");
                        preposition = "gb.in";
                    } else {
                        what = getString("gb.pushedNewBranch");
                        preposition = "gb.to";
                    }
                }
                break;
            case DELETE:
                isDelete = true;
                if (isTag) {
                    what = getString("gb.deletedTag");
                }
                if (isPull) {
                    what = getString("gb.deletedTag");
                } else {
                    what = getString("gb.deletedBranch");
                }
                preposition = "gb.from";
                break;
            case UPDATE_NONFASTFORWARD:
                isRewind = true;
            default:
                if (isDigest) {
                    what = MessageFormat.format(
                            push.getCommitCount() > 1 ? getString("gb.commitsTo") : getString("gb.oneCommitTo"),
                            push.getCommitCount());
                } else {
                    what = MessageFormat.format(push.getCommitCount() > 1 ? getString("gb.pushedNCommitsTo")
                            : getString("gb.pushedOneCommitTo"), push.getCommitCount());
                }

                if (push.getAuthorCount() == 1) {
                    by = MessageFormat.format(getString("gb.byOneAuthor"), push.getAuthorIdent().getName());
                } else {
                    by = MessageFormat.format(getString("gb.byNAuthors"), push.getAuthorCount());
                }
                break;
            }
            pushItem.add(new Label("whatPushed", what));
            pushItem.add(new Label("byAuthors", by).setVisible(!StringUtils.isEmpty(by)));

            pushItem.add(new Label("refRewind", getString("gb.rewind")).setVisible(isRewind));

            if (isDelete) {
                // can't link to deleted ref
                pushItem.add(new Label("refPushed", shortRefName));
            } else if (isTag) {
                // link to tag
                pushItem.add(new LinkPanel("refPushed", null, shortRefName, TagPage.class,
                        WicketUtils.newObjectParameter(push.repository, fullRefName)));
            } else if (isPull) {
                // link to pull request
                pushItem.add(new LinkPanel("refPushed", null, shortRefName, TagPage.class,
                        WicketUtils.newObjectParameter(push.repository, fullRefName)));
            } else {
                // link to tree
                pushItem.add(new LinkPanel("refPushed", null, shortRefName, TreePage.class,
                        WicketUtils.newObjectParameter(push.repository, fullRefName)));
            }

            if (showRepo) {
                // to/from/etc
                pushItem.add(new Label("repoPreposition", getString(preposition)));

                String repoName = StringUtils.stripDotGit(push.repository);
                pushItem.add(new LinkPanel("repoPushed", null, repoName, SummaryPage.class,
                        WicketUtils.newRepositoryParameter(push.repository)));
            } else {
                // do not display repository name if we are viewing the push
                // log of a repository.
                pushItem.add(new Label("repoPreposition").setVisible(false));
                pushItem.add(new Label("repoPushed").setVisible(false));
            }

            int maxCommitCount = 5;
            List<RepositoryCommit> commits = push.getCommits();
            if (commits.size() > maxCommitCount) {
                commits = new ArrayList<RepositoryCommit>(commits.subList(0, maxCommitCount));
            }

            // compare link
            String compareLinkText = null;
            if ((push.getCommitCount() <= maxCommitCount) && (push.getCommitCount() > 1)) {
                compareLinkText = MessageFormat.format(getString("gb.viewComparison"), commits.size());
            } else if (push.getCommitCount() > maxCommitCount) {
                int diff = push.getCommitCount() - maxCommitCount;
                compareLinkText = MessageFormat
                        .format(diff > 1 ? getString("gb.nMoreCommits") : getString("gb.oneMoreCommit"), diff);
            }
            if (StringUtils.isEmpty(compareLinkText)) {
                pushItem.add(new Label("compareLink").setVisible(false));
            } else {
                String endRangeId = push.getNewId(fullRefName);
                String startRangeId = push.getOldId(fullRefName);
                pushItem.add(new LinkPanel("compareLink", null, compareLinkText, ComparePage.class,
                        WicketUtils.newRangeParameter(push.repository, startRangeId, endRangeId)));
            }

            final boolean showSwatch = showRepo && GitBlit.getBoolean(Keys.web.repositoryListSwatches, true);

            ListDataProvider<RepositoryCommit> cdp = new ListDataProvider<RepositoryCommit>(commits);
            DataView<RepositoryCommit> commitsView = new DataView<RepositoryCommit>("commit", cdp) {
                private static final long serialVersionUID = 1L;

                public void populateItem(final Item<RepositoryCommit> commitItem) {
                    final RepositoryCommit commit = commitItem.getModelObject();

                    // author gravatar
                    commitItem.add(new GravatarImage("commitAuthor", commit.getAuthorIdent().getName(),
                            commit.getAuthorIdent().getEmailAddress(), null, 16, false, false));

                    // merge icon
                    if (commit.getParentCount() > 1) {
                        commitItem.add(WicketUtils.newImage("commitIcon", "commit_merge_16x16.png"));
                    } else {
                        commitItem.add(WicketUtils.newBlankImage("commitIcon"));
                    }

                    // short message
                    String shortMessage = commit.getShortMessage();
                    String trimmedMessage = shortMessage;
                    if (commit.getRefs() != null && commit.getRefs().size() > 0) {
                        trimmedMessage = StringUtils.trimString(shortMessage, Constants.LEN_SHORTLOG_REFS);
                    } else {
                        trimmedMessage = StringUtils.trimString(shortMessage, Constants.LEN_SHORTLOG);
                    }
                    LinkPanel shortlog = new LinkPanel("commitShortMessage", "list", trimmedMessage,
                            CommitPage.class,
                            WicketUtils.newObjectParameter(push.repository, commit.getName()));
                    if (!shortMessage.equals(trimmedMessage)) {
                        WicketUtils.setHtmlTooltip(shortlog, shortMessage);
                    }
                    commitItem.add(shortlog);

                    // commit hash link
                    LinkPanel commitHash = new LinkPanel("hashLink", null,
                            commit.getName().substring(0, hashLen), CommitPage.class,
                            WicketUtils.newObjectParameter(push.repository, commit.getName()));
                    WicketUtils.setCssClass(commitHash, "shortsha1");
                    WicketUtils.setHtmlTooltip(commitHash, commit.getName());
                    commitItem.add(commitHash);

                    if (showSwatch) {
                        // set repository color
                        String color = StringUtils.getColor(StringUtils.stripDotGit(push.repository));
                        WicketUtils.setCssStyle(commitItem,
                                MessageFormat.format("border-left: 2px solid {0};", color));
                    }
                }
            };

            pushItem.add(commitsView);
        }
    };

    add(pushView);
}

From source file:com.gitblit.wicket.panels.ReflogPanel.java

License:Apache License

protected void setup(List<RefLogEntry> changes) {

    ListDataProvider<RefLogEntry> dp = new ListDataProvider<RefLogEntry>(changes);
    DataView<RefLogEntry> changeView = new DataView<RefLogEntry>("change", dp) {
        private static final long serialVersionUID = 1L;

        @Override/*from  ww w .ja v a2s  . com*/
        public void populateItem(final Item<RefLogEntry> changeItem) {
            final RefLogEntry change = changeItem.getModelObject();

            String dateFormat = app().settings().getString(Keys.web.datetimestampLongFormat,
                    "EEEE, MMMM d, yyyy HH:mm Z");
            TimeZone timezone = getTimeZone();
            DateFormat df = new SimpleDateFormat(dateFormat);
            df.setTimeZone(timezone);
            Calendar cal = Calendar.getInstance(timezone);

            String fullRefName = change.getChangedRefs().get(0);
            String shortRefName = fullRefName;
            String ticketId = null;
            boolean isTag = false;
            boolean isTicket = false;
            if (shortRefName.startsWith(Constants.R_TICKET)) {
                ticketId = fullRefName.substring(Constants.R_TICKET.length());
                shortRefName = MessageFormat.format(getString("gb.ticketN"), ticketId);
                isTicket = true;
            } else if (shortRefName.startsWith(Constants.R_HEADS)) {
                shortRefName = shortRefName.substring(Constants.R_HEADS.length());
            } else if (shortRefName.startsWith(Constants.R_TAGS)) {
                shortRefName = shortRefName.substring(Constants.R_TAGS.length());
                isTag = true;
            }

            String fuzzydate;
            TimeUtils tu = getTimeUtils();
            Date changeDate = change.date;
            if (TimeUtils.isToday(changeDate, timezone)) {
                fuzzydate = tu.today();
            } else if (TimeUtils.isYesterday(changeDate, timezone)) {
                fuzzydate = tu.yesterday();
            } else {
                // calculate a fuzzy time ago date
                cal.setTime(changeDate);
                cal.set(Calendar.HOUR_OF_DAY, 0);
                cal.set(Calendar.MINUTE, 0);
                cal.set(Calendar.SECOND, 0);
                cal.set(Calendar.MILLISECOND, 0);
                Date date = cal.getTime();
                fuzzydate = getTimeUtils().timeAgo(date);
            }
            changeItem.add(new Label("whenChanged", fuzzydate + ", " + df.format(changeDate)));

            Label changeIcon = new Label("changeIcon");
            if (Type.DELETE.equals(change.getChangeType(fullRefName))) {
                WicketUtils.setCssClass(changeIcon, "iconic-trash-stroke");
            } else if (isTag) {
                WicketUtils.setCssClass(changeIcon, "iconic-tag");
            } else if (isTicket) {
                WicketUtils.setCssClass(changeIcon, "fa fa-ticket");
            } else {
                WicketUtils.setCssClass(changeIcon, "iconic-upload");
            }
            changeItem.add(changeIcon);

            if (change.user.username.equals(change.user.emailAddress)
                    && change.user.emailAddress.indexOf('@') > -1) {
                // username is an email address - 1.2.1 push log bug
                changeItem.add(new Label("whoChanged", change.user.getDisplayName()));
            } else if (change.user.username.equals(UserModel.ANONYMOUS.username)) {
                // anonymous change
                changeItem.add(new Label("whoChanged", getString("gb.anonymousUser")));
            } else {
                // link to user account page
                changeItem.add(new LinkPanel("whoChanged", null, change.user.getDisplayName(), UserPage.class,
                        WicketUtils.newUsernameParameter(change.user.username)));
            }

            boolean isDelete = false;
            boolean isRewind = false;
            String what;
            String by = null;
            switch (change.getChangeType(fullRefName)) {
            case CREATE:
                if (isTag) {
                    // new tag
                    what = getString("gb.pushedNewTag");
                } else {
                    // new branch
                    what = getString("gb.pushedNewBranch");
                }
                break;
            case DELETE:
                isDelete = true;
                if (isTag) {
                    what = getString("gb.deletedTag");
                } else {
                    what = getString("gb.deletedBranch");
                }
                break;
            case UPDATE_NONFASTFORWARD:
                isRewind = true;
            default:
                what = MessageFormat.format(change.getCommitCount() > 1 ? getString("gb.pushedNCommitsTo")
                        : getString("gb.pushedOneCommitTo"), change.getCommitCount());

                if (change.getAuthorCount() == 1) {
                    by = MessageFormat.format(getString("gb.byOneAuthor"), change.getAuthorIdent().getName());
                } else {
                    by = MessageFormat.format(getString("gb.byNAuthors"), change.getAuthorCount());
                }
                break;
            }
            changeItem.add(new Label("whatChanged", what));
            changeItem.add(new Label("byAuthors", by).setVisible(!StringUtils.isEmpty(by)));
            changeItem.add(new Label("refRewind", getString("gb.rewind")).setVisible(isRewind));

            if (isDelete) {
                // can't link to deleted ref
                changeItem.add(new Label("refChanged", shortRefName));
            } else if (isTag) {
                // link to tag
                changeItem.add(new LinkPanel("refChanged", null, shortRefName, TagPage.class,
                        WicketUtils.newObjectParameter(change.repository, fullRefName)));
            } else if (isTicket) {
                // link to ticket
                changeItem.add(new LinkPanel("refChanged", null, shortRefName, TicketsPage.class,
                        WicketUtils.newObjectParameter(change.repository, ticketId)));
            } else {
                // link to tree
                changeItem.add(new LinkPanel("refChanged", null, shortRefName, TreePage.class,
                        WicketUtils.newObjectParameter(change.repository, fullRefName)));
            }

            int maxCommitCount = 5;
            List<RepositoryCommit> commits = change.getCommits();
            if (commits.size() > maxCommitCount) {
                commits = new ArrayList<RepositoryCommit>(commits.subList(0, maxCommitCount));
            }

            // compare link
            String compareLinkText = null;
            if ((change.getCommitCount() <= maxCommitCount) && (change.getCommitCount() > 1)) {
                compareLinkText = MessageFormat.format(getString("gb.viewComparison"), commits.size());
            } else if (change.getCommitCount() > maxCommitCount) {
                int diff = change.getCommitCount() - maxCommitCount;
                compareLinkText = MessageFormat
                        .format(diff > 1 ? getString("gb.nMoreCommits") : getString("gb.oneMoreCommit"), diff);
            }
            if (StringUtils.isEmpty(compareLinkText)) {
                changeItem.add(new Label("compareLink").setVisible(false));
            } else {
                String endRangeId = change.getNewId(fullRefName);
                String startRangeId = change.getOldId(fullRefName);
                changeItem.add(new LinkPanel("compareLink", null, compareLinkText, ComparePage.class,
                        WicketUtils.newRangeParameter(change.repository, startRangeId, endRangeId)));
            }

            ListDataProvider<RepositoryCommit> cdp = new ListDataProvider<RepositoryCommit>(commits);
            DataView<RepositoryCommit> commitsView = new DataView<RepositoryCommit>("commit", cdp) {
                private static final long serialVersionUID = 1L;

                @Override
                public void populateItem(final Item<RepositoryCommit> commitItem) {
                    final RepositoryCommit commit = commitItem.getModelObject();

                    // author gravatar
                    commitItem.add(new AvatarImage("commitAuthor", commit.getAuthorIdent(), null, 16, false));

                    // merge icon
                    if (commit.getParentCount() > 1) {
                        commitItem.add(WicketUtils.newImage("commitIcon", "commit_merge_16x16.png"));
                    } else {
                        commitItem.add(WicketUtils.newBlankImage("commitIcon"));
                    }

                    // short message
                    String shortMessage = commit.getShortMessage();
                    String trimmedMessage = shortMessage;
                    if (commit.getRefs() != null && commit.getRefs().size() > 0) {
                        trimmedMessage = StringUtils.trimString(shortMessage, Constants.LEN_SHORTLOG_REFS);
                    } else {
                        trimmedMessage = StringUtils.trimString(shortMessage, Constants.LEN_SHORTLOG);
                    }
                    LinkPanel shortlog = new LinkPanel("commitShortMessage", "list", trimmedMessage,
                            CommitPage.class,
                            WicketUtils.newObjectParameter(change.repository, commit.getName()));
                    if (!shortMessage.equals(trimmedMessage)) {
                        WicketUtils.setHtmlTooltip(shortlog, shortMessage);
                    }
                    commitItem.add(shortlog);

                    // commit hash link
                    int hashLen = app().settings().getInteger(Keys.web.shortCommitIdLength, 6);
                    LinkPanel commitHash = new LinkPanel("hashLink", null,
                            commit.getName().substring(0, hashLen), CommitPage.class,
                            WicketUtils.newObjectParameter(change.repository, commit.getName()));
                    WicketUtils.setCssClass(commitHash, "shortsha1");
                    WicketUtils.setHtmlTooltip(commitHash, commit.getName());
                    commitItem.add(commitHash);
                }
            };

            changeItem.add(commitsView);
        }
    };

    add(changeView);
}

From source file:com.gitblit.wicket.panels.RefsPanel.java

License:Apache License

public RefsPanel(String id, final String repositoryName, List<RefModel> refs) {
    super(id);//  w  w  w . j  a  va  2 s . c o m
    if (refs == null) {
        refs = new ArrayList<RefModel>();
    }
    Collections.sort(refs, new Comparator<RefModel>() {
        @Override
        public int compare(RefModel o1, RefModel o2) {
            // sort remote heads last, otherwise sort by name
            // this is so we can insert a break on the refs panel
            // [head][branch][branch][tag][tag]
            // [remote][remote][remote]
            boolean remote1 = o1.displayName.startsWith(Constants.R_REMOTES);
            boolean remote2 = o2.displayName.startsWith(Constants.R_REMOTES);
            if (remote1 && remote2) {
                // both are remote heads, sort by name
                return o1.displayName.compareTo(o2.displayName);
            }
            if (remote1) {
                // o1 is remote, o2 comes first
                return 1;
            }
            if (remote2) {
                // remote is o2, o1 comes first
                return -1;
            }
            // standard sort
            return o1.displayName.compareTo(o2.displayName);
        }
    });

    // count remote and determine if we should insert a break
    int remoteCount = 0;
    for (RefModel ref : refs) {
        if (ref.displayName.startsWith(Constants.R_REMOTES)) {
            remoteCount++;
        }
    }
    final boolean shouldBreak = remoteCount < refs.size();
    RepositoryModel repository = app().repositories().getRepositoryModel(repositoryName);
    final boolean hasTickets = app().tickets().hasTickets(repository);

    ListDataProvider<RefModel> refsDp = new ListDataProvider<RefModel>(refs);
    DataView<RefModel> refsView = new DataView<RefModel>("ref", refsDp) {
        private static final long serialVersionUID = 1L;
        private boolean alreadyInsertedBreak = !shouldBreak;

        @Override
        public void populateItem(final Item<RefModel> item) {
            RefModel entry = item.getModelObject();
            String name = entry.displayName;
            String objectid = entry.getReferencedObjectId().getName();
            boolean breakLine = false;
            Class<? extends WebPage> linkClass = CommitPage.class;
            String cssClass = "";
            String tooltip = "";
            if (name.startsWith(Constants.R_TICKET)) {
                // Gitblit ticket ref
                objectid = name.substring(Constants.R_TICKET.length());
                name = name.substring(Constants.R_HEADS.length());
                linkClass = TicketsPage.class;
                cssClass = "localBranch";
            } else if (name.startsWith(Constants.R_HEADS)) {
                // local branch
                linkClass = LogPage.class;
                name = name.substring(Constants.R_HEADS.length());
                cssClass = "localBranch";
            } else if (name.equals(Constants.HEAD)) {
                // local head
                linkClass = LogPage.class;
                cssClass = "headRef";
            } else if (name.startsWith(Constants.R_CHANGES)) {
                // Gitblit change ref
                name = name.substring(Constants.R_CHANGES.length());
                // strip leading nn/ from nn/#####nn/ps = #####nn-ps
                name = name.substring(name.indexOf('/') + 1).replace('/', '-');
                String[] values = name.split("-");
                // Gerrit change
                tooltip = MessageFormat.format(getString("gb.reviewPatchset"), values[0], values[1]);
                cssClass = "otherRef";
            } else if (name.startsWith(Constants.R_TICKETS_PATCHSETS)) {
                // Gitblit patchset ref
                name = name.substring(Constants.R_TICKETS_PATCHSETS.length());
                // strip leading nn/ from nn/#####nn/ps = #####nn-ps
                name = name.substring(name.indexOf('/') + 1).replace('/', '-');
                String[] values = name.split("-");
                tooltip = MessageFormat.format(getString("gb.ticketPatchset"), values[0], values[1]);
                linkClass = LogPage.class;
                cssClass = "otherRef";
            } else if (name.startsWith(Constants.R_PULL)) {
                // Pull Request ref
                String num = name.substring(Constants.R_PULL.length());
                if (num.endsWith("/head")) {
                    // strip pull request head from name
                    num = num.substring(0, num.length() - "/head".length());
                }
                name = "pr #" + num;
                tooltip = "pull request #" + num;
                cssClass = "pullRef";
            } else if (name.startsWith(Constants.R_REMOTES)) {
                // remote branch
                linkClass = LogPage.class;
                name = name.substring(Constants.R_REMOTES.length());
                cssClass = "remoteBranch";
                if (!alreadyInsertedBreak) {
                    breakLine = true;
                    alreadyInsertedBreak = true;
                }
            } else if (name.startsWith(Constants.R_TAGS)) {
                // tag
                if (entry.isAnnotatedTag()) {
                    linkClass = TagPage.class;
                    objectid = entry.getObjectId().getName();
                } else {
                    linkClass = CommitPage.class;
                    objectid = entry.getReferencedObjectId().getName();
                }
                name = name.substring(Constants.R_TAGS.length());
                cssClass = "tagRef";
            } else if (name.startsWith(Constants.R_NOTES)) {
                // codereview refs
                linkClass = CommitPage.class;
                cssClass = "otherRef";
            } else if (name.startsWith(com.gitblit.Constants.R_META)) {
                // internal meta refs
                linkClass = LogPage.class;
                cssClass = "otherRef";
                name = name.substring(com.gitblit.Constants.R_META.length());
            }

            Component c = new LinkPanel("refName", null, name, linkClass,
                    WicketUtils.newObjectParameter(repositoryName, objectid));
            WicketUtils.setCssClass(c, cssClass);
            if (StringUtils.isEmpty(tooltip)) {
                WicketUtils.setHtmlTooltip(c, name);
            } else {
                WicketUtils.setHtmlTooltip(c, tooltip);
            }
            item.add(c);
            Label lb = new Label("lineBreak", "<br/>");
            lb.setVisible(breakLine);
            lb.setRenderBodyOnly(true);
            item.add(lb.setEscapeModelStrings(false));
            item.setRenderBodyOnly(true);
        }
    };
    add(refsView);
}

From source file:com.gitblit.wicket.panels.RepositoriesPanel.java

License:Apache License

public RepositoriesPanel(String wicketId, final boolean showAdmin, final boolean showManagement,
        List<RepositoryModel> models, boolean enableLinks,
        final Map<AccessRestrictionType, String> accessRestrictionTranslations) {
    super(wicketId);

    final boolean linksActive = enableLinks;
    final boolean showSize = app().settings().getBoolean(Keys.web.showRepositorySizes, true);

    final UserModel user = GitBlitWebSession.get().getUser();

    final IDataProvider<RepositoryModel> dp;

    Fragment managementLinks;/*from ww  w. jav a  2s  . c  o  m*/
    if (showAdmin) {
        // user is admin
        managementLinks = new Fragment("managementPanel", "adminLinks", RepositoriesPanel.this);
        managementLinks.add(new Link<Void>("clearCache") {

            private static final long serialVersionUID = 1L;

            @Override
            public void onClick() {
                app().repositories().resetRepositoryListCache();
                setResponsePage(RepositoriesPage.class);
            }
        }.setVisible(app().settings().getBoolean(Keys.git.cacheRepositoryList, true)));
        managementLinks.add(new BookmarkablePageLink<Void>("newRepository", app().getNewRepositoryPage()));
        add(managementLinks);
    } else if (showManagement && user != null && user.canCreate()) {
        // user can create personal repositories
        managementLinks = new Fragment("managementPanel", "personalLinks", RepositoriesPanel.this);
        managementLinks.add(new BookmarkablePageLink<Void>("newRepository", app().getNewRepositoryPage()));
        add(managementLinks);
    } else {
        // user has no management permissions
        add(new Label("managementPanel").setVisible(false));
    }

    if (app().settings().getString(Keys.web.repositoryListType, "flat").equalsIgnoreCase("grouped")) {
        List<RepositoryModel> rootRepositories = new ArrayList<RepositoryModel>();
        Map<String, List<RepositoryModel>> groups = new HashMap<String, List<RepositoryModel>>();
        for (RepositoryModel model : models) {
            String rootPath = StringUtils.getRootPath(model.name);
            if (StringUtils.isEmpty(rootPath)) {
                // root repository
                rootRepositories.add(model);
            } else {
                // non-root, grouped repository
                if (!groups.containsKey(rootPath)) {
                    groups.put(rootPath, new ArrayList<RepositoryModel>());
                }
                groups.get(rootPath).add(model);
            }
        }
        List<String> roots = new ArrayList<String>(groups.keySet());
        Collections.sort(roots);

        if (rootRepositories.size() > 0) {
            // inject the root repositories at the top of the page
            roots.add(0, "");
            groups.put("", rootRepositories);
        }

        List<RepositoryModel> groupedModels = new ArrayList<RepositoryModel>();
        for (String root : roots) {
            List<RepositoryModel> subModels = groups.get(root);
            ProjectModel project = app().projects().getProjectModel(root);
            GroupRepositoryModel group = new GroupRepositoryModel(project == null ? root : project.name,
                    subModels.size());
            if (project != null) {
                group.title = project.title;
                group.description = project.description;
            }
            groupedModels.add(group);
            Collections.sort(subModels);
            groupedModels.addAll(subModels);
        }
        dp = new ListDataProvider<RepositoryModel>(groupedModels);
    } else {
        dp = new SortableRepositoriesProvider(models);
    }

    final boolean showSwatch = app().settings().getBoolean(Keys.web.repositoryListSwatches, true);

    DataView<RepositoryModel> dataView = new DataView<RepositoryModel>("row", dp) {
        private static final long serialVersionUID = 1L;
        int counter;
        String currGroupName;

        @Override
        protected void onBeforeRender() {
            super.onBeforeRender();
            counter = 0;
        }

        @Override
        public void populateItem(final Item<RepositoryModel> item) {
            final RepositoryModel entry = item.getModelObject();
            if (entry instanceof GroupRepositoryModel) {
                GroupRepositoryModel groupRow = (GroupRepositoryModel) entry;
                currGroupName = entry.name;
                Fragment row = new Fragment("rowContent", "groupRepositoryRow", RepositoriesPanel.this);
                item.add(row);

                String name = groupRow.name;
                if (name.startsWith(ModelUtils.getUserRepoPrefix())) {
                    // user page
                    String username = ModelUtils.getUserNameFromRepoPath(name);
                    UserModel user = app().users().getUserModel(username);
                    row.add(new LinkPanel("groupName", null,
                            (user == null ? username : user.getDisplayName()) + " (" + groupRow.count + ")",
                            UserPage.class, WicketUtils.newUsernameParameter(username)));
                    row.add(new Label("groupDescription", getString("gb.personalRepositories")));
                } else {
                    // project page
                    row.add(new LinkPanel("groupName", null, groupRow.toString(), ProjectPage.class,
                            WicketUtils.newProjectParameter(entry.name)));
                    row.add(new Label("groupDescription", entry.description == null ? "" : entry.description));
                }
                WicketUtils.setCssClass(item, "group");
                // reset counter so that first row is light background
                counter = 0;
                return;
            }
            Fragment row = new Fragment("rowContent", "repositoryRow", RepositoriesPanel.this);
            item.add(row);

            // show colored repository type icon
            Fragment iconFragment;
            if (entry.isMirror) {
                iconFragment = new Fragment("repoIcon", "mirrorIconFragment", RepositoriesPanel.this);
            } else if (entry.isFork()) {
                iconFragment = new Fragment("repoIcon", "forkIconFragment", RepositoriesPanel.this);
            } else if (entry.isBare) {
                iconFragment = new Fragment("repoIcon", "repoIconFragment", RepositoriesPanel.this);
            } else {
                iconFragment = new Fragment("repoIcon", "cloneIconFragment", RepositoriesPanel.this);
            }
            if (showSwatch) {
                WicketUtils.setCssStyle(iconFragment, "color:" + StringUtils.getColor(entry.toString()));
            }
            row.add(iconFragment);

            // try to strip group name for less cluttered list
            String repoName = entry.toString();
            if (!StringUtils.isEmpty(currGroupName) && (repoName.indexOf('/') > -1)) {
                repoName = repoName.substring(currGroupName.length() + 1);
            }

            if (linksActive) {
                Class<? extends BasePage> linkPage = SummaryPage.class;
                PageParameters pp = WicketUtils.newRepositoryParameter(entry.name);
                row.add(new LinkPanel("repositoryName", "list", repoName, linkPage, pp));
                row.add(new LinkPanel("repositoryDescription", "list", entry.description, linkPage, pp));
            } else {
                // no links like on a federation page
                row.add(new Label("repositoryName", repoName));
                row.add(new Label("repositoryDescription", entry.description));
            }
            if (entry.hasCommits) {
                // Existing repository
                row.add(new Label("repositorySize", entry.size).setVisible(showSize));
            } else {
                // New repository
                row.add(new Label("repositorySize",
                        "<span class='empty'>(" + getString("gb.empty") + ")</span>")
                                .setEscapeModelStrings(false));
            }

            if (entry.isSparkleshared()) {
                row.add(WicketUtils.newImage("sparkleshareIcon", "star_16x16.png",
                        getString("gb.isSparkleshared")));
            } else {
                row.add(WicketUtils.newClearPixel("sparkleshareIcon").setVisible(false));
            }

            if (!entry.isMirror && entry.isFrozen) {
                row.add(WicketUtils.newImage("frozenIcon", "cold_16x16.png", getString("gb.isFrozen")));
            } else {
                row.add(WicketUtils.newClearPixel("frozenIcon").setVisible(false));
            }

            if (entry.isFederated) {
                row.add(WicketUtils.newImage("federatedIcon", "federated_16x16.png",
                        getString("gb.isFederated")));
            } else {
                row.add(WicketUtils.newClearPixel("federatedIcon").setVisible(false));
            }

            if (entry.isMirror) {
                row.add(WicketUtils.newImage("accessRestrictionIcon", "mirror_16x16.png",
                        getString("gb.isMirror")));
            } else {
                switch (entry.accessRestriction) {
                case NONE:
                    row.add(WicketUtils.newBlankImage("accessRestrictionIcon"));
                    break;
                case PUSH:
                    row.add(WicketUtils.newImage("accessRestrictionIcon", "lock_go_16x16.png",
                            accessRestrictionTranslations.get(entry.accessRestriction)));
                    break;
                case CLONE:
                    row.add(WicketUtils.newImage("accessRestrictionIcon", "lock_pull_16x16.png",
                            accessRestrictionTranslations.get(entry.accessRestriction)));
                    break;
                case VIEW:
                    row.add(WicketUtils.newImage("accessRestrictionIcon", "shield_16x16.png",
                            accessRestrictionTranslations.get(entry.accessRestriction)));
                    break;
                default:
                    row.add(WicketUtils.newBlankImage("accessRestrictionIcon"));
                }
            }

            String owner = "";
            if (!ArrayUtils.isEmpty(entry.owners)) {
                // display first owner
                for (String username : entry.owners) {
                    UserModel ownerModel = app().users().getUserModel(username);
                    if (ownerModel != null) {
                        owner = ownerModel.getDisplayName();
                        break;
                    }
                }
                if (entry.owners.size() > 1) {
                    owner += ", ...";
                }
            }
            Label ownerLabel = new Label("repositoryOwner", owner);
            WicketUtils.setHtmlTooltip(ownerLabel, ArrayUtils.toString(entry.owners));
            row.add(ownerLabel);

            String lastChange;
            if (entry.lastChange.getTime() == 0) {
                lastChange = "--";
            } else {
                lastChange = getTimeUtils().timeAgo(entry.lastChange);
            }
            Label lastChangeLabel = new Label("repositoryLastChange", lastChange);
            row.add(lastChangeLabel);
            WicketUtils.setCssClass(lastChangeLabel, getTimeUtils().timeAgoCss(entry.lastChange));
            if (!StringUtils.isEmpty(entry.lastChangeAuthor)) {
                WicketUtils.setHtmlTooltip(lastChangeLabel,
                        getString("gb.author") + ": " + entry.lastChangeAuthor);
            }

            WicketUtils.setAlternatingBackground(item, counter);
            counter++;
        }
    };
    add(dataView);

    if (dp instanceof SortableDataProvider<?, ?>) {
        // add sortable header
        SortableDataProvider<?, ?> sdp = (SortableDataProvider<?, ?>) dp;
        Fragment fragment = new Fragment("headerContent", "flatRepositoryHeader", RepositoriesPanel.this);
        fragment.add(newSort("orderByRepository", SortBy.repository, sdp, dataView));
        fragment.add(newSort("orderByDescription", SortBy.description, sdp, dataView));
        fragment.add(newSort("orderByOwner", SortBy.owner, sdp, dataView));
        fragment.add(newSort("orderByDate", SortBy.date, sdp, dataView));
        add(fragment);
    } else {
        // not sortable
        Fragment fragment = new Fragment("headerContent", "groupRepositoryHeader", RepositoriesPanel.this);
        add(fragment);
    }
}

From source file:com.gitblit.wicket.panels.RepositoryUrlPanel.java

License:Apache License

protected Fragment createPrimaryUrlPanel(String wicketId, final RepositoryModel repository,
        List<RepositoryUrl> repositoryUrls) {

    Fragment urlPanel = new Fragment(wicketId, "repositoryUrlFragment", RepositoryUrlPanel.this);
    urlPanel.setRenderBodyOnly(true);//from w  ww. j a  va  2  s .  c  om

    if (repositoryUrls.size() == 1) {
        //
        // Single repository url, no dropdown menu
        //
        urlPanel.add(new Label("menu").setVisible(false));
    } else {
        //
        // Multiple repository urls, show url drop down menu
        //
        ListDataProvider<RepositoryUrl> urlsDp = new ListDataProvider<RepositoryUrl>(repositoryUrls);
        DataView<RepositoryUrl> repoUrlMenuItems = new DataView<RepositoryUrl>("repoUrls", urlsDp) {
            private static final long serialVersionUID = 1L;

            @Override
            public void populateItem(final Item<RepositoryUrl> item) {
                RepositoryUrl repoUrl = item.getModelObject();
                // repository url
                Fragment fragment = new Fragment("repoUrl", "actionFragment", RepositoryUrlPanel.this);
                Component content = new Label("content", repoUrl.url).setRenderBodyOnly(true);
                WicketUtils.setCssClass(content, "commandMenuItem");
                fragment.add(content);
                item.add(fragment);

                Label permissionLabel = new Label("permission",
                        repoUrl.hasPermission() ? repoUrl.permission.toString() : externalPermission);
                WicketUtils.setPermissionClass(permissionLabel, repoUrl.permission);
                String tooltip = getProtocolPermissionDescription(repository, repoUrl);
                WicketUtils.setHtmlTooltip(permissionLabel, tooltip);
                fragment.add(permissionLabel);
                fragment.add(createCopyFragment(repoUrl.url));
            }
        };

        Fragment urlMenuFragment = new Fragment("menu", "urlProtocolMenuFragment", RepositoryUrlPanel.this);
        urlMenuFragment.setRenderBodyOnly(true);
        urlMenuFragment.add(new Label("menuText", getString("gb.url")));
        urlMenuFragment.add(repoUrlMenuItems);
        urlPanel.add(urlMenuFragment);
    }

    // access restriction icon and tooltip
    if (repository.isMirror) {
        urlPanel.add(
                WicketUtils.newImage("accessRestrictionIcon", "mirror_16x16.png", getString("gb.isMirror")));
    } else if (app().services().isServingRepositories()) {
        switch (repository.accessRestriction) {
        case NONE:
            urlPanel.add(WicketUtils.newClearPixel("accessRestrictionIcon").setVisible(false));
            break;
        case PUSH:
            urlPanel.add(WicketUtils.newImage("accessRestrictionIcon", "lock_go_16x16.png",
                    getAccessRestrictions().get(repository.accessRestriction)));
            break;
        case CLONE:
            urlPanel.add(WicketUtils.newImage("accessRestrictionIcon", "lock_pull_16x16.png",
                    getAccessRestrictions().get(repository.accessRestriction)));
            break;
        case VIEW:
            urlPanel.add(WicketUtils.newImage("accessRestrictionIcon", "shield_16x16.png",
                    getAccessRestrictions().get(repository.accessRestriction)));
            break;
        default:
            if (repositoryUrls.size() == 1) {
                // force left end cap to have some width
                urlPanel.add(WicketUtils.newBlankIcon("accessRestrictionIcon"));
            } else {
                urlPanel.add(WicketUtils.newClearPixel("accessRestrictionIcon").setVisible(false));
            }
        }
    } else {
        if (repositoryUrls.size() == 1) {
            // force left end cap to have some width
            urlPanel.add(WicketUtils.newBlankIcon("accessRestrictionIcon"));
        } else {
            urlPanel.add(WicketUtils.newClearPixel("accessRestrictionIcon").setVisible(false));
        }
    }

    urlPanel.add(new Label("primaryUrl", primaryUrl.url).setRenderBodyOnly(true));

    Label permissionLabel = new Label("primaryUrlPermission",
            primaryUrl.hasPermission() ? primaryUrl.permission.toString() : externalPermission);
    String tooltip = getProtocolPermissionDescription(repository, primaryUrl);
    WicketUtils.setHtmlTooltip(permissionLabel, tooltip);
    urlPanel.add(permissionLabel);
    urlPanel.add(createCopyFragment(primaryUrl.url));

    return urlPanel;
}