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 "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

Generated on Tue Nov 28 16:49:30 2006 for zypp by  doxygen 1.5.0