James Moger
2012-03-19 4e1930a8d9a4e1e90dadf36641f491fdda09f216
Polish the Lucene search page. Integrate both search mechanisms.
4 files renamed
9 files modified
147 ■■■■■ changed files
src/com/gitblit/wicket/GitBlitWebApp.java 26 ●●●● patch | view | raw | blame | history
src/com/gitblit/wicket/GitBlitWebApp.properties 4 ●●●● patch | view | raw | blame | history
src/com/gitblit/wicket/pages/GitSearchPage.html patch | view | raw | blame | history
src/com/gitblit/wicket/pages/GitSearchPage.java 16 ●●●● patch | view | raw | blame | history
src/com/gitblit/wicket/pages/LuceneSearchPage.html 19 ●●●●● patch | view | raw | blame | history
src/com/gitblit/wicket/pages/LuceneSearchPage.java 14 ●●●● patch | view | raw | blame | history
src/com/gitblit/wicket/pages/RepositoryPage.java 19 ●●●●● patch | view | raw | blame | history
src/com/gitblit/wicket/pages/RootPage.java 2 ●●● patch | view | raw | blame | history
src/com/gitblit/wicket/panels/ActivityPanel.java 10 ●●●● patch | view | raw | blame | history
src/com/gitblit/wicket/panels/BranchesPanel.java 10 ●●●● patch | view | raw | blame | history
src/com/gitblit/wicket/panels/HistoryPanel.java 11 ●●●● patch | view | raw | blame | history
src/com/gitblit/wicket/panels/LogPanel.java 12 ●●●● patch | view | raw | blame | history
src/com/gitblit/wicket/panels/SearchPanel.java 4 ●●●● patch | view | raw | blame | history
src/com/gitblit/wicket/GitBlitWebApp.java
@@ -26,7 +26,6 @@
import com.gitblit.GitBlit;
import com.gitblit.Keys;
import com.gitblit.wicket.pages.ActivityPage;
import com.gitblit.wicket.pages.BasePage;
import com.gitblit.wicket.pages.BlamePage;
import com.gitblit.wicket.pages.BlobDiffPage;
import com.gitblit.wicket.pages.BlobPage;
@@ -35,16 +34,17 @@
import com.gitblit.wicket.pages.CommitPage;
import com.gitblit.wicket.pages.DocsPage;
import com.gitblit.wicket.pages.FederationRegistrationPage;
import com.gitblit.wicket.pages.GitSearchPage;
import com.gitblit.wicket.pages.GravatarProfilePage;
import com.gitblit.wicket.pages.HistoryPage;
import com.gitblit.wicket.pages.LogPage;
import com.gitblit.wicket.pages.LuceneSearchPage;
import com.gitblit.wicket.pages.MarkdownPage;
import com.gitblit.wicket.pages.MetricsPage;
import com.gitblit.wicket.pages.PatchPage;
import com.gitblit.wicket.pages.RawPage;
import com.gitblit.wicket.pages.RepositoriesPage;
import com.gitblit.wicket.pages.ReviewProposalPage;
import com.gitblit.wicket.pages.SearchPage;
import com.gitblit.wicket.pages.SummaryPage;
import com.gitblit.wicket.pages.TagPage;
import com.gitblit.wicket.pages.TagsPage;
@@ -91,12 +91,7 @@
        mount("/commitdiff", CommitDiffPage.class, "r", "h");
        mount("/patch", PatchPage.class, "r", "h", "f");
        mount("/history", HistoryPage.class, "r", "h", "f");
        if (GitBlit.getBoolean(Keys.lucene.enable, false)) {
            // TODO switch this to LucenePage when it is ready
            mount("/search", SearchPage.class);
        } else {
            mount("/search", SearchPage.class);
        }
        mount("/search", GitSearchPage.class);
        mount("/metrics", MetricsPage.class, "r");
        mount("/blame", BlamePage.class, "r", "h", "f");
