backup
[platform/upstream/libzypp.git] / zypp / parser / yum / RepomdFileReader.cc
1 /*---------------------------------------------------------------------\
2 |                          ____ _   __ __ ___                          |
3 |                         |__  / \ / / . \ . \                         |
4 |                           / / \ V /|  _/  _/                         |
5 |                          / /__ | | | | | |                           |
6 |                         /_____||_| |_| |_|                           |
7 |                                                                      |
8 \---------------------------------------------------------------------*/
9
10 #include <fstream>
11 #include "zypp/base/String.h"
12 #include "zypp/base/Logger.h"
13 #include "zypp/parser/yum/RepomdFileReader.h"
14
15
16 using namespace std;
17 using namespace zypp::xml;
18 using zypp::source::yum::YUMResourceType;
19
20 namespace zypp { namespace parser { namespace yum {
21
22 RepomdFileReader::RepomdFileReader( const Pathname &repomd_file, ProcessResource callback )
23     : _tag(tag_NONE), _type(YUMResourceType::NONE_e), _callback(callback) 
24 {
25   Reader reader( repomd_file );
26   MIL << "Reading " << repomd_file << endl;
27   reader.foreachNode( bind( &RepomdFileReader::consumeNode, this, _1 ) );
28 }
29   
30 bool RepomdFileReader::consumeNode( Reader & reader_r )
31 {
32   //MIL << reader_r->name() << endl;
33   std::string data_type;
34   if ( reader_r->nodeType() == XML_READER_TYPE_ELEMENT )
35   {
36     if ( reader_r->name() == "repomd" )
37     {
38       _tag = tag_Repomd;
39       return true;
40     }
41     if ( reader_r->name() == "data" )
42     {
43       _tag = tag_Data;
44       _type = YUMResourceType(reader_r->getAttribute("type").asString());
45       return true;
46     }
47     if ( reader_r->name() == "location" )
48     {
49       _tag = tag_Location;
50       _location.filename( reader_r->getAttribute("href").asString() );
51       return true;
52     }
53     if ( reader_r->name() == "checksum" )
54     {
55       _tag = tag_CheckSum;
56       string checksum_type = reader_r->getAttribute("type").asString() ;
57       string checksum_vaue = reader_r.nodeText().asString();
58       _location.checksum( CheckSum( checksum_type, checksum_vaue ) );
59       return true;
60     }
61     if ( reader_r->name() == "timestamp" )
62     {
63       // ignore it
64       return true;
65     }
66   }
67   else if ( reader_r->nodeType() == XML_READER_TYPE_END_ELEMENT )
68   {
69     //MIL << "end element" << endl;
70     if ( reader_r->name() == "data" )
71       _callback( _location, _type );
72     return true;
73   }
74   return true;
75 }
76
77 } } } //ns zypp::source::yum
78