List of usage examples for org.apache.wicket.markup.repeater.data DataView DataView
protected DataView(String id, IDataProvider<T> dataProvider)
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; }