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