cb6391e9e0905418ceb95db432d97908b7af353c
[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 <Resource_Manager.hxx>
27
28 #include <stdio.h>
29
30 IMPLEMENT_STANDARD_RTTIEXT(TObj_Application,TDocStd_Application)
31
32 //=======================================================================
33 //function : GetInstance
34 //purpose  :
35 //=======================================================================
36
37 Handle(TObj_Application) TObj_Application::GetInstance()
38 {
39   static Handle(TObj_Application) anInstance = new TObj_Application;
40   return anInstance;
41 }
42
43 //=======================================================================
44 //function : TObj_Application
45 //purpose  : 
46 //=======================================================================
47
48 TObj_Application::TObj_Application () : myIsError(Standard_False)
49 {
50   myMessenger = new Message_Messenger;
51   myIsVerbose = Standard_False;
52 }
53
54 //=======================================================================
55 //function : ResourcesName
56 //purpose  : 
57 //=======================================================================
58
59 Standard_CString TObj_Application::ResourcesName()
60 {
61   return Standard_CString("TObj");
62 }
63
64 //=======================================================================
65 //function : SaveDocument
66 //purpose  : Saving the OCAF document
67 //=======================================================================
68
69 Standard_Boolean TObj_Application::SaveDocument
70                         (const Handle(TDocStd_Document)&  theSourceDoc,
71                          const TCollection_ExtendedString theTargetFile)
72 {
73   myIsError = Standard_False;
74   PCDM_StoreStatus aStatus = SaveAs (theSourceDoc, theTargetFile);
75   myIsError = aStatus != PCDM_SS_OK;
76   if (myIsError)
77   {
78     switch (aStatus)
79     {
80     case PCDM_SS_DriverFailure:
81       ErrorMessage (Message_Msg("TObj_Appl_SDriverFailure") << theTargetFile);
82       break;
83     case PCDM_SS_WriteFailure:
84       ErrorMessage (Message_Msg("TObj_Appl_SWriteFailure") << theTargetFile);
85       break;
86     case PCDM_SS_Failure:
87       ErrorMessage (Message_Msg("TObj_Appl_SFailure") << theTargetFile);
88       break;
89     case PCDM_SS_Doc_IsNull:
90       ErrorMessage (Message_Msg("TObj_Appl_SDocIsNull") << theTargetFile);
91       break;
92     case PCDM_SS_No_Obj:
93       ErrorMessage (Message_Msg("TObj_Appl_SNoObj") << theTargetFile);
94       break;
95     case PCDM_SS_Info_Section_Error:
96       ErrorMessage (Message_Msg("TObj_Appl_SInfoSectionError") << theTargetFile);
97       break;
98     default:
99       ErrorMessage (Message_Msg("TObj_Appl_SUnknownFailure") << theTargetFile);
100       break;
101     }
102   }
103
104   // Release free memory
105   Standard::Purge();
106   return myIsError ? Standard_False : Standard_True;
107 }
108
109 //=======================================================================
110 //function : LoadDocument
111 //purpose  : Loading the OCAF document
112 //=======================================================================
113
114 Standard_Boolean TObj_Application::LoadDocument
115                         (const TCollection_ExtendedString theSourceFile,
116                          Handle(TDocStd_Document)&        theTargetDoc)
117 {
118   myIsError = Standard_False;
119   PCDM_ReaderStatus aStatus = PCDM_RS_ReaderException;
120   {
121     try
122     {
123       aStatus = Open (theSourceFile, theTargetDoc);
124     }
125     catch (Standard_Failure)
126     {
127 #ifdef OCCT_DEBUG
128       ErrorMessage (Message_Msg("TObj_Appl_Exception") << 
129                     Standard_Failure::Caught()->GetMessageString());
130 #endif
131     }
132   }
133   myIsError = aStatus != PCDM_RS_OK;
134   if (myIsError)
135   {
136     switch (aStatus)
137     {
138     case PCDM_RS_UnknownDocument:
139       ErrorMessage (Message_Msg("TObj_Appl_RUnknownDocument") << theSourceFile);
140       break;
141     case PCDM_RS_AlreadyRetrieved:
142       ErrorMessage (Message_Msg("TObj_Appl_RAlreadyRetrieved") << theSourceFile);
143       break;
144     case PCDM_RS_AlreadyRetrievedAndModified:
145       ErrorMessage (Message_Msg("TObj_Appl_RAlreadyRetrievedAndModified") << theSourceFile);
146       break;
147     case PCDM_RS_NoDriver:
148       ErrorMessage (Message_Msg("TObj_Appl_RNoDriver") << theSourceFile);
149       break;
150     case PCDM_RS_UnknownFileDriver:
151       ErrorMessage (Message_Msg("TObj_Appl_RNoDriver") << theSourceFile);
152       break;
153     case PCDM_RS_OpenError:
154       ErrorMessage (Message_Msg("TObj_Appl_ROpenError") << theSourceFile);
155       break;
156     case PCDM_RS_NoVersion:
157       ErrorMessage (Message_Msg("TObj_Appl_RNoVersion") << theSourceFile);
158       break;
159     case PCDM_RS_NoModel:
160       ErrorMessage (Message_Msg("TObj_Appl_RNoModel") << theSourceFile);
161       break;
162     case PCDM_RS_NoDocument:
163       ErrorMessage (Message_Msg("TObj_Appl_RNoDocument") << theSourceFile);
164       break;
165     case PCDM_RS_FormatFailure:
166       ErrorMessage (Message_Msg("TObj_Appl_RFormatFailure") << theSourceFile);
167       break;
168     case PCDM_RS_TypeNotFoundInSchema:
169       ErrorMessage (Message_Msg("TObj_Appl_RTypeNotFound") << theSourceFile);
170       break;
171     case PCDM_RS_UnrecognizedFileFormat:
172       ErrorMessage (Message_Msg("TObj_Appl_RBadFileFormat") << theSourceFile);
173       break;
174     case PCDM_RS_MakeFailure:
175       ErrorMessage (Message_Msg("TObj_Appl_RMakeFailure") << theSourceFile);
176       break;
177     case PCDM_RS_PermissionDenied:
178       ErrorMessage (Message_Msg("TObj_Appl_RPermissionDenied") << theSourceFile);
179       break;
180     case PCDM_RS_DriverFailure:
181       ErrorMessage (Message_Msg("TObj_Appl_RDriverFailure") << theSourceFile);
182       break;
183     case PCDM_RS_ReaderException:
184       ErrorMessage (Message_Msg("TObj_Appl_RException") << theSourceFile);
185       break;
186     default:
187       ErrorMessage (Message_Msg("TObj_Appl_RUnknownFail") << theSourceFile);
188       break;
189     }
190   }
191
192   // Release free memory
193   Standard::Purge();
194   return myIsError ? Standard_False : Standard_True;
195 }
196
197 //=======================================================================
198 //function : CreateNewDocument
199 //purpose  : 
200 //=======================================================================
201
202 Standard_Boolean TObj_Application::CreateNewDocument
203                         (Handle(TDocStd_Document)&         theDoc,
204                          const TCollection_ExtendedString& theFormat)
205 {
206   myIsError = Standard_False;
207
208   // Create the Document
209   NewDocument (theFormat, theDoc);
210
211   return myIsError ? Standard_False : Standard_True;
212 }
213
214 //=======================================================================
215 //function : ErrorMessage
216 //purpose  : 
217 //=======================================================================
218
219 void TObj_Application::ErrorMessage (const TCollection_ExtendedString &theMsg,
220                                          const Message_Gravity theLevel)
221 {
222   myMessenger->Send ( theMsg, theLevel );
223 }
224