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.pages.CommitDiffPage.java

License:Apache License

public CommitDiffPage(PageParameters params) {
    super(params);

    final Repository r = getRepository();
    final RevCommit commit = getCommit();
    final DiffComparator diffComparator = WicketUtils.getDiffComparator(params);

    List<String> parents = new ArrayList<String>();
    if (commit.getParentCount() > 0) {
        for (RevCommit parent : commit.getParents()) {
            parents.add(parent.name());/* w  ww  . j a  v a  2  s.c o m*/
        }
    }

    // commit page links
    if (parents.size() == 0) {
        add(new Label("parentLink", getString("gb.none")));
    } else {
        add(new LinkPanel("parentLink", null, parents.get(0).substring(0, 8), CommitDiffPage.class,
                newCommitParameter(parents.get(0))));
    }
    add(new BookmarkablePageLink<Void>("patchLink", PatchPage.class,
            WicketUtils.newObjectParameter(repositoryName, objectId)));
    add(new BookmarkablePageLink<Void>("commitLink", CommitPage.class,
            WicketUtils.newObjectParameter(repositoryName, objectId)));
    add(new LinkPanel("whitespaceLink", null, getString(diffComparator.getOpposite().getTranslationKey()),
            CommitDiffPage.class,
            WicketUtils.newDiffParameter(repositoryName, objectId, diffComparator.getOpposite())));

    add(new CommitHeaderPanel("commitHeader", repositoryName, commit));

    final List<String> imageExtensions = app().settings().getStrings(Keys.web.imageExtensions);
    final ImageDiffHandler handler = new ImageDiffHandler(this, repositoryName,
            parents.isEmpty() ? null : parents.get(0), commit.getName(), imageExtensions);
    final int tabLength = app().settings().getInteger(Keys.web.tabLength, 4);
    final DiffOutput diff = DiffUtils.getCommitDiff(r, commit, diffComparator, DiffOutputType.HTML, handler,
            tabLength);
    if (handler.getImgDiffCount() > 0) {
        addBottomScript("scripts/imgdiff.js"); // Tiny support script for image diffs
    }

    // add commit diffstat
    int insertions = 0;
    int deletions = 0;
    for (PathChangeModel pcm : diff.stat.paths) {
        insertions += pcm.insertions;
        deletions += pcm.deletions;
    }
    add(new DiffStatPanel("diffStat", insertions, deletions));

    addFullText("fullMessage", commit.getFullMessage());

    // git notes
    List<GitNote> notes = JGitUtils.getNotesOnCommit(r, commit);
    ListDataProvider<GitNote> notesDp = new ListDataProvider<GitNote>(notes);
    DataView<GitNote> notesView = new DataView<GitNote>("notes", notesDp) {
        private static final long serialVersionUID = 1L;

        @Override
        public void populateItem(final Item<GitNote> item) {
            GitNote entry = item.getModelObject();
            item.add(new RefsPanel("refName", repositoryName, Arrays.asList(entry.notesRef)));
            item.add(createPersonPanel("authorName", entry.notesRef.getAuthorIdent(),
                    Constants.SearchType.AUTHOR));
            item.add(new AvatarImage("noteAuthorAvatar", entry.notesRef.getAuthorIdent()));
            item.add(WicketUtils.createTimestampLabel("authorDate", entry.notesRef.getAuthorIdent().getWhen(),
                    getTimeZone(), getTimeUtils()));
            item.add(new Label("noteContent", bugtraqProcessor().processPlainCommitMessage(getRepository(),
                    repositoryName, entry.content)).setEscapeModelStrings(false));
        }
    };
    add(notesView.setVisible(notes.size() > 0));

    // changed paths list
    add(new CommitLegendPanel("commitLegend", diff.stat.paths));
    ListDataProvider<PathChangeModel> pathsDp = new ListDataProvider<PathChangeModel>(diff.stat.paths);
    DataView<PathChangeModel> pathsView = new DataView<PathChangeModel>("changedPath", pathsDp) {
        private static final long serialVersionUID = 1L;
        int counter;

        @Override
        public void populateItem(final Item<PathChangeModel> item) {
            final PathChangeModel entry = item.getModelObject();

            Label changeType = new Label("changeType", "");
            WicketUtils.setChangeTypeCssClass(changeType, entry.changeType);
            setChangeTypeTooltip(changeType, entry.changeType);
            item.add(changeType);
            item.add(new DiffStatPanel("diffStat", entry.insertions, entry.deletions, true));
            item.add(WicketUtils.setHtmlTooltip(new Label("filestore", ""), getString("gb.filestore"))
                    .setVisible(entry.isFilestoreItem()));

            boolean hasSubmodule = false;
            String submodulePath = null;

            if (entry.isTree()) {
                // tree
                item.add(new LinkPanel("pathName", null, entry.path, TreePage.class,
                        WicketUtils.newPathParameter(repositoryName, entry.commitId, entry.path)));
            } else if (entry.isSubmodule()) {
                // submodule
                String submoduleId = entry.objectId;
                SubmoduleModel submodule = getSubmodule(entry.path);
                submodulePath = submodule.gitblitPath;
                hasSubmodule = submodule.hasSubmodule;

                // add relative link
                item.add(new LinkPanel("pathName", "list", entry.path + " @ " + getShortObjectId(submoduleId),
                        "#n" + entry.objectId));
            } else {
                // add relative link
                if (entry.isFilestoreItem()) {

                    item.add(new LinkPanel("pathName", "list", entry.path, new Link<Object>("link", null) {

                        private static final long serialVersionUID = 1L;

                        @Override
                        public void onClick() {
                            IResourceStream resourceStream = new AbstractResourceStreamWriter() {

                                private static final long serialVersionUID = 1L;

                                @Override
                                public void write(OutputStream output) {
                                    UserModel user = GitBlitWebSession.get().getUser();
                                    user = user == null ? UserModel.ANONYMOUS : user;

                                    app().filestore().downloadBlob(entry.getFilestoreOid(), user,
                                            getRepositoryModel(), output);
                                }
                            };

                            ResourceStreamRequestHandler resourceStreamRequestHandler = new ResourceStreamRequestHandler(
                                    resourceStream, entry.path);
                            getRequestCycle().scheduleRequestHandlerAfterCurrent(resourceStreamRequestHandler);
                        }
                    }));
                } else {
                    item.add(new LinkPanel("pathName", "list", entry.path, "#n" + entry.objectId));
                }
            }

            // quick links
            if (entry.isSubmodule()) {
                item.add(new ExternalLink("raw", "").setEnabled(false));
                // submodule
                item.add(new ExternalLink("patch", "").setEnabled(false));
                item.add(new BookmarkablePageLink<Void>("view", CommitPage.class,
                        WicketUtils.newObjectParameter(submodulePath, entry.objectId))
                                .setEnabled(hasSubmodule));
                item.add(new ExternalLink("blame", "").setEnabled(false));
                item.add(new BookmarkablePageLink<Void>("history", HistoryPage.class,
                        WicketUtils.newPathParameter(repositoryName, entry.commitId, entry.path))
                                .setEnabled(!entry.changeType.equals(ChangeType.ADD)));
            } else {
                // tree or blob
                item.add(new BookmarkablePageLink<Void>("patch", PatchPage.class,
                        WicketUtils.newPathParameter(repositoryName, entry.commitId, entry.path))
                                .setEnabled(!entry.changeType.equals(ChangeType.ADD)
                                        && !entry.changeType.equals(ChangeType.DELETE)));

                if (entry.isFilestoreItem()) {
                    item.add(new Link<Object>("view", null) {

                        private static final long serialVersionUID = 1L;

                        @Override
                        public void onClick() {

                            IResourceStream resourceStream = new AbstractResourceStreamWriter() {

                                private static final long serialVersionUID = 1L;

                                @Override
                                public void write(OutputStream output) {
                                    UserModel user = GitBlitWebSession.get().getUser();
                                    user = user == null ? UserModel.ANONYMOUS : user;

                                    app().filestore().downloadBlob(entry.getFilestoreOid(), user,
                                            getRepositoryModel(), output);
                                }
                            };

                            ResourceStreamRequestHandler resourceStreamRequestHandler = new ResourceStreamRequestHandler(
                                    resourceStream, entry.path);
                            getRequestCycle().scheduleRequestHandlerAfterCurrent(resourceStreamRequestHandler);
                        }
                    });

                    item.add(new Link<Object>("raw", null) {

                        private static final long serialVersionUID = 1L;

                        @Override
                        public void onClick() {

                            IResourceStream resourceStream = new AbstractResourceStreamWriter() {

                                private static final long serialVersionUID = 1L;

                                @Override
                                public void write(OutputStream output) {
                                    UserModel user = GitBlitWebSession.get().getUser();
                                    user = user == null ? UserModel.ANONYMOUS : user;

                                    app().filestore().downloadBlob(entry.getFilestoreOid(), user,
                                            getRepositoryModel(), output);
                                }
                            };

                            ResourceStreamRequestHandler resourceStreamRequestHandler = new ResourceStreamRequestHandler(
                                    resourceStream, entry.path);
                            getRequestCycle().scheduleRequestHandlerAfterCurrent(resourceStreamRequestHandler);
                        }
                    });
                } else {
                    item.add(new BookmarkablePageLink<Void>("view", BlobPage.class,
                            WicketUtils.newPathParameter(repositoryName, entry.commitId, entry.path))
                                    .setEnabled(!entry.changeType.equals(ChangeType.DELETE)));

                    item.add(new ExternalLink("raw",
                            RawServlet.asLink(getContextUrl(), repositoryName, entry.commitId, entry.path))
                                    .setEnabled(!entry.changeType.equals(ChangeType.DELETE)));
                }

                item.add(new BookmarkablePageLink<Void>("blame", BlamePage.class,
                        WicketUtils.newPathParameter(repositoryName, entry.commitId, entry.path))
                                .setEnabled(!entry.changeType.equals(ChangeType.ADD)
                                        && !entry.changeType.equals(ChangeType.DELETE)));
                item.add(new BookmarkablePageLink<Void>("history", HistoryPage.class,
                        WicketUtils.newPathParameter(repositoryName, entry.commitId, entry.path))
                                .setEnabled(!entry.changeType.equals(ChangeType.ADD)));
            }

            WicketUtils.setAlternatingBackground(item, counter);
            counter++;
        }
    };
    add(pathsView);
    add(new Label("diffText", diff.content).setEscapeModelStrings(false));
}

