1 // Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE
3 // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
6 // This library is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU Lesser General Public
8 // License as published by the Free Software Foundation; either
9 // version 2.1 of the License, or (at your option) any later version.
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 // Lesser General Public License for more details.
16 // You should have received a copy of the GNU Lesser General Public
17 // License along with this library; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
23 // File : SALOMEDSImpl_Study.hxx
24 // Author : Sergey RUIN
27 #ifndef __SALOMEDSIMPL_STUDY_I_H__
28 #define __SALOMEDSIMPL_STUDY_I_H__
36 #include "DF_Document.hxx"
37 #include "DF_Label.hxx"
40 //SALOMEDSImpl headers
41 #include "SALOMEDSImpl_Defines.hxx"
42 #include "SALOMEDSImpl_SComponentIterator.hxx"
43 #include "SALOMEDSImpl_SObject.hxx"
44 #include "SALOMEDSImpl_StudyBuilder.hxx"
45 #include "SALOMEDSImpl_UseCaseBuilder.hxx"
46 #include "SALOMEDSImpl_AttributeStudyProperties.hxx"
47 #include "SALOMEDSImpl_AttributeIOR.hxx"
48 #include "SALOMEDSImpl_AttributeParameter.hxx"
49 #include "SALOMEDSImpl_Callback.hxx"
50 #include "SALOMEDSImpl_Driver.hxx"
51 #include "SALOMEDSImpl_ChildIterator.hxx"
52 #include "SALOMEDSImpl_GenericVariable.hxx"
55 class SALOMEDSImpl_GenericAttribute;
58 class SALOMEDSIMPL_EXPORT SALOMEDSImpl_Study
62 DF_Application* _appli;
63 DF_Document* _doc; // Document
64 DF_Document* _clipboard;
65 bool _Saved; // True if the Study is saved
66 std::string _URL; //URL of the persistent reference of the study
69 std::string _errorCode;
70 std::vector<std::string> _lockers;
71 SALOMEDSImpl_Callback* _cb;
72 SALOMEDSImpl_StudyBuilder* _builder;
73 SALOMEDSImpl_UseCaseBuilder* _useCaseBuilder;
74 SALOMEDSImpl_AbstractCallback* _notifier;
76 std::map<std::string, SALOMEDSImpl_SObject> _mapOfSO;
77 std::map<std::string, SALOMEDSImpl_SComponent> _mapOfSCO;
78 std::map<std::string, DF_Label> myIORLabels;
79 std::vector<SALOMEDSImpl_GenericVariable*> myNoteBookVars;
81 SALOMEDSImpl_SObject _FindObject(const SALOMEDSImpl_SObject& SO,
82 const std::string& anObjectName,
85 SALOMEDSImpl_SObject _FindObjectIOR(const SALOMEDSImpl_SObject& SO,
86 const std::string& anObjectIOR,
89 std::string _GetStudyVariablesScript();
90 std::string _GetNoteBookAccessor();
91 std::string _GetNoteBookAccess(const std::string& theStudyVar);
95 static SALOMEDSImpl_Study* GetStudy(const DF_Label& theLabel);
96 static SALOMEDSImpl_SObject SObject(const DF_Label& theLabel);
97 static SALOMEDSImpl_SComponent SComponent(const DF_Label& theLabel);
98 static void IORUpdated(const SALOMEDSImpl_AttributeIOR* theAttribute);
100 //! standard constructor
101 SALOMEDSImpl_Study();
103 //! standard destructor
104 virtual ~SALOMEDSImpl_Study();
107 virtual void Clear();
109 //! method to Open a Study from it's persistent reference
110 virtual bool Open(const std::string& aStudyUrl);
112 //! method to save a Study
113 virtual bool Save(SALOMEDSImpl_DriverFactory* aFactory, bool theMultiFile);
115 virtual bool SaveASCII(SALOMEDSImpl_DriverFactory* aFactory, bool theMultiFile);
117 //! method to save a Study to the persistent reference aUrl
118 virtual bool SaveAs(const std::string& aUrl,
119 SALOMEDSImpl_DriverFactory* aFactory,
122 virtual bool SaveAsASCII(const std::string& aUrl,
123 SALOMEDSImpl_DriverFactory* aFactory,
126 bool CopyLabel(SALOMEDSImpl_Driver* theEngine,
127 const int theSourceStartDepth,
128 const DF_Label& theSource,
129 const DF_Label& theDestinationMain);
131 DF_Label PasteLabel(SALOMEDSImpl_Driver* theEngine,
132 const DF_Label& theSource,
133 const DF_Label& theDestinationStart,
134 const bool isFirstElement);
136 virtual bool CanCopy(const SALOMEDSImpl_SObject& theObject, SALOMEDSImpl_Driver* Engine);
137 virtual bool Copy(const SALOMEDSImpl_SObject& theObject, SALOMEDSImpl_Driver* Engine);
138 virtual bool CanPaste(const SALOMEDSImpl_SObject& theObject, SALOMEDSImpl_Driver* Engine);
139 virtual SALOMEDSImpl_SObject Paste(const SALOMEDSImpl_SObject& theObject, SALOMEDSImpl_Driver* Engine);
141 // _SaveAs private function called by Save and SaveAs
142 virtual bool Impl_SaveAs(const std::string& aUrl,
143 SALOMEDSImpl_DriverFactory* aFactory,
147 // _SaveObject private function called by _SaveAs
148 virtual bool Impl_SaveObject(const SALOMEDSImpl_SObject& SC, HDFgroup *hdf_group_datatype);
150 virtual bool Impl_SaveProperties(HDFgroup *hdf_group);
153 //! method to Get persistent reference of study (idem URL())
154 virtual std::string GetPersistentReference();
156 //! method to Get transient reference of study
157 virtual std::string GetTransientReference();
159 virtual void SetTransientReference(const std::string& theIOR);
161 //! method to detect if a study is empty
162 virtual bool IsEmpty();
164 //! method to Find a Component with ComponentDataType = aComponentName
165 virtual SALOMEDSImpl_SComponent FindComponent (const std::string& aComponentName);
167 //! method to Find a Component Find a Component from it's ID
168 virtual SALOMEDSImpl_SComponent FindComponentID(const std::string& aComponentID);
170 //! method to Find an Object with SALOMEDSImpl::Name = anObjectName
171 virtual SALOMEDSImpl_SObject FindObject(const std::string& anObjectName);
174 //! method to Find Object(s) with SALOMEDSImpl::Name=anObjectName in a component with ComponentDataType = aComponentName
175 virtual std::vector<SALOMEDSImpl_SObject> FindObjectByName( const std::string& anObjectName,
176 const std::string& aComponentName ) ;
178 //! method to Find an Object with ID = anObjectID
179 virtual SALOMEDSImpl_SObject FindObjectID(const std::string& anObjectID);
181 //! method to Create an Object with ID = anObjectID
182 virtual SALOMEDSImpl_SObject CreateObjectID(const std::string& anObjectID);
184 //! method to Find an Object with ID = anObjectIOR
185 virtual SALOMEDSImpl_SObject FindObjectIOR(const std::string& anObjectIOR);
187 //! method to Find an Object by its path
188 virtual SALOMEDSImpl_SObject FindObjectByPath(const std::string& thePath);
190 //! method to get a path of SObject
191 virtual std::string GetObjectPath(const SALOMEDSImpl_SObject& theObject);
193 std::string GetObjectPathByIOR(const std::string& theIOR);
195 //! method to set a context: root ('/') is UserData component
196 virtual bool SetContext(const std::string& thePath);
198 //! method to get a context
199 virtual std::string GetContext();
201 //! method to get all object names in the given context (or in the current context, if 'theContext' is empty)
202 virtual std::vector<std::string> GetObjectNames(const std::string& theContext);
204 //! method to get all directory names in the given context (or in the current context, if 'theContext' is empty)
205 virtual std::vector<std::string> GetDirectoryNames(const std::string& theContext);
207 //! method to get all file names in the given context (or in the current context, if 'theContext' is empty)
208 virtual std::vector<std::string> GetFileNames(const std::string& theContext);
210 //! method to get all components names
211 virtual std::vector<std::string> GetComponentNames(const std::string& theContext);
213 //! method to Create a ChildIterator from an SObject
214 virtual SALOMEDSImpl_ChildIterator NewChildIterator(const SALOMEDSImpl_SObject& aSO);
216 //! method to Create a SComponentIterator
217 virtual SALOMEDSImpl_SComponentIterator NewComponentIterator();
219 //! method to Create a StudyBuilder
220 virtual SALOMEDSImpl_StudyBuilder* NewBuilder();
222 //! method to get study name
223 virtual std::string Name();
225 //! method to get if study has been saved
226 virtual bool IsSaved();
228 //! method to set if study has been saved
229 virtual void IsSaved(bool save);
231 //! method to Detect if a Study has been modified since it has been saved
232 virtual bool IsModified();
234 //! method to get URL of the study (idem GetPersistentReference)
235 virtual std::string URL();
237 //! method to set URL of the study
238 virtual void URL(const std::string& url);
240 virtual bool IsLocked();
242 virtual void DeleteIORLabelMapItem(const std::string& anIOR);
243 virtual void UpdateIORLabelMap(const std::string& anIOR, const std::string& aLabel);
245 virtual std::vector<SALOMEDSImpl_SObject> FindDependances(const SALOMEDSImpl_SObject& anObject);
247 virtual SALOMEDSImpl_AttributeStudyProperties* GetProperties();
249 virtual std::string GetLastModificationDate();
251 virtual std::vector<std::string> GetModificationsDate();
253 virtual SALOMEDSImpl_UseCaseBuilder* GetUseCaseBuilder();
255 void EnableUseCaseAutoFilling(bool isEnabled);
257 virtual std::string GetErrorCode() { return _errorCode; }
258 virtual bool IsError() { return _errorCode != ""; }
260 virtual SALOMEDSImpl_SComponent GetSComponent(const std::string& theEntry);
261 virtual SALOMEDSImpl_SComponent GetSComponent(const DF_Label& theLabel);
262 virtual SALOMEDSImpl_SObject GetSObject(const std::string& theEntry);
263 virtual SALOMEDSImpl_SObject GetSObject(const DF_Label& theEntryLabel);
264 virtual DF_Attribute* GetAttribute(const std::string& theEntry,
265 const std::string& theType);
267 virtual bool HasCurrentContext() { return !_current.IsNull(); }
269 virtual bool DumpStudy(const std::string& thePath,
270 const std::string& theBaseName,
273 SALOMEDSImpl_DriverFactory* theFactory);
275 static std::string GetDumpStudyComment(const char* theComponentName = 0);
277 virtual DF_Document* GetDocument() { return _doc; }
279 //The method dump creates a txt file that contain a dump of the study, for debug use
280 void dump(const std::string& theFileName);
282 //This method marks the study as being modified
285 SALOMEDSImpl_AttributeParameter* GetCommonParameters(const char* theID, int theSavePoint);
287 SALOMEDSImpl_AttributeParameter* GetModuleParameters(const char* theID,
288 const char* theModuleName,
291 //Locks the study, theLockerID is identificator of the of the one who locked the study for ex. IOR
292 void SetStudyLock(const char* theLockerID);
294 //Returns True if the study is locked
295 bool IsStudyLocked();
298 void UnLockStudy(const char* theLockerID);
300 //Returns an ID of the study locker
301 std::vector<std::string> GetLockerID();
303 //Managing of variables
304 void SetVariable(const std::string& theVarName,
305 const double theValue,
306 const SALOMEDSImpl_GenericVariable::VariableTypes);
308 void SetStringVariable(const std::string& theVarName,
309 const std::string& theValue,
310 const SALOMEDSImpl_GenericVariable::VariableTypes);
312 void SetStringVariableAsDouble(const std::string& theVarName,
313 const double theValue,
314 const SALOMEDSImpl_GenericVariable::VariableTypes);
316 double GetVariableValue(const std::string& theVarName);
318 std::string GetStringVariableValue(const std::string& theVarName);
320 bool IsTypeOf(const std::string& theVarName,
321 SALOMEDSImpl_GenericVariable::VariableTypes theType) const;
323 bool IsVariable(const std::string& theVarName) const;
326 std::vector<std::string> GetVariableNames() const;
328 void AddVariable(SALOMEDSImpl_GenericVariable* theVariable);
330 SALOMEDSImpl_GenericVariable* GetVariable(const std::string& theName) const;
332 bool RemoveVariable(const std::string& theVarName);
334 bool RenameVariable(const std::string& theVarName, const std::string& theNewVarName);
336 bool IsVariableUsed(const std::string& theVarName);
338 bool FindVariableAttribute(SALOMEDSImpl_StudyBuilder* theStudyBuilder,
339 SALOMEDSImpl_SObject theSObject,
340 const std::string& theName);
341 bool FindVariableAttribute(const std::string& theName);
343 void ReplaceVariableAttribute(SALOMEDSImpl_StudyBuilder* theStudyBuilder,
344 SALOMEDSImpl_SObject theSObject,
345 const std::string& theSource,
346 const std::string& theDest);
347 void ReplaceVariableAttribute(const std::string& theSource, const std::string& theDest);
349 std::vector< std::vector<std::string> > ParseVariables(const std::string& theVariables) const;
352 SALOMEDSImpl_Callback* GetCallback() { return _cb; }
354 //Returns a list of IOR's stored in the study
355 std::vector<std::string> GetIORs();
357 // Notification mechanism
358 virtual bool addSO_Notification(const SALOMEDSImpl_SObject& theSObject);
359 virtual bool removeSO_Notification(const SALOMEDSImpl_SObject& theSObject);
360 virtual bool modifySO_Notification(const SALOMEDSImpl_SObject& theSObject, int reason);
361 virtual void setNotifier(SALOMEDSImpl_AbstractCallback* notifier);
363 friend class SALOMEDSImpl_GenericAttribute;
364 friend class SALOMEDSImpl_GenericVariable;