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