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 == "summary") 00068 { 00069 dataPtr->summary.setText(_helper.content(child), Locale(_helper.attribute(child,"lang"))); 00070 } 00071 else if (name == "default") { 00072 dataPtr->default_ = _helper.content(child); 00073 } 00074 else if (name == "uservisible") { 00075 dataPtr->userVisible = _helper.content(child); 00076 } 00077 else if (name == "description") { 00078 dataPtr->description.setText(_helper.content(child), Locale(_helper.attribute(child,"lang"))); 00079 } 00080 else if (name == "category") { 00081 dataPtr->category.setText(_helper.content(child)); 00082 } 00083 else if (name == "icon") { 00084 dataPtr->icon = _helper.content(child); 00085 } 00086 else if (name == "script") { 00087 dataPtr->script = _helper.content(child); 00088 } 00089 } 00090 } 00091 return dataPtr; 00092 } /* end process */ 00093 00094 00095 XMLPatternParser::XMLPatternParser(istream &is, const string &baseUrl) 00096 : XMLNodeIterator<XMLPatternData_Ptr>(is, baseUrl,PATTERNSCHEMA) 00097 { 00098 fetchNext(); 00099 } 00100 00101 } // namespace yum 00102 } // namespace parser 00103 } // namespace zypp
1.4.6