4c1fdbfdc6ad8ed3c95fbc56c892d1fcf5b907be
[occt.git] / src / TObj / TObj_Application.cxx
1 // Created on: 2004-11-23
2 // Created by: Pavel TELKOV
3 // Copyright (c) 2004-2012 OPEN CASCADE SAS
4 //
5 // The content of this file is subject to the Open CASCADE Technology Public
6 // License Version 6.5 (the "License"). You may not use the content of this file
7 // except in compliance with the License. Please obtain a copy of the License
8 // at http://www.opencascade.org and read it completely before using this file.
9 //
10 // The Initial Developer of the Original Code is Open CASCADE S.A.S., having its
11 // main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France.
12 //
13 // The Original Code and all software distributed under the License is
14 // distributed on an "AS IS" basis, without warranty of any kind, and the
15 // Initial Developer hereby disclaims all such warranties, including without
16 // limitation, any warranties of merchantability, fitness for a particular
17 // purpose or non-infringement. Please see the License for the specific terms
18 // and conditions governing the rights and limitations under the License.
19
20 // The original implementation Copyright: (C) RINA S.p.A
21
22 #include <TObj_Application.hxx>
23
24 #include <Standard_SStream.hxx>
25 #include <Standard_ErrorHandler.hxx>
26 #include <TCollection_ExtendedString.hxx>
27 #include <TColStd_SequenceOfExtendedString.hxx>
28 #include <CDM_COutMessageDriver.hxx>
29 #include <Message_Msg.hxx>
30 #include <stdio.h>
31
32 IMPLEMENT_STANDARD_HANDLE(TObj_Application,TDocStd_Application)
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 ()
52 {
53   myMessenger = new Message_Messenger;
54   myMessageDriver = new CDM_COutMessageDriver;
55   myIsVerbose = Standard_False;
56 }
57
58 //=======================================================================
59 //function : Formats
60 //purpose  : 
61 //=======================================================================
62
63 void TObj_Application::Formats(TColStd_SequenceOfExtendedString& theFormats) 
64 {
65   theFormats.Append(TCollection_ExtendedString ("TObjXml"));
66   theFormats.Append(TCollection_ExtendedString ("TObjBin"));
67 }
68
69 //=======================================================================
70 //function : ResourcesName
71 //purpose  : 
72 //=======================================================================
73
74 Standard_CString TObj_Application::ResourcesName()
75 {
76   return Standard_CString("TObj");
77 }
78
79 //=======================================================================
80 //function : SaveDocument
81 //purpose  : Saving the OCAF document
82 //=======================================================================
83
84 Standard_Boolean TObj_Application::SaveDocument
85                         (const Handle(TDocStd_Document)&   theSourceDoc,
86                          const char*                       theTargetFile)
87 {
88   myIsError = Standard_False;
89   TCollection_ExtendedString aPath ((const Standard_CString)theTargetFile);
90
91   PCDM_StoreStatus aStatus = SaveAs (theSourceDoc, aPath);
92   myIsError = aStatus != PCDM_SS_OK;
93   if (myIsError)
94   {
95     switch (aStatus)
96     {
97     case PCDM_SS_DriverFailure:
98       ErrorMessage (Message_Msg("TObj_Appl_SDriverFailure") << aPath);
99       break;
100     case PCDM_SS_WriteFailure:
101       ErrorMessage (Message_Msg("TObj_Appl_SWriteFailure") << aPath);
102       break;
103     case PCDM_SS_Failure:
104       ErrorMessage (Message_Msg("TObj_Appl_SFailure") << aPath);
105       break;
106     case PCDM_SS_DiskWritingFailure:
107       ErrorMessage (Message_Msg("TObj_Appl_SDiskWritingFailure") << aPath);
108       break;
109     case PCDM_SS_Doc_IsNull:
110       ErrorMessage (Message_Msg("TObj_Appl_SDocIsNull") << aPath);
111       break;
112     case PCDM_SS_No_Obj:
113       ErrorMessage (Message_Msg("TObj_Appl_SNoObj") << aPath);
114       break;
115     case PCDM_SS_Info_Section_Error:
116       ErrorMessage (Message_Msg("TObj_Appl_SInfoSectionError") << aPath);
117       break;
118     default:
119       ErrorMessage (Message_Msg("TObj_Appl_SUnknownFailure") << aPath);
120       break;
121     }
122   }
123
124   // Release free memory
125   Standard::Purge();
126   return myIsError ? Standard_False : Standard_True;
127 }
128
129 //=======================================================================
130 //function : LoadDocument
131 //purpose  : Loading the OCAF document
132 //=======================================================================
133
134 Standard_Boolean TObj_Application::LoadDocument
135                         (const char*                       theSourceFile,
136                          Handle(TDocStd_Document)&         theTargetDoc)
137 {
138   myIsError = Standard_False;
139   TCollection_ExtendedString aPath ((const Standard_CString)theSourceFile);
140
141   PCDM_ReaderStatus aStatus = PCDM_RS_ReaderException;
142   {
143     try
144     {
145       aStatus = Open (aPath, theTargetDoc);
146     }
147     catch (Standard_Failure)
148     {
149 #if defined(_DEBUG) || defined(DEB)
150       ErrorMessage (Message_Msg("TObj_Appl_Exception") << 
151                     Standard_Failure::Caught()->GetMessageString());
152 #endif
153     }
154   }
155   myIsError = aStatus != PCDM_RS_OK;
156   if (myIsError)
157   {
158     switch (aStatus)
159     {
160     case PCDM_RS_UnknownDocument:
161       ErrorMessage (Message_Msg("TObj_Appl_RUnknownDocument") << aPath);
162       break;
163     case PCDM_RS_AlreadyRetrieved:
164       ErrorMessage (Message_Msg("TObj_Appl_RAlreadyRetrieved") << aPath);
165       break;
166     case PCDM_RS_AlreadyRetrievedAndModified:
167       ErrorMessage (Message_Msg("TObj_Appl_RAlreadyRetrievedAndModified") << aPath);
168       break;
169     case PCDM_RS_NoDriver:
170       ErrorMessage (Message_Msg("TObj_Appl_RNoDriver") << aPath);
171       break;
172     case PCDM_RS_UnknownFileDriver:
173       ErrorMessage (Message_Msg("TObj_Appl_RNoDriver") << aPath);
174       break;
175     case PCDM_RS_OpenError:
176       ErrorMessage (Message_Msg("TObj_Appl_ROpenError") << aPath);
177       break;
178     case PCDM_RS_NoVersion:
179       ErrorMessage (Message_Msg("TObj_Appl_RNoVersion") << aPath);
180       break;
181     case PCDM_RS_NoModel:
182       ErrorMessage (Message_Msg("TObj_Appl_RNoModel") << aPath);
183       break;
184     case PCDM_RS_NoDocument:
185       ErrorMessage (Message_Msg("TObj_Appl_RNoDocument") << aPath);
186       break;
187     case PCDM_RS_FormatFailure:
188       ErrorMessage (Message_Msg("TObj_Appl_RFormatFailure") << aPath);
189       break;
190     case PCDM_RS_TypeNotFoundInSchema:
191       ErrorMessage (Message_Msg("TObj_Appl_RTypeNotFound") << aPath);
192       break;
193     case PCDM_RS_UnrecognizedFileFormat:
194       ErrorMessage (Message_Msg("TObj_Appl_RBadFileFormat") << aPath);
195       break;
196     case PCDM_RS_MakeFailure:
197       ErrorMessage (Message_Msg("TObj_Appl_RMakeFailure") << aPath);
198       break;
199     case PCDM_RS_PermissionDenied:
200       ErrorMessage (Message_Msg("TObj_Appl_RPermissionDenied") << aPath);
201       break;
202     case PCDM_RS_DriverFailure:
203       ErrorMessage (Message_Msg("TObj_Appl_RDriverFailure") << aPath);
204       break;
205     case PCDM_RS_ReaderException:
206       ErrorMessage (Message_Msg("TObj_Appl_RException") << aPath);
207       break;
208     default:
209       ErrorMessage (Message_Msg("TObj_Appl_RUnknownFail") << aPath);
210       break;
211     }
212   }
213
214   // Release free memory
215   Standard::Purge();
216   return myIsError ? Standard_False : Standard_True;
217 }
218
219 //=======================================================================
220 //function : CreateNewDocument
221 //purpose  : 
222 //=======================================================================
223
224 Standard_Boolean TObj_Application::CreateNewDocument
225                         (Handle(TDocStd_Document)&         theDoc,
226                          const TCollection_ExtendedString& theFormat)
227 {
228   myIsError = Standard_False;
229
230   // Create the Document
231   NewDocument (theFormat, theDoc);
232
233   return myIsError ? Standard_False : Standard_True;
234 }
235
236 //=======================================================================
237 //function : ErrorMessage
238 //purpose  : 
239 //=======================================================================
240
241 void TObj_Application::ErrorMessage (const TCollection_ExtendedString &theMsg,
242                                          const Message_Gravity theLevel)
243 {
244   myMessenger->Send ( theMsg, theLevel );
245 }
246