YUMRepomdParser.cc

Go to the documentation of this file.
00001 /*---------------------------------------------------------------------\
00002 |                          ____ _   __ __ ___                          |
00003 |                         |__  / \ / / . \ . \                         |
00004 |                           / / \ V /|  _/  _/                         |
00005 |                          / /__ | | | | | |                           |
00006 |                         /_____||_| |_| |_|                           |
00007 |                                                                      |
00008 \---------------------------------------------------------------------*/
00013 #include <zypp/parser/yum/YUMRepomdParser.h>
00014 #include <zypp/parser/LibXMLHelper.h>
00015 #include <istream>
00016 #include <string>
00017 #include "zypp/parser/xml_parser_assert.h"
00018 #include <libxml/xmlreader.h>
00019 #include <libxml/tree.h>
00020 #include <zypp/base/Logger.h>
00021 #include <zypp/parser/yum/schemanames.h>
00022 
00023 using namespace std;
00024 namespace zypp {
00025   namespace parser {
00026     namespace yum {
00027 
00028       YUMRepomdParser::~YUMRepomdParser()
00029       { }
00030       
00031       YUMRepomdParser::YUMRepomdParser()
00032       { }
00033       
00034       YUMRepomdParser::YUMRepomdParser(YUMRepomdData_Ptr& entry)
00035       : XMLNodeIterator<YUMRepomdData_Ptr>(entry)
00036       { }
00037       
00038       
00039       // select for which elements process() will be called
00040       bool 
00041       YUMRepomdParser::isInterested(const xmlNodePtr nodePtr)
00042       {
00043         return _helper.isElement(nodePtr) && _helper.name(nodePtr) == "data";
00044       }
00045       
00046       // do the actual processing
00047       YUMRepomdData_Ptr
00048       YUMRepomdParser::process(const xmlTextReaderPtr reader)
00049       {
00050         xml_assert(reader);
00051         YUMRepomdData_Ptr repoPtr = new YUMRepomdData;
00052         xmlNodePtr dataNode = xmlTextReaderExpand(reader);
00053         xml_assert(dataNode);
00054         repoPtr->type = _helper.attribute(dataNode,"type");
00055         
00056         for (xmlNodePtr child = dataNode->children; 
00057              child && child != dataNode;
00058              child = child->next) {
00059           if (_helper.isElement(child)) {
00060             string name = _helper.name(child);
00061             if (name == "location") {
00062               repoPtr->location = _helper.attribute(child,"href");
00063             }
00064             else if (name == "checksum") {
00065               repoPtr->checksumType = _helper.attribute(child,"type");
00066               repoPtr->checksum = _helper.content(child);
00067             }
00068             else if (name == "timestamp") {
00069               repoPtr->timestamp = _helper.content(child);
00070             }
00071             else if (name == "open-checksum") {
00072               repoPtr->openChecksumType = _helper.attribute(child, "type");
00073               repoPtr->openChecksum = _helper.content(child);
00074             }
00075             else {
00076               WAR << "YUM <data> contains the unknown element <" << name << "> "
00077                 << _helper.positionInfo(child) << ", skipping" << endl;
00078             }
00079           }
00080         }
00081         return repoPtr;
00082       } /* end process */
00083       
00084         
00085       YUMRepomdParser::YUMRepomdParser(istream &is, const string &baseUrl)
00086       : XMLNodeIterator<YUMRepomdData_Ptr>(is, baseUrl,REPOMDSCHEMA)
00087       {
00088         fetchNext();
00089       }
00090       
00091     } // namespace yum
00092   } // namespace parser
00093 } // namespace zypp

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