*/
@Override
public List<ModuleDescriptor> parse(String name, String config, ParsingContext parsingContext) {
StreamConfigParser parser = new StreamConfigParser(repository);
StreamNode stream = parser.parse(name, config);
Deque<ModuleDescriptor.Builder> builders = new LinkedList<ModuleDescriptor.Builder>();
List<ModuleNode> moduleNodes = stream.getModuleNodes();
for (int m = moduleNodes.size() - 1; m >= 0; m--) {
ModuleNode moduleNode = moduleNodes.get(m);
ModuleDescriptor.Builder builder =
new ModuleDescriptor.Builder()
.setGroup(name)
.setModuleName(moduleNode.getName())
.setModuleLabel(moduleNode.getLabelName())
.setIndex(m);
if (moduleNode.hasArguments()) {
ArgumentNode[] arguments = moduleNode.getArguments();
for (ArgumentNode argument : arguments) {
builder.setParameter(argument.getName(), argument.getValue());
}
}
builders.add(builder);
}
SourceChannelNode sourceChannel = stream.getSourceChannelNode();
if (sourceChannel != null) {
if (parsingContext.supportsNamedChannels()) {
builders.getLast().setSourceChannelName(sourceChannel.getChannelName());
}
else {
throw new StreamDefinitionException(config, sourceChannel.getStartPos(),
NAMED_CHANNELS_UNSUPPORTED_HERE);
}
}
SinkChannelNode sinkChannel = stream.getSinkChannelNode();
if (sinkChannel != null) {
if (parsingContext.supportsNamedChannels()) {
builders.getFirst().setSinkChannelName(sinkChannel.getChannelName());
}
else {