]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.scl.ui/src/org/simantics/scl/ui/search/SCLSearchQuery.java
Externalize strings in org.simantics.scl.ui
[simantics/platform.git] / bundles / org.simantics.scl.ui / src / org / simantics / scl / ui / search / SCLSearchQuery.java
1 package org.simantics.scl.ui.search;
2
3 import java.util.ArrayList;
4 import java.util.Collection;
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.internal.ui.text.SearchResultUpdater;
11 import org.eclipse.search.ui.ISearchQuery;
12 import org.eclipse.search.ui.ISearchResult;
13 import org.eclipse.search.ui.text.Match;
14 import org.simantics.scl.compiler.common.names.Name;
15 import org.simantics.scl.compiler.errors.Failable;
16 import org.simantics.scl.compiler.module.Module;
17 import org.simantics.scl.compiler.module.debug.ModuleDebugInfo;
18 import org.simantics.scl.compiler.module.debug.SymbolReference;
19 import org.simantics.scl.compiler.module.repository.ModuleRepository;
20 import org.simantics.scl.db.SCLExpressionTableEntry;
21 import org.simantics.scl.db.UsedSCLExpressionsRequest;
22 import org.simantics.scl.osgi.SCLOsgi;
23
24 import gnu.trove.procedure.TObjectProcedure;
25
26 public class SCLSearchQuery implements ISearchQuery {
27
28     private SCLSearchResult result;
29     private String moduleName;
30     private Name valueName;
31
32     public SCLSearchQuery(Name valueName, String localModuleName) {
33         this.valueName = valueName;
34         this.moduleName = localModuleName;
35     }
36     
37     @Override
38     public IStatus run(IProgressMonitor monitor) throws OperationCanceledException {
39         SCLSearchResult current = (SCLSearchResult) getSearchResult();
40         current.removeAll();
41         ModuleRepository repo = SCLOsgi.MODULE_REPOSITORY;
42         Name localName = Name.create(moduleName, valueName.name);
43         repo.getSourceRepository().forAllModules(new TObjectProcedure<String>() {
44             
45             @Override
46             public boolean execute(String moduleName) {
47                 Failable<Module> failableModule = repo.getModule(moduleName);
48                 if (failableModule.didSucceed()) {
49                     Module module = failableModule.getResult();
50                     ModuleDebugInfo info = module.getModuleDebugInfo();
51                     if (info != null) {
52                         ArrayList<SymbolReference> results = info.symbolReferences;
53                         for (SymbolReference ref : results) {
54                             if (ref.referred.equals(valueName) || ref.referred.equals(localName)) {
55                                 result.addMatch(new Match(ref, Match.UNIT_LINE, -1, 1));
56                             }
57                         }
58                     }
59                 }
60                 return true;
61             }
62         });
63         
64         Collection<SCLExpressionTableEntry> results = UsedSCLExpressionsRequest.execute();
65         for (SCLExpressionTableEntry entry : results) {
66             if (entry.getContent().contains(valueName.name)) {
67                 result.addMatch(new Match(entry, Match.UNIT_LINE, -1, 1));
68             }
69         }
70         
71         return Status.OK_STATUS;
72     }
73
74     @Override
75     public String getLabel() {
76         return Messages.SCLSearchQuery_SearchReferencesFor;
77     }
78
79     @Override
80     public boolean canRerun() {
81         return true;
82     }
83
84     @Override
85     public boolean canRunInBackground() {
86         return true;
87     }
88
89     @Override
90     public ISearchResult getSearchResult() {
91         if (result == null) {
92             result = new SCLSearchResult(this);
93             new SearchResultUpdater(result);
94         }
95         return result;
96     }
97
98     public String getValueName() {
99         return valueName.toString();
100     }
101
102 }