e6bddee7e3c9ca9bf4ac140d93db5999573718e4
[simantics/platform.git] / bundles / org.simantics.scl.osgi / src / org / simantics / scl / osgi / SCLOsgi.java
1 package org.simantics.scl.osgi;
2
3 import java.util.ArrayList;
4
5 import org.eclipse.core.internal.runtime.PlatformActivator;
6 import org.simantics.scl.compiler.errors.DoesNotExist;
7 import org.simantics.scl.compiler.errors.Failable;
8 import org.simantics.scl.compiler.module.Module;
9 import org.simantics.scl.compiler.module.options.ModuleCompilationOptions;
10 import org.simantics.scl.compiler.module.options.ModuleCompilationOptionsAdvisor;
11 import org.simantics.scl.compiler.module.repository.ModuleRepository;
12 import org.simantics.scl.compiler.source.repository.ModuleSourceRepository;
13 import org.simantics.scl.compiler.testing.repository.TestRepository;
14 import org.simantics.scl.osgi.internal.Activator;
15 import org.simantics.scl.osgi.internal.ServiceBasedModuleSourceRepository;
16 import org.simantics.scl.osgi.internal.ServiceBasedTestRepository;
17
18 import gnu.trove.procedure.TObjectProcedure;
19
20
21 public class SCLOsgi {
22
23     private SCLOsgi() {}
24     
25     public static ModuleSourceRepository SOURCE_REPOSITORY = new ServiceBasedModuleSourceRepository(Activator.getContext());
26     public static ModuleRepository MODULE_REPOSITORY = new ModuleRepository(SOURCE_REPOSITORY);
27     public static TestRepository TEST_REPOSITORY = new ServiceBasedTestRepository(Activator.getContext());
28
29     static {
30         MODULE_REPOSITORY.setAdvisor(new ModuleCompilationOptionsAdvisor() {
31             ModuleCompilationOptions options = null;
32             @Override
33             public ModuleCompilationOptions getOptions(String moduleName) {
34                 if(options == null) {
35                     options = new ModuleCompilationOptions(false);
36                     options.collectDebugInfo = Activator.getContext().getProperty("osgi.dev") != null; //$NON-NLS-1$
37                 }
38                 return options; 
39             }
40         });
41     }
42     
43     public static String compileAllModules() {
44         ArrayList<String> modulesWithErrors = new ArrayList<String>(); 
45         SCLOsgi.SOURCE_REPOSITORY.forAllModules(new TObjectProcedure<String>() {
46             @Override
47             public boolean execute(String moduleName) {
48                 System.out.print(moduleName);
49                 System.out.print(" - ");
50                 Failable<Module> module = SCLOsgi.MODULE_REPOSITORY.getModule(moduleName);
51                 if(module.didSucceed())
52                     System.out.println("succeeded");
53                 else if(module == DoesNotExist.INSTANCE)
54                     System.out.println("does not exist"); // should not happen
55                 else {
56                     System.out.println("error");
57                     modulesWithErrors.add(moduleName);
58                 }
59                 return true;
60             }
61         });
62         if(!modulesWithErrors.isEmpty()) {
63             StringBuilder b = new StringBuilder();
64             b.append("Some SCL modules failed to compile:");
65             for(String module : modulesWithErrors)
66                 b.append(' ').append(module);
67             return b.toString();
68         }
69         return null;
70     }
71 }