Eclipseplugins
GitGrepSearchQuery.java
1 package com.proalpha.pds.gitutils.search;
2 
3 import java.io.IOException;
4 import java.util.List;
5 
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;
15 
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;
22 
23 public class GitGrepSearchQuery implements ISearchQuery {
24 
25  private final Logger logger = LoggerFactory.getLogger(GitGrepSearchQuery.class);
26  private GitGrepSearchSettings searchSettings;
27  private GitGrepSearchResult searchResult = new GitGrepSearchResult(this);
28 
29  public GitGrepSearchQuery(GitGrepSearchSettings settings) {
30  this.searchSettings = settings;
31  }
32 
33  @Override
34  public IStatus run(IProgressMonitor monitor) throws OperationCanceledException {
35  try {
36  monitor.beginTask("pA GitGrep Search Result", 3);
37  monitor.worked(1);
38  fillSearchResultElements();
39  monitor.worked(1);
40  if (monitor.isCanceled()) {
41  return Status.CANCEL_STATUS;
42  }
43  monitor.done();
44  return Status.OK_STATUS;
45  } catch (Exception e) {
46  logger.error(e.getMessage(), e);
47  return Status.CANCEL_STATUS;
48  }
49  }
50 
51  private void fillSearchResultElements() {
52 
53  GrepConfig config = new GrepConfig();
54 
55  config.setLimit(searchSettings.getMaxFinds());
56  config.setBranch(searchSettings.getBranchName());
57  config.setFileFilter(searchSettings.getFileNamePhrase());
58 
59  switch (searchSettings.getFileType()) {
60  case "ALL":
61  config.setSearchScope(GrepConfig.SearchScope.ALL);
62  break;
63 
64  case "PDI":
65  config.setSearchScope(GrepConfig.SearchScope.PDI);
66  break;
67 
68  case "SRC":
69  config.setSearchScope(GrepConfig.SearchScope.SRC);
70  break;
71  case "SRC_PDI":
72  config.setSearchScope(GrepConfig.SearchScope.SRC_PDI);
73  break;
74  }
75 
76  config.setWordBoundaries(false);
77  config.setIgnoreCase(!searchSettings.isCaseSensitive());
78 
79  GitCliGrep grep = null;
80 
81  try {
82  grep = new GitCliGrep(searchSettings.getRepositoryPath(), searchSettings.getTextPhrase(), config);
83 
84  grep.setGitCLI(Activator.getDefault().getPreferenceStore().getString(PreferencesConstants.GIT_EXE));
85  List<Result> results = grep.getResults();
86 
87  for (Result r : results) {
88 
89  int indexOfLastPathDelimiter = r.getContext().getFile().lastIndexOf('/');
90  String trimmedPath = indexOfLastPathDelimiter >= 0
91  ? r.getContext().getFile().substring(indexOfLastPathDelimiter + 1)
92  : "";
93 
95  Integer.toString(r.getLineNo()), r.getHit(), r.getContext().getContext());
96 
97  int indexOfLastRepositoryDelimiter = searchSettings.getRepositoryPath().lastIndexOf('\\');
98 
99  elem.setAbsolutePath(
100  searchSettings.getRepositoryPath()
101  .substring(0,
102  indexOfLastRepositoryDelimiter > 0 ? indexOfLastRepositoryDelimiter + 1
103  : searchSettings.getRepositoryPath().length())
104  + r.getContext().getFile());
105  searchResult.addMatch(new Match(elem, 0, 0));
106  }
107  } catch (PaGitGrepException | IOException e) {
108  logger.error(e.getMessage(), e);
109  }
110  }
111 
112  @Override
113  public String getLabel() {
114  return "pA GitGrep Search";
115  }
116 
117  @Override
118  public boolean canRerun() {
119  return true;
120  }
121 
122  @Override
123  public boolean canRunInBackground() {
124  return true;
125  }
126 
127  @Override
128  public ISearchResult getSearchResult() {
129  return searchResult;
130  }
131 
132  public String getSearchPhrase() {
133  return searchSettings.getTextPhrase();
134  }
135 
136  public String getRepository() {
137  return searchSettings.getRepositoryPath();
138  }
139 }