@@ -114,6 +109,7 @@
        mount("/activity", ActivityPage.class, "r", "h");
        mount("/gravatar", GravatarProfilePage.class, "h");
        mount("/lucene", LuceneSearchPage.class);
    }
    private void mount(String location, Class<? extends WebPage> clazz, String... parameters) {
@@ -131,20 +127,6 @@
        return RepositoriesPage.class;
    }
    
    /**
     * Returns the preferred search page class.
     *
     * @return a Wicket class representing a search page
     */
    public Class<? extends BasePage> getSearchPageClass() {
        if (GitBlit.getBoolean(Keys.lucene.enable, false)) {
            // TODO switch this to LucenePage when it is ready
            return SearchPage.class;//LucenePage.class;
        }
        return SearchPage.class;
    }
    @Override
    public final Session newSession(Request request, Response response) {
        return new GitBlitWebSession(request);
src/com/gitblit/wicket/GitBlitWebApp.properties
@@ -214,11 +214,11 @@
gb.workingCopy = working copy
gb.workingCopyWarning = this repository has a working copy and can not receive pushes
gb.query = query
gb.queryHelp = write brief explanation of Lucene syntax here
gb.queryHelp = Standard query syntax is supported.<p/><p/>Please see <a target="_new" href="http://lucene.apache.org/core/old_versioned_docs/versions/3_5_0/queryparsersyntax.html">Lucene Query Parser Syntax</a> for details.
gb.authored = authored
gb.committed = committed
gb.indexedBranches = indexed branches
gb.indexedBranchesDescription = select the branches to include in your Lucene index
gb.noIndexedRepositoriesWarning = none of your repositories are configured for Lucene indexing
gb.undefinedQueryWarning = query is undefined!
gb.gb.noSelectedRepositoriesWarning = please select one or more repositories!
gb.noSelectedRepositoriesWarning = please select one or more repositories!
src/com/gitblit/wicket/pages/GitSearchPage.html
src/com/gitblit/wicket/pages/GitSearchPage.java
File was renamed from src/com/gitblit/wicket/pages/SearchPage.java
@@ -22,9 +22,9 @@
import com.gitblit.wicket.WicketUtils;
import com.gitblit.wicket.panels.SearchPanel;
public class SearchPage extends RepositoryPage {
public class GitSearchPage extends RepositoryPage {
    public SearchPage(PageParameters params) {
    public GitSearchPage(PageParameters params) {
        super(params);
        String value = WicketUtils.getSearchString(params);
@@ -40,23 +40,23 @@
        boolean hasMore = search.hasMore();
        add(search);
        add(new BookmarkablePageLink<Void>("firstPageTop", SearchPage.class,
        add(new BookmarkablePageLink<Void>("firstPageTop", GitSearchPage.class,
                WicketUtils.newSearchParameter(repositoryName, objectId, value, searchType))
                .setEnabled(pageNumber > 1));
        add(new BookmarkablePageLink<Void>("prevPageTop", SearchPage.class,
        add(new BookmarkablePageLink<Void>("prevPageTop", GitSearchPage.class,
                WicketUtils.newSearchParameter(repositoryName, objectId, value, searchType,
                        prevPage)).setEnabled(pageNumber > 1));
        add(new BookmarkablePageLink<Void>("nextPageTop", SearchPage.class,
        add(new BookmarkablePageLink<Void>("nextPageTop", GitSearchPage.class,
                WicketUtils.newSearchParameter(repositoryName, objectId, value, searchType,
                        nextPage)).setEnabled(hasMore));
        add(new BookmarkablePageLink<Void>("firstPageBottom", SearchPage.class,
        add(new BookmarkablePageLink<Void>("firstPageBottom", GitSearchPage.class,
                WicketUtils.newSearchParameter(repositoryName, objectId, value, searchType))
                .setEnabled(pageNumber > 1));
        add(new BookmarkablePageLink<Void>("prevPageBottom", SearchPage.class,
        add(new BookmarkablePageLink<Void>("prevPageBottom", GitSearchPage.class,
                WicketUtils.newSearchParameter(repositoryName, objectId, value, searchType,
                        prevPage)).setEnabled(pageNumber > 1));
        add(new BookmarkablePageLink<Void>("nextPageBottom", SearchPage.class,
        add(new BookmarkablePageLink<Void>("nextPageBottom", GitSearchPage.class,
                WicketUtils.newSearchParameter(repositoryName, objectId, value, searchType,
                        nextPage)).setEnabled(hasMore));
src/com/gitblit/wicket/pages/LuceneSearchPage.html
File was renamed from src/com/gitblit/wicket/pages/LucenePage.html
@@ -30,18 +30,25 @@
                    <button class="btn btn-primary" type="submit" value="Search"><wicket:message key="gb.search"></wicket:message></button>
                </div>
                <div style="margin-top:10px;">
                    <div style="margin-left:0px;" class="span4">
                    <div style="margin-left:0px;" class="span3">
                        <div class="alert alert">
                            <b>type:</b> commit or blob<br/>
                            <b>commit:</b> commit id<br/>
                            <b>path:</b> blob path<br/>
                            <b>path:</b> path/to/blob<br/>
                            <b>branch:</b> refs/heads/master<br/>
                            <b>author:</b><br/>
                            <b>committer:</b><br/>
                            <b>tag:</b> tag<br/>
                            <b>author:</b> or <b>committer:</b>
                        </div>
                    </div>
                    <div class="span5">
                    <div class="span4">
                        <div class="alert alert-info">
                            type:commit AND "bug fix"<br/>
                            type:commit AND author:james*<br/>
                            type:blob AND "int errorCode"<br/>
                            type:blob AND test AND path:*.java<br/>
                            commit:d91e5*
                        </div>
                    </div>
                    <div class="span2">
                        <wicket:message key="gb.queryHelp"></wicket:message>
                    </div>
                </div>
src/com/gitblit/wicket/pages/LuceneSearchPage.java
File was renamed from src/com/gitblit/wicket/pages/LucenePage.java
@@ -44,14 +44,14 @@
import com.gitblit.wicket.panels.LinkPanel;
import com.gitblit.wicket.panels.PagerPanel;
public class LucenePage extends RootPage {
public class LuceneSearchPage extends RootPage {
    public LucenePage() {
    public LuceneSearchPage() {
        super();
        setup(null);
    }
    public LucenePage(PageParameters params) {
    public LuceneSearchPage(PageParameters params) {
        super(params);
        setup(params);
    }
@@ -137,13 +137,13 @@
                PageParameters params = new PageParameters();
                params.put("repositories", StringUtils.flattenStrings(repositoriesModel.getObject()));
                params.put("query", queryModel.getObject());
                setResponsePage(LucenePage.class, params);
                setResponsePage(LuceneSearchPage.class, params);
            }
        };
                
        ListMultipleChoice<String> selections = new ListMultipleChoice<String>("repositories", 
                repositoriesModel, availableRepositories, new StringChoiceRenderer());
        selections.setMaxRows(10);
        selections.setMaxRows(8);
        form.add(selections);
        form.add(new TextField<String>("query", queryModel));
        add(form);
@@ -216,8 +216,8 @@
            totalPages = (results.get(0).totalHits / pageSize) + (results.get(0).totalHits % pageSize > 0 ? 1 : 0);
        }
        
        add(new PagerPanel("topPager", page, totalPages, LucenePage.class, pagerParams));
        add(new PagerPanel("bottomPager", page, totalPages, LucenePage.class, pagerParams));
        add(new PagerPanel("topPager", page, totalPages, LuceneSearchPage.class, pagerParams));
        add(new PagerPanel("bottomPager", page, totalPages, LuceneSearchPage.class, pagerParams));
    }
    
//    private String buildPager(int currentPage, int count, int total) {
src/com/gitblit/wicket/pages/RepositoryPage.java
@@ -44,10 +44,10 @@
import com.gitblit.PagesServlet;
import com.gitblit.SyndicationServlet;
import com.gitblit.models.RepositoryModel;
import com.gitblit.utils.ArrayUtils;
import com.gitblit.utils.JGitUtils;
import com.gitblit.utils.StringUtils;
import com.gitblit.utils.TicgitUtils;
import com.gitblit.wicket.GitBlitWebApp;
import com.gitblit.wicket.GitBlitWebSession;
import com.gitblit.wicket.PageRegistration;
import com.gitblit.wicket.PageRegistration.OtherPageLink;
@@ -229,8 +229,6 @@
    protected Component createPersonPanel(String wicketId, PersonIdent identity,
            Constants.SearchType searchType) {
        GitBlitWebApp app = (GitBlitWebApp) GitBlitWebSession.get().getApplication();
        final Class<? extends BasePage> searchPageClass = app.getSearchPageClass();
        String name = identity == null ? "" : identity.getName();
        String address = identity == null ? "" : identity.getEmailAddress();
        boolean showEmail = GitBlit.getBoolean(Keys.web.showEmailAddresses, false);
@@ -244,20 +242,20 @@
                }
            }
            Fragment partial = new Fragment(wicketId, "partialPersonIdent", this);
            LinkPanel link = new LinkPanel("personName", "list", value, searchPageClass,
            LinkPanel link = new LinkPanel("personName", "list", value, GitSearchPage.class,
                    WicketUtils.newSearchParameter(repositoryName, objectId, value, searchType));
            setPersonSearchTooltip(link, value, searchType);
            partial.add(link);
            return partial;
        } else {
            Fragment fullPerson = new Fragment(wicketId, "fullPersonIdent", this);
            LinkPanel nameLink = new LinkPanel("personName", "list", name, searchPageClass,
            LinkPanel nameLink = new LinkPanel("personName", "list", name, GitSearchPage.class,
                    WicketUtils.newSearchParameter(repositoryName, objectId, name, searchType));
            setPersonSearchTooltip(nameLink, name, searchType);
            fullPerson.add(nameLink);
            LinkPanel addressLink = new LinkPanel("personAddress", "list", "<" + address + ">",
                    searchPageClass, WicketUtils.newSearchParameter(repositoryName, objectId,
                    GitSearchPage.class, WicketUtils.newSearchParameter(repositoryName, objectId,
                            address, searchType));
            setPersonSearchTooltip(addressLink, address, searchType);
            fullPerson.add(addressLink);
@@ -360,8 +358,13 @@
                    break;
                }
            }
            GitBlitWebApp app = (GitBlitWebApp) GitBlitWebSession.get().getApplication();
            setResponsePage(app.getSearchPageClass(),
            Class<? extends BasePage> searchPageClass = GitSearchPage.class;
            RepositoryModel model = GitBlit.self().getRepositoryModel(repositoryName);
            if (!ArrayUtils.isEmpty(model.indexedBranches)) {
                // this repository is Lucene-indexed
                searchPageClass = LuceneSearchPage.class;
            }
            setResponsePage(searchPageClass,
                    WicketUtils.newSearchParameter(repositoryName, null, searchString, searchType));
        }
    }
src/com/gitblit/wicket/pages/RootPage.java
@@ -102,7 +102,7 @@
                getRootPageParameters()));
        pages.add(new PageRegistration("gb.activity", ActivityPage.class, getRootPageParameters()));
        if (GitBlit.getBoolean(Keys.lucene.enable, false)) {
            pages.add(new PageRegistration("gb.search", LucenePage.class));
            pages.add(new PageRegistration("gb.search", LuceneSearchPage.class));
        }
        if (showAdmin) {
            pages.add(new PageRegistration("gb.users", UsersPage.class));
src/com/gitblit/wicket/panels/ActivityPanel.java
@@ -28,14 +28,11 @@
import com.gitblit.models.Activity;
import com.gitblit.models.Activity.RepositoryCommit;
import com.gitblit.utils.StringUtils;
import com.gitblit.wicket.GitBlitWebApp;
import com.gitblit.wicket.GitBlitWebSession;
import com.gitblit.wicket.WicketUtils;
import com.gitblit.wicket.pages.BasePage;
import com.gitblit.wicket.pages.CommitDiffPage;
import com.gitblit.wicket.pages.CommitPage;
import com.gitblit.wicket.pages.LogPage;
import com.gitblit.wicket.pages.SearchPage;
import com.gitblit.wicket.pages.GitSearchPage;
import com.gitblit.wicket.pages.SummaryPage;
import com.gitblit.wicket.pages.TreePage;
@@ -54,9 +51,6 @@
        Collections.sort(recentActivity);
        
        GitBlitWebApp app = (GitBlitWebApp) GitBlitWebSession.get().getApplication();
        final Class<? extends BasePage> searchPageClass = app.getSearchPageClass();
        DataView<Activity> activityView = new DataView<Activity>("activity",
                new ListDataProvider<Activity>(recentActivity)) {
            private static final long serialVersionUID = 1L;
@@ -92,7 +86,7 @@
                        // author search link
                        String author = commit.getAuthorIdent().getName();
                        LinkPanel authorLink = new LinkPanel("author", "list", author,
                                searchPageClass, WicketUtils.newSearchParameter(commit.repository,
                                GitSearchPage.class, WicketUtils.newSearchParameter(commit.repository,
                                        commit.getName(), author, Constants.SearchType.AUTHOR), true);
                        setPersonSearchTooltip(authorLink, author, Constants.SearchType.AUTHOR);
                        fragment.add(authorLink);
src/com/gitblit/wicket/panels/BranchesPanel.java
@@ -35,15 +35,12 @@
import com.gitblit.models.RepositoryModel;
import com.gitblit.utils.JGitUtils;
import com.gitblit.utils.StringUtils;
import com.gitblit.wicket.GitBlitWebApp;
import com.gitblit.wicket.GitBlitWebSession;
import com.gitblit.wicket.WicketUtils;
import com.gitblit.wicket.pages.BasePage;
import com.gitblit.wicket.pages.BranchesPage;
import com.gitblit.wicket.pages.CommitPage;
import com.gitblit.wicket.pages.LogPage;
import com.gitblit.wicket.pages.MetricsPage;
import com.gitblit.wicket.pages.SearchPage;
import com.gitblit.wicket.pages.GitSearchPage;
import com.gitblit.wicket.pages.TreePage;
public class BranchesPanel extends BasePanel {
@@ -78,9 +75,6 @@
            add(new Label("branches", new StringResourceModel("gb.branches", this, null)));
        }
        GitBlitWebApp app = (GitBlitWebApp) GitBlitWebSession.get().getApplication();
        final Class<? extends BasePage> searchPageClass = app.getSearchPageClass();
        ListDataProvider<RefModel> branchesDp = new ListDataProvider<RefModel>(branches);
        DataView<RefModel> branchesView = new DataView<RefModel>("branch", branchesDp) {
            private static final long serialVersionUID = 1L;
@@ -97,7 +91,7 @@
                String author = entry.getAuthorIdent().getName();
                LinkPanel authorLink = new LinkPanel("branchAuthor", "list", author,
                        searchPageClass, WicketUtils.newSearchParameter(model.name,
                        GitSearchPage.class, WicketUtils.newSearchParameter(model.name,
                                entry.getName(), author, Constants.SearchType.AUTHOR));
                setPersonSearchTooltip(authorLink, author, Constants.SearchType.AUTHOR);
                item.add(authorLink);
src/com/gitblit/wicket/panels/HistoryPanel.java
@@ -38,16 +38,13 @@
import com.gitblit.models.RefModel;
import com.gitblit.utils.JGitUtils;
import com.gitblit.utils.StringUtils;
import com.gitblit.wicket.GitBlitWebApp;
import com.gitblit.wicket.GitBlitWebSession;
import com.gitblit.wicket.WicketUtils;
import com.gitblit.wicket.pages.BasePage;
import com.gitblit.wicket.pages.BlobDiffPage;
import com.gitblit.wicket.pages.BlobPage;
import com.gitblit.wicket.pages.CommitDiffPage;
import com.gitblit.wicket.pages.CommitPage;
import com.gitblit.wicket.pages.HistoryPage;
import com.gitblit.wicket.pages.SearchPage;
import com.gitblit.wicket.pages.GitSearchPage;
import com.gitblit.wicket.pages.TreePage;
public class HistoryPanel extends BasePanel {
@@ -97,9 +94,6 @@
        // breadcrumbs
        add(new PathBreadcrumbsPanel("breadcrumbs", repositoryName, path, objectId));
        GitBlitWebApp app = (GitBlitWebApp) GitBlitWebSession.get().getApplication();
        final Class<? extends BasePage> searchPageClass = app.getSearchPageClass();
        ListDataProvider<RevCommit> dp = new ListDataProvider<RevCommit>(commits);
        DataView<RevCommit> logView = new DataView<RevCommit>("commit", dp) {
            private static final long serialVersionUID = 1L;
@@ -114,7 +108,8 @@
                // author search link
                String author = entry.getAuthorIdent().getName();
                LinkPanel authorLink = new LinkPanel("commitAuthor", "list", author,
                        searchPageClass, WicketUtils.newSearchParameter(repositoryName, objectId,
                        GitSearchPage.class,
                        WicketUtils.newSearchParameter(repositoryName, objectId,
                                author, Constants.SearchType.AUTHOR));
                setPersonSearchTooltip(authorLink, author, Constants.SearchType.AUTHOR);
                item.add(authorLink);
src/com/gitblit/wicket/panels/LogPanel.java
@@ -35,14 +35,11 @@
import com.gitblit.models.RefModel;
import com.gitblit.utils.JGitUtils;
import com.gitblit.utils.StringUtils;
import com.gitblit.wicket.GitBlitWebApp;
import com.gitblit.wicket.GitBlitWebSession;
import com.gitblit.wicket.WicketUtils;
import com.gitblit.wicket.pages.BasePage;
import com.gitblit.wicket.pages.CommitDiffPage;
import com.gitblit.wicket.pages.CommitPage;
import com.gitblit.wicket.pages.LogPage;
import com.gitblit.wicket.pages.SearchPage;
import com.gitblit.wicket.pages.GitSearchPage;
import com.gitblit.wicket.pages.TreePage;
public class LogPanel extends BasePanel {
@@ -85,9 +82,6 @@
                    WicketUtils.newRepositoryParameter(repositoryName)));
        }
        GitBlitWebApp app = (GitBlitWebApp) GitBlitWebSession.get().getApplication();
        final Class<? extends BasePage> searchPageClass = app.getSearchPageClass();
        ListDataProvider<RevCommit> dp = new ListDataProvider<RevCommit>(commits);
        DataView<RevCommit> logView = new DataView<RevCommit>("commit", dp) {
            private static final long serialVersionUID = 1L;
@@ -102,8 +96,8 @@
                // author search link
                String author = entry.getAuthorIdent().getName();
                LinkPanel authorLink = new LinkPanel("commitAuthor", "list", author,
                        searchPageClass, WicketUtils.newSearchParameter(repositoryName, objectId,
                                author, Constants.SearchType.AUTHOR));
                        GitSearchPage.class, WicketUtils.newSearchParameter(repositoryName,
                                objectId, author, Constants.SearchType.AUTHOR));
                setPersonSearchTooltip(authorLink, author, Constants.SearchType.AUTHOR);
                item.add(authorLink);
src/com/gitblit/wicket/panels/SearchPanel.java
@@ -37,7 +37,7 @@
import com.gitblit.wicket.WicketUtils;
import com.gitblit.wicket.pages.CommitDiffPage;
import com.gitblit.wicket.pages.CommitPage;
import com.gitblit.wicket.pages.SearchPage;
import com.gitblit.wicket.pages.GitSearchPage;
import com.gitblit.wicket.pages.TreePage;
public class SearchPanel extends BasePanel {
@@ -92,7 +92,7 @@
                // author search link
                String author = entry.getAuthorIdent().getName();
                LinkPanel authorLink = new LinkPanel("commitAuthor", "list", author,
                        SearchPage.class, WicketUtils.newSearchParameter(repositoryName, objectId,
                        GitSearchPage.class, WicketUtils.newSearchParameter(repositoryName, objectId,
                                author, Constants.SearchType.AUTHOR));
                setPersonSearchTooltip(authorLink, author, Constants.SearchType.AUTHOR);
                item.add(authorLink);