XMLPatternParser.cc

Go to the documentation of this file.
00001 /*---------------------------------------------------------------------\
00002 |                          ____ _   __ __ ___                          |
00003 |                         |__  / \ / / . \ . \                         |
00004 |                           / / \ V /|  _/  _/                         |
00005 |                          / /__ | | | | | |                           |
00006 |                         /_____||_| |_| |_|                           |
00007 |                                                                      |
00008 \---------------------------------------------------------------------*/
00013 #include <zypp/parser/xmlstore/XMLPatternParser.h>
00014 #include <zypp/parser/xmlstore/XMLResObjectParser.h>
00015 
00016 #include <zypp/parser/LibXMLHelper.h>
00017 #include <istream>
00018 #include <string>
00019 #include "zypp/parser/xml_parser_assert.h"
00020 #include <libxml/xmlreader.h>
00021 #include <libxml/tree.h>
00022 #include <zypp/base/Logger.h>
00023 #include <zypp/parser/xmlstore/schemanames.h>
00024 
00025 using namespace std;
00026 namespace zypp {
00027   namespace parser {
00028     namespace xmlstore {
00029 
00030       XMLPatternParser::XMLPatternParser()
00031       { }
00032       
00033       XMLPatternParser::XMLPatternParser(XMLPatternData_Ptr& entry)
00034       : XMLNodeIterator<XMLPatternData_Ptr>(entry)
00035       { }
00036       
00037       
00038       XMLPatternParser::~XMLPatternParser()
00039       { }
00040       
00041       
00042       // select for which elements process() will be called
00043       bool 
00044       XMLPatternParser::isInterested(const xmlNodePtr nodePtr)
00045       {
00046         return _helper.isElement(nodePtr) && _helper.name(nodePtr) == "pattern";
00047       }
00048       
00049       // do the actual processing
00050       XMLPatternData_Ptr
00051       XMLPatternParser::process(const xmlTextReaderPtr reader)
00052       {
00053         xml_assert(reader);
00054         XMLPatternData_Ptr dataPtr = new XMLPatternData;
00055         xmlNodePtr dataNode = xmlTextReaderExpand(reader);
00056         xml_assert(dataNode);
00057         
00058         parseResObjectCommonData( dataPtr, dataNode);
00059         parseDependencies( dataPtr, dataNode);
00060         
00061         for (xmlNodePtr child = dataNode->children; child && child != dataNode; child = child->next)
00062         {
00063           if (_helper.isElement(child))
00064           {
00065             string name = _helper.name(child);
00066             
00067             if (name == "default") {
00068               dataPtr->default_ = _helper.content(child);
00069             }
00070             else if (name == "uservisible") {
00071               dataPtr->userVisible = (_helper.content(child) == "false") ? false : true;
00072             }
00073             else if (name == "category") {
00074               dataPtr->category.setText(_helper.content(child));
00075             }
00076             else if (name == "icon") {
00077               dataPtr->icon = _helper.content(child);
00078             }
00079             else if (name == "script") {
00080               dataPtr->script = _helper.content(child);
00081             }
00082           }
00083         }
00084         return dataPtr;
00085       } /* end process */
00086       
00087       
00088       XMLPatternParser::XMLPatternParser(istream &is, const string &baseUrl)
00089       : XMLNodeIterator<XMLPatternData_Ptr>(is, baseUrl,PATTERNSCHEMA)
00090       { 
00091         fetchNext();
00092       }
00093       
00094     } // namespace yum
00095   } // namespace parser
00096 } // namespace zypp

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