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