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 <zypp/parser/xmlstore/XMLSourceCacheParser.h> 00023 00024 using namespace std; 00025 using namespace zypp::storage; 00026 00027 namespace zypp { 00028 namespace parser { 00029 namespace xmlstore { 00030 00031 XMLSourceCacheParser::XMLSourceCacheParser() 00032 { } 00033 00034 XMLSourceCacheParser::XMLSourceCacheParser(SourceData_Ptr& entry) 00035 : zypp::parser::XMLNodeIterator<SourceData_Ptr>(entry) 00036 { } 00037 00038 00039 XMLSourceCacheParser::~XMLSourceCacheParser() 00040 { } 00041 00042 00043 // select for which elements process() will be called 00044 bool 00045 XMLSourceCacheParser::isInterested(const xmlNodePtr nodePtr) 00046 { 00047 return _helper.isElement(nodePtr) && _helper.name(nodePtr) == "source"; 00048 } 00049 00050 // do the actual processing 00051 SourceData_Ptr 00052 XMLSourceCacheParser::process(const xmlTextReaderPtr reader) 00053 { 00054 assert(reader); 00055 SourceData_Ptr dataPtr( new PersistentStorage::SourceData ); 00056 xmlNodePtr dataNode = xmlTextReaderExpand(reader); 00057 assert(dataNode); 00058 00059 for (xmlNodePtr child = dataNode->children; child && child != dataNode; child = child->next) 00060 { 00061 if (_helper.isElement(child)) 00062 { 00063 string name = _helper.name(child); 00064 if (name == "enabled") 00065 { 00066 dataPtr->enabled = (_helper.content(child) == "true") ? true : false; 00067 } 00068 else if (name == "auto-refresh") 00069 { 00070 dataPtr->autorefresh = (_helper.content(child) == "true") ? true : false; 00071 } 00072 else if (name == "type") 00073 { 00074 dataPtr->type = _helper.content(child); 00075 } 00076 else if (name == "product-dir") 00077 { 00078 dataPtr->product_dir = _helper.content(child); 00079 } 00080 else if (name == "cache-dir") 00081 { 00082 dataPtr->cache_dir = _helper.content(child); 00083 } 00084 else if (name == "alias") 00085 { 00086 dataPtr->alias = _helper.content(child); 00087 } 00088 else if (name == "url") 00089 { 00090 dataPtr->url = _helper.content(child); 00091 } 00092 else 00093 { 00094 WAR << "SourceCache entry contains the unknown element <" << name << "> " 00095 << _helper.positionInfo(child) << ", skipping" << endl; 00096 } 00097 } 00098 } 00099 return dataPtr; 00100 } /* end process */ 00101 00102 00103 XMLSourceCacheParser::XMLSourceCacheParser(istream &is, const string &baseUrl) 00104 : zypp::parser::XMLNodeIterator<SourceData_Ptr>(is, baseUrl, SOURCESCHEMA) 00105 { 00106 fetchNext(); 00107 } 00108 } 00109 } // namespace parser 00110 } // namespace zypp