Salome HOME
BugID: PAL10141, added a possibility to lock the study by several processes.
[modules/kernel.git] / src / SALOMEDSImpl / SALOMEDSImpl_Study.hxx
1 // Copyright (C) 2005  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
2 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
3 // 
4 // This library is free software; you can redistribute it and/or
5 // modify it under the terms of the GNU Lesser General Public
6 // License as published by the Free Software Foundation; either 
7 // version 2.1 of the License.
8 // 
9 // This library is distributed in the hope that it will be useful 
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of 
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
12 // Lesser General Public License for more details.
13 //
14 // You should have received a copy of the GNU Lesser General Public  
15 // License along with this library; if not, write to the Free Software 
16 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
17 //
18 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
19 //
20 //  File   : SALOMEDSImpl_Study.hxx
21 //  Author : Sergey RUIN
22 //  Module : SALOME
23
24 #ifndef __SALOMEDSIMPL_STUDY_I_H__
25 #define __SALOMEDSIMPL_STUDY_I_H__
26
27 //Handle definition
28 #include <Handle_MMgt_TShared.hxx>
29 #include <Standard_DefineHandle.hxx>
30 DEFINE_STANDARD_HANDLE( SALOMEDSImpl_Study, MMgt_TShared )
31
32 // std C++ headers
33 #include <iostream>
34
35 // Cascade headers
36 #include <TDocStd_Document.hxx>
37 #include <TDF_Tool.hxx>
38 #include <TDF_Data.hxx>
39 #include <TDF_Label.hxx>
40 #include <stdio.h>
41 #include <TCollection_AsciiString.hxx>
42 #include <TColStd_SequenceOfInteger.hxx>
43 #include <TColStd_SequenceOfAsciiString.hxx>
44 #include <TColStd_HSequenceOfAsciiString.hxx>
45 #include <TColStd_HSequenceOfTransient.hxx>
46 #ifndef WNT
47 #include <NCollection_DataMap.hxx>
48 #else
49 #include <NCollection_DataMap1.hxx>
50 #endif
51
52 //SALOMEDSImpl headers
53 #include "SALOMEDSImpl_SComponentIterator.hxx"
54 #include "SALOMEDSImpl_SObject.hxx"
55 #include "SALOMEDSImpl_StudyBuilder.hxx"
56 #include "SALOMEDSImpl_UseCaseBuilder.hxx"
57 #include "SALOMEDSImpl_AttributeStudyProperties.hxx"
58 #include "SALOMEDSImpl_AttributeIOR.hxx"
59 #include "SALOMEDSImpl_AttributeParameter.hxx"
60 #include "SALOMEDSImpl_Callback.hxx"
61 #include "SALOMEDSImpl_Driver.hxx" 
62 #include "SALOMEDSImpl_ChildIterator.hxx" 
63
64 class SALOMEDSImpl_StudyManager;
65 class SALOMEDSImpl_GenericAttribute;
66
67 #ifndef WNT
68 typedef NCollection_DataMap <TCollection_AsciiString, Handle_Standard_Transient> DataMapOfAsciiStringTransient;
69 typedef NCollection_DataMap <TCollection_AsciiString, TDF_Label> DataMapAsciiStringLabel;
70 #else
71 typedef NCollection_DataMap1 <TCollection_AsciiString, Handle_Standard_Transient> DataMapOfAsciiStringTransient;
72 typedef NCollection_DataMap1 <TCollection_AsciiString, TDF_Label> DataMapAsciiStringLabel;
73 #endif
74
75 class SALOMEDSImpl_Study : public MMgt_TShared 
76 {
77 private:
78   TCollection_AsciiString              _name;  
79   Handle(TDocStd_Document) _doc;  // OCAF Document
80   bool                     _Saved; // True if the Study is saved
81   TCollection_AsciiString  _URL; //URL of the persistent reference of the study
82   int                      _StudyId; 
83   TDF_Label                _current;
84   bool                     _autoFill; 
85   TCollection_AsciiString  _errorCode;
86   Handle(TColStd_HSequenceOfAsciiString) _lockers;
87   Handle(SALOMEDSImpl_Callback)          _cb;
88   Handle(SALOMEDSImpl_StudyBuilder)      _builder;
89   Handle(SALOMEDSImpl_UseCaseBuilder)    _useCaseBuilder;
90
91   DataMapOfAsciiStringTransient _mapOfSO;
92   DataMapOfAsciiStringTransient _mapOfSCO;
93
94   // data structures for postponed destroying of object functionality
95   TColStd_SequenceOfAsciiString myPostponedIORs; // ordered set of IORs
96   TColStd_SequenceOfInteger myNbPostponed; // number of IOR in the each transaction
97   int myNbUndos; // number of current Undos, made by user
98   DataMapAsciiStringLabel myIORLabels;
99  
100
101   Handle(SALOMEDSImpl_SObject)    _FindObject(const Handle(SALOMEDSImpl_SObject)& SO,
102                                               const TCollection_AsciiString& anObjectName,
103                                               bool& _find);
104                                        
105   Handle(SALOMEDSImpl_SObject)   _FindObjectIOR(const Handle(SALOMEDSImpl_SObject)& SO,
106                                                 const TCollection_AsciiString& anObjectIOR,
107                                                 bool& _find);
108
109 public:
110
111   Standard_EXPORT static Handle(SALOMEDSImpl_Study) GetStudy(const TDF_Label& theLabel);
112   Standard_EXPORT static Handle(SALOMEDSImpl_SObject) SObject(const TDF_Label& theLabel);
113   Standard_EXPORT static Handle(SALOMEDSImpl_SComponent) SComponent(const TDF_Label& theLabel);
114   Standard_EXPORT static void IORUpdated(const Handle(SALOMEDSImpl_AttributeIOR)& theAttribute);
115
116   //! standard constructor
117   Standard_EXPORT SALOMEDSImpl_Study(const Handle(TDocStd_Document)&, const TCollection_AsciiString& study_name);
118   
119   //! standard destructor
120   Standard_EXPORT virtual ~SALOMEDSImpl_Study(); 
121   
122   //! method to Get persistent reference of study (idem URL())
123   Standard_EXPORT virtual TCollection_AsciiString GetPersistentReference();
124
125   //! method to Get transient reference of study
126   Standard_EXPORT virtual TCollection_AsciiString GetTransientReference();
127
128   Standard_EXPORT virtual void SetTransientReference(const TCollection_AsciiString& theIOR);
129
130   //! method to detect if a study is empty
131   Standard_EXPORT virtual bool IsEmpty();
132
133   //! method to Find a Component with ComponentDataType = aComponentName
134   Standard_EXPORT virtual Handle(SALOMEDSImpl_SComponent) FindComponent (const TCollection_AsciiString& aComponentName);
135
136   //! method to Find a Component Find a Component from it's ID
137   Standard_EXPORT virtual Handle(SALOMEDSImpl_SComponent) FindComponentID(const TCollection_AsciiString& aComponentID);
138
139   //! method to  Find an Object with SALOMEDSImpl::Name = anObjectName 
140   Standard_EXPORT virtual Handle(SALOMEDSImpl_SObject) FindObject(const TCollection_AsciiString& anObjectName);
141
142
143   //! method to Find Object(s) with SALOMEDSImpl::Name=anObjectName in a component with ComponentDataType = aComponentName
144   Standard_EXPORT virtual Handle(TColStd_HSequenceOfTransient) FindObjectByName( const TCollection_AsciiString& anObjectName, 
145                                                                  const TCollection_AsciiString& aComponentName ) ;
146   
147   //! method to Find an Object with ID = anObjectID 
148   Standard_EXPORT virtual Handle(SALOMEDSImpl_SObject) FindObjectID(const TCollection_AsciiString& anObjectID);
149
150   //! method to Create an Object with ID = anObjectID 
151   Standard_EXPORT virtual Handle(SALOMEDSImpl_SObject) CreateObjectID(const TCollection_AsciiString& anObjectID);
152
153   //! method to Find an Object with ID = anObjectIOR 
154   Standard_EXPORT virtual Handle(SALOMEDSImpl_SObject) FindObjectIOR(const TCollection_AsciiString& anObjectIOR);
155
156   //! method to Find an Object by its path
157   Standard_EXPORT virtual Handle(SALOMEDSImpl_SObject) FindObjectByPath(const TCollection_AsciiString& thePath);
158
159   //! method to get a path of SObject
160   Standard_EXPORT virtual TCollection_AsciiString GetObjectPath(const Handle(SALOMEDSImpl_SObject)& theObject);
161
162   Standard_EXPORT TCollection_AsciiString GetObjectPathByIOR(const TCollection_AsciiString& theIOR);
163
164   //! method to set a context: root ('/') is UserData component
165   Standard_EXPORT virtual bool SetContext(const TCollection_AsciiString& thePath);
166
167   //! method to get a context
168   Standard_EXPORT virtual TCollection_AsciiString GetContext();  
169
170   //! method to get all object names in the given context (or in the current context, if 'theContext' is empty)
171   Standard_EXPORT virtual Handle(TColStd_HSequenceOfAsciiString) GetObjectNames(const TCollection_AsciiString& theContext);
172
173   //! method to get all directory names in the given context (or in the current context, if 'theContext' is empty)
174   Standard_EXPORT virtual Handle(TColStd_HSequenceOfAsciiString) GetDirectoryNames(const TCollection_AsciiString& theContext);
175
176   //! method to get all file names in the given context (or in the current context, if 'theContext' is empty)
177   Standard_EXPORT virtual Handle(TColStd_HSequenceOfAsciiString) GetFileNames(const TCollection_AsciiString& theContext);
178
179   //! method to get all components names
180   Standard_EXPORT virtual Handle(TColStd_HSequenceOfAsciiString) GetComponentNames(const TCollection_AsciiString& theContext);
181
182   //! method to Create a ChildIterator from an SObject 
183   Standard_EXPORT virtual Handle(SALOMEDSImpl_ChildIterator) NewChildIterator(const Handle(SALOMEDSImpl_SObject)& aSO);
184
185   //! method to Create a SComponentIterator 
186   Standard_EXPORT virtual SALOMEDSImpl_SComponentIterator NewComponentIterator();
187
188   //! method to Create a StudyBuilder
189   Standard_EXPORT virtual Handle(SALOMEDSImpl_StudyBuilder) NewBuilder();
190  
191   //! method to get study name
192   Standard_EXPORT virtual TCollection_AsciiString Name();
193
194   //! method to set study name
195   Standard_EXPORT virtual void  Name(const TCollection_AsciiString& name);
196
197   //! method to get if study has been saved
198   Standard_EXPORT virtual bool IsSaved();
199
200   //! method to set if study has been saved
201   Standard_EXPORT virtual void  IsSaved(bool save);
202
203   //! method to Detect if a Study has been modified since it has been saved
204   Standard_EXPORT virtual bool IsModified();
205
206   //! method to get URL of the study (idem GetPersistentReference) 
207   Standard_EXPORT virtual TCollection_AsciiString URL();
208
209   //! method to set URL of the study
210   Standard_EXPORT virtual void  URL(const TCollection_AsciiString& url);
211
212   Standard_EXPORT virtual bool IsLocked();
213
214   Standard_EXPORT virtual int StudyId();
215
216   Standard_EXPORT virtual void  StudyId(int id);
217
218   Standard_EXPORT virtual void UpdateIORLabelMap(const TCollection_AsciiString& anIOR, const TCollection_AsciiString& aLabel);
219   
220   Standard_EXPORT virtual Handle(TColStd_HSequenceOfTransient) FindDependances(const Handle(SALOMEDSImpl_SObject)& anObject);
221
222   Standard_EXPORT virtual Handle(SALOMEDSImpl_AttributeStudyProperties) SALOMEDSImpl_Study::GetProperties();
223
224   Standard_EXPORT virtual TCollection_AsciiString GetLastModificationDate();
225
226   Standard_EXPORT virtual Handle(TColStd_HSequenceOfAsciiString) GetModificationsDate();
227
228   Standard_EXPORT virtual Handle(SALOMEDSImpl_UseCaseBuilder) GetUseCaseBuilder();
229
230   Standard_EXPORT virtual void Close();
231
232   Standard_EXPORT void EnableUseCaseAutoFilling(bool isEnabled) { _errorCode = ""; _autoFill = isEnabled; }
233
234   // postponed destroying of object functionality
235   Standard_EXPORT virtual void AddPostponed(const TCollection_AsciiString& theIOR);
236
237   Standard_EXPORT virtual void AddCreatedPostponed(const TCollection_AsciiString& theIOR);
238
239   Standard_EXPORT virtual Handle(TColStd_HSequenceOfAsciiString) RemovePostponed(const int theUndoLimit); 
240                                               // removes postponed IORs of old transaction
241                                               // if theUndoLimit==0, removes all
242   Standard_EXPORT virtual void UndoPostponed(const int theWay); // theWay = 1: resurrect objects,
243                                                 // theWay = -1: get back to the list of postponed
244
245
246   Standard_EXPORT virtual TCollection_AsciiString GetErrorCode() { return _errorCode; }
247   Standard_EXPORT virtual bool IsError() { return _errorCode != ""; }
248
249   Standard_EXPORT virtual Handle(SALOMEDSImpl_SComponent) GetSComponent(const TCollection_AsciiString& theEntry);
250   Standard_EXPORT virtual Handle(SALOMEDSImpl_SComponent) GetSComponent(const TDF_Label& theLabel);
251   Standard_EXPORT virtual Handle(SALOMEDSImpl_SObject) GetSObject(const TCollection_AsciiString& theEntry);
252   Standard_EXPORT virtual Handle(SALOMEDSImpl_SObject) GetSObject(const TDF_Label& theEntryLabel);
253   Standard_EXPORT virtual Handle(TDF_Attribute) GetAttribute(const TCollection_AsciiString& theEntry, 
254                                              const TCollection_AsciiString& theType);
255
256   Standard_EXPORT virtual bool HasCurrentContext() { return !_current.IsNull(); }
257
258   Standard_EXPORT virtual bool DumpStudy(const TCollection_AsciiString& thePath, 
259                                          const TCollection_AsciiString& theBaseName, 
260                                          bool isPublished,
261                                          SALOMEDSImpl_DriverFactory* theFactory);
262
263   Standard_EXPORT static TCollection_AsciiString GetDumpStudyComment(const char* theComponentName = 0);
264
265   Standard_EXPORT virtual Handle(TDocStd_Document) GetDocument() { return _doc; } 
266
267   //The method dump creates a txt file that contain a dump of the study, for debug use
268   Standard_EXPORT void dump(const TCollection_AsciiString& theFileName);
269
270   //This method marks the study as being modified
271   Standard_EXPORT void Modify();
272
273   Standard_EXPORT Handle(SALOMEDSImpl_AttributeParameter) GetCommonParameters(const char* theID, int theSavePoint);
274
275   Standard_EXPORT Handle(SALOMEDSImpl_AttributeParameter) GetModuleParameters(const char* theID, 
276                                                                               const char* theModuleName,
277                                                                               int theSavePoint);
278
279   //Locks the study, theLockerID is identificator of the of the one who locked the study for ex. IOR
280   Standard_EXPORT void SetStudyLock(const char* theLockerID);
281
282   //Returns True if the study is locked
283   Standard_EXPORT bool IsStudyLocked();
284
285   //Unlocks the study
286   Standard_EXPORT void UnLockStudy(const char* theLockerID);
287   
288   //Returns an ID of the study locker
289   Standard_EXPORT Handle(TColStd_HSequenceOfAsciiString) GetLockerID();
290
291 public:
292   DEFINE_STANDARD_RTTI( SALOMEDSImpl_Study )
293
294 friend class SALOMEDSImpl_StudyManager;    
295 friend class SALOMEDSImpl_GenericAttribute;
296 };
297 #endif