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   namespace parser {
00027     namespace yum {
00028 
00029       YUMPatternParser::YUMPatternParser()
00030       { }
00031       
00032       YUMPatternParser::YUMPatternParser(YUMPatternData_Ptr& entry)
00033       : XMLNodeIterator<YUMPatternData_Ptr>(entry)
00034       { }
00035       
00036       
00037       YUMPatternParser::~YUMPatternParser()
00038       { }
00039       
00040       
00041       // select for which elements process() will be called
00042       bool 
00043       YUMPatternParser::isInterested(const xmlNodePtr nodePtr)
00044       {
00045         return _helper.isElement(nodePtr) && _helper.name(nodePtr) == "pattern";
00046       }
00047       
00048       // do the actual processing
00049       YUMPatternData_Ptr
00050       YUMPatternParser::process(const xmlTextReaderPtr reader)
00051       {
00052         xml_assert(reader);
00053         YUMPatternData_Ptr dataPtr = new YUMPatternData;
00054         xmlNodePtr dataNode = xmlTextReaderExpand(reader);
00055         xml_assert(dataNode);
00056 
00057         // FIXME move the respective method to a common class, inherit it  
00058         YUMPrimaryParser prim;
00059         
00060         for (xmlNodePtr child = dataNode->children;
00061              child && child != dataNode;
00062              child = child->next) {
00063                if (_helper.isElement(child)) {
00064                  string name = _helper.name(child);
00065                  if (name == "name") {
00066                    dataPtr->name = _helper.content(child);
00067                  }
00068                  else if (name == "summary") {
00069                    dataPtr->summary.setText(_helper.content(child), Locale(_helper.attribute(child,"lang")));
00070                  }
00071                  else if (name == "default") {
00072                    dataPtr->default_ = _helper.content(child);
00073                  }
00074                  else if (name == "uservisible") {
00075                    dataPtr->userVisible = _helper.content(child);
00076                  }
00077                  else if (name == "description") {
00078                    dataPtr->description.setText(_helper.content(child), Locale(_helper.attribute(child,"lang")));
00079                  }
00080                  else if (name == "category") {
00081        #warning FIXME pattern category is translatable
00082                    dataPtr->category.setText(_helper.content(child));
00083                  }
00084                  else if (name == "icon") {
00085                    dataPtr->icon = _helper.content(child);
00086                  }
00087                  else if (name == "script") {
00088                    dataPtr->script = _helper.content(child);
00089                  }
00090                  else if (name == "provides") {
00091                    prim.parseDependencyEntries(& dataPtr->provides, child);
00092                  }
00093                  else if (name == "conflicts") {
00094                    prim.parseDependencyEntries(& dataPtr->conflicts, child);
00095                  }
00096                  else if (name == "obsoletes") {
00097                    prim.parseDependencyEntries(& dataPtr->obsoletes, child);
00098                  }
00099                  else if (name == "prerequires") {
00100                    prim.parseDependencyEntries(& dataPtr->prerequires, child);
00101                  }
00102                  else if (name == "requires") {
00103                    prim.parseDependencyEntries(& dataPtr->requires, child);
00104                  }
00105                  else if (name == "recommends") {
00106                    prim.parseDependencyEntries(& dataPtr->recommends, child);
00107                  }
00108                  else if (name == "suggests") {
00109                    prim.parseDependencyEntries(& dataPtr->suggests, child);
00110                  }
00111                  else if (name == "supplements") {
00112                    prim.parseDependencyEntries(& dataPtr->supplements, child);
00113                  }
00114                  else if (name == "enhances") {
00115                    prim.parseDependencyEntries(& dataPtr->enhances, child);
00116                  }
00117                  else if (name == "freshens") {
00118                    prim.parseDependencyEntries(& dataPtr->freshens, child);
00119                  }
00120                  else {
00121                    WAR << "YUM <pattern> contains the unknown element <" << name << "> "
00122                      << _helper.positionInfo(child) << ", skipping" << endl;
00123                  }
00124                }
00125              }
00126         return dataPtr;
00127       } /* end process */
00128       
00129       
00130       YUMPatternParser::YUMPatternParser(istream &is, const string &baseUrl)
00131       : XMLNodeIterator<YUMPatternData_Ptr>(is, baseUrl,PATTERNSCHEMA)
00132       { 
00133         fetchNext();
00134       }
00135       
00136     } // namespace yum
00137   } // namespace parser
00138 } // namespace zypp

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