public static DynamicPlugin loadYaml()

in wayang-commons/wayang-core/src/main/java/org/apache/wayang/core/plugin/DynamicPlugin.java [96:212]


    public static DynamicPlugin loadYaml(String yamlUrl) {
        // Load YAML file.
        final FileSystem fileSystem = FileSystems.getFileSystem(yamlUrl).orElseThrow(
                () -> new WayangException(String.format("No filesystem for %s.", yamlUrl))
        );
        Object yaml;
        try (final InputStream inputStream = fileSystem.open(yamlUrl)) {
            yaml = new Yaml().load(inputStream);
        } catch (IOException e) {
            throw new WayangException(String.format("Could not load %s.", yamlUrl));
        }

        DynamicPlugin plugin = new DynamicPlugin();
        try {
            // Evaluate YAML file.
            DynamicPlugin.<Map<String, Object>>ifPresent(yaml, Map.class, values -> {
                // Platforms.
                DynamicPlugin.<Map<String, Object>>ifPresent(values.get("platforms"), Map.class, platforms -> {
                    DynamicPlugin.<List<String>>ifPresent(platforms.get("include"), List.class, expressions -> {
                        for (String expression : expressions) {
                            Object eval = ReflectionUtils.evaluate(expression);
                            if (eval instanceof Platform) {
                                plugin.addRequiredPlatform((Platform) eval);
                            } else {
                                Collection<?> platformCollection = (Collection<?>) eval;
                                for (Object platform : platformCollection) {
                                    plugin.addRequiredPlatform((Platform) platform);
                                }
                            }
                        }
                    });
                    DynamicPlugin.<List<String>>ifPresent(platforms.get("exclude"), List.class, expressions -> {
                        for (String expression : expressions) {
                            Object eval = ReflectionUtils.evaluate(expression);
                            if (eval instanceof Platform) {
                                plugin.excludeRequiredPlatform((Platform) eval);
                            } else {
                                Collection<?> platformCollection = (Collection<?>) eval;
                                for (Object platform : platformCollection) {
                                    plugin.excludeRequiredPlatform((Platform) platform);
                                }
                            }
                        }
                    });
                });

                // Mappings.
                DynamicPlugin.<Map<String, Object>>ifPresent(values.get("mappings"), Map.class, mappings -> {
                    DynamicPlugin.<List<String>>ifPresent(mappings.get("include"), List.class, expressions -> {
                        for (String expression : expressions) {
                            Object eval = ReflectionUtils.evaluate(expression);
                            if (eval instanceof Mapping) {
                                plugin.addMapping((Mapping) eval);
                            } else {
                                Collection<?> collection = (Collection<?>) eval;
                                for (Object element : collection) {
                                    plugin.addMapping((Mapping) element);
                                }
                            }
                        }
                    });
                    DynamicPlugin.<List<String>>ifPresent(mappings.get("exclude"), List.class, expressions -> {
                        for (String expression : expressions) {
                            Object eval = ReflectionUtils.evaluate(expression);
                            if (eval instanceof Mapping) {
                                plugin.excludeMapping((Mapping) eval);
                            } else {
                                Collection<?> collection = (Collection<?>) eval;
                                for (Object element : collection) {
                                    plugin.excludeMapping((Mapping) element);
                                }
                            }
                        }
                    });
                });

                // ChannelConversions.
                DynamicPlugin.<Map<String, Object>>ifPresent(values.get("conversions"), Map.class, conversions -> {
                    DynamicPlugin.<List<String>>ifPresent(conversions.get("include"), List.class, expressions -> {
                        for (String expression : expressions) {
                            Object eval = ReflectionUtils.evaluate(expression);
                            if (eval instanceof ChannelConversion) {
                                plugin.addChannelConversion((ChannelConversion) eval);
                            } else {
                                Collection<?> collection = (Collection<?>) eval;
                                for (Object element : collection) {
                                    plugin.addChannelConversion((ChannelConversion) element);
                                }
                            }
                        }
                    });
                    DynamicPlugin.<List<String>>ifPresent(conversions.get("exclude"), List.class, expressions -> {
                        for (String expression : expressions) {
                            Object eval = ReflectionUtils.evaluate(expression);
                            if (eval instanceof ChannelConversion) {
                                plugin.excludeChannelConversion((ChannelConversion) eval);
                            } else {
                                Collection<?> collection = (Collection<?>) eval;
                                for (Object element : collection) {
                                    plugin.excludeChannelConversion((ChannelConversion) element);
                                }
                            }
                        }
                    });
                });

                // Properties.
                DynamicPlugin.<Map<String, Object>>ifPresent(values.get("properties"), Map.class, properties -> {
                    properties.forEach(plugin::addProperty);
                });
            });

            return plugin;
        } catch (Exception e) {
            throw new WayangException(String.format("Configuration file %s seems to be corrupt.", yamlUrl), e);
        }
    }