Stage *PipelineReaderXML::parseElement_Writer(const ptree& tree) { Options options; StageParserContext context; std::string filename; map_t attrs; collect_attributes(attrs, tree); std::vector<Stage *> prevStages; for (auto iter = tree.begin(); iter != tree.end(); ++iter) { const std::string& name = iter->first; const ptree& subtree = iter->second; if (name == "<xmlattr>") { // already parsed -- ignore it } else if (name == "Option") { Option option = parseElement_Option(subtree); if (option.getName() == "filename") filename = option.getValue(); options.add(option); } else if (name == "Metadata") { // ignored } else if (name == "Filter" || name == "Reader") { context.addStage(); prevStages.push_back(parseElement_anystage(name, subtree)); } else { context.addUnknown(name); } } std::string type; if (attrs.count("type")) { type = attrs["type"]; context.addType(); } context.validate(); Stage& writer = m_manager.makeWriter(filename, type); for (auto sp : prevStages) writer.setInput(*sp); writer.removeOptions(options); writer.addOptions(options); return &writer; }
Filter* PipelineReader::parseElement_Filter(const ptree& tree) { Options options(m_baseOptions); // Stage* prevStage = NULL; StageParserContext context; map_t attrs; collect_attributes(attrs, tree); std::vector<Stage *> prevStages; for (auto iter = tree.begin(); iter != tree.end(); ++iter) { const std::string& name = iter->first; const ptree& subtree = iter->second; if (name == "<xmlattr>") { // already parsed } else if (name == "Option") { Option option = parseElement_Option(subtree); options.add(option); } else if (name == "Metadata") { // ignored } else if (name == "Filter" || name == "Reader") { context.addStage(); prevStages.push_back(parseElement_anystage(name, subtree)); } else { context.addUnknown(name); } } std::string type; if (attrs.count("type")) { type = attrs["type"]; context.addType(); } Filter* ptr = m_manager.addFilter(type, prevStages); ptr->setOptions(options); if (dynamic_cast<MultiFilter *>(ptr)) context.setCardinality(StageParserContext::Many); context.validate(); return ptr; }
Writer* PipelineReader::parseElement_Writer(const ptree& tree) { Options options(m_baseOptions); Stage* prevStage = NULL; StageParserContext context; map_t attrs; collect_attributes(attrs, tree); for (auto iter = tree.begin(); iter != tree.end(); ++iter) { const std::string& name = iter->first; const ptree& subtree = iter->second; if (name == "<xmlattr>") { // already parsed -- ignore it } else if (name == "Option") { Option option = parseElement_Option(subtree); options.add(option); } else if (name == "Metadata") { // ignored } else if (name == "Filter" || name == "Reader") { context.addStage(); prevStage = parseElement_anystage(name, subtree); } else { context.addUnknown(name); } } std::string type; if (attrs.count("type")) { type = attrs["type"]; context.addType(); } context.validate(); Writer* writer = m_manager.addWriter(type, prevStage); writer->setOptions(options); return writer; }