]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.scl.osgi/src/org/simantics/scl/osgi/SCLOsgi.java
Simupedia tuning
[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.ConcreteModule;
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.runtime.RuntimeModule;
13 import org.simantics.scl.compiler.source.repository.ModuleSourceRepository;
14 import org.simantics.scl.compiler.testing.repository.TestRepository;
15 import org.simantics.scl.osgi.internal.Activator;
16 import org.simantics.scl.osgi.internal.ServiceBasedModuleSourceRepository;
17 import org.simantics.scl.osgi.internal.ServiceBasedTestRepository;
18
19 import gnu.trove.procedure.TObjectProcedure;
20
21
22 public class SCLOsgi {
23
24     private SCLOsgi() {}
25     
26     public static ModuleSourceRepository SOURCE_REPOSITORY = new ServiceBasedModuleSourceRepository(Activator.getContext());
27     public static ModuleRepository MODULE_REPOSITORY = new ModuleRepository(SOURCE_REPOSITORY);
28     public static TestRepository TEST_REPOSITORY = new ServiceBasedTestRepository(Activator.getContext());
29
30     static {
31         MODULE_REPOSITORY.setAdvisor(new ModuleCompilationOptionsAdvisor() {
32             ModuleCompilationOptions options = null;
33             @Override
34             public ModuleCompilationOptions getOptions(String moduleName) {
35                 if(options == null) {
36                     options = new ModuleCompilationOptions(false);
37                     options.collectDebugInfo = Activator.getContext().getProperty("osgi.dev") != null; //$NON-NLS-1$
38                 }
39                 return options; 
40             }
41         });
42     }
43     
44     public static String compileAllModules() {
45         ArrayList<String> modulesWithErrors = new ArrayList<String>(); 
46         SCLOsgi.SOURCE_REPOSITORY.forAllModules(new TObjectProcedure<String>() {
47             @Override
48             public boolean execute(String moduleName) {
49                 System.out.print(moduleName);
50                 System.out.print(" - ");
51                 Failable<Module> module = SCLOsgi.MODULE_REPOSITORY.getModule(moduleName);
52                 if(module.didSucceed()) {
53                     System.out.println("succeeded");
54                 } else if(module == DoesNotExist.INSTANCE)
55                     System.out.println("does not exist"); // should not happen
56                 else {
57                     System.out.println("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     
73     public static String compileAllModules2() {
74         ArrayList<String> modulesWithErrors = new ArrayList<String>(); 
75         SCLOsgi.SOURCE_REPOSITORY.forAllModules(new TObjectProcedure<String>() {
76             @Override
77             public boolean execute(String moduleName) {
78                 System.out.print(moduleName);
79                 System.out.print(" - ");
80                 Failable<Module> module = SCLOsgi.MODULE_REPOSITORY.getModule(moduleName);
81                 if(module.didSucceed()) {
82                     System.out.println("succeeded");
83                 } else if(module == DoesNotExist.INSTANCE)
84                     System.out.println("does not exist"); // should not happen
85                 else {
86                     System.out.println("error");
87                     modulesWithErrors.add(moduleName);
88                 }
89                 return true;
90             }
91         });
92         SCLOsgi.SOURCE_REPOSITORY.forAllModules(new TObjectProcedure<String>() {
93             @Override
94             public boolean execute(String moduleName) {
95                 System.out.print(moduleName);
96                 System.out.print(" - ");
97                 Failable<Module> module = SCLOsgi.MODULE_REPOSITORY.getModule(moduleName);
98                 if(module.didSucceed()) {
99                     Failable<RuntimeModule> frm = SCLOsgi.MODULE_REPOSITORY.getRuntimeModule(moduleName);
100                     RuntimeModule rm = frm.getResult();
101                     rm.loadReferences();
102                     System.out.println("succeeded");
103                 } else if(module == DoesNotExist.INSTANCE)
104                     System.out.println("does not exist"); // should not happen
105                 else {
106                     System.out.println("error");
107                     modulesWithErrors.add(moduleName);
108                 }
109                 return true;
110             }
111         });
112         if(!modulesWithErrors.isEmpty()) {
113             StringBuilder b = new StringBuilder();
114             b.append("Some SCL modules failed to compile:");
115             for(String module : modulesWithErrors)
116                 b.append(' ').append(module);
117             return b.toString();
118         }
119         return null;
120     }
121     
122 }