James Moger
2012-03-16 40ca5c51d1006cd1badf5393f20921b2047f4701
src/com/gitblit/wicket/pages/LucenePage.java
@@ -28,7 +28,6 @@
import org.apache.wicket.markup.repeater.data.ListDataProvider;
import org.apache.wicket.model.Model;
import org.eclipse.jgit.lib.Constants;
import org.eclipse.jgit.lib.Repository;
import com.gitblit.Constants.SearchType;
import com.gitblit.GitBlit;
@@ -36,7 +35,6 @@
import com.gitblit.models.SearchResult;
import com.gitblit.models.UserModel;
import com.gitblit.utils.ArrayUtils;
import com.gitblit.utils.LuceneUtils;
import com.gitblit.utils.StringUtils;
import com.gitblit.wicket.GitBlitWebSession;
import com.gitblit.wicket.StringChoiceRenderer;
@@ -90,9 +88,30 @@
         }
      }
      
      // 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);
         }
      }
      if (availableRepositories.size() == 0) {
         info(getString("gb.noIndexedRepositoriesWarning"));
      }
      // enforce user-accessible repository selections
      ArrayList<String> searchRepositories = new ArrayList<String>();
      for (String selectedRepository : repositories) {
         if (availableRepositories.contains(selectedRepository)) {
            searchRepositories.add(selectedRepository);
         }
      }
      // search form
      final Model<String> queryModel = new Model<String>(query);
      final Model<ArrayList<String>> repositoriesModel = new Model<ArrayList<String>>(repositories);
      final Model<ArrayList<String>> repositoriesModel = new Model<ArrayList<String>>(searchRepositories);
      StatelessForm<Void> form = new StatelessForm<Void>("searchForm") {
         
         private static final long serialVersionUID = 1L;
@@ -101,11 +120,11 @@
         public void onSubmit() {
            String q = queryModel.getObject();
            if (StringUtils.isEmpty(q)) {
               error("Query is empty!");
               error(getString("gb.undefinedQueryWarning"));
               return;
            }            
            if (repositoriesModel.getObject().size() == 0) {
               error("Please select one or more repositories!");
               error(getString("gb.noSelectedRepositoriesWarning"));
               return;
            }
            PageParameters params = new PageParameters();
@@ -114,12 +133,7 @@
            setResponsePage(LucenePage.class, params);
         }
      };
      UserModel user = GitBlitWebSession.get().getUser();
      List<String> availableRepositories = new ArrayList<String>();
      for (RepositoryModel model : GitBlit.self().getRepositoryModels(user)) {
         availableRepositories.add(model.name);
      }
      ListMultipleChoice<String> selections = new ListMultipleChoice<String>("repositories", 
            repositoriesModel, availableRepositories, new StringChoiceRenderer());
      selections.setMaxRows(10);
@@ -129,7 +143,9 @@
            
      // execute search
      final List<SearchResult> results = new ArrayList<SearchResult>();
      results.addAll(search(repositories, query));
      if (!ArrayUtils.isEmpty(searchRepositories) && !StringUtils.isEmpty(query)) {
         results.addAll(GitBlit.self().search(query, 100, searchRepositories));
      }
      
      // search results view
      ListDataProvider<SearchResult> resultsDp = new ListDataProvider<SearchResult>(results);
@@ -168,20 +184,5 @@
         }
      };
      add(resultsView.setVisible(results.size() > 0));
   }
   private List<SearchResult> search(List<String> repositories, String query) {
      if (ArrayUtils.isEmpty(repositories) || StringUtils.isEmpty(query)) {
         return new ArrayList<SearchResult>();
      }
      List<Repository> repos = new ArrayList<Repository>();
      for (String r : repositories) {
         repos.add(GitBlit.self().getRepository(r));
      }
      List<SearchResult> srs = LuceneUtils.search(query, 100, repos.toArray(new Repository[repos.size()]));
      for (Repository r : repos) {
         r.close();
      }
      return srs;
   }
   }
}