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 modulesWithErrors = new ArrayList(); SCLOsgi.SOURCE_REPOSITORY.forAllModules(new TObjectProcedure() { @Override public boolean execute(String moduleName) { Failable 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; } }