]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - 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
old mode 100755 (executable)
new mode 100644 (file)
index 9deb811..90876bb
@@ -1,19 +1,72 @@
 package org.simantics.scl.osgi;
 
+import java.util.ArrayList;
+
+import org.simantics.scl.compiler.errors.DoesNotExist;
+import org.simantics.scl.compiler.errors.Failable;
+import org.simantics.scl.compiler.module.Module;
+import org.simantics.scl.compiler.module.options.ModuleCompilationOptions;
+import org.simantics.scl.compiler.module.options.ModuleCompilationOptionsAdvisor;
 import org.simantics.scl.compiler.module.repository.ModuleRepository;
 import org.simantics.scl.compiler.source.repository.ModuleSourceRepository;
 import org.simantics.scl.compiler.testing.repository.TestRepository;
 import org.simantics.scl.osgi.internal.Activator;
 import org.simantics.scl.osgi.internal.ServiceBasedModuleSourceRepository;
 import org.simantics.scl.osgi.internal.ServiceBasedTestRepository;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import gnu.trove.procedure.TObjectProcedure;
 
 
 public class SCLOsgi {
 
+    private static final Logger LOGGER = LoggerFactory.getLogger(SCLOsgi.class);
+
     private SCLOsgi() {}
     
     public static ModuleSourceRepository SOURCE_REPOSITORY = new ServiceBasedModuleSourceRepository(Activator.getContext());
     public static ModuleRepository MODULE_REPOSITORY = new ModuleRepository(SOURCE_REPOSITORY);
     public static TestRepository TEST_REPOSITORY = new ServiceBasedTestRepository(Activator.getContext());
 
+    static {
+        MODULE_REPOSITORY.setAdvisor(new ModuleCompilationOptionsAdvisor() {
+            ModuleCompilationOptions options = null;
+            @Override
+            public ModuleCompilationOptions getOptions(String moduleName) {
+                if(options == null) {
+                    options = new ModuleCompilationOptions(false);
+                    options.collectDebugInfo = Activator.getContext().getProperty("osgi.dev") != null; //$NON-NLS-1$
+                }
+                return options; 
+            }
+        });
+    }
+
+    public static String compileAllModules() {
+        ArrayList<String> modulesWithErrors = new ArrayList<String>(); 
+        SCLOsgi.SOURCE_REPOSITORY.forAllModules(new TObjectProcedure<String>() {
+            @Override
+            public boolean execute(String moduleName) {
+                Failable<Module> module = SCLOsgi.MODULE_REPOSITORY.getModule(moduleName);
+                if(module.didSucceed())
+                    LOGGER.trace("{} - {}", moduleName, "succeeded");
+                else if(module == DoesNotExist.INSTANCE)
+                    LOGGER.trace("{} - {}", moduleName, "does not exist"); // should not happen
+                else {
+                    LOGGER.trace("{} - {}", moduleName, "error");
+                    modulesWithErrors.add(moduleName);
+                }
+                return true;
+            }
+        });
+        if(!modulesWithErrors.isEmpty()) {
+            StringBuilder b = new StringBuilder();
+            b.append("Some SCL modules failed to compile:");
+            for(String module : modulesWithErrors)
+                b.append(' ').append(module);
+            return b.toString();
+        }
+        return null;
+    }
 }