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 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(SourceInfo_Ptr &entry) 00034 : zypp::parser::XMLNodeIterator<SourceInfo_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 SourceInfo_Ptr 00051 XMLSourceCacheParser::process(const xmlTextReaderPtr reader) 00052 { 00053 assert(reader); 00054 SourceInfo_Ptr dataPtr( new source::SourceInfo ); 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 else 00070 dataPtr->setEnabled(boost::indeterminate); 00071 } 00072 else if (name == "auto-refresh") 00073 { 00074 if ( (_helper.content(child) == "true") || (_helper.content(child) == "1") ) 00075 dataPtr->setAutorefresh(true); 00076 else if ( (_helper.content(child) == "false") || (_helper.content(child) == "0") ) 00077 dataPtr->setAutorefresh(false); 00078 else 00079 dataPtr->setAutorefresh(boost::indeterminate); 00080 } 00081 else if (name == "type") 00082 { 00083 dataPtr->setType(_helper.content(child)); 00084 } 00085 else if (name == "product-dir") 00086 { 00087 dataPtr->setPath(_helper.content(child)); 00088 } 00089 else if (name == "cache-dir") 00090 { 00091 dataPtr->setCacheDir(_helper.content(child)); 00092 } 00093 else if (name == "alias") 00094 { 00095 dataPtr->setAlias(_helper.content(child)); 00096 } 00097 else if (name == "url") 00098 { 00099 dataPtr->setUrl(_helper.content(child)); 00100 } 00101 else 00102 { 00103 WAR << "SourceCache entry contains the unknown element <" << name << "> " 00104 << _helper.positionInfo(child) << ", skipping" << endl; 00105 } 00106 } 00107 } 00108 return dataPtr; 00109 } /* end process */ 00110 00111 00112 XMLSourceCacheParser::XMLSourceCacheParser(std::istream &is, const std::string &baseUrl) 00113 : zypp::parser::XMLNodeIterator<SourceInfo_Ptr>(is, baseUrl, SOURCESCHEMA) 00114 { 00115 fetchNext(); 00116 } 00117 } 00118 } // namespace parser 00119 } // namespace zypp
1.5.0