0026937: Eliminate NO_CXX_EXCEPTION macro support
[occt.git] / src / TObj / TObj_Application.cxx
1 // Created on: 2004-11-23
2 // Created by: Pavel TELKOV
3 // Copyright (c) 2004-2014 OPEN CASCADE SAS
4 //
5 // This file is part of Open CASCADE Technology software library.
6 //
7 // This library is free software; you can redistribute it and/or modify it under
8 // the terms of the GNU Lesser General Public License version 2.1 as published
9 // by the Free Software Foundation, with special exception defined in the file
10 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
11 // distribution for complete text of the license and disclaimer of any warranty.
12 //
13 // Alternatively, this file may be used under the terms of Open CASCADE
14 // commercial license or contractual agreement.
15
16 // The original implementation Copyright: (C) RINA S.p.A
17
18 #include <TObj_Application.hxx>
19
20 #include <Standard_SStream.hxx>
21 #include <Standard_ErrorHandler.hxx>
22 #include <TCollection_ExtendedString.hxx>
23 #include <TColStd_SequenceOfExtendedString.hxx>
24 #include <CDM_COutMessageDriver.hxx>
25 #include <Message_Msg.hxx>
26 #include <Message_MsgFile.hxx>
27 #include <Resource_Manager.hxx>
28
29 #include <stdio.h>
30
31 #include "TObj_TObj_msg.pxx"
32
33 IMPLEMENT_STANDARD_RTTIEXT(TObj_Application,TDocStd_Application)
34
35 //=======================================================================
36 //function : GetInstance
37 //purpose  :
38 //=======================================================================
39
40 Handle(TObj_Application) TObj_Application::GetInstance()
41 {
42   static Handle(TObj_Application) anInstance = new TObj_Application;
43   return anInstance;
44 }
45
46 //=======================================================================
47 //function : TObj_Application
48 //purpose  : 
49 //=======================================================================
50
51 TObj_Application::TObj_Application () : myIsError(Standard_False)
52 {
53   if (!Message_MsgFile::HasMsg ("TObj_Appl_SUnknownFailure"))
54   {
55     // load messages into global map on first instantiation
56     Message_MsgFile::LoadFromString (TObj_TObj_msg, sizeof(TObj_TObj_msg) - 1);
57     if (!Message_MsgFile::HasMsg ("TObj_Appl_SUnknownFailure"))
58     {
59       throw Standard_ProgramError("Critical Error - message resources for TObj_Application are invalid or undefined!");
60     }
61   }
62
63   myMessenger = new Message_Messenger;
64   myIsVerbose = Standard_False;
65 }
66
67 //=======================================================================
68 //function : ResourcesName
69 //purpose  : 
70 //=======================================================================
71
72 Standard_CString TObj_Application::ResourcesName()
73 {
74   return Standard_CString("TObj");
75 }
76
77 //=======================================================================
78 //function : SaveDocument
79 //purpose  : Saving the OCAF document
80 //=======================================================================
81
82 Standard_Boolean TObj_Application::SaveDocument
83                         (const Handle(TDocStd_Document)&   theSourceDoc,
84                          const TCollection_ExtendedString& theTargetFile)
85 {
86   myIsError = Standard_False;
87   PCDM_StoreStatus aStatus = SaveAs (theSourceDoc, theTargetFile);
88   myIsError = aStatus != PCDM_SS_OK;
89   if (myIsError)
90   {
91     switch (aStatus)
92     {
93     case PCDM_SS_DriverFailure:
94       ErrorMessage (Message_Msg("TObj_Appl_SDriverFailure") << theTargetFile);
95       break;
96     case PCDM_SS_WriteFailure:
97       ErrorMessage (Message_Msg("TObj_Appl_SWriteFailure") << theTargetFile);
98       break;
99     case PCDM_SS_Failure:
100       ErrorMessage (Message_Msg("TObj_Appl_SFailure") << theTargetFile);
101       break;
102     case PCDM_SS_Doc_IsNull:
103       ErrorMessage (Message_Msg("TObj_Appl_SDocIsNull") << theTargetFile);
104       break;
105     case PCDM_SS_No_Obj:
106       ErrorMessage (Message_Msg("TObj_Appl_SNoObj") << theTargetFile);
107       break;
108     case PCDM_SS_Info_Section_Error:
109       ErrorMessage (Message_Msg("TObj_Appl_SInfoSectionError") << theTargetFile);
110       break;
111     default:
112       ErrorMessage (Message_Msg("TObj_Appl_SUnknownFailure") << theTargetFile);
113       break;
114     }
115   }
116
117   // Release free memory
118   Standard::Purge();
119   return myIsError ? Standard_False : Standard_True;
120 }
121
122 //=======================================================================
123 //function : LoadDocument
124 //purpose  : Loading the OCAF document
125 //=======================================================================
126
127 Standard_Boolean TObj_Application::LoadDocument
128                         (const TCollection_ExtendedString& theSourceFile,
129                          Handle(TDocStd_Document)&         theTargetDoc)
130 {
131   myIsError = Standard_False;
132   PCDM_ReaderStatus aStatus = PCDM_RS_ReaderException;
133   {
134     try
135     {
136       aStatus = Open (theSourceFile, theTargetDoc);
137     }
138     catch (Standard_Failure const& anException) {
139 #ifdef OCCT_DEBUG
140       ErrorMessage (Message_Msg("TObj_Appl_Exception") << 
141                     anException.GetMessageString());
142 #endif
143       (void)anException;
144     }
145   }
146   myIsError = aStatus != PCDM_RS_OK;
147   if (myIsError)
148   {
149     switch (aStatus)
150     {
151     case PCDM_RS_UnknownDocument:
152       ErrorMessage (Message_Msg("TObj_Appl_RUnknownDocument") << theSourceFile);
153       break;
154     case PCDM_RS_AlreadyRetrieved:
155       ErrorMessage (Message_Msg("TObj_Appl_RAlreadyRetrieved") << theSourceFile);
156       break;
157     case PCDM_RS_AlreadyRetrievedAndModified:
158       ErrorMessage (Message_Msg("TObj_Appl_RAlreadyRetrievedAndModified") << theSourceFile);
159       break;
160     case PCDM_RS_NoDriver:
161       ErrorMessage (Message_Msg("TObj_Appl_RNoDriver") << theSourceFile);
162       break;
163     case PCDM_RS_UnknownFileDriver:
164       ErrorMessage (Message_Msg("TObj_Appl_RNoDriver") << theSourceFile);
165       break;
166     case PCDM_RS_OpenError:
167       ErrorMessage (Message_Msg("TObj_Appl_ROpenError") << theSourceFile);
168       break;
169     case PCDM_RS_NoVersion:
170       ErrorMessage (Message_Msg("TObj_Appl_RNoVersion") << theSourceFile);
171       break;
172     case PCDM_RS_NoModel:
173       ErrorMessage (Message_Msg("TObj_Appl_RNoModel") << theSourceFile);
174       break;
175     case PCDM_RS_NoDocument:
176       ErrorMessage (Message_Msg("TObj_Appl_RNoDocument") << theSourceFile);
177       break;
178     case PCDM_RS_FormatFailure:
179       ErrorMessage (Message_Msg("TObj_Appl_RFormatFailure") << theSourceFile);
180       break;
181     case PCDM_RS_TypeNotFoundInSchema:
182       ErrorMessage (Message_Msg("TObj_Appl_RTypeNotFound") << theSourceFile);
183       break;
184     case PCDM_RS_UnrecognizedFileFormat:
185       ErrorMessage (Message_Msg("TObj_Appl_RBadFileFormat") << theSourceFile);
186       break;
187     case PCDM_RS_MakeFailure:
188       ErrorMessage (Message_Msg("TObj_Appl_RMakeFailure") << theSourceFile);
189       break;
190     case PCDM_RS_PermissionDenied:
191       ErrorMessage (Message_Msg("TObj_Appl_RPermissionDenied") << theSourceFile);
192       break;
193     case PCDM_RS_DriverFailure:
194       ErrorMessage (Message_Msg("TObj_Appl_RDriverFailure") << theSourceFile);
195       break;
196     case PCDM_RS_ReaderException:
197       ErrorMessage (Message_Msg("TObj_Appl_RException") << theSourceFile);
198       break;
199     default:
200       ErrorMessage (Message_Msg("TObj_Appl_RUnknownFail") << theSourceFile);
201       break;
202     }
203   }
204
205   // Release free memory
206   Standard::Purge();
207   return myIsError ? Standard_False : Standard_True;
208 }
209
210 //=======================================================================
211 //function : CreateNewDocument
212 //purpose  : 
213 //=======================================================================
214
215 Standard_Boolean TObj_Application::CreateNewDocument
216                         (Handle(TDocStd_Document)&         theDoc,
217                          const TCollection_ExtendedString& theFormat)
218 {
219   myIsError = Standard_False;
220
221   // Create the Document
222   NewDocument (theFormat, theDoc);
223
224   return myIsError ? Standard_False : Standard_True;
225 }
226
227 //=======================================================================
228 //function : ErrorMessage
229 //purpose  : 
230 //=======================================================================
231
232 void TObj_Application::ErrorMessage (const TCollection_ExtendedString &theMsg,
233                                          const Message_Gravity theLevel)
234 {
235   myMessenger->Send ( theMsg, theLevel );
236 }
237