]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/source/repository/CompositeModuleSourceRepository.java
82bb0bcf94368296ccc083adb5f3e6e196777878
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / source / repository / CompositeModuleSourceRepository.java
1 package org.simantics.scl.compiler.source.repository;
2
3 import org.simantics.scl.compiler.module.repository.UpdateListener;
4 import org.simantics.scl.compiler.source.ModuleSource;
5
6 import gnu.trove.procedure.TObjectProcedure;
7
8 public class CompositeModuleSourceRepository implements ModuleSourceRepository {
9     public final ModuleSourceRepository[] children;
10
11     public CompositeModuleSourceRepository(ModuleSourceRepository ... children) {
12         this.children = children;
13     }
14
15     @Override
16     public ModuleSource getModuleSource(String moduleName,
17             UpdateListener listener) {
18         ModuleSource result = null;
19         for(ModuleSourceRepository sourceRepository : children) {
20             ModuleSource source = sourceRepository.getModuleSource(moduleName, listener);
21             if(source != null) {
22                 if(result != null) {
23                     double resultPriority = result.getPriority();
24                     double sourcePriority = source.getPriority();
25                     if(resultPriority > sourcePriority)
26                         continue;
27                     if(resultPriority == sourcePriority)
28                         throw new RuntimeException("Module " + moduleName + " has two sources " + result + ", " +
29                                 source + " with the same priority.");
30                 }
31                 result = source;
32             }
33         }
34         return result;
35     }
36     
37     @Override
38     public String getDocumentation(String documentationName) {
39         for(ModuleSourceRepository sourceRepository : children) {
40             String documentation = sourceRepository.getDocumentation(documentationName);
41             if(documentation != null)
42                 return documentation;
43         }
44         return null;
45     }
46
47     @Override
48     public void forAllModules(TObjectProcedure<String> procedure) {
49         for(ModuleSourceRepository sourceRepository : children)
50             sourceRepository.forAllModules(procedure);
51     }
52     
53     @Override
54     public void forAllDocumentations(TObjectProcedure<String> procedure) {
55         for(ModuleSourceRepository sourceRepository : children)
56             sourceRepository.forAllDocumentations(procedure);
57     }
58
59     @Override
60     public void checkUpdates() {
61     }
62
63     @Override
64     public void clear() {
65         for (ModuleSourceRepository child : children)
66             child.clear();
67     }
68 }