]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/source/repository/ClassModuleSourceRepository.java
873859a2de6a65c5a2eec24e853523bafae09913
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / source / repository / ClassModuleSourceRepository.java
1 package org.simantics.scl.compiler.source.repository;
2
3 import java.io.IOException;
4 import java.net.URL;
5
6 import org.simantics.scl.compiler.module.ImportDeclaration;
7 import org.simantics.scl.compiler.module.repository.UpdateListener;
8 import org.simantics.scl.compiler.source.ClassModuleSource;
9 import org.simantics.scl.compiler.source.ModuleSource;
10
11 import gnu.trove.procedure.TObjectProcedure;
12 import gnu.trove.set.hash.THashSet;
13
14 public class ClassModuleSourceRepository extends AbstractModuleSourceRepository {
15     
16     private final Class<?> clazz;
17     private final String path;
18     private final ClassLoader classLoader;
19     private final THashSet<String> modules = new THashSet<String>();
20     
21     public ClassModuleSourceRepository(Class<?> clazz, ClassLoader classLoader, String path) throws IOException {
22         this.clazz = clazz;
23         this.path = path;
24         this.classLoader = classLoader;
25         URL url = clazz.getResource(path);
26         if(url == null)
27             throw new IOException("Didn't find a folder " + path + " relative to the class " + clazz.getName() + ".");
28         ModuleBrowsingUtil.collectModuleSourcesAt(modules, url);
29     }
30
31     @Override
32     public ModuleSource getModuleSource(String moduleName,
33             UpdateListener listener) {
34         if(!modules.contains(moduleName))
35             return null;
36         return new ClassModuleSource(moduleName, clazz, classLoader, path + "/" + moduleName + ".scl", getBuiltinImports());
37     }
38
39     @Override
40     public void forAllModules(TObjectProcedure<String> procedure) {
41         modules.forEach(procedure);
42     }
43     
44     protected ImportDeclaration[] getBuiltinImports() {
45         return ClassModuleSource.DEFAULT_IMPORTS;
46     }
47
48     @Override
49     public void clear() {
50         
51     }
52 }