00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #include "psfa/UnitParser.hpp"
00019 #include "psfa/Sax2Parser.hpp"
00020 #include "psfa/UnitSax2ContentHandler.hpp"
00021 #include "psfa/UnitSax2ErrorHandler.hpp"
00022 #include "psfa/Config.hpp"
00023
00024
00025
00026 psfa::UnitParser::UnitParser( const std::string pool )
00027 : pool_( pool )
00028 {
00029
00030 }
00031
00032
00033
00034 psfa::UnitParser::~UnitParser()
00035 {
00036
00037 }
00038
00039
00040 void
00041 psfa::UnitParser::parse( const std::vector< std::string >& files,
00042 std::vector< IndexData_SP >& data,
00043 std::vector< std::string >& errorFiles )
00044 {
00045 using std::string;
00046 typedef std::vector< string > sVec;
00047
00048 xercesc::SAX2XMLReader* parser = Sax2Parser::getSax2Parser();
00049 UnitSax2ContentHandler cH( pool_, data );
00050 UnitSax2ErrorHandler eH;
00051 parser->setContentHandler( &cH );
00052 parser->setErrorHandler( &eH );
00053
00054 Config* conf = Config::getConfig();
00055 string path = conf->getConfigValue( pool_, "root" );
00056
00057 int error = 0;
00058 sVec::const_iterator i;
00059 sVec::const_iterator iEnd = files.end();
00060 for( i = files.begin(); i != iEnd; ++i ) {
00061 string filePath = path + "/" + *i;
00062 cH.setFileName( *i );
00063 parser->parse( filePath.c_str() );
00064 error = parser->getErrorCount();
00065 if( error > 0 ) {
00066 errorFiles.push_back( *i );
00067 }
00068 }
00069 return;
00070 }