Paul Martin
2016-04-16 4acd8c1a8b02ff55872069fb84403993bbb7cb69
src/main/java/com/gitblit/wicket/pages/LuceneSearchPage.java
@@ -17,11 +17,14 @@
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
import org.apache.wicket.Component;
import org.apache.wicket.PageParameters;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.form.CheckBox;
import org.apache.wicket.markup.html.form.ListMultipleChoice;
import org.apache.wicket.markup.html.form.TextField;
import org.apache.wicket.markup.html.panel.Fragment;
@@ -32,7 +35,6 @@
import org.eclipse.jgit.lib.Constants;
import com.gitblit.Constants.SearchType;
import com.gitblit.GitBlit;
import com.gitblit.Keys;
import com.gitblit.models.RepositoryModel;
import com.gitblit.models.SearchResult;
@@ -64,8 +66,19 @@
      // default values
      ArrayList<String> repositories = new ArrayList<String>();
      String query = "";
      boolean allRepos = false;
      int page = 1;
      int pageSize = GitBlit.getInteger(Keys.web.itemsPerPage, 50);
      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);
         }
      }
      if (params != null) {
         String repository = WicketUtils.getRepositoryName(params);
@@ -79,6 +92,11 @@
            String value = params.getString("repositories", "");
            List<String> list = StringUtils.getStringsFromValue(value);
            repositories.addAll(list);
         }
         allRepos = params.getAsBoolean("allrepos", false);
         if (allRepos) {
            repositories.addAll(availableRepositories);
         }
         if (params.containsKey("query")) {
@@ -97,15 +115,7 @@
         }
      }
      // display user-accessible selections
      UserModel user = GitBlitWebSession.get().getUser();
      List<String> availableRepositories = new ArrayList<String>();
      for (RepositoryModel model : GitBlit.self().getRepositoryModels(user)) {
         if (model.hasCommits && !ArrayUtils.isEmpty(model.indexedBranches)) {
            availableRepositories.add(model.name);
         }
      }
      boolean luceneEnabled = GitBlit.getBoolean(Keys.web.allowLuceneIndexing, true);
      boolean luceneEnabled = app().settings().getBoolean(Keys.web.allowLuceneIndexing, true);
      if (luceneEnabled) {
         if (availableRepositories.size() == 0) {
            info(getString("gb.noIndexedRepositoriesWarning"));
@@ -115,16 +125,18 @@
      }
      // enforce user-accessible repository selections
      ArrayList<String> searchRepositories = new ArrayList<String>();
      Set<String> uniqueRepositories = new LinkedHashSet<String>();
      for (String selectedRepository : repositories) {
         if (availableRepositories.contains(selectedRepository)) {
            searchRepositories.add(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;
@@ -136,13 +148,14 @@
               error(getString("gb.undefinedQueryWarning"));
               return;
            }
            if (repositoriesModel.getObject().size() == 0) {
            if (repositoriesModel.getObject().size() == 0 && !allreposModel.getObject()) {
               error(getString("gb.noSelectedRepositoriesWarning"));
               return;
            }
            PageParameters params = new PageParameters();
            params.put("repositories", StringUtils.flattenStrings(repositoriesModel.getObject()));
            params.put("query", queryModel.getObject());
            params.put("allrepos", allreposModel.getObject());
            LuceneSearchPage page = new LuceneSearchPage(params);
            setResponsePage(page);
         }
@@ -153,12 +166,13 @@
      selections.setMaxRows(8);
      form.add(selections.setEnabled(luceneEnabled));
      form.add(new TextField<String>("query", queryModel).setEnabled(luceneEnabled));
      form.add(new CheckBox("allrepos", allreposModel));
      add(form.setEnabled(luceneEnabled));
      // execute search
      final List<SearchResult> results = new ArrayList<SearchResult>();
      if (!ArrayUtils.isEmpty(searchRepositories) && !StringUtils.isEmpty(query)) {
         results.addAll(GitBlit.self().search(query, page, pageSize, searchRepositories));
         results.addAll(app().repositories().search(query, page, pageSize, searchRepositories));
      }
      // results header