00001 /*---------------------------------------------------------------------\ 00002 | ____ _ __ __ ___ | 00003 | |__ / \ / / . \ . \ | 00004 | / / \ V /| _/ _/ | 00005 | / /__ | | | | | | | 00006 | /_____||_| |_| |_| | 00007 | | 00008 \---------------------------------------------------------------------*/ 00013 #include <zypp/parser/xmlstore/XMLPatternParser.h> 00014 #include <zypp/parser/xmlstore/XMLResObjectParser.h> 00015 00016 #include <zypp/parser/LibXMLHelper.h> 00017 #include <istream> 00018 #include <string> 00019 #include "zypp/parser/xml_parser_assert.h" 00020 #include <libxml/xmlreader.h> 00021 #include <libxml/tree.h> 00022 #include <zypp/base/Logger.h> 00023 #include <zypp/parser/xmlstore/schemanames.h> 00024 00025 using namespace std; 00026 namespace zypp { 00027 namespace parser { 00028 namespace xmlstore { 00029 00030 XMLPatternParser::XMLPatternParser() 00031 { } 00032 00033 XMLPatternParser::XMLPatternParser(XMLPatternData_Ptr& entry) 00034 : XMLNodeIterator<XMLPatternData_Ptr>(entry) 00035 { } 00036 00037 00038 XMLPatternParser::~XMLPatternParser() 00039 { } 00040 00041 00042 // select for which elements process() will be called 00043 bool 00044 XMLPatternParser::isInterested(const xmlNodePtr nodePtr) 00045 { 00046 return _helper.isElement(nodePtr) && _helper.name(nodePtr) == "pattern"; 00047 } 00048 00049 // do the actual processing 00050 XMLPatternData_Ptr 00051 XMLPatternParser::process(const xmlTextReaderPtr reader) 00052 { 00053 xml_assert(reader); 00054 XMLPatternData_Ptr dataPtr = new XMLPatternData; 00055 xmlNodePtr dataNode = xmlTextReaderExpand(reader); 00056 xml_assert(dataNode); 00057 00058 parseResObjectCommonData( dataPtr, dataNode); 00059 parseDependencies( dataPtr, dataNode); 00060 00061 for (xmlNodePtr child = dataNode->children; child && child != dataNode; child = child->next) 00062 { 00063 if (_helper.isElement(child)) 00064 { 00065 string name = _helper.name(child); 00066 00067 if (name == "default") { 00068 dataPtr->default_ = _helper.content(child); 00069 } 00070 else if (name == "uservisible") { 00071 dataPtr->userVisible = (_helper.content(child) == "false") ? false : true; 00072 } 00073 else if (name == "category") { 00074 dataPtr->category.setText(_helper.content(child)); 00075 } 00076 else if (name == "icon") { 00077 dataPtr->icon = _helper.content(child); 00078 } 00079 else if (name == "script") { 00080 dataPtr->script = _helper.content(child); 00081 } 00082 } 00083 } 00084 return dataPtr; 00085 } /* end process */ 00086 00087 00088 XMLPatternParser::XMLPatternParser(istream &is, const string &baseUrl) 00089 : XMLNodeIterator<XMLPatternData_Ptr>(is, baseUrl,PATTERNSCHEMA) 00090 { 00091 fetchNext(); 00092 } 00093 00094 } // namespace yum 00095 } // namespace parser 00096 } // namespace zypp