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);
}
}