XMLSourceCacheParser.cc

Go to the documentation of this file.
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

Generated on Thu Jul 6 00:07:21 2006 for zypp by  doxygen 1.4.6