From source file:com.gitblit.wicket.pages.CommitPage.java

License:Apache License

public CommitPage(PageParameters params) {
    super(params);

    Repository r = getRepository();//from www  .j a v a 2 s. c  om
    RevCommit c = getCommit();

    List<String> parents = new ArrayList<String>();
    if (c.getParentCount() > 0) {
        for (RevCommit parent : c.getParents()) {
            parents.add(parent.name());
        }
    }

    // commit page links
    if (parents.size() == 0) {
        add(new Label("parentLink", "none"));
        add(new Label("commitdiffLink", getString("gb.commitdiff")));
    } else {
        add(new LinkPanel("parentLink", null, getShortObjectId(parents.get(0)), CommitPage.class,
                newCommitParameter(parents.get(0))));
        add(new LinkPanel("commitdiffLink", null, new StringResourceModel("gb.commitdiff", this, null),
                CommitDiffPage.class, WicketUtils.newObjectParameter(repositoryName, objectId)));
    }
    add(new BookmarkablePageLink<Void>("patchLink", PatchPage.class,
            WicketUtils.newObjectParameter(repositoryName, objectId)));

    add(new CommitHeaderPanel("commitHeader", repositoryName, c));

    addRefs(r, c);

    // author
    add(createPersonPanel("commitAuthor", c.getAuthorIdent(), Constants.SearchType.AUTHOR));
    add(WicketUtils.createTimestampLabel("commitAuthorDate", c.getAuthorIdent().getWhen(), getTimeZone(),
            getTimeUtils()));

    // committer
    add(createPersonPanel("commitCommitter", c.getCommitterIdent(), Constants.SearchType.COMMITTER));
    add(WicketUtils.createTimestampLabel("commitCommitterDate", c.getCommitterIdent().getWhen(), getTimeZone(),
            getTimeUtils()));

    add(new Label("commitId", c.getName()));

    add(new LinkPanel("commitTree", "list", c.getTree().getName(), TreePage.class, newCommitParameter()));
    add(new BookmarkablePageLink<Void>("treeLink", TreePage.class, newCommitParameter()));
    final String baseUrl = WicketUtils.getGitblitURL(getRequest());

    add(new CompressedDownloadsPanel("compressedLinks", baseUrl, repositoryName, objectId, null));

    // Parent Commits
    ListDataProvider<String> parentsDp = new ListDataProvider<String>(parents);
    DataView<String> parentsView = new DataView<String>("commitParents", parentsDp) {
        private static final long serialVersionUID = 1L;

        @Override
        public void populateItem(final Item<String> item) {
            String entry = item.getModelObject();
            item.add(new LinkPanel("commitParent", "list", entry, CommitPage.class, newCommitParameter(entry)));
            item.add(new BookmarkablePageLink<Void>("view", CommitPage.class, newCommitParameter(entry)));
            item.add(new BookmarkablePageLink<Void>("diff", CommitDiffPage.class, newCommitParameter(entry)));
        }
    };
    add(parentsView);

    addFullText("fullMessage", c.getFullMessage());

    // git notes
    List<GitNote> notes = JGitUtils.getNotesOnCommit(r, c);
    ListDataProvider<GitNote> notesDp = new ListDataProvider<GitNote>(notes);
    DataView<GitNote> notesView = new DataView<GitNote>("notes", notesDp) {
        private static final long serialVersionUID = 1L;

        @Override
        public void populateItem(final Item<GitNote> item) {
            GitNote entry = item.getModelObject();
            item.add(new RefsPanel("refName", repositoryName, Arrays.asList(entry.notesRef)));
            item.add(createPersonPanel("authorName", entry.notesRef.getAuthorIdent(),
                    Constants.SearchType.AUTHOR));
            item.add(new AvatarImage("noteAuthorAvatar", entry.notesRef.getAuthorIdent()));
            item.add(WicketUtils.createTimestampLabel("authorDate", entry.notesRef.getAuthorIdent().getWhen(),
                    getTimeZone(), getTimeUtils()));
            item.add(new Label("noteContent", bugtraqProcessor().processPlainCommitMessage(getRepository(),
                    repositoryName, entry.content)).setEscapeModelStrings(false));
        }
    };
    add(notesView.setVisible(notes.size() > 0));

    // changed paths list
    List<PathChangeModel> paths = JGitUtils.getFilesInCommit(r, c);

    // add commit diffstat
    int insertions = 0;
    int deletions = 0;
    for (PathChangeModel pcm : paths) {
        insertions += pcm.insertions;
        deletions += pcm.deletions;
    }
    add(new DiffStatPanel("diffStat", insertions, deletions));

    add(new CommitLegendPanel("commitLegend", paths));
    ListDataProvider<PathChangeModel> pathsDp = new ListDataProvider<PathChangeModel>(paths);
    DataView<PathChangeModel> pathsView = new DataView<PathChangeModel>("changedPath", pathsDp) {
        private static final long serialVersionUID = 1L;
        int counter;

        @Override
        public void populateItem(final Item<PathChangeModel> item) {
            final PathChangeModel entry = item.getModelObject();

            Label changeType = new Label("changeType", "");
            WicketUtils.setChangeTypeCssClass(changeType, entry.changeType);
            setChangeTypeTooltip(changeType, entry.changeType);
            item.add(changeType);
            item.add(new DiffStatPanel("diffStat", entry.insertions, entry.deletions, true));
            item.add(WicketUtils.setHtmlTooltip(new Label("filestore", ""), getString("gb.filestore"))
                    .setVisible(entry.isFilestoreItem()));

            boolean hasSubmodule = false;
            String submodulePath = null;
            if (entry.isTree()) {
                // tree
                item.add(new LinkPanel("pathName", null, entry.path, TreePage.class,
                        WicketUtils.newPathParameter(repositoryName, entry.commitId, entry.path)));
            } else if (entry.isSubmodule()) {
                // submodule
                String submoduleId = entry.objectId;
                SubmoduleModel submodule = getSubmodule(entry.path);
                submodulePath = submodule.gitblitPath;
                hasSubmodule = submodule.hasSubmodule;

                item.add(new LinkPanel("pathName", "list", entry.path + " @ " + getShortObjectId(submoduleId),
                        TreePage.class, WicketUtils.newPathParameter(submodulePath, submoduleId, ""))
                                .setEnabled(hasSubmodule));
            } else {
                // blob
                String displayPath = entry.path;
                String path = entry.path;
                if (entry.isSymlink()) {
                    path = JGitUtils.getStringContent(getRepository(), getCommit().getTree(), path);
                    displayPath = entry.path + " -> " + path;
                }

                if (entry.isFilestoreItem()) {
                    item.add(new LinkPanel("pathName", "list", entry.path, new Link<Object>("link", null) {

                        private static final long serialVersionUID = 1L;

                        @Override
                        public void onClick() {

                            IResourceStream resourceStream = new AbstractResourceStreamWriter() {

                                private static final long serialVersionUID = 1L;

                                @Override
                                public void write(OutputStream output) {
                                    UserModel user = GitBlitWebSession.get().getUser();
                                    user = user == null ? UserModel.ANONYMOUS : user;

                                    app().filestore().downloadBlob(entry.getFilestoreOid(), user,
                                            getRepositoryModel(), output);
                                }
                            };

                            ResourceStreamRequestHandler resourceStreamRequestHandler = new ResourceStreamRequestHandler(
                                    resourceStream, entry.path);
                            getRequestCycle().scheduleRequestHandlerAfterCurrent(resourceStreamRequestHandler);
                        }
                    }));

                } else {
                    item.add(new LinkPanel("pathName", "list", displayPath, BlobPage.class,
                            WicketUtils.newPathParameter(repositoryName, entry.commitId, path)));
                }
            }

            // quick links
            if (entry.isSubmodule()) {
                item.add(new ExternalLink("raw", "").setEnabled(false));

                // submodule
                item.add(new BookmarkablePageLink<Void>("diff", BlobDiffPage.class,
                        WicketUtils.newPathParameter(repositoryName, entry.commitId, entry.path))
                                .setEnabled(!entry.changeType.equals(ChangeType.ADD)));
                item.add(new BookmarkablePageLink<Void>("view", CommitPage.class,
                        WicketUtils.newObjectParameter(submodulePath, entry.objectId))
                                .setEnabled(hasSubmodule));
                item.add(new ExternalLink("blame", "").setEnabled(false));
                item.add(new BookmarkablePageLink<Void>("history", HistoryPage.class,
                        WicketUtils.newPathParameter(repositoryName, entry.commitId, entry.path))
                                .setEnabled(!entry.changeType.equals(ChangeType.ADD)));
            } else {
                // tree or blob
                item.add(new BookmarkablePageLink<Void>("diff", BlobDiffPage.class,
                        WicketUtils.newPathParameter(repositoryName, entry.commitId, entry.path))
                                .setEnabled(!entry.changeType.equals(ChangeType.ADD)
                                        && !entry.changeType.equals(ChangeType.DELETE)));

                if (entry.isFilestoreItem()) {
                    item.add(new Link<Object>("view", null) {

                        private static final long serialVersionUID = 1L;

                        @Override
                        public void onClick() {

                            IResourceStream resourceStream = new AbstractResourceStreamWriter() {

                                private static final long serialVersionUID = 1L;

                                @Override
                                public void write(OutputStream output) {
                                    UserModel user = GitBlitWebSession.get().getUser();
                                    user = user == null ? UserModel.ANONYMOUS : user;

                                    app().filestore().downloadBlob(entry.getFilestoreOid(), user,
                                            getRepositoryModel(), output);
                                }
                            };

                            ResourceStreamRequestHandler resourceStreamRequestHandler = new ResourceStreamRequestHandler(
                                    resourceStream, entry.path);
                            getRequestCycle().scheduleRequestHandlerAfterCurrent(resourceStreamRequestHandler);
                        }
                    });

                    item.add(new Link<Object>("raw", null) {

                        private static final long serialVersionUID = 1L;

                        @Override
                        public void onClick() {

                            IResourceStream resourceStream = new AbstractResourceStreamWriter() {

                                private static final long serialVersionUID = 1L;

                                @Override
                                public void write(OutputStream output) {
                                    UserModel user = GitBlitWebSession.get().getUser();
                                    user = user == null ? UserModel.ANONYMOUS : user;

                                    app().filestore().downloadBlob(entry.getFilestoreOid(), user,
                                            getRepositoryModel(), output);
                                }
                            };

                            ResourceStreamRequestHandler resourceStreamRequestHandler = new ResourceStreamRequestHandler(
                                    resourceStream, entry.path);
                            getRequestCycle().scheduleRequestHandlerAfterCurrent(resourceStreamRequestHandler);
                        }
                    });

                } else {
                    item.add(new BookmarkablePageLink<Void>("view", BlobPage.class,
                            WicketUtils.newPathParameter(repositoryName, entry.commitId, entry.path))
                                    .setEnabled(!entry.changeType.equals(ChangeType.DELETE)));
                    String rawUrl = RawServlet.asLink(getContextUrl(), repositoryName, entry.commitId,
                            entry.path);
                    item.add(new ExternalLink("raw", rawUrl)
                            .setEnabled(!entry.changeType.equals(ChangeType.DELETE)));
                }
                item.add(new BookmarkablePageLink<Void>("blame", BlamePage.class,
                        WicketUtils.newPathParameter(repositoryName, entry.commitId, entry.path))
                                .setEnabled(!entry.changeType.equals(ChangeType.ADD)
                                        && !entry.changeType.equals(ChangeType.DELETE)));
                item.add(new BookmarkablePageLink<Void>("history", HistoryPage.class,
                        WicketUtils.newPathParameter(repositoryName, entry.commitId, entry.path))
                                .setEnabled(!entry.changeType.equals(ChangeType.ADD)));
            }

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

From source file:com.gitblit.wicket.pages.ComparePage.java

License:Apache License

public ComparePage(PageParameters params) {
    super(params);
    Repository r = getRepository();/*ww  w  .  j  a va  2 s  . c  o m*/
    RepositoryModel repository = getRepositoryModel();

    if (StringUtils.isEmpty(objectId)) {
        // seleciton form
        add(new Label("comparison").setVisible(false));
    } else {
        // active comparison
        Fragment comparison = new Fragment("comparison", "comparisonFragment", ComparePage.this);
        add(comparison);

        RevCommit fromCommit;
        RevCommit toCommit;

        String[] parts = objectId.split("\\.\\.");
        if (parts[0].startsWith("refs/") && parts[1].startsWith("refs/")) {
            // set the ref models
            fromRefId.setObject(parts[0]);
            toRefId.setObject(parts[1]);

            fromCommit = getCommit(r, fromRefId.getObject());
            toCommit = getCommit(r, toRefId.getObject());
        } else {
            // set the id models
            fromCommitId.setObject(parts[0]);
            toCommitId.setObject(parts[1]);

            fromCommit = getCommit(r, fromCommitId.getObject());
            toCommit = getCommit(r, toCommitId.getObject());
        }

        // prepare submodules
        getSubmodules(toCommit);

        final String startId = fromCommit.getId().getName();
        final String endId = toCommit.getId().getName();

        // commit ids
        fromCommitId.setObject(startId);
        toCommitId.setObject(endId);

        final List<String> imageExtensions = app().settings().getStrings(Keys.web.imageExtensions);
        final ImageDiffHandler handler = new ImageDiffHandler(this, repositoryName, fromCommit.getName(),
                toCommit.getName(), imageExtensions);
        final DiffComparator diffComparator = WicketUtils.getDiffComparator(params);
        final int tabLength = app().settings().getInteger(Keys.web.tabLength, 4);
        final DiffOutput diff = DiffUtils.getDiff(r, fromCommit, toCommit, diffComparator, DiffOutputType.HTML,
                handler, tabLength);
        if (handler.getImgDiffCount() > 0) {
            addBottomScript("scripts/imgdiff.js"); // Tiny support script for image diffs
        }

        // add compare diffstat
        int insertions = 0;
        int deletions = 0;
        for (PathChangeModel pcm : diff.stat.paths) {
            insertions += pcm.insertions;
            deletions += pcm.deletions;
        }
        comparison.add(new DiffStatPanel("diffStat", insertions, deletions));

        // compare page links
        //         comparison.add(new BookmarkablePageLink<Void>("patchLink", PatchPage.class,
        //               WicketUtils.newRangeParameter(repositoryName, fromCommitId.toString(), toCommitId.getObject())));

        // display list of commits
        comparison.add(
                new LogPanel("commitList", repositoryName, objectId, r, 0, 0, repository.showRemoteBranches));

        // changed paths list
        comparison.add(new CommitLegendPanel("commitLegend", diff.stat.paths));
        ListDataProvider<PathChangeModel> pathsDp = new ListDataProvider<PathChangeModel>(diff.stat.paths);
        DataView<PathChangeModel> pathsView = new DataView<PathChangeModel>("changedPath", pathsDp) {
            private static final long serialVersionUID = 1L;
            int counter;

            @Override
            public void populateItem(final Item<PathChangeModel> item) {
                final PathChangeModel entry = item.getModelObject();
                Label changeType = new Label("changeType", "");
                WicketUtils.setChangeTypeCssClass(changeType, entry.changeType);
                setChangeTypeTooltip(changeType, entry.changeType);
                item.add(changeType);
                item.add(new DiffStatPanel("diffStat", entry.insertions, entry.deletions, true));

                boolean hasSubmodule = false;
                String submodulePath = null;
                if (entry.isTree()) {
                    // tree
                    item.add(new LinkPanel("pathName", null, entry.path, TreePage.class,
                            WicketUtils.newPathParameter(repositoryName, endId, entry.path)));
                } else if (entry.isSubmodule()) {
                    // submodule
                    String submoduleId = entry.objectId;
                    SubmoduleModel submodule = getSubmodule(entry.path);
                    submodulePath = submodule.gitblitPath;
                    hasSubmodule = submodule.hasSubmodule;

                    // add relative link
                    item.add(new LinkPanel("pathName", "list",
                            entry.path + " @ " + getShortObjectId(submoduleId), "#n" + entry.objectId));
                } else {
                    // add relative link
                    item.add(new LinkPanel("pathName", "list", entry.path, "#n" + entry.objectId));
                }

                // quick links
                if (entry.isSubmodule()) {
                    // submodule
                    item.add(new ExternalLink("patch", "").setEnabled(false));
                    item.add(new BookmarkablePageLink<Void>("view", CommitPage.class,
                            WicketUtils.newObjectParameter(submodulePath, entry.objectId))
                                    .setEnabled(hasSubmodule));
                    item.add(new ExternalLink("raw", "").setEnabled(false));
                    item.add(new ExternalLink("blame", "").setEnabled(false));
                    item.add(new BookmarkablePageLink<Void>("history", HistoryPage.class,
                            WicketUtils.newPathParameter(repositoryName, endId, entry.path))
                                    .setEnabled(!entry.changeType.equals(ChangeType.ADD)));
                } else {
                    // tree or blob
                    item.add(new BookmarkablePageLink<Void>("patch", PatchPage.class,
                            WicketUtils.newBlobDiffParameter(repositoryName, startId, endId, entry.path))
                                    .setEnabled(!entry.changeType.equals(ChangeType.DELETE)));
                    item.add(new BookmarkablePageLink<Void>("view", BlobPage.class,
                            WicketUtils.newPathParameter(repositoryName, endId, entry.path))
                                    .setEnabled(!entry.changeType.equals(ChangeType.DELETE)));
                    String rawUrl = RawServlet.asLink(getContextUrl(), repositoryName, endId, entry.path);
                    item.add(new ExternalLink("raw", rawUrl)
                            .setEnabled(!entry.changeType.equals(ChangeType.DELETE)));
                    item.add(new BookmarkablePageLink<Void>("blame", BlamePage.class,
                            WicketUtils.newPathParameter(repositoryName, endId, entry.path))
                                    .setEnabled(!entry.changeType.equals(ChangeType.ADD)
                                            && !entry.changeType.equals(ChangeType.DELETE)));
                    item.add(new BookmarkablePageLink<Void>("history", HistoryPage.class,
                            WicketUtils.newPathParameter(repositoryName, endId, entry.path))
                                    .setEnabled(!entry.changeType.equals(ChangeType.ADD)));
                }
                WicketUtils.setAlternatingBackground(item, counter);
                counter++;
            }
        };
        comparison.add(pathsView);
        comparison.add(new Label("diffText", diff.content).setEscapeModelStrings(false));
    }

    // set the default DiffComparator
    DiffComparator diffComparator = WicketUtils.getDiffComparator(params);
    ignoreWhitespace.setObject(DiffComparator.IGNORE_WHITESPACE == diffComparator);

    //
    // ref selection form
    //
    SessionlessForm<Void> refsForm = new SessionlessForm<Void>("compareRefsForm", getClass(),
            getPageParameters()) {

        private static final long serialVersionUID = 1L;

        @Override
        public void onSubmit() {
            String from = ComparePage.this.fromRefId.getObject();
            String to = ComparePage.this.toRefId.getObject();
            boolean ignoreWS = ignoreWhitespace.getObject();

            PageParameters params = WicketUtils.newRangeParameter(repositoryName, from, to);
            if (ignoreWS) {
                params.add("w", 1);
            }

            String absoluteUrl = GitBlitRequestUtils.toAbsoluteUrl(ComparePage.class, params);
            getRequestCycle().scheduleRequestHandlerAfterCurrent(new RedirectRequestHandler(absoluteUrl));
        }
    };

    List<String> refs = new ArrayList<String>();
    for (RefModel ref : JGitUtils.getLocalBranches(r, true, -1)) {
        refs.add(ref.getName());
    }
    if (repository.showRemoteBranches) {
        for (RefModel ref : JGitUtils.getRemoteBranches(r, true, -1)) {
            refs.add(ref.getName());
        }
    }
    for (RefModel ref : JGitUtils.getTags(r, true, -1)) {
        refs.add(ref.getName());
    }
    refsForm.add(new DropDownChoice<String>("fromRef", fromRefId, refs).setEnabled(refs.size() > 0));
    refsForm.add(new DropDownChoice<String>("toRef", toRefId, refs).setEnabled(refs.size() > 0));
    refsForm.add(new Label("ignoreWhitespaceLabel",
            getString(DiffComparator.IGNORE_WHITESPACE.getTranslationKey())));
    refsForm.add(new CheckBox("ignoreWhitespaceCheckbox", ignoreWhitespace));
    add(refsForm);

    //
    // manual ids form
    //
    SessionlessForm<Void> idsForm = new SessionlessForm<Void>("compareIdsForm", getClass(),
            getPageParameters()) {

        private static final long serialVersionUID = 1L;

        @Override
        public void onSubmit() {
            String from = ComparePage.this.fromCommitId.getObject();
            String to = ComparePage.this.toCommitId.getObject();
            boolean ignoreWS = ignoreWhitespace.getObject();

            PageParameters params = WicketUtils.newRangeParameter(repositoryName, from, to);
            if (ignoreWS) {
                params.add("w", 1);
            }
            String absoluteUrl = GitBlitRequestUtils.toAbsoluteUrl(ComparePage.class, params);
            getRequestCycle().scheduleRequestHandlerAfterCurrent(new RedirectRequestHandler(absoluteUrl));
        }
    };

    TextField<String> fromIdField = new TextField<String>("fromId", fromCommitId);
    WicketUtils.setInputPlaceholder(fromIdField, getString("gb.from") + "...");
    idsForm.add(fromIdField);

    TextField<String> toIdField = new TextField<String>("toId", toCommitId);
    WicketUtils.setInputPlaceholder(toIdField, getString("gb.to") + "...");
    idsForm.add(toIdField);
    idsForm.add(new Label("ignoreWhitespaceLabel",
            getString(DiffComparator.IGNORE_WHITESPACE.getTranslationKey())));
    idsForm.add(new CheckBox("ignoreWhitespaceCheckbox", ignoreWhitespace));
    add(idsForm);

    r.close();
}

From source file:com.gitblit.wicket.pages.DocsPage.java

License:Apache License

public DocsPage(PageParameters params) {
    super(params);

    String objectId = WicketUtils.getObject(params);

    MarkupProcessor processor = new MarkupProcessor(app().settings(), app().xssFilter());

    Repository r = getRepository();/*from  w ww .  j  a  v  a  2  s.c  om*/
    UserModel currentUser = (GitBlitWebSession.get().getUser() != null) ? GitBlitWebSession.get().getUser()
            : UserModel.ANONYMOUS;
    final boolean userCanEdit = currentUser.canEdit(getRepositoryModel());

    RevCommit head = JGitUtils.getCommit(r, objectId);
    final String commitId = getBestCommitId(head);

    List<String> extensions = processor.getAllExtensions();
    List<PathModel> paths = JGitUtils.getDocuments(r, extensions);

    List<MarkupDocument> roots = processor.getRootDocs(r, repositoryName, commitId);
    Fragment fragment = null;
    if (roots.isEmpty()) {
        // no identified root documents
        fragment = new Fragment("docs", "noIndexFragment", DocsPage.this);
        setResponsePage(NoDocsPage.class, params);
    } else {
        // root documents, use tabbed ui of index/root and document list
        fragment = new Fragment("docs", "tabsFragment", DocsPage.this);
        ListDataProvider<MarkupDocument> docDp = new ListDataProvider<MarkupDocument>(roots);

        // tab titles
        DataView<MarkupDocument> tabTitles = new DataView<MarkupDocument>("tabTitle", docDp) {
            private static final long serialVersionUID = 1L;
            int counter;

            @Override
            public void populateItem(final Item<MarkupDocument> item) {
                MarkupDocument doc = item.getModelObject();
                String file = StringUtils.getLastPathElement(doc.documentPath);
                file = StringUtils.stripFileExtension(file);
                String name = file.replace('_', ' ').replace('-', ' ');

                ExternalLink link = new ExternalLink("link", "#" + file);
                link.add(new Label("label", name.toUpperCase()).setRenderBodyOnly(true));
                item.add(link);
                if (counter == 0) {
                    counter++;
                    item.add(new AttributeModifier("class", "active"));
                }
            }
        };
        fragment.add(tabTitles);

        // tab content
        DataView<MarkupDocument> tabsView = new DataView<MarkupDocument>("tabContent", docDp) {
            private static final long serialVersionUID = 1L;
            int counter;

            @Override
            public void populateItem(final Item<MarkupDocument> item) {
                MarkupDocument doc = item.getModelObject();

                item.add(new BookmarkablePageLink<Void>("editLink", EditFilePage.class,
                        WicketUtils.newPathParameter(repositoryName, commitId, doc.documentPath))
                                .setEnabled(userCanEdit));

                // document page links               
                item.add(new BookmarkablePageLink<Void>("blameLink", BlamePage.class,
                        WicketUtils.newPathParameter(repositoryName, commitId, doc.documentPath)));
                item.add(new BookmarkablePageLink<Void>("historyLink", HistoryPage.class,
                        WicketUtils.newPathParameter(repositoryName, commitId, doc.documentPath)));
                String rawUrl = RawServlet.asLink(getContextUrl(), repositoryName, commitId, doc.documentPath);
                item.add(new ExternalLink("rawLink", rawUrl));

                // document content
                String file = StringUtils.getLastPathElement(doc.documentPath);
                file = StringUtils.stripFileExtension(file);
                Component content = new Label("content", doc.html).setEscapeModelStrings(false);
                if (!MarkupSyntax.PLAIN.equals(doc.syntax)) {
                    content.add(new AttributeModifier("class", "markdown"));
                }
                item.add(content);
                item.add(new AttributeModifier("id", file));
                if (counter == 0) {
                    counter++;
                    item.add(new AttributeModifier("class", "tab-pane active"));
                }
            }
        };
        fragment.add(tabsView);
    }

    // document list
    final ByteFormat byteFormat = new ByteFormat();
    Fragment docs = new Fragment("documents", "documentsFragment", DocsPage.this);
    ListDataProvider<PathModel> pathsDp = new ListDataProvider<PathModel>(paths);
    DataView<PathModel> pathsView = new DataView<PathModel>("document", pathsDp) {
        private static final long serialVersionUID = 1L;
        int counter;

        @Override
        public void populateItem(final Item<PathModel> item) {
            PathModel entry = item.getModelObject();
            item.add(WicketUtils.newImage("docIcon", "file_world_16x16.png"));
            item.add(new Label("docSize", byteFormat.format(entry.size)));
            item.add(new LinkPanel("docName", "list", StringUtils.stripFileExtension(entry.name), DocPage.class,
                    WicketUtils.newPathParameter(repositoryName, commitId, entry.path)));

            // links
            item.add(new BookmarkablePageLink<Void>("view", DocPage.class,
                    WicketUtils.newPathParameter(repositoryName, commitId, entry.path)));
            item.add(new BookmarkablePageLink<Void>("edit", EditFilePage.class,
                    WicketUtils.newPathParameter(repositoryName, commitId, entry.path))
                            .setEnabled(userCanEdit));
            String rawUrl = RawServlet.asLink(getContextUrl(), repositoryName, commitId, entry.path);
            item.add(new ExternalLink("raw", rawUrl));
            item.add(new BookmarkablePageLink<Void>("blame", BlamePage.class,
                    WicketUtils.newPathParameter(repositoryName, commitId, entry.path)));
            item.add(new BookmarkablePageLink<Void>("history", HistoryPage.class,
                    WicketUtils.newPathParameter(repositoryName, commitId, entry.path)));
            WicketUtils.setAlternatingBackground(item, counter);
            counter++;
        }
    };
    docs.add(pathsView);
    fragment.add(docs);
    add(fragment);
}

From source file:com.gitblit.wicket.pages.FederationRegistrationPage.java

License:Apache License

public FederationRegistrationPage(PageParameters params) {
    super(params);

    setStatelessHint(true);/*from www  . jav  a 2s  .co  m*/

    String url = WicketUtils.getUrlParameter(params);
    String name = WicketUtils.getNameParameter(params);

    FederationModel registration = app().federation().getFederationRegistration(url, name);
    if (registration == null) {
        error(getString("gb.couldNotFindFederationRegistration"), true);
    }

    setupPage(registration.isResultData() ? getString("gb.federationResults")
            : getString("gb.federationRegistration"), registration.url);

    add(new Label("url", registration.url));
    add(WicketUtils.getRegistrationImage("typeIcon", registration, this));
    add(new Label("frequency", registration.frequency));
    add(new Label("folder", registration.folder));
    add(new Label("token", showAdmin ? registration.token : "--"));
    add(WicketUtils.createTimestampLabel("lastPull", registration.lastPull, getTimeZone(), getTimeUtils()));
    add(WicketUtils.createTimestampLabel("nextPull", registration.nextPull, getTimeZone(), getTimeUtils()));

    StringBuilder inclusions = new StringBuilder();
    for (String inc : registration.inclusions) {
        inclusions.append(inc).append("<br/>");
    }
    StringBuilder exclusions = new StringBuilder();
    for (String ex : registration.exclusions) {
        exclusions.append(ex).append("<br/>");
    }

    add(new Label("inclusions", inclusions.toString()).setEscapeModelStrings(false));

    add(new Label("exclusions", exclusions.toString()).setEscapeModelStrings(false));

    List<RepositoryStatus> list = registration.getStatusList();
    Collections.sort(list);
    DataView<RepositoryStatus> dataView = new DataView<RepositoryStatus>("row",
            new ListDataProvider<RepositoryStatus>(list)) {
        private static final long serialVersionUID = 1L;
        private int counter;

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

        @Override
        public void populateItem(final Item<RepositoryStatus> item) {
            final RepositoryStatus entry = item.getModelObject();
            item.add(WicketUtils.getPullStatusImage("statusIcon", entry.status));
            item.add(new Label("name", entry.name));
            item.add(new Label("status", entry.status.name()));
            WicketUtils.setAlternatingBackground(item, counter);
            counter++;
        }
    };
    add(dataView);
}

From source file:com.gitblit.wicket.pages.ForksPage.java

License:Apache License

public ForksPage(PageParameters params) {
    super(params);

    final RepositoryModel pageRepository = getRepositoryModel();

    ForkModel root = app().repositories().getForkNetwork(pageRepository.name);
    List<FlatFork> network = flatten(root);

    ListDataProvider<FlatFork> forksDp = new ListDataProvider<FlatFork>(network);
    DataView<FlatFork> forksList = new DataView<FlatFork>("fork", forksDp) {
        private static final long serialVersionUID = 1L;

        @Override//  w  w w. j  a  v  a 2s .c o  m
        public void populateItem(final Item<FlatFork> item) {
            FlatFork fork = item.getModelObject();
            RepositoryModel repository = fork.repository;

            if (repository.isPersonalRepository()) {
                UserModel user = app().users().getUserModel(repository.projectPath.substring(1));
                if (user == null) {
                    // user account no longer exists
                    user = new UserModel(repository.projectPath.substring(1));
                }
                PersonIdent ident = new PersonIdent(user.getDisplayName(),
                        user.emailAddress == null ? user.getDisplayName() : user.emailAddress);
                item.add(new AvatarImage("anAvatar", ident, 20));
                if (pageRepository.equals(repository)) {
                    // do not link to self
                    item.add(new Label("aProject", user.getDisplayName()));
                } else {
                    item.add(new LinkPanel("aProject", null, user.getDisplayName(), UserPage.class,
                            WicketUtils.newUsernameParameter(user.username)));
                }
            } else {
                Component swatch;
                if (repository.isBare) {
                    swatch = new Label("anAvatar", "&nbsp;").setEscapeModelStrings(false);
                } else {
                    swatch = new Label("anAvatar", "!");
                    WicketUtils.setHtmlTooltip(swatch, getString("gb.workingCopyWarning"));
                }
                WicketUtils.setCssClass(swatch, "repositorySwatch");
                WicketUtils.setCssBackground(swatch, repository.toString());
                item.add(swatch);
                String projectName = repository.projectPath;
                if (StringUtils.isEmpty(projectName)) {
                    projectName = app().settings().getString(Keys.web.repositoryRootGroupName, "main");
                }
                if (pageRepository.equals(repository)) {
                    // do not link to self
                    item.add(new Label("aProject", projectName));
                } else {
                    item.add(new LinkPanel("aProject", null, projectName, ProjectPage.class,
                            WicketUtils.newProjectParameter(projectName)));
                }
            }

            String repo = StringUtils.getLastPathElement(repository.name);
            UserModel user = GitBlitWebSession.get().getUser();
            if (user == null) {
                user = UserModel.ANONYMOUS;
            }
            if (user.canView(repository)) {
                if (pageRepository.equals(repository)) {
                    // do not link to self
                    item.add(new Label("aFork", StringUtils.stripDotGit(repo)));
                } else {
                    item.add(new LinkPanel("aFork", null, StringUtils.stripDotGit(repo), SummaryPage.class,
                            WicketUtils.newRepositoryParameter(repository.name)));
                }
                item.add(WicketUtils.createDateLabel("lastChange", repository.lastChange, getTimeZone(),
                        getTimeUtils()));
            } else {
                item.add(new Label("aFork", repo));
                item.add(new Label("lastChange").setVisible(false));
            }

            WicketUtils.setCssStyle(item, "margin-left:" + (32 * fork.level) + "px;");
            if (fork.level == 0) {
                WicketUtils.setCssClass(item, "forkSource");
            } else {
                WicketUtils.setCssClass(item, "forkEntry");
            }
        }
    };

    add(forksList);
}

From source file:com.gitblit.wicket.pages.LuceneSearchPage.java

License:Apache License

private void setup(PageParameters params) {
    setupPage("", "");

    // default values
    ArrayList<String> repositories = new ArrayList<String>();
    String query = "";
    boolean allRepos = false;

    int page = 1;
    int pageSize = app().settings().getInteger(Keys.web.itemsPerPage, 50);

    // display user-accessible selections
    UserModel user = GitBlitWebSession.get().getUser();
    List<String> availableRepositories = new ArrayList<String>();
    for (RepositoryModel model : app().repositories().getRepositoryModels(user)) {
        if (model.hasCommits && !ArrayUtils.isEmpty(model.indexedBranches)) {
            availableRepositories.add(model.name);
        }//  w  ww . jav a2 s  . c  o  m
    }

    if (params != null) {
        String repository = WicketUtils.getRepositoryName(params);
        if (!StringUtils.isEmpty(repository)) {
            repositories.add(repository);
        }

        page = WicketUtils.getPage(params);

        if (!params.get("repositories").isEmpty()) {
            String value = params.get("repositories").toString("");
            List<String> list = StringUtils.getStringsFromValue(value);
            repositories.addAll(list);
        }

        allRepos = params.get("allrepos").toBoolean(false);
        if (allRepos) {
            repositories.addAll(availableRepositories);
        }

        if (!params.get("query").isEmpty()) {
            query = params.get("query").toString("");
        } else {
            String value = WicketUtils.getSearchString(params);
            String type = WicketUtils.getSearchType(params);
            com.gitblit.Constants.SearchType searchType = com.gitblit.Constants.SearchType.forName(type);
            if (!StringUtils.isEmpty(value)) {
                if (searchType == SearchType.COMMIT) {
                    query = "type:" + searchType.name().toLowerCase() + " AND \"" + value + "\"";
                } else {
                    query = searchType.name().toLowerCase() + ":\"" + value + "\"";
                }
            }
        }
    }

    boolean luceneEnabled = app().settings().getBoolean(Keys.web.allowLuceneIndexing, true);
    if (luceneEnabled) {
        if (availableRepositories.size() == 0) {
            info(getString("gb.noIndexedRepositoriesWarning"));
        }
    } else {
        error(getString("gb.luceneDisabled"));
    }

    // enforce user-accessible repository selections
    Set<String> uniqueRepositories = new LinkedHashSet<String>();
    for (String selectedRepository : repositories) {
        if (availableRepositories.contains(selectedRepository)) {
            uniqueRepositories.add(selectedRepository);
        }
    }
    ArrayList<String> searchRepositories = new ArrayList<String>(uniqueRepositories);

    // search form
    final Model<String> queryModel = new Model<String>(query);
    final Model<ArrayList<String>> repositoriesModel = new Model<ArrayList<String>>(searchRepositories);
    final Model<Boolean> allreposModel = new Model<Boolean>(allRepos);
    SessionlessForm<Void> form = new SessionlessForm<Void>("searchForm", getClass()) {

        private static final long serialVersionUID = 1L;

        @Override
        public void onSubmit() {
            String q = queryModel.getObject();
            if (StringUtils.isEmpty(q)) {
                error(getString("gb.undefinedQueryWarning"));
                return;
            }
            if (repositoriesModel.getObject().size() == 0 && !allreposModel.getObject()) {
                error(getString("gb.noSelectedRepositoriesWarning"));
                return;
            }
            PageParameters params = new PageParameters();
            params.add("repositories", StringUtils.flattenStrings(repositoriesModel.getObject()));
            params.add("query", queryModel.getObject());
            params.add("allrepos", allreposModel.getObject());
            LuceneSearchPage page = new LuceneSearchPage(params);
            setResponsePage(page);
        }
    };

    ListMultipleChoice<String> selections = new ListMultipleChoice<String>("repositories", repositoriesModel,
            availableRepositories, new StringChoiceRenderer());
    selections.setMaxRows(8);
    form.add(selections.setEnabled(luceneEnabled));
    form.add(new TextField<String>("query", queryModel).setEnabled(luceneEnabled));
    form.add(new CheckBox("allrepos", allreposModel));
    form.add(new ExternalLink("querySyntax", LUCENE_QUERY_SYNTAX_LINK));
    add(form.setEnabled(luceneEnabled));

    // execute search
    final List<SearchResult> results = new ArrayList<SearchResult>();
    if (!ArrayUtils.isEmpty(searchRepositories) && !StringUtils.isEmpty(query)) {
        results.addAll(app().repositories().search(query, page, pageSize, searchRepositories));
    }

    // results header
    if (results.size() == 0) {
        if (!ArrayUtils.isEmpty(searchRepositories) && !StringUtils.isEmpty(query)) {
            add(new Label("resultsHeader", query).setRenderBodyOnly(true));
            add(new Label("resultsCount", getString("gb.noHits")).setRenderBodyOnly(true));
        } else {
            add(new Label("resultsHeader").setVisible(false));
            add(new Label("resultsCount").setVisible(false));
        }
    } else {
        add(new Label("resultsHeader", query).setRenderBodyOnly(true));
        add(new Label("resultsCount",
                MessageFormat.format(getString("gb.queryResults"), results.get(0).hitId,
                        results.get(results.size() - 1).hitId, results.get(0).totalHits))
                                .setRenderBodyOnly(true));
    }

    // search results view
    ListDataProvider<SearchResult> resultsDp = new ListDataProvider<SearchResult>(results);
    final DataView<SearchResult> resultsView = new DataView<SearchResult>("searchResults", resultsDp) {
        private static final long serialVersionUID = 1L;

        @Override
        public void populateItem(final Item<SearchResult> item) {
            final SearchResult sr = item.getModelObject();
            switch (sr.type) {
            case commit: {
                Label icon = WicketUtils.newIcon("type", "icon-refresh");
                WicketUtils.setHtmlTooltip(icon, "commit");
                item.add(icon);
                item.add(new LinkPanel("summary", null, sr.summary, CommitPage.class,
                        WicketUtils.newObjectParameter(sr.repository, sr.commitId)));
                // show tags
                Fragment fragment = new Fragment("tags", "tagsPanel", LuceneSearchPage.this);
                List<String> tags = sr.tags;
                if (tags == null) {
                    tags = new ArrayList<String>();
                }
                ListDataProvider<String> tagsDp = new ListDataProvider<String>(tags);
                final DataView<String> tagsView = new DataView<String>("tag", tagsDp) {
                    private static final long serialVersionUID = 1L;

                    @Override
                    public void populateItem(final Item<String> item) {
                        String tag = item.getModelObject();
                        Component c = new LinkPanel("tagLink", null, tag, TagPage.class,
                                WicketUtils.newObjectParameter(sr.repository, Constants.R_TAGS + tag));
                        WicketUtils.setCssClass(c, "tagRef");
                        item.add(c);
                    }
                };
                fragment.add(tagsView);
                item.add(fragment);
                break;
            }
            case blob: {
                Label icon = WicketUtils.newIcon("type", "icon-file");
                WicketUtils.setHtmlTooltip(icon, "blob");
                item.add(icon);
                item.add(new LinkPanel("summary", null, sr.path, BlobPage.class,
                        WicketUtils.newPathParameter(sr.repository, sr.branch, sr.path)));
                item.add(new Label("tags").setVisible(false));
                break;
            }
            }
            item.add(new Label("fragment", sr.fragment).setEscapeModelStrings(false)
                    .setVisible(!StringUtils.isEmpty(sr.fragment)));
            item.add(new LinkPanel("repository", null, sr.repository, SummaryPage.class,
                    WicketUtils.newRepositoryParameter(sr.repository)));
            if (StringUtils.isEmpty(sr.branch)) {
                item.add(new Label("branch", "null"));
            } else {
                item.add(new LinkPanel("branch", "branch",
                        StringUtils.getRelativePath(Constants.R_HEADS, sr.branch), LogPage.class,
                        WicketUtils.newObjectParameter(sr.repository, sr.branch)));
            }
            item.add(new Label("author", sr.author));
            item.add(WicketUtils.createDatestampLabel("date", sr.date, getTimeZone(), getTimeUtils()));
        }
    };
    add(resultsView.setVisible(results.size() > 0));

    PageParameters pagerParams = new PageParameters();
    pagerParams.add("repositories", StringUtils.flattenStrings(repositoriesModel.getObject()));
    pagerParams.add("query", queryModel.getObject());

    boolean showPager = false;
    int totalPages = 0;
    if (results.size() > 0) {
        totalPages = (results.get(0).totalHits / pageSize) + (results.get(0).totalHits % pageSize > 0 ? 1 : 0);
        showPager = results.get(0).totalHits > pageSize;
    }

    add(new PagerPanel("topPager", page, totalPages, LuceneSearchPage.class, pagerParams)
            .setVisible(showPager));
    add(new PagerPanel("bottomPager", page, totalPages, LuceneSearchPage.class, pagerParams)
            .setVisible(showPager));
}

From source file:com.gitblit.wicket.pages.MyTicketsPage.java

License:Apache License

public MyTicketsPage(PageParameters params) {
    super(params);
    setupPage("", getString("gb.myTickets"));

    UserModel currentUser = GitBlitWebSession.get().getUser();
    if (currentUser == null || UserModel.ANONYMOUS.equals(currentUser)) {
        setResponsePage(getApplication().getHomePage());
        return;//from   w  w w .  j  av a 2s.co m
    }

    final String username = currentUser.getName();

    final String[] statiiParam = (params == null) ? TicketsUI.openStatii
            : (String[]) params.getValues(Lucene.status.name()).stream().map(StringValue::toString).toArray();
    final String assignedToParam = (params == null) ? "" : params.get(Lucene.responsible.name()).toString();
    final String milestoneParam = (params == null) ? "" : params.get(Lucene.milestone.name()).toString();
    final String queryParam = (params == null) ? null : params.get("q").toString();
    final String searchParam = (params == null) ? "" : params.get("s").toString();
    final String sortBy = (params == null) ? ""
            : Lucene.fromString(params.get("sort").toString(Lucene.created.name())).name();
    final String repositoryId = (params == null) ? "" : params.get(Lucene.rid.name()).toString();
    final boolean desc = (params == null) ? true : !"asc".equals(params.get("direction").toString("desc"));

    // add the user title panel
    add(new UserTitlePanel("userTitlePanel", currentUser, getString("gb.myTickets")));

    // add search form
    add(new TicketSearchForm("ticketSearchForm", null, searchParam, getClass(), params));

    // standard queries
    add(new BookmarkablePageLink<Void>("changesQuery", MyTicketsPage.class,
            queryParameters(Lucene.type.matches(TicketModel.Type.Proposal.name()), milestoneParam, statiiParam,
                    assignedToParam, sortBy, desc, repositoryId, 1)));

    add(new BookmarkablePageLink<Void>("bugsQuery", MyTicketsPage.class,
            queryParameters(Lucene.type.matches(TicketModel.Type.Bug.name()), milestoneParam, statiiParam,
                    assignedToParam, sortBy, desc, repositoryId, 1)));

    add(new BookmarkablePageLink<Void>("enhancementsQuery", MyTicketsPage.class,
            queryParameters(Lucene.type.matches(TicketModel.Type.Enhancement.name()), milestoneParam,
                    statiiParam, assignedToParam, sortBy, desc, repositoryId, 1)));

    add(new BookmarkablePageLink<Void>("tasksQuery", MyTicketsPage.class,
            queryParameters(Lucene.type.matches(TicketModel.Type.Task.name()), milestoneParam, statiiParam,
                    assignedToParam, sortBy, desc, repositoryId, 1)));

    add(new BookmarkablePageLink<Void>("questionsQuery", MyTicketsPage.class,
            queryParameters(Lucene.type.matches(TicketModel.Type.Question.name()), milestoneParam, statiiParam,
                    assignedToParam, sortBy, desc, repositoryId, 1)));

    add(new BookmarkablePageLink<Void>("maintenanceQuery", MyTicketsPage.class,
            queryParameters(Lucene.type.matches(TicketModel.Type.Maintenance.name()), milestoneParam,
                    statiiParam, assignedToParam, sortBy, desc, repositoryId, 1)));

    add(new BookmarkablePageLink<Void>("resetQuery", MyTicketsPage.class,
            queryParameters(null, milestoneParam, TicketsUI.openStatii, null, null, true, null, 1)));

    add(new Label("userDivider"));
    add(new BookmarkablePageLink<Void>("createdQuery", MyTicketsPage.class,
            queryParameters(Lucene.createdby.matches(username), milestoneParam, statiiParam, assignedToParam,
                    sortBy, desc, repositoryId, 1)));

    add(new BookmarkablePageLink<Void>("watchedQuery", MyTicketsPage.class,
            queryParameters(Lucene.watchedby.matches(username), milestoneParam, statiiParam, assignedToParam,
                    sortBy, desc, repositoryId, 1)));
    add(new BookmarkablePageLink<Void>("mentionsQuery", MyTicketsPage.class,
            queryParameters(Lucene.mentions.matches(username), milestoneParam, statiiParam, assignedToParam,
                    sortBy, desc, repositoryId, 1)));
    add(new BookmarkablePageLink<Void>("responsibleQuery", MyTicketsPage.class,
            queryParameters(Lucene.responsible.matches(username), milestoneParam, statiiParam, assignedToParam,
                    sortBy, desc, repositoryId, 1)));

    // states
    if (ArrayUtils.isEmpty(statiiParam)) {
        add(new Label("selectedStatii", getString("gb.all")));
    } else {
        add(new Label("selectedStatii", StringUtils.flattenStrings(Arrays.asList(statiiParam), ",")));
    }
    add(new BookmarkablePageLink<Void>("openTickets", MyTicketsPage.class, queryParameters(queryParam,
            milestoneParam, TicketsUI.openStatii, assignedToParam, sortBy, desc, repositoryId, 1)));
    add(new BookmarkablePageLink<Void>("closedTickets", MyTicketsPage.class, queryParameters(queryParam,
            milestoneParam, TicketsUI.closedStatii, assignedToParam, sortBy, desc, repositoryId, 1)));
    add(new BookmarkablePageLink<Void>("allTickets", MyTicketsPage.class,
            queryParameters(queryParam, milestoneParam, null, assignedToParam, sortBy, desc, repositoryId, 1)));

    // by status
    List<Status> statii = new ArrayList<Status>(Arrays.asList(Status.values()));
    statii.remove(Status.Closed);
    ListDataProvider<Status> resolutionsDp = new ListDataProvider<Status>(statii);
    DataView<Status> statiiLinks = new DataView<Status>("statii", resolutionsDp) {
        private static final long serialVersionUID = 1L;

        @Override
        public void populateItem(final Item<Status> item) {
            final Status status = item.getModelObject();
            PageParameters p = queryParameters(queryParam, milestoneParam,
                    new String[] { status.name().toLowerCase() }, assignedToParam, sortBy, desc, repositoryId,
                    1);
            String css = TicketsUI.getStatusClass(status);
            item.add(new LinkPanel("statusLink", css, status.toString(), MyTicketsPage.class, p)
                    .setRenderBodyOnly(true));
        }
    };
    add(statiiLinks);

    // by sort
    List<TicketSort> sortChoices = new ArrayList<TicketSort>();
    sortChoices.add(new TicketSort(getString("gb.sortNewest"), Lucene.created.name(), true));
    sortChoices.add(new TicketSort(getString("gb.sortOldest"), Lucene.created.name(), false));
    sortChoices.add(new TicketSort(getString("gb.sortMostRecentlyUpdated"), Lucene.updated.name(), true));
    sortChoices.add(new TicketSort(getString("gb.sortLeastRecentlyUpdated"), Lucene.updated.name(), false));
    sortChoices.add(new TicketSort(getString("gb.sortMostComments"), Lucene.comments.name(), true));
    sortChoices.add(new TicketSort(getString("gb.sortLeastComments"), Lucene.comments.name(), false));
    sortChoices.add(new TicketSort(getString("gb.sortMostPatchsetRevisions"), Lucene.patchsets.name(), true));
    sortChoices.add(new TicketSort(getString("gb.sortLeastPatchsetRevisions"), Lucene.patchsets.name(), false));
    sortChoices.add(new TicketSort(getString("gb.sortMostVotes"), Lucene.votes.name(), true));
    sortChoices.add(new TicketSort(getString("gb.sortLeastVotes"), Lucene.votes.name(), false));
    sortChoices.add(new TicketSort(getString("gb.sortHighestPriority"), Lucene.priority.name(), true));
    sortChoices.add(new TicketSort(getString("gb.sortLowestPriority"), Lucene.priority.name(), false));
    sortChoices.add(new TicketSort(getString("gb.sortHighestSeverity"), Lucene.severity.name(), true));
    sortChoices.add(new TicketSort(getString("gb.sortLowestSeverity"), Lucene.severity.name(), false));

    TicketSort currentSort = sortChoices.get(0);
    for (TicketSort ts : sortChoices) {
        if (ts.sortBy.equals(sortBy) && desc == ts.desc) {
            currentSort = ts;
            break;
        }
    }
    add(new Label("currentSort", currentSort.name));

    ListDataProvider<TicketSort> sortChoicesDp = new ListDataProvider<TicketSort>(sortChoices);
    DataView<TicketSort> sortMenu = new DataView<TicketSort>("sort", sortChoicesDp) {
        private static final long serialVersionUID = 1L;

        @Override
        public void populateItem(final Item<TicketSort> item) {
            final TicketSort ts = item.getModelObject();
            PageParameters params = queryParameters(queryParam, milestoneParam, statiiParam, assignedToParam,
                    ts.sortBy, ts.desc, repositoryId, 1);
            item.add(new LinkPanel("sortLink", null, ts.name, MyTicketsPage.class, params)
                    .setRenderBodyOnly(true));
        }
    };
    add(sortMenu);

    // by repository
    final List<QueryResult> tickets = query(initializeQueryBuilder(null, username), 1, Integer.MAX_VALUE,
            sortBy, desc);
    final List<RepositoryModel> repositoryChoices = correspondingRepositories(tickets);
    Collections.sort(repositoryChoices);

    final RepositoryModel noneChoice = new RepositoryModel();
    noneChoice.name = getString("gb.all");
    repositoryChoices.add(0, noneChoice);

    RepositoryModel currentRepository = repositoryChoices.get(0);
    for (RepositoryModel r : repositoryChoices) {
        if (r.getRID().equals(repositoryId)) {
            currentRepository = r;
            break;
        }
    }
    add(new Label("currentRepository", currentRepository.toString()));

    ListDataProvider<RepositoryModel> repositoryChoicesDp = new ListDataProvider<RepositoryModel>(
            repositoryChoices);
    DataView<RepositoryModel> repositoryMenu = new DataView<RepositoryModel>("repository",
            repositoryChoicesDp) {
        private static final long serialVersionUID = 1L;

        @Override
        public void populateItem(final Item<RepositoryModel> item) {
            final RepositoryModel r = item.getModelObject();
            String rid = r == noneChoice ? null : r.getRID();
            PageParameters params = queryParameters(queryParam, milestoneParam, statiiParam, assignedToParam,
                    sortBy, desc, rid, 1);
            item.add(new LinkPanel("repositoryLink", null, r.toString(), MyTicketsPage.class, params)
                    .setRenderBodyOnly(true));
        }
    };
    add(repositoryMenu);

    // Update query with filter criteria
    final QueryBuilder qb = initializeQueryBuilder(queryParam, username);

    if (!qb.containsField(Lucene.status.name()) && !ArrayUtils.isEmpty(statiiParam)) {
        // specify the states
        boolean not = false;
        QueryBuilder q = new QueryBuilder();
        for (String state : statiiParam) {
            if (state.charAt(0) == '!') {
                not = true;
                q.and(Lucene.status.doesNotMatch(state.substring(1)));
            } else {
                q.or(Lucene.status.matches(state));
            }
        }

        if (not) {
            qb.and(q.toString());
        } else {
            qb.and(q.toSubquery().toString());
        }
    }

    if (noneChoice != currentRepository && !qb.containsField(Lucene.rid.name())) {
        QueryBuilder q1 = new QueryBuilder();
        q1.and(Lucene.rid.matches(repositoryId));
        qb.and(q1.toSubquery().toString());
    }

    // paging links
    int page = (params != null) ? Math.max(1, WicketUtils.getPage(params)) : 1;
    int pageSize = app().settings().getInteger(Keys.tickets.perPage, 25);

    final List<QueryResult> allResults = StringUtils.isEmpty(searchParam)
            ? query(qb, page, pageSize, sortBy, desc)
            : search(searchParam, page, pageSize);

    List<QueryResult> viewableResults = new ArrayList<>(allResults.size());
    for (QueryResult queryResult : allResults) {
        RepositoryModel model = app().repositories().getRepositoryModel(currentUser, queryResult.repository);

        if ((model != null) && (currentUser.canView(model))) {
            viewableResults.add(queryResult);
        }
    }

    int totalResults = viewableResults.size() == 0 ? 0 : viewableResults.get(0).totalResults;
    buildPager(queryParam, milestoneParam, statiiParam, assignedToParam, sortBy, desc, repositoryId, page,
            pageSize, viewableResults.size(), totalResults);

    final boolean showSwatch = app().settings().getBoolean(Keys.web.repositoryListSwatches, true);
    add(new TicketListPanel("ticketList", viewableResults, showSwatch, true));
}

From source file:com.gitblit.wicket.pages.MyTicketsPage.java

License:Apache License

protected void buildPager(final String query, final String milestone, final String[] states,
        final String assignedTo, final String sort, final boolean desc, final String repositoryId,
        final int page, int pageSize, int count, int total) {

    boolean showNav = total > (2 * pageSize);
    boolean allowPrev = page > 1;
    boolean allowNext = (pageSize * (page - 1) + count) < total;
    add(new BookmarkablePageLink<Void>("prevLink", MyTicketsPage.class,
            queryParameters(query, milestone, states, assignedTo, sort, desc, repositoryId, page - 1))
                    .setEnabled(allowPrev).setVisible(showNav));
    add(new BookmarkablePageLink<Void>("nextLink", MyTicketsPage.class,
            queryParameters(query, milestone, states, assignedTo, sort, desc, repositoryId, page + 1))
                    .setEnabled(allowNext).setVisible(showNav));

    if (total <= pageSize) {
        add(new Label("pageLink").setVisible(false));
        return;/*from  www.j  av  a 2  s . c om*/
    }

    // determine page numbers to display
    int pages = count == 0 ? 0 : ((total / pageSize) + (total % pageSize == 0 ? 0 : 1));
    // preferred number of pagelinks
    int segments = 5;
    if (pages < segments) {
        // not enough data for preferred number of page links
        segments = pages;
    }
    int minpage = Math.min(Math.max(1, page - 2), pages - (segments - 1));
    int maxpage = Math.min(pages, minpage + (segments - 1));
    List<Integer> sequence = new ArrayList<Integer>();
    for (int i = minpage; i <= maxpage; i++) {
        sequence.add(i);
    }

    ListDataProvider<Integer> pagesDp = new ListDataProvider<Integer>(sequence);
    DataView<Integer> pagesView = new DataView<Integer>("pageLink", pagesDp) {
        private static final long serialVersionUID = 1L;

        @Override
        public void populateItem(final Item<Integer> item) {
            final Integer i = item.getModelObject();
            LinkPanel link = new LinkPanel("page", null, "" + i, MyTicketsPage.class,
                    queryParameters(query, milestone, states, assignedTo, sort, desc, repositoryId, i));
            link.setRenderBodyOnly(true);
            if (i == page) {
                WicketUtils.setCssClass(item, "active");
            }
            item.add(link);
        }
    };
    add(pagesView);
}

From source file:com.gitblit.wicket.pages.OverviewPage.java

License:Apache License

public OverviewPage(PageParameters params) {
    super(params);

    int numberRefs = app().settings().getInteger(Keys.web.summaryRefsCount, 5);

    Repository r = getRepository();//from   w  w w  .  j  a  v a  2s.  co  m
    final RepositoryModel model = getRepositoryModel();
    UserModel user = GitBlitWebSession.get().getUser();
    if (user == null) {
        user = UserModel.ANONYMOUS;
    }

    List<Metric> metrics = null;
    Metric metricsTotal = null;
    if (!model.skipSummaryMetrics && app().settings().getBoolean(Keys.web.generateActivityGraph, true)) {
        metrics = app().repositories().getRepositoryDefaultMetrics(model, r);
        metricsTotal = metrics.remove(0);
    }

    addSyndicationDiscoveryLink();

    // repository description
    add(new Label("repositoryDescription", getRepositoryModel().description));

    // owner links
    final List<String> owners = new ArrayList<String>(getRepositoryModel().owners);
    ListDataProvider<String> ownersDp = new ListDataProvider<String>(owners);
    DataView<String> ownersView = new DataView<String>("repositoryOwners", ownersDp) {
        private static final long serialVersionUID = 1L;
        int counter = 0;

        @Override
        public void populateItem(final Item<String> item) {
            String ownername = item.getModelObject();
            UserModel ownerModel = app().users().getUserModel(ownername);
            if (ownerModel != null) {
                item.add(new LinkPanel("owner", null, ownerModel.getDisplayName(), UserPage.class,
                        WicketUtils.newUsernameParameter(ownerModel.username)).setRenderBodyOnly(true));
            } else {
                Label owner = new Label("owner", ownername);
                WicketUtils.setCssStyle(owner, "text-decoration: line-through;");
                WicketUtils.setHtmlTooltip(owner,
                        MessageFormat.format(getString("gb.failedToFindAccount"), ownername));
                item.add(owner);
            }
            counter++;
            item.add(new Label("comma", ",").setVisible(counter < owners.size()));
            item.setRenderBodyOnly(true);
        }
    };
    ownersView.setRenderBodyOnly(true);
    add(ownersView);

    add(WicketUtils.createTimestampLabel("repositoryLastChange", JGitUtils.getLastChange(r).when, getTimeZone(),
            getTimeUtils()));
    add(new Label("repositorySize", model.size));

    if (metricsTotal == null) {
        add(new Label("branchStats", ""));
    } else {
        add(new Label("branchStats", MessageFormat.format(getString("gb.branchStats"), metricsTotal.count,
                metricsTotal.tag, getTimeUtils().duration(metricsTotal.duration))));
    }
    add(new BookmarkablePageLink<Void>("metrics", MetricsPage.class,
            WicketUtils.newRepositoryParameter(repositoryName)));

    add(new RepositoryUrlPanel("repositoryUrlPanel", false, user, model));

    int reflogCount = app().settings().getInteger(Keys.web.overviewReflogCount, 5);
    ReflogPanel reflog = new ReflogPanel("reflogPanel", getRepositoryModel(), r, reflogCount, 0);
    add(reflog);
    add(new TagsPanel("tagsPanel", repositoryName, r, numberRefs).hideIfEmpty());
    add(new BranchesPanel("branchesPanel", getRepositoryModel(), r, numberRefs, false).hideIfEmpty());

    // Display an activity line graph
    insertActivityGraph(metrics);
}