Search in sources :

Example 6 with RepositoryDTO

use of org.phoenicis.repository.dto.RepositoryDTO in project POL-POM-5 by PhoenicisOrg.

the class EngineSettingsManager method fetchAvailableEngineSettings.

/**
 * Fetches the available engine settings
 *
 * @param repositoryDTO The repository containing the engine settings
 * @param callback The callback which recieves the found engine settings
 * @param errorCallback The callback which will be executed if an error occurs
 */
public void fetchAvailableEngineSettings(RepositoryDTO repositoryDTO, Consumer<Map<String, List<EngineSetting>>> callback, Consumer<Exception> errorCallback) {
    executorService.execute(() -> {
        final List<SettingConfig> configurations = fetchSettingConfigurations(repositoryDTO);
        // the script engine needs to be created inside the correct thread otherwise GraalJS throws an error
        final PhoenicisScriptEngine phoenicisScriptEngine = phoenicisScriptEngineFactory.createEngine();
        final Map<String, List<EngineSetting>> result = configurations.stream().collect(Collectors.groupingBy(configuration -> configuration.engineId, Collectors.mapping(configuration -> {
            final String include = String.format("include(\"engines.%s.settings.%s\");", configuration.engineId, configuration.settingId);
            final Value settingClass = (Value) phoenicisScriptEngine.evalAndReturn(include, errorCallback);
            return settingClass.newInstance().as(EngineSetting.class);
        }, Collectors.toList())));
        callback.accept(result);
    });
}
Also used : Consumer(java.util.function.Consumer) CategoryDTO(org.phoenicis.repository.dto.CategoryDTO) List(java.util.List) RepositoryDTO(org.phoenicis.repository.dto.RepositoryDTO) Value(org.graalvm.polyglot.Value) Map(java.util.Map) PhoenicisScriptEngine(org.phoenicis.scripts.engine.implementation.PhoenicisScriptEngine) PhoenicisScriptEngineFactory(org.phoenicis.scripts.engine.PhoenicisScriptEngineFactory) Collectors(java.util.stream.Collectors) ExecutorService(java.util.concurrent.ExecutorService) ApplicationDTO(org.phoenicis.repository.dto.ApplicationDTO) Value(org.graalvm.polyglot.Value) List(java.util.List) PhoenicisScriptEngine(org.phoenicis.scripts.engine.implementation.PhoenicisScriptEngine)

Example 7 with RepositoryDTO

use of org.phoenicis.repository.dto.RepositoryDTO in project POL-POM-5 by PhoenicisOrg.

the class EnginesManager method fetchAvailableEngines.

/**
 * Fetches the available engines
 *
 * @param repositoryDTO The repository containing the engines
 * @param callback The callback which receives the fetched engines
 * @param errorCallback The callback which is executed if an error occurs
 */
public void fetchAvailableEngines(RepositoryDTO repositoryDTO, Consumer<Map<String, Engine>> callback, Consumer<Exception> errorCallback) {
    final List<String> engineIds = repositoryDTO.getTypes().stream().filter(type -> type.getId().equals("engines")).flatMap(type -> type.getCategories().stream()).map(engine -> engine.getId().replaceAll("^.*\\.", "")).collect(Collectors.toList());
    executorService.execute(() -> {
        final PhoenicisScriptEngine phoenicisScriptEngine = phoenicisScriptEngineFactory.createEngine();
        Map<String, Engine> result = engineIds.stream().collect(Collectors.toMap(Function.identity(), engineId -> {
            final String include = String.format("include(\"engines.%s.engine.implementation\");", engineId);
            final Value engineClass = (Value) phoenicisScriptEngine.evalAndReturn(include, errorCallback);
            return engineClass.newInstance().as(Engine.class);
        }));
        callback.accept(result);
    });
}
Also used : CategoryDTO(org.phoenicis.repository.dto.CategoryDTO) RepositoryDTO(org.phoenicis.repository.dto.RepositoryDTO) Logger(org.slf4j.Logger) Value(org.graalvm.polyglot.Value) ObjectMapper(com.fasterxml.jackson.databind.ObjectMapper) PhoenicisScriptEngine(org.phoenicis.scripts.engine.implementation.PhoenicisScriptEngine) LoggerFactory(org.slf4j.LoggerFactory) IOException(java.io.IOException) PhoenicisScriptEngineFactory(org.phoenicis.scripts.engine.PhoenicisScriptEngineFactory) Function(java.util.function.Function) Collectors(java.util.stream.Collectors) ArrayList(java.util.ArrayList) Consumer(java.util.function.Consumer) List(java.util.List) EngineCategoryDTO(org.phoenicis.engines.dto.EngineCategoryDTO) Safe(org.phoenicis.configuration.security.Safe) Map(java.util.Map) TypeReference(com.fasterxml.jackson.core.type.TypeReference) EngineSubCategoryDTO(org.phoenicis.engines.dto.EngineSubCategoryDTO) Collections(java.util.Collections) ExecutorService(java.util.concurrent.ExecutorService) Value(org.graalvm.polyglot.Value) PhoenicisScriptEngine(org.phoenicis.scripts.engine.implementation.PhoenicisScriptEngine) PhoenicisScriptEngine(org.phoenicis.scripts.engine.implementation.PhoenicisScriptEngine)

Aggregations

RepositoryDTO (org.phoenicis.repository.dto.RepositoryDTO)7 List (java.util.List)4 Map (java.util.Map)4 ExecutorService (java.util.concurrent.ExecutorService)4 Consumer (java.util.function.Consumer)4 Collectors (java.util.stream.Collectors)4 Value (org.graalvm.polyglot.Value)4 CategoryDTO (org.phoenicis.repository.dto.CategoryDTO)4 PhoenicisScriptEngineFactory (org.phoenicis.scripts.engine.PhoenicisScriptEngineFactory)4 PhoenicisScriptEngine (org.phoenicis.scripts.engine.implementation.PhoenicisScriptEngine)4 IOException (java.io.IOException)3 RepositoryException (org.phoenicis.repository.RepositoryException)3 TypeReference (com.fasterxml.jackson.core.type.TypeReference)2 ObjectMapper (com.fasterxml.jackson.databind.ObjectMapper)2 ArrayList (java.util.ArrayList)2 Collections (java.util.Collections)2 Function (java.util.function.Function)2 Safe (org.phoenicis.configuration.security.Safe)2 EngineCategoryDTO (org.phoenicis.engines.dto.EngineCategoryDTO)2 EngineSubCategoryDTO (org.phoenicis.engines.dto.EngineSubCategoryDTO)2