1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 #include <precomp.h> 23 #include <tools/filecoll.hxx> 24 25 26 // NOT FULLY DEFINED SERVICES 27 #include <cosv/ploc_dir.hxx> 28 29 #include <stdio.h> 30 31 32 FileCollector::FileCollector( uintt i_nRoughNrOfFiles ) 33 // : aFoundFiles 34 { 35 if (i_nRoughNrOfFiles > 0) 36 aFoundFiles.reserve(i_nRoughNrOfFiles); 37 } 38 39 uintt 40 FileCollector::AddFilesFrom( const char * i_sRootDir, 41 const char * i_sFilter, 42 E_SearchMode i_eSearchMode ) 43 { 44 uintt nSizeAtStart = aFoundFiles.size(); 45 46 if (csv::no_str(i_sFilter) OR csv::no_str(i_sRootDir)) 47 { 48 Cout() << "Warning: The filter contains no files." << Endl(); 49 return 0; 50 } 51 52 csv::ploc::Directory aDir(i_sRootDir); 53 if (NOT aDir.Exists()) 54 { 55 Cerr() << "Warning: The path for the files to be parsed could not be found:\n" 56 << i_sRootDir 57 << Endl(); 58 return 0; 59 } 60 61 Cout() << "." << Flush(); 62 aDir.GetContainedFiles(aFoundFiles, i_sFilter); 63 64 if (i_eSearchMode == recursive) 65 { 66 StreamStr aPath(1020); 67 aPath << i_sRootDir << csv::ploc::Delimiter(); 68 uintt nSubDirStart = aPath.tellp(); 69 70 StringVector aSubDirs; 71 aDir.GetContainedDirectories(aSubDirs); 72 73 for ( const_iterator iter = aSubDirs.begin(); 74 iter != aSubDirs.end(); 75 ++iter ) 76 { 77 aPath.seekp(nSubDirStart); 78 aPath << (*iter); 79 AddFilesFrom( aPath.c_str(), i_sFilter, i_eSearchMode ); 80 } 81 } 82 83 return aFoundFiles.size() - nSizeAtStart; 84 } 85 86 uintt 87 FileCollector::AddFile( const char * i_sFilePath ) 88 { 89 FILE * pFile = fopen( i_sFilePath, "r" ); 90 if ( pFile == 0 ) 91 { 92 Cerr() << "Warning: The path for the file to be parsed could not be found:\n" 93 << i_sFilePath 94 << Endl(); 95 return 0; 96 } 97 98 fclose(pFile); 99 aFoundFiles.push_back(i_sFilePath); 100 return 1; 101 } 102 103 void 104 FileCollector::EraseAll() 105 { 106 csv::erase_container(aFoundFiles); 107 } 108 109 FileCollector::const_iterator 110 FileCollector::Begin() const 111 { 112 return aFoundFiles.begin(); 113 } 114 115 FileCollector::const_iterator 116 FileCollector::End() const 117 { 118 return aFoundFiles.end(); 119 } 120 121 uintt 122 FileCollector::Size() const 123 { 124 return aFoundFiles.size(); 125 } 126 127