1*cdf0e10cSrcweir /*************************************************************************
2*cdf0e10cSrcweir  *
3*cdf0e10cSrcweir  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4*cdf0e10cSrcweir  *
5*cdf0e10cSrcweir  * Copyright 2000, 2010 Oracle and/or its affiliates.
6*cdf0e10cSrcweir  *
7*cdf0e10cSrcweir  * OpenOffice.org - a multi-platform office productivity suite
8*cdf0e10cSrcweir  *
9*cdf0e10cSrcweir  * This file is part of OpenOffice.org.
10*cdf0e10cSrcweir  *
11*cdf0e10cSrcweir  * OpenOffice.org is free software: you can redistribute it and/or modify
12*cdf0e10cSrcweir  * it under the terms of the GNU Lesser General Public License version 3
13*cdf0e10cSrcweir  * only, as published by the Free Software Foundation.
14*cdf0e10cSrcweir  *
15*cdf0e10cSrcweir  * OpenOffice.org is distributed in the hope that it will be useful,
16*cdf0e10cSrcweir  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17*cdf0e10cSrcweir  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18*cdf0e10cSrcweir  * GNU Lesser General Public License version 3 for more details
19*cdf0e10cSrcweir  * (a copy is included in the LICENSE file that accompanied this code).
20*cdf0e10cSrcweir  *
21*cdf0e10cSrcweir  * You should have received a copy of the GNU Lesser General Public License
22*cdf0e10cSrcweir  * version 3 along with OpenOffice.org.  If not, see
23*cdf0e10cSrcweir  * <http://www.openoffice.org/license.html>
24*cdf0e10cSrcweir  * for a copy of the LGPLv3 License.
25*cdf0e10cSrcweir  *
26*cdf0e10cSrcweir  ************************************************************************/
27*cdf0e10cSrcweir 
28*cdf0e10cSrcweir #include <precomp.h>
29*cdf0e10cSrcweir #include <adc_msg.hxx>
30*cdf0e10cSrcweir 
31*cdf0e10cSrcweir 
32*cdf0e10cSrcweir // NOT FULLY DEFINED SERVICES
33*cdf0e10cSrcweir #include <cosv/file.hxx>
34*cdf0e10cSrcweir #include <cosv/tpl/tpltools.hxx>
35*cdf0e10cSrcweir 
36*cdf0e10cSrcweir 
37*cdf0e10cSrcweir namespace autodoc
38*cdf0e10cSrcweir {
39*cdf0e10cSrcweir 
40*cdf0e10cSrcweir 
41*cdf0e10cSrcweir Messages::Messages()
42*cdf0e10cSrcweir     :   aMissingDocs(),
43*cdf0e10cSrcweir         aParseErrors(),
44*cdf0e10cSrcweir         aInvalidConstSymbols(),
45*cdf0e10cSrcweir         aUnresolvedLinks(),
46*cdf0e10cSrcweir         aTypeVsMemberMisuses()
47*cdf0e10cSrcweir {
48*cdf0e10cSrcweir }
49*cdf0e10cSrcweir 
50*cdf0e10cSrcweir Messages::~Messages()
51*cdf0e10cSrcweir {
52*cdf0e10cSrcweir }
53*cdf0e10cSrcweir 
54*cdf0e10cSrcweir void
55*cdf0e10cSrcweir Messages::WriteFile(const String & i_sOutputFilePath)
56*cdf0e10cSrcweir {
57*cdf0e10cSrcweir     csv::File
58*cdf0e10cSrcweir         aOut(i_sOutputFilePath, csv::CFM_CREATE);
59*cdf0e10cSrcweir     aOut.open();
60*cdf0e10cSrcweir 
61*cdf0e10cSrcweir     // KORR_FUTURE Enable this when appropriate:
62*cdf0e10cSrcweir     WriteParagraph( aOut,
63*cdf0e10cSrcweir                     aParseErrors,
64*cdf0e10cSrcweir                     "Incompletely Parsed Files",
65*cdf0e10cSrcweir                     "Stopped parsing at " );
66*cdf0e10cSrcweir 
67*cdf0e10cSrcweir     WriteParagraph( aOut,
68*cdf0e10cSrcweir                     aMissingDocs,
69*cdf0e10cSrcweir                     "Entities Without Documentation",
70*cdf0e10cSrcweir                     " in " );
71*cdf0e10cSrcweir 
72*cdf0e10cSrcweir     WriteParagraph( aOut,
73*cdf0e10cSrcweir                     aInvalidConstSymbols,
74*cdf0e10cSrcweir                     "Incorrectly Written Const Symbols",
75*cdf0e10cSrcweir                     " in " );
76*cdf0e10cSrcweir 
77*cdf0e10cSrcweir     WriteParagraph( aOut,
78*cdf0e10cSrcweir                     aUnresolvedLinks,
79*cdf0e10cSrcweir                     "Unresolved Links",
80*cdf0e10cSrcweir                     " in\n        " );
81*cdf0e10cSrcweir 
82*cdf0e10cSrcweir     WriteParagraph( aOut,
83*cdf0e10cSrcweir                     aTypeVsMemberMisuses,
84*cdf0e10cSrcweir                     "Confusion or Misuse of <Type> vs. <Member>",
85*cdf0e10cSrcweir                     " in " );
86*cdf0e10cSrcweir     aOut.close();
87*cdf0e10cSrcweir }
88*cdf0e10cSrcweir 
89*cdf0e10cSrcweir void
90*cdf0e10cSrcweir Messages::Out_MissingDoc(   const String &      i_sEntity,
91*cdf0e10cSrcweir                             const String &      i_sFile,
92*cdf0e10cSrcweir                             uintt               i_nLine)
93*cdf0e10cSrcweir {
94*cdf0e10cSrcweir     AddValue( aMissingDocs,
95*cdf0e10cSrcweir               i_sEntity,
96*cdf0e10cSrcweir               i_sFile,
97*cdf0e10cSrcweir               i_nLine );
98*cdf0e10cSrcweir }
99*cdf0e10cSrcweir 
100*cdf0e10cSrcweir void
101*cdf0e10cSrcweir Messages::Out_ParseError(   const String &      i_sFile,
102*cdf0e10cSrcweir                             uintt               i_nLine)
103*cdf0e10cSrcweir {
104*cdf0e10cSrcweir     aParseErrors[Location(i_sFile,i_nLine)] = String::Null_();
105*cdf0e10cSrcweir }
106*cdf0e10cSrcweir 
107*cdf0e10cSrcweir void
108*cdf0e10cSrcweir Messages::Out_InvalidConstSymbol( const String &      i_sText,
109*cdf0e10cSrcweir                                   const String &      i_sFile,
110*cdf0e10cSrcweir 								  uintt               i_nLine)
111*cdf0e10cSrcweir {
112*cdf0e10cSrcweir     AddValue( aInvalidConstSymbols,
113*cdf0e10cSrcweir               i_sText,
114*cdf0e10cSrcweir               i_sFile,
115*cdf0e10cSrcweir               i_nLine );
116*cdf0e10cSrcweir }
117*cdf0e10cSrcweir 
118*cdf0e10cSrcweir void
119*cdf0e10cSrcweir Messages::Out_UnresolvedLink( const String &      i_sLinkText,
120*cdf0e10cSrcweir                               const String &      i_sFile,
121*cdf0e10cSrcweir 							  uintt               i_nLine)
122*cdf0e10cSrcweir {
123*cdf0e10cSrcweir     AddValue( aUnresolvedLinks,
124*cdf0e10cSrcweir               i_sLinkText,
125*cdf0e10cSrcweir               i_sFile,
126*cdf0e10cSrcweir               i_nLine );
127*cdf0e10cSrcweir }
128*cdf0e10cSrcweir 
129*cdf0e10cSrcweir void
130*cdf0e10cSrcweir Messages::Out_TypeVsMemberMisuse( const String &      i_sLinkText,
131*cdf0e10cSrcweir 								  const String &      i_sFile,
132*cdf0e10cSrcweir 								  uintt               i_nLine)
133*cdf0e10cSrcweir {
134*cdf0e10cSrcweir     AddValue( aTypeVsMemberMisuses,
135*cdf0e10cSrcweir               i_sLinkText,
136*cdf0e10cSrcweir               i_sFile,
137*cdf0e10cSrcweir               i_nLine );
138*cdf0e10cSrcweir }
139*cdf0e10cSrcweir 
140*cdf0e10cSrcweir Messages &
141*cdf0e10cSrcweir Messages::The_()
142*cdf0e10cSrcweir {
143*cdf0e10cSrcweir     static Messages TheMessages_;
144*cdf0e10cSrcweir     return TheMessages_;
145*cdf0e10cSrcweir }
146*cdf0e10cSrcweir 
147*cdf0e10cSrcweir void
148*cdf0e10cSrcweir Messages::AddValue( MessageMap &        o_dest,
149*cdf0e10cSrcweir                     const String &      i_sText,
150*cdf0e10cSrcweir                     const String &      i_sFile,
151*cdf0e10cSrcweir 					uintt               i_nLine )
152*cdf0e10cSrcweir {
153*cdf0e10cSrcweir     String &
154*cdf0e10cSrcweir         rDest = o_dest[Location(i_sFile,i_nLine)];
155*cdf0e10cSrcweir     StreamLock
156*cdf0e10cSrcweir         slDest(2000);
157*cdf0e10cSrcweir     if (NOT rDest.empty())
158*cdf0e10cSrcweir         slDest() << rDest;
159*cdf0e10cSrcweir     slDest() << "\n    " << i_sText;
160*cdf0e10cSrcweir     rDest = slDest().c_str();
161*cdf0e10cSrcweir }
162*cdf0e10cSrcweir 
163*cdf0e10cSrcweir void
164*cdf0e10cSrcweir Messages::WriteParagraph( csv::File &         o_out,
165*cdf0e10cSrcweir                           const MessageMap &  i_source,
166*cdf0e10cSrcweir                           const String &      i_title,
167*cdf0e10cSrcweir                           const String &      )
168*cdf0e10cSrcweir {
169*cdf0e10cSrcweir     StreamStr   aLine(2000);
170*cdf0e10cSrcweir 
171*cdf0e10cSrcweir     // Write title of paragraph:
172*cdf0e10cSrcweir     aLine << i_title
173*cdf0e10cSrcweir 		  << "\n";
174*cdf0e10cSrcweir     o_out.write(aLine.c_str());
175*cdf0e10cSrcweir 
176*cdf0e10cSrcweir     aLine.seekp(0);
177*cdf0e10cSrcweir     for (uintt i = i_title.size(); i > 0; --i)
178*cdf0e10cSrcweir     {
179*cdf0e10cSrcweir         aLine << '-';
180*cdf0e10cSrcweir     }
181*cdf0e10cSrcweir     aLine << "\n\n";
182*cdf0e10cSrcweir     o_out.write(aLine.c_str());
183*cdf0e10cSrcweir 
184*cdf0e10cSrcweir     // Write Content
185*cdf0e10cSrcweir     MessageMap::const_iterator it = i_source.begin();
186*cdf0e10cSrcweir     MessageMap::const_iterator itEnd = i_source.end();
187*cdf0e10cSrcweir     for ( ; it != itEnd; ++it )
188*cdf0e10cSrcweir     {
189*cdf0e10cSrcweir         aLine.seekp(0);
190*cdf0e10cSrcweir         aLine << (*it).first.sFile;
191*cdf0e10cSrcweir         // Nobody wants to see this, if we don't know the line:
192*cdf0e10cSrcweir         if ((*it).first.nLine != 0)
193*cdf0e10cSrcweir         {
194*cdf0e10cSrcweir             aLine << ", line "
195*cdf0e10cSrcweir                   << (*it).first.nLine;
196*cdf0e10cSrcweir         }
197*cdf0e10cSrcweir         if (NOT (*it).second.empty())
198*cdf0e10cSrcweir         {
199*cdf0e10cSrcweir             aLine << ':'
200*cdf0e10cSrcweir                   << (*it).second
201*cdf0e10cSrcweir                   << "\n";
202*cdf0e10cSrcweir         }
203*cdf0e10cSrcweir         o_out.write(aLine.c_str());
204*cdf0e10cSrcweir     }
205*cdf0e10cSrcweir     o_out.write("\n\n\n");
206*cdf0e10cSrcweir }
207*cdf0e10cSrcweir 
208*cdf0e10cSrcweir }   // namespace autodoc
209