YUMPatternParser.cc

Go to the documentation of this file.
00001 /*---------------------------------------------------------------------\
00002 |                          ____ _   __ __ ___                          |
00003 |                         |__  / \ / / . \ . \                         |
00004 |                           / / \ V /|  _/  _/                         |
00005 |                          / /__ | | | | | |                           |
00006 |                         /_____||_| |_| |_|                           |
00007 |                                                                      |
00008 \---------------------------------------------------------------------*/
00013 #include <zypp/parser/yum/YUMPatternParser.h>
00014 #include <zypp/parser/yum/YUMPrimaryParser.h>
00015 #include <zypp/parser/LibXMLHelper.h>
00016 #include <istream>
00017 #include <string>
00018 #include "zypp/parser/xml_parser_assert.h"
00019 #include <libxml/xmlreader.h>
00020 #include <libxml/tree.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 yum
00030 {
00031 
00032 YUMPatternParser::YUMPatternParser()
00033 { }
00034 
00035 YUMPatternParser::YUMPatternParser(YUMPatternData_Ptr& entry)
00036     : XMLNodeIterator<YUMPatternData_Ptr>(entry)
00037 { }
00038 
00039 
00040 YUMPatternParser::~YUMPatternParser()
00041 { }
00042 
00043 
00044 // select for which elements process() will be called
00045 bool
00046 YUMPatternParser::isInterested(const xmlNodePtr nodePtr)
00047 {
00048   return _helper.isElement(nodePtr) && _helper.name(nodePtr) == "pattern";
00049 }
00050 
00051 // do the actual processing
00052 YUMPatternData_Ptr
00053 YUMPatternParser::process(const xmlTextReaderPtr reader)
00054 {
00055   xml_assert(reader);
00056   YUMPatternData_Ptr dataPtr = new YUMPatternData;
00057   xmlNodePtr dataNode = xmlTextReaderExpand(reader);
00058   xml_assert(dataNode);
00059 
00060   // FIXME move the respective method to a common class, inherit it
00061   YUMPrimaryParser prim;
00062 
00063   for (xmlNodePtr child = dataNode->children;
00064        child && child != dataNode;
00065        child = child->next)
00066   {
00067     if (_helper.isElement(child))
00068     {
00069       string name = _helper.name(child);
00070       if (name == "name")
00071       {
00072         dataPtr->name = _helper.content(child);
00073       }
00074       else if (name == "summary")
00075       {
00076         dataPtr->summary.setText(_helper.content(child), Locale(_helper.attribute(child,"lang")));
00077       }
00078       else if (name == "default")
00079       {
00080         dataPtr->default_ = _helper.content(child);
00081       }
00082       else if (name == "uservisible")
00083       {
00084         dataPtr->userVisible = _helper.content(child);
00085       }
00086       else if (name == "description")
00087       {
00088         dataPtr->description.setText(_helper.content(child), Locale(_helper.attribute(child,"lang")));
00089       }
00090       else if (name == "category")
00091       {
00092 #warning FIXME pattern category is translatable
00093         dataPtr->category.setText(_helper.content(child));
00094       }
00095       else if (name == "icon")
00096       {
00097         dataPtr->icon = _helper.content(child);
00098       }
00099       else if (name == "script")
00100       {
00101         dataPtr->script = _helper.content(child);
00102       }
00103       else if (name == "provides")
00104       {
00105         prim.parseDependencyEntries(& dataPtr->provides, child);
00106       }
00107       else if (name == "conflicts")
00108       {
00109         prim.parseDependencyEntries(& dataPtr->conflicts, child);
00110       }
00111       else if (name == "obsoletes")
00112       {
00113         prim.parseDependencyEntries(& dataPtr->obsoletes, child);
00114       }
00115       else if (name == "prerequires")
00116       {
00117         prim.parseDependencyEntries(& dataPtr->prerequires, child);
00118       }
00119       else if (name == "requires")
00120       {
00121         prim.parseDependencyEntries(& dataPtr->requires, child);
00122       }
00123       else if (name == "recommends")
00124       {
00125         prim.parseDependencyEntries(& dataPtr->recommends, child);
00126       }
00127       else if (name == "suggests")
00128       {
00129         prim.parseDependencyEntries(& dataPtr->suggests, child);
00130       }
00131       else if (name == "supplements")
00132       {
00133         prim.parseDependencyEntries(& dataPtr->supplements, child);
00134       }
00135       else if (name == "enhances")
00136       {
00137         prim.parseDependencyEntries(& dataPtr->enhances, child);
00138       }
00139       else if (name == "freshens")
00140       {
00141         prim.parseDependencyEntries(& dataPtr->freshens, child);
00142       }
00143       else
00144       {
00145         WAR << "YUM <pattern> contains the unknown element <" << name << "> "
00146         << _helper.positionInfo(child) << ", skipping" << endl;
00147       }
00148     }
00149   }
00150   return dataPtr;
00151 } /* end process */
00152 
00153 
00154 YUMPatternParser::YUMPatternParser(std::istream &is, const std::string &baseUrl, parser::ParserProgress::Ptr progress )
00155     : XMLNodeIterator<YUMPatternData_Ptr>(is, baseUrl,PATTERNSCHEMA, progress)
00156 {
00157   fetchNext();
00158 }
00159 
00160 } // namespace yum
00161 } // namespace parser
00162 } // namespace zypp

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