00001 /*---------------------------------------------------------------------\ 00002 | ____ _ __ __ ___ | 00003 | |__ / \ / / . \ . \ | 00004 | / / \ V /| _/ _/ | 00005 | / /__ | | | | | | | 00006 | /_____||_| |_| |_| | 00007 | | 00008 \---------------------------------------------------------------------*/ 00013 #include <zypp/parser/LibXMLHelper.h> 00014 #include <istream> 00015 #include <string> 00016 #include <cassert> 00017 #include <libxml/xmlreader.h> 00018 #include <libxml/tree.h> 00019 #include <zypp/base/Logger.h> 00020 #include <zypp/parser/xmlstore/schemanames.h> 00021 #include "zypp/repo/RepoType.h" 00022 #include "XMLSourceCacheParser.h" 00023 00024 using namespace std; 00025 00026 namespace zypp { 00027 namespace parser { 00028 namespace xmlstore { 00029 00030 XMLSourceCacheParser::XMLSourceCacheParser() 00031 { } 00032 00033 XMLSourceCacheParser::XMLSourceCacheParser(RepoInfo_Ptr &entry) 00034 : zypp::parser::XMLNodeIterator<RepoInfo_Ptr>(entry) 00035 { } 00036 00037 00038 XMLSourceCacheParser::~XMLSourceCacheParser() 00039 { } 00040 00041 00042 // select for which elements process() will be called 00043 bool 00044 XMLSourceCacheParser::isInterested(const xmlNodePtr nodePtr) 00045 { 00046 return _helper.isElement(nodePtr) && _helper.name(nodePtr) == "source"; 00047 } 00048 00049 // do the actual processing 00050 RepoInfo_Ptr 00051 XMLSourceCacheParser::process(const xmlTextReaderPtr reader) 00052 { 00053 assert(reader); 00054 RepoInfo_Ptr dataPtr( new RepoInfo ); 00055 xmlNodePtr dataNode = xmlTextReaderExpand(reader); 00056 assert(dataNode); 00057 00058 for (xmlNodePtr child = dataNode->children; child && child != dataNode; child = child->next) 00059 { 00060 if (_helper.isElement(child)) 00061 { 00062 string name = _helper.name(child); 00063 if (name == "enabled") 00064 { 00065 if ( (_helper.content(child) == "true") || (_helper.content(child) == "1") ) 00066 dataPtr->setEnabled(true); 00067 else if ( (_helper.content(child) == "false") || (_helper.content(child) == "0") ) 00068 dataPtr->setEnabled(false); 00069 } 00070 else if (name == "auto-refresh") 00071 { 00072 if ( (_helper.content(child) == "true") || (_helper.content(child) == "1") ) 00073 dataPtr->setAutorefresh(true); 00074 else if ( (_helper.content(child) == "false") || (_helper.content(child) == "0") ) 00075 dataPtr->setAutorefresh(false); 00076 } 00077 else if (name == "type") 00078 { 00079 dataPtr->setType(repo::RepoType(_helper.content(child))); 00080 } 00081 else if (name == "alias") 00082 { 00083 dataPtr->setAlias(_helper.content(child)); 00084 } 00085 else if (name == "url") 00086 { 00087 dataPtr->addBaseUrl(_helper.content(child)); 00088 } 00089 else 00090 { 00091 WAR << "SourceCache entry contains the unknown element <" << name << "> " 00092 << _helper.positionInfo(child) << ", skipping" << endl; 00093 } 00094 } 00095 } 00096 return dataPtr; 00097 } /* end process */ 00098 00099 00100 XMLSourceCacheParser::XMLSourceCacheParser(std::istream &is, const std::string &baseUrl) 00101 : zypp::parser::XMLNodeIterator<RepoInfo_Ptr>(is, baseUrl, SOURCESCHEMA) 00102 { 00103 fetchNext(); 00104 } 00105 } 00106 } // namespace parser 00107 } // namespace zypp
1.5.3