1 package com.proalpha.pds.gitutils.search;
3 import java.io.IOException;
6 import org.eclipse.core.runtime.IProgressMonitor;
7 import org.eclipse.core.runtime.IStatus;
8 import org.eclipse.core.runtime.OperationCanceledException;
9 import org.eclipse.core.runtime.Status;
10 import org.eclipse.search.ui.ISearchQuery;
11 import org.eclipse.search.ui.ISearchResult;
12 import org.eclipse.search.ui.text.Match;
13 import org.slf4j.Logger;
14 import org.slf4j.LoggerFactory;
16 import com.proalpha.git.exceptions.PaGitGrepException;
17 import com.proalpha.git.grep.GitCliGrep;
18 import com.proalpha.git.grep.GrepConfig;
19 import com.proalpha.git.model.grep.Result;
20 import com.proalpha.pds.gitutils.Activator;
21 import com.proalpha.pds.gitutils.PreferencesConstants;
30 this.searchSettings = settings;
34 public IStatus run(IProgressMonitor monitor)
throws OperationCanceledException {
36 monitor.beginTask(
"pA GitGrep Search Result", 3);
38 fillSearchResultElements();
40 if (monitor.isCanceled()) {
41 return Status.CANCEL_STATUS;
44 return Status.OK_STATUS;
45 }
catch (Exception e) {
46 logger.error(e.getMessage(), e);
47 return Status.CANCEL_STATUS;
51 private void fillSearchResultElements() {
53 GrepConfig config =
new GrepConfig();
55 config.setLimit(searchSettings.getMaxFinds());
56 config.setBranch(searchSettings.getBranchName());
57 config.setFileFilter(searchSettings.getFileNamePhrase());
59 switch (searchSettings.getFileType()) {
61 config.setSearchScope(GrepConfig.SearchScope.ALL);
65 config.setSearchScope(GrepConfig.SearchScope.PDI);
69 config.setSearchScope(GrepConfig.SearchScope.SRC);
72 config.setSearchScope(GrepConfig.SearchScope.SRC_PDI);
76 config.setWordBoundaries(
false);
77 config.setIgnoreCase(!searchSettings.isCaseSensitive());
79 GitCliGrep grep =
null;
82 grep =
new GitCliGrep(searchSettings.getRepositoryPath(), searchSettings.getTextPhrase(), config);
85 List<Result> results = grep.getResults();
87 for (Result r : results) {
89 int indexOfLastPathDelimiter = r.getContext().getFile().lastIndexOf(
'/');
90 String trimmedPath = indexOfLastPathDelimiter >= 0
91 ? r.getContext().getFile().substring(indexOfLastPathDelimiter + 1)
95 Integer.toString(r.getLineNo()), r.getHit(), r.getContext().getContext());
97 int indexOfLastRepositoryDelimiter = searchSettings.getRepositoryPath().lastIndexOf(
'\\');
100 searchSettings.getRepositoryPath()
102 indexOfLastRepositoryDelimiter > 0 ? indexOfLastRepositoryDelimiter + 1
103 : searchSettings.getRepositoryPath().length())
104 + r.getContext().getFile());
105 searchResult.addMatch(
new Match(elem, 0, 0));
107 }
catch (PaGitGrepException | IOException e) {
108 logger.error(e.getMessage(), e);
113 public String getLabel() {
114 return "pA GitGrep Search";
118 public boolean canRerun() {
123 public boolean canRunInBackground() {
128 public ISearchResult getSearchResult() {
132 public String getSearchPhrase() {
133 return searchSettings.getTextPhrase();
136 public String getRepository() {
137 return searchSettings.getRepositoryPath();
static Activator getDefault()