0031035: Coding - uninitialized class fields reported by Visual Studio Code Analysis
[occt.git] / src / CDF / CDF_Store.cxx
1 // Copyright (c) 1999-2014 OPEN CASCADE SAS
2 //
3 // This file is part of Open CASCADE Technology software library.
4 //
5 // This library is free software; you can redistribute it and/or modify it under
6 // the terms of the GNU Lesser General Public License version 2.1 as published
7 // by the Free Software Foundation, with special exception defined in the file
8 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
9 // distribution for complete text of the license and disclaimer of any warranty.
10 //
11 // Alternatively, this file may be used under the terms of Open CASCADE
12 // commercial license or contractual agreement.
13
14 // Modified by rmi, Thu Dec  4 14:24:24 1997
15
16 #include <CDF_Application.hxx>
17 #include <CDF_MetaDataDriver.hxx>
18 #include <CDF_Session.hxx>
19 #include <CDF_Store.hxx>
20 #include <CDF_StoreList.hxx>
21 #include <CDF_StoreSetNameStatus.hxx>
22 #include <CDM_Document.hxx>
23 #include <CDM_MetaData.hxx>
24 #include <PCDM.hxx>
25 #include <PCDM_StorageDriver.hxx>
26 #include <PCDM_StoreStatus.hxx>
27 #include <Standard_ProgramError.hxx>
28 #include <TCollection_ExtendedString.hxx>
29
30 #define theMetaDataDriver CDF_Session::CurrentSession()->MetaDataDriver()
31
32
33 static TCollection_ExtendedString blank("");
34
35
36
37 CDF_Store::CDF_Store()
38 : myHasSubComponents(Standard_False),
39   myIsMainDocument(Standard_False),
40   myStatus(PCDM_SS_No_Obj)
41 {
42 }
43 CDF_Store::CDF_Store(const Handle(CDM_Document)& aDocument):myHasSubComponents(Standard_False) {
44   
45   myMainDocument = aDocument;
46   Init();
47 }
48
49 void CDF_Store::Init() {
50   
51   myCurrentDocument = myMainDocument;
52   myList = new CDF_StoreList(myCurrentDocument);
53
54   // getting the subcomponents.
55   //
56   myIsMainDocument = Standard_False;
57   myList->Init();
58   for ( myList->Init(); myList->More(); myList->Next()) {
59     myCurrentDocument = myList->Value();
60     if(myCurrentDocument != myMainDocument) {
61       myHasSubComponents  = Standard_True;
62       FindDefault();
63       
64     }
65   }
66   myIsMainDocument = Standard_True;
67   myCurrentDocument = myMainDocument;
68 }
69
70 Standard_ExtString CDF_Store::Folder() const {
71   static TCollection_ExtendedString retv;
72   if(myCurrentDocument->HasRequestedFolder())
73     retv =  myCurrentDocument->RequestedFolder();
74   else
75     retv= blank;
76   return retv.ToExtString();
77 }
78
79 Standard_ExtString CDF_Store::Name() const {
80   static TCollection_ExtendedString retv;
81   retv = myCurrentDocument->RequestedName();
82   return retv.ToExtString();
83 }
84
85
86 Standard_Boolean  CDF_Store::SetFolder(const Standard_ExtString aFolder) {
87   TCollection_ExtendedString f(aFolder);
88   return SetFolder(f);
89 }
90 Standard_Boolean  CDF_Store::SetFolder(const TCollection_ExtendedString& aFolder) {
91
92   TCollection_ExtendedString theFolder(aFolder);
93   Standard_Integer l = theFolder.Length();
94
95   // if the last character is the folder separator (which is always the first character)
96   // it is removed.
97         // This is correct for Unix systems but not for Windows! VMS and MAC? Thomas Haller, 23.11.01
98   if(l > 1) {
99 #ifndef _WIN32
100     if(theFolder.Value(l) == theFolder.Value(1)) theFolder.Trunc(l-1);
101 #else
102         if (theFolder.Value(l) == '/' || theFolder.Value(l) == '\\')
103                 theFolder.Trunc(l-1);
104 #endif
105   }
106
107   if(theMetaDataDriver->FindFolder(theFolder))  {
108     myCurrentDocument->SetRequestedFolder(theFolder);
109     return Standard_True;
110   }
111   return Standard_False;
112 }
113
114
115 CDF_StoreSetNameStatus CDF_Store::RecheckName () {
116    return SetName(myCurrentDocument->RequestedName());
117 }
118
119 CDF_StoreSetNameStatus CDF_Store::SetName(const TCollection_ExtendedString&  aName)
120 {
121   TCollection_ExtendedString theName=theMetaDataDriver->SetName(myCurrentDocument,aName);
122
123   if(myCurrentDocument->IsStored ()) { 
124     Handle(CDM_MetaData)  E = myCurrentDocument->MetaData();
125     if(   E->Folder() == myCurrentDocument->RequestedFolder() 
126        && E->Name()   == theName) return CDF_SSNS_OK;
127   }
128   
129   if(myCurrentDocument->HasRequestedFolder()) {
130     if (theMetaDataDriver->Find(myCurrentDocument->RequestedFolder(),theName)) {
131       if(theMetaDataDriver->MetaData(myCurrentDocument->RequestedFolder(),theName)->IsRetrieved())
132         return CDF_SSNS_OpenDocument;
133       else {
134         myCurrentDocument->SetRequestedName(theName);
135         return CDF_SSNS_ReplacingAnExistentDocument;
136       }
137     }
138   }
139   myCurrentDocument->SetRequestedName(theName);
140   return  CDF_SSNS_OK;
141 }
142 CDF_StoreSetNameStatus CDF_Store::SetName(const Standard_ExtString aName)
143 {
144   TCollection_ExtendedString theName(aName);
145   return SetName(theName);
146 }
147
148 void CDF_Store::Realize() {
149   Standard_ProgramError_Raise_if(!myList->IsConsistent(),"information are missing");
150   Handle(CDM_MetaData) m;
151   myText = "";
152   myStatus = myList->Store(m,myText);
153   if(myStatus==PCDM_SS_OK) myPath = m->Path();
154 }
155 Standard_ExtString CDF_Store::Path() const {
156   return myPath.ToExtString();
157 }
158 Standard_ExtString CDF_Store::MetaDataPath() const {
159   static TCollection_ExtendedString retv;
160   retv="";
161   if(myCurrentDocument->IsStored()) retv=myCurrentDocument->MetaData()->Path();
162   return retv.ToExtString();
163 }
164 Standard_ExtString CDF_Store::Description() const {
165   static TCollection_ExtendedString retv;
166
167   if(myMainDocument->FindDescription())
168     retv = myMainDocument->Description();
169   else
170     retv= blank;
171
172   return retv.ToExtString();
173 }
174
175 Standard_Boolean CDF_Store::IsStored() const {
176   return myCurrentDocument->IsStored();
177 }
178 Standard_Boolean CDF_Store::IsModified() const {
179   return myCurrentDocument->IsModified();
180 }
181 Standard_Boolean CDF_Store::CurrentIsConsistent() const {
182   if(!myCurrentDocument->IsStored())
183     return myCurrentDocument->HasRequestedFolder();
184   return Standard_True;
185 }
186
187 Standard_Boolean CDF_Store::IsConsistent() const {
188   return myList->IsConsistent();
189 }
190 Standard_Boolean CDF_Store::HasAPreviousVersion() const {
191   return myCurrentDocument->HasRequestedPreviousVersion();
192 }
193
194 Standard_ExtString CDF_Store::PreviousVersion() const {
195   static TCollection_ExtendedString retv;
196   if(myCurrentDocument->HasRequestedPreviousVersion())
197     retv= myCurrentDocument->RequestedPreviousVersion();
198   else
199     retv=blank;
200   return retv.ToExtString();
201 }
202
203 Standard_Boolean CDF_Store::SetPreviousVersion (const Standard_ExtString aPreviousVersion) {
204   if(theMetaDataDriver->HasVersionCapability()) {
205     if(myCurrentDocument->HasRequestedFolder()) {
206       if(theMetaDataDriver->Find(myCurrentDocument->RequestedFolder(),myCurrentDocument->RequestedName(),aPreviousVersion)){
207         
208         myCurrentDocument->SetRequestedPreviousVersion(aPreviousVersion);
209         return Standard_True;
210       }
211       else
212         return Standard_False;
213     }
214     else 
215       return Standard_False;
216   }
217   return Standard_True;
218 }
219
220 void CDF_Store::InitComponent() {
221    myList->Init();
222 }
223
224 Standard_Boolean CDF_Store::MoreComponent() const {
225   return myList->More();
226 }
227
228 void CDF_Store::NextComponent()  {
229   myList->Next();
230 }
231 void CDF_Store::SetCurrent() {
232   myCurrentDocument = myList->Value();
233   myIsMainDocument = myCurrentDocument == myMainDocument;
234
235
236 }
237
238 Standard_ExtString CDF_Store::Component() const {
239   
240   static TCollection_ExtendedString retv;
241   retv=myList->Value()->Presentation();
242   return retv.ToExtString();
243 }
244 Standard_Boolean CDF_Store::HasSubComponents () const {
245    return myHasSubComponents;
246 }
247
248 void CDF_Store::SetCurrent(const Standard_ExtString aPresentation) {
249   myCurrentDocument = CDM_Document::FindFromPresentation(aPresentation);
250   myIsMainDocument = myCurrentDocument == myMainDocument;
251 }
252 void CDF_Store::SetMain() {
253   myCurrentDocument = myMainDocument;
254   myIsMainDocument = Standard_True;
255
256 }
257 Standard_Boolean CDF_Store::IsMainDocument() const {
258   return myIsMainDocument;
259 }
260
261 CDF_SubComponentStatus CDF_Store::SubComponentStatus(const Standard_ExtString aPresentation) const {
262    Handle(CDM_Document) d = CDM_Document::FindFromPresentation(aPresentation);
263
264   if(!d->IsStored()) 
265     return d->HasRequestedFolder()? CDF_SCS_Consistent : CDF_SCS_Unconsistent;
266
267   if(d->IsModified()) return CDF_SCS_Modified;
268   return CDF_SCS_Stored;
269 }
270
271
272
273 PCDM_StoreStatus CDF_Store::StoreStatus() const {
274   return myStatus;
275 }
276 Standard_ExtString CDF_Store::AssociatedStatusText() const {
277   return myText.ToExtString();
278 }
279
280
281 void CDF_Store::FindDefault() {
282   if (!myCurrentDocument->IsStored ()) {
283     myCurrentDocument->SetRequestedFolder(CDF_Session::CurrentSession()->CurrentApplication()->DefaultFolder());
284 //    myCurrentDocument->SetRequestedName(theMetaDataDriver->SetName(myCurrentDocument,myCurrentDocument->Presentation()));
285     myCurrentDocument->SetRequestedName(theMetaDataDriver->SetName(myCurrentDocument,myCurrentDocument->RequestedName()));
286   }
287 }
288 void CDF_Store::SetComment(const Standard_ExtString aComment) {
289   myCurrentDocument->SetRequestedComment(aComment);
290 }
291
292 Standard_ExtString CDF_Store::Comment() const {
293   static TCollection_ExtendedString retv;
294   retv=myCurrentDocument->RequestedComment();
295   return retv.ToExtString();
296 }