]> gerrit.simantics Code Review - simantics/platform.git/blob
310472cdc9838ccbfee1539b4f3b276d32536db5
[simantics/platform.git] /
1 package org.simantics.scl.compiler.source.repository;
2
3 import gnu.trove.procedure.TObjectProcedure;
4 import gnu.trove.set.hash.THashSet;
5
6 import java.io.IOException;
7 import java.net.URL;
8
9 import org.simantics.scl.compiler.module.ImportDeclaration;
10 import org.simantics.scl.compiler.module.repository.UpdateListener;
11 import org.simantics.scl.compiler.source.ClassModuleSource;
12 import org.simantics.scl.compiler.source.ModuleSource;
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 }