1 // Copyright (C) 2005 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
2 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
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.
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.
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
18 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
20 // File : SALOMEDSImpl_Study.hxx
21 // Author : Sergey RUIN
24 #ifndef __SALOMEDSIMPL_STUDY_I_H__
25 #define __SALOMEDSIMPL_STUDY_I_H__
28 #include <Handle_MMgt_TShared.hxx>
29 #include <Standard_DefineHandle.hxx>
30 DEFINE_STANDARD_HANDLE( SALOMEDSImpl_Study, MMgt_TShared )
36 #include <TDocStd_Document.hxx>
37 #include <TDF_Tool.hxx>
38 #include <TDF_Data.hxx>
39 #include <TDF_Label.hxx>
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>
47 #include <NCollection_DataMap.hxx>
49 #include <NCollection_DataMap1.hxx>
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"
64 class SALOMEDSImpl_StudyManager;
65 class SALOMEDSImpl_GenericAttribute;
68 typedef NCollection_DataMap <TCollection_AsciiString, Handle_Standard_Transient> DataMapOfAsciiStringTransient;
69 typedef NCollection_DataMap <TCollection_AsciiString, TDF_Label> DataMapAsciiStringLabel;
71 typedef NCollection_DataMap1 <TCollection_AsciiString, Handle_Standard_Transient> DataMapOfAsciiStringTransient;
72 typedef NCollection_DataMap1 <TCollection_AsciiString, TDF_Label> DataMapAsciiStringLabel;
75 class SALOMEDSImpl_Study : public MMgt_TShared
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
85 TCollection_AsciiString _errorCode;
86 Handle(TColStd_HSequenceOfAsciiString) _lockers;
87 Handle(SALOMEDSImpl_Callback) _cb;
88 Handle(SALOMEDSImpl_StudyBuilder) _builder;
89 Handle(SALOMEDSImpl_UseCaseBuilder) _useCaseBuilder;
91 DataMapOfAsciiStringTransient _mapOfSO;
92 DataMapOfAsciiStringTransient _mapOfSCO;
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;
101 Handle(SALOMEDSImpl_SObject) _FindObject(const Handle(SALOMEDSImpl_SObject)& SO,
102 const TCollection_AsciiString& anObjectName,
105 Handle(SALOMEDSImpl_SObject) _FindObjectIOR(const Handle(SALOMEDSImpl_SObject)& SO,
106 const TCollection_AsciiString& anObjectIOR,
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);
116 //! standard constructor
117 Standard_EXPORT SALOMEDSImpl_Study(const Handle(TDocStd_Document)&, const TCollection_AsciiString& study_name);
119 //! standard destructor
120 Standard_EXPORT virtual ~SALOMEDSImpl_Study();
122 //! method to Get persistent reference of study (idem URL())
123 Standard_EXPORT virtual TCollection_AsciiString GetPersistentReference();
125 //! method to Get transient reference of study
126 Standard_EXPORT virtual TCollection_AsciiString GetTransientReference();
128 Standard_EXPORT virtual void SetTransientReference(const TCollection_AsciiString& theIOR);
130 //! method to detect if a study is empty
131 Standard_EXPORT virtual bool IsEmpty();
133 //! method to Find a Component with ComponentDataType = aComponentName
134 Standard_EXPORT virtual Handle(SALOMEDSImpl_SComponent) FindComponent (const TCollection_AsciiString& aComponentName);
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);
139 //! method to Find an Object with SALOMEDSImpl::Name = anObjectName
140 Standard_EXPORT virtual Handle(SALOMEDSImpl_SObject) FindObject(const TCollection_AsciiString& anObjectName);
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 ) ;
147 //! method to Find an Object with ID = anObjectID
148 Standard_EXPORT virtual Handle(SALOMEDSImpl_SObject) FindObjectID(const TCollection_AsciiString& anObjectID);
150 //! method to Create an Object with ID = anObjectID
151 Standard_EXPORT virtual Handle(SALOMEDSImpl_SObject) CreateObjectID(const TCollection_AsciiString& anObjectID);
153 //! method to Find an Object with ID = anObjectIOR
154 Standard_EXPORT virtual Handle(SALOMEDSImpl_SObject) FindObjectIOR(const TCollection_AsciiString& anObjectIOR);
156 //! method to Find an Object by its path
157 Standard_EXPORT virtual Handle(SALOMEDSImpl_SObject) FindObjectByPath(const TCollection_AsciiString& thePath);
159 //! method to get a path of SObject
160 Standard_EXPORT virtual TCollection_AsciiString GetObjectPath(const Handle(SALOMEDSImpl_SObject)& theObject);
162 Standard_EXPORT TCollection_AsciiString GetObjectPathByIOR(const TCollection_AsciiString& theIOR);
164 //! method to set a context: root ('/') is UserData component
165 Standard_EXPORT virtual bool SetContext(const TCollection_AsciiString& thePath);
167 //! method to get a context
168 Standard_EXPORT virtual TCollection_AsciiString GetContext();
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);
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);
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);
179 //! method to get all components names
180 Standard_EXPORT virtual Handle(TColStd_HSequenceOfAsciiString) GetComponentNames(const TCollection_AsciiString& theContext);
182 //! method to Create a ChildIterator from an SObject
183 Standard_EXPORT virtual Handle(SALOMEDSImpl_ChildIterator) NewChildIterator(const Handle(SALOMEDSImpl_SObject)& aSO);
185 //! method to Create a SComponentIterator
186 Standard_EXPORT virtual SALOMEDSImpl_SComponentIterator NewComponentIterator();
188 //! method to Create a StudyBuilder
189 Standard_EXPORT virtual Handle(SALOMEDSImpl_StudyBuilder) NewBuilder();
191 //! method to get study name
192 Standard_EXPORT virtual TCollection_AsciiString Name();
194 //! method to set study name
195 Standard_EXPORT virtual void Name(const TCollection_AsciiString& name);
197 //! method to get if study has been saved
198 Standard_EXPORT virtual bool IsSaved();
200 //! method to set if study has been saved
201 Standard_EXPORT virtual void IsSaved(bool save);
203 //! method to Detect if a Study has been modified since it has been saved
204 Standard_EXPORT virtual bool IsModified();
206 //! method to get URL of the study (idem GetPersistentReference)
207 Standard_EXPORT virtual TCollection_AsciiString URL();
209 //! method to set URL of the study
210 Standard_EXPORT virtual void URL(const TCollection_AsciiString& url);
212 Standard_EXPORT virtual bool IsLocked();
214 Standard_EXPORT virtual int StudyId();
216 Standard_EXPORT virtual void StudyId(int id);
218 Standard_EXPORT virtual void UpdateIORLabelMap(const TCollection_AsciiString& anIOR, const TCollection_AsciiString& aLabel);
220 Standard_EXPORT virtual Handle(TColStd_HSequenceOfTransient) FindDependances(const Handle(SALOMEDSImpl_SObject)& anObject);
222 Standard_EXPORT virtual Handle(SALOMEDSImpl_AttributeStudyProperties) SALOMEDSImpl_Study::GetProperties();
224 Standard_EXPORT virtual TCollection_AsciiString GetLastModificationDate();
226 Standard_EXPORT virtual Handle(TColStd_HSequenceOfAsciiString) GetModificationsDate();
228 Standard_EXPORT virtual Handle(SALOMEDSImpl_UseCaseBuilder) GetUseCaseBuilder();
230 Standard_EXPORT virtual void Close();
232 Standard_EXPORT void EnableUseCaseAutoFilling(bool isEnabled) { _errorCode = ""; _autoFill = isEnabled; }
234 // postponed destroying of object functionality
235 Standard_EXPORT virtual void AddPostponed(const TCollection_AsciiString& theIOR);
237 Standard_EXPORT virtual void AddCreatedPostponed(const TCollection_AsciiString& theIOR);
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
246 Standard_EXPORT virtual TCollection_AsciiString GetErrorCode() { return _errorCode; }
247 Standard_EXPORT virtual bool IsError() { return _errorCode != ""; }
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);
256 Standard_EXPORT virtual bool HasCurrentContext() { return !_current.IsNull(); }
258 Standard_EXPORT virtual bool DumpStudy(const TCollection_AsciiString& thePath,
259 const TCollection_AsciiString& theBaseName,
261 SALOMEDSImpl_DriverFactory* theFactory);
263 Standard_EXPORT static TCollection_AsciiString GetDumpStudyComment(const char* theComponentName = 0);
265 Standard_EXPORT virtual Handle(TDocStd_Document) GetDocument() { return _doc; }
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);
270 //This method marks the study as being modified
271 Standard_EXPORT void Modify();
273 Standard_EXPORT Handle(SALOMEDSImpl_AttributeParameter) GetCommonParameters(const char* theID, int theSavePoint);
275 Standard_EXPORT Handle(SALOMEDSImpl_AttributeParameter) GetModuleParameters(const char* theID,
276 const char* theModuleName,
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);
282 //Returns True if the study is locked
283 Standard_EXPORT bool IsStudyLocked();
286 Standard_EXPORT void UnLockStudy(const char* theLockerID);
288 //Returns an ID of the study locker
289 Standard_EXPORT Handle(TColStd_HSequenceOfAsciiString) GetLockerID();
292 DEFINE_STANDARD_RTTI( SALOMEDSImpl_Study )
294 friend class SALOMEDSImpl_StudyManager;
295 friend class SALOMEDSImpl_GenericAttribute;