XMLResObjectParser.cc

Go to the documentation of this file.
00001 /*---------------------------------------------------------------------\
00002 |                          ____ _   __ __ ___                          |
00003 |                         |__  / \ / / . \ . \                         |
00004 |                           / / \ V /|  _/  _/                         |
00005 |                          / /__ | | | | | |                           |
00006 |                         /_____||_| |_| |_|                           |
00007 |                                                                      |
00008 \---------------------------------------------------------------------*/
00013 #include <zypp/parser/xmlstore/XMLResObjectParser.h>
00014 #include <istream>
00015 #include <string>
00016 #include "zypp/parser/xml_parser_assert.h"
00017 #include <libxml/xmlstring.h>
00018 #include <libxml/xmlreader.h>
00019 #include <libxml/tree.h>
00020 #include <zypp/parser/LibXMLHelper.h>
00021 #include <zypp/base/Logger.h>
00022 #include <zypp/parser/yum/schemanames.h>
00023 
00024 using namespace std;
00025 namespace zypp
00026 {
00027 namespace parser
00028 {
00029 namespace xmlstore
00030 {
00031       
00032 
00033 XMLResObjectParser::XMLResObjectParser()
00034 { }
00035 
00036 XMLResObjectParser::~XMLResObjectParser()
00037 {
00038 }
00039 
00040 
00041 void
00042 XMLResObjectParser::parseResObjectCommonData( XMLResObjectData_Ptr dataPtr, xmlNodePtr node)
00043 {
00044   xml_assert(node);
00045 
00046   for (xmlNodePtr child = node->children; child != 0; child = child ->next)
00047   {
00048     if (_helper.isElement(child))
00049     {
00050       string name = _helper.name(child);
00051 
00052       if (name == "name") {
00053         dataPtr->name = _helper.content(child);
00054       }
00055       else if (name == "arch") {
00056         dataPtr->arch = _helper.content(child);
00057       }
00058       else if (name == "version") {
00059         dataPtr->epoch = _helper.attribute(child,"epoch");
00060         dataPtr->ver = _helper.attribute(child,"ver");
00061         dataPtr->rel = _helper.attribute(child,"rel");
00062       }
00063     }
00064   }
00065 } 
00066 
00067 void
00068     XMLResObjectParser::parseDependencies( XMLResObjectData_Ptr dataPtr, xmlNodePtr node)
00069 {
00070   xml_assert(node);
00071 
00072   for (xmlNodePtr child = node->children; child != 0; child = child ->next)
00073   {
00074     if (_helper.isElement(child))
00075     {
00076       string name = _helper.name(child);
00077       if (name == "provides") {
00078         parseDependencyEntries(& dataPtr->provides, child);
00079       }
00080       else if (name == "conflicts") {
00081         parseDependencyEntries(& dataPtr->conflicts, child);
00082       }
00083       else if (name == "obsoletes") {
00084         parseDependencyEntries(& dataPtr->obsoletes, child);
00085       }
00086       else if (name == "prerequires") {
00087         parseDependencyEntries(& dataPtr->prerequires, child);
00088       }
00089       else if (name == "requires") {
00090         parseDependencyEntries(& dataPtr->requires, child);
00091       }
00092       else if (name == "recommends") {
00093         parseDependencyEntries(& dataPtr->recommends, child);
00094       }
00095       else if (name == "suggests") {
00096         parseDependencyEntries(& dataPtr->suggests, child);
00097       }
00098       else if (name == "supplements") {
00099         parseDependencyEntries(& dataPtr->supplements, child);
00100       }
00101       else if (name == "enhances") {
00102         parseDependencyEntries(& dataPtr->enhances, child);
00103       }
00104       else if (name == "freshens") {
00105         parseDependencyEntries(& dataPtr->freshens, child);
00106       }
00107     }
00108   } 
00109   
00110 }
00111 
00112 void
00113 XMLResObjectParser::parseDependencyEntries(list<XMLDependency> *depList,
00114                                               xmlNodePtr depNode)
00115 {
00116   xml_assert(depNode);
00117 
00118   for (xmlNodePtr child = depNode->children; child != 0; child = child ->next)
00119   {
00120     if (_helper.isElement(child))
00121     {
00122       string name = _helper.name(child);
00123 
00124       if ( name == "capability" )
00125       {
00126         depList->push_back
00127             (XMLDependency(_helper.attribute(child,"kind"),
00128             _helper.content(child)));
00129       }
00130       else
00131       {
00132         WAR << "XML dependency contains the unknown element <" << name << "> "
00133           << _helper.positionInfo(child) << ", skipping" << endl;
00134       }
00135     }
00136   }
00137 }
00138       
00139 } // namespace xmlstore
00140 } // namespace parser
00141 } // namespace zypp

Generated on Thu May 4 16:03:23 2006 for zypp by  doxygen 1.4.6