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

Generated on Tue Sep 25 19:23:03 2007 for libzypp by  doxygen 1.5.3