Salome HOME
Merge from V6_main_20120808 08Aug12
[modules/yacs.git] / src / SALOMEDSImpl / SALOMEDSImpl_Study.hxx
1 // Copyright (C) 2007-2012  CEA/DEN, EDF R&D, OPEN CASCADE
2 //
3 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
5 //
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.
10 //
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.
15 //
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
19 //
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
21 //
22
23 //  File   : SALOMEDSImpl_Study.hxx
24 //  Author : Sergey RUIN
25 //  Module : SALOME
26 //
27 #ifndef __SALOMEDSIMPL_STUDY_I_H__
28 #define __SALOMEDSIMPL_STUDY_I_H__
29
30 // std C++ headers
31 #include <iostream>
32 #include <string>
33 #include <vector>
34 #include <map>
35
36 #include "DF_Document.hxx"
37 #include "DF_Label.hxx"
38 #include <stdio.h>
39
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"
53
54 class SALOMEDSImpl_StudyManager;
55 class SALOMEDSImpl_GenericAttribute;
56
57
58 class SALOMEDSIMPL_EXPORT SALOMEDSImpl_Study
59 {
60 private:
61   std::string              _name;  
62   DF_Document*             _doc;  // Document
63   bool                     _Saved; // True if the Study is saved
64   std::string              _URL; //URL of the persistent reference of the study
65   int                      _StudyId; 
66   DF_Label                 _current;
67   bool                     _autoFill; 
68   std::string              _errorCode;
69   std::vector<std::string> _lockers;
70   SALOMEDSImpl_Callback*   _cb;
71   SALOMEDSImpl_StudyBuilder*   _builder;
72   SALOMEDSImpl_UseCaseBuilder* _useCaseBuilder;
73   SALOMEDSImpl_AbstractCallback*   _notifier;
74
75   std::map<std::string, SALOMEDSImpl_SObject> _mapOfSO;
76   std::map<std::string, SALOMEDSImpl_SComponent> _mapOfSCO;
77   std::map<std::string, DF_Label> myIORLabels;
78   std::vector<SALOMEDSImpl_GenericVariable*> myNoteBookVars;
79
80   SALOMEDSImpl_SObject   _FindObject(const SALOMEDSImpl_SObject& SO,
81     const std::string& anObjectName,
82     bool& _find);
83
84   SALOMEDSImpl_SObject   _FindObjectIOR(const SALOMEDSImpl_SObject& SO,
85     const std::string& anObjectIOR,
86     bool& _find);
87
88   std::string _GetStudyVariablesScript();
89   std::string _GetNoteBookAccessor();
90   std::string _GetNoteBookAccess();
91
92 public:
93
94   static SALOMEDSImpl_Study* GetStudy(const DF_Label& theLabel);
95   static SALOMEDSImpl_SObject SObject(const DF_Label& theLabel);
96   static SALOMEDSImpl_SComponent SComponent(const DF_Label& theLabel);
97   static void IORUpdated(const SALOMEDSImpl_AttributeIOR* theAttribute);
98
99    //! standard constructor
100    SALOMEDSImpl_Study(const DF_Document*, const std::string& study_name);
101   
102   //! standard destructor
103   virtual ~SALOMEDSImpl_Study(); 
104   
105   //! method to Get persistent reference of study (idem URL())
106   virtual std::string GetPersistentReference();
107
108   //! method to Get transient reference of study
109   virtual std::string GetTransientReference();
110
111   virtual void SetTransientReference(const std::string& theIOR);
112
113   //! method to detect if a study is empty
114   virtual bool IsEmpty();
115
116   //! method to Find a Component with ComponentDataType = aComponentName
117   virtual SALOMEDSImpl_SComponent FindComponent (const std::string& aComponentName);
118
119   //! method to Find a Component Find a Component from it's ID
120   virtual SALOMEDSImpl_SComponent FindComponentID(const std::string& aComponentID);
121
122   //! method to  Find an Object with SALOMEDSImpl::Name = anObjectName 
123   virtual SALOMEDSImpl_SObject FindObject(const std::string& anObjectName);
124
125
126   //! method to Find Object(s) with SALOMEDSImpl::Name=anObjectName in a component with ComponentDataType = aComponentName
127   virtual std::vector<SALOMEDSImpl_SObject> FindObjectByName( const std::string& anObjectName, 
128                                                                        const std::string& aComponentName ) ;
129   
130   //! method to Find an Object with ID = anObjectID 
131   virtual SALOMEDSImpl_SObject FindObjectID(const std::string& anObjectID);
132   
133   //! method to Create an Object with ID = anObjectID 
134   virtual SALOMEDSImpl_SObject CreateObjectID(const std::string& anObjectID);
135
136   //! method to Find an Object with ID = anObjectIOR 
137   virtual SALOMEDSImpl_SObject FindObjectIOR(const std::string& anObjectIOR);
138
139   //! method to Find an Object by its path
140   virtual SALOMEDSImpl_SObject FindObjectByPath(const std::string& thePath);
141
142   //! method to get a path of SObject
143   virtual std::string GetObjectPath(const SALOMEDSImpl_SObject& theObject);
144
145   std::string GetObjectPathByIOR(const std::string& theIOR);
146
147   //! method to set a context: root ('/') is UserData component
148   virtual bool SetContext(const std::string& thePath);
149
150   //! method to get a context
151   virtual std::string GetContext();  
152
153   //! method to get all object names in the given context (or in the current context, if 'theContext' is empty)
154   virtual std::vector<std::string> GetObjectNames(const std::string& theContext);
155
156   //! method to get all directory names in the given context (or in the current context, if 'theContext' is empty)
157   virtual std::vector<std::string> GetDirectoryNames(const std::string& theContext);
158
159   //! method to get all file names in the given context (or in the current context, if 'theContext' is empty)
160   virtual std::vector<std::string> GetFileNames(const std::string& theContext);
161
162   //! method to get all components names
163   virtual std::vector<std::string> GetComponentNames(const std::string& theContext);
164
165   //! method to Create a ChildIterator from an SObject 
166   virtual SALOMEDSImpl_ChildIterator NewChildIterator(const SALOMEDSImpl_SObject& aSO);
167
168   //! method to Create a SComponentIterator 
169   virtual SALOMEDSImpl_SComponentIterator NewComponentIterator();
170
171   //! method to Create a StudyBuilder
172   virtual SALOMEDSImpl_StudyBuilder* NewBuilder();
173  
174   //! method to get study name
175   virtual std::string Name();
176
177   //! method to set study name
178   virtual void  Name(const std::string& name);
179   
180   //! method to get if study has been saved
181   virtual bool IsSaved();
182
183   //! method to set if study has been saved
184   virtual void  IsSaved(bool save);
185
186   //! method to Detect if a Study has been modified since it has been saved
187   virtual bool IsModified();
188   
189   //! method to get URL of the study (idem GetPersistentReference) 
190   virtual std::string URL();
191
192   //! method to set URL of the study
193   virtual void  URL(const std::string& url);
194
195   virtual bool IsLocked();
196   
197   virtual int StudyId();
198
199   virtual void  StudyId(int id);
200   
201   virtual void DeleteIORLabelMapItem(const std::string& anIOR);
202   virtual void UpdateIORLabelMap(const std::string& anIOR, const std::string& aLabel);
203   
204   virtual std::vector<SALOMEDSImpl_SObject> FindDependances(const SALOMEDSImpl_SObject& anObject);
205   
206   virtual SALOMEDSImpl_AttributeStudyProperties* GetProperties();
207   
208   virtual std::string GetLastModificationDate();
209   
210   virtual std::vector<std::string> GetModificationsDate();
211   
212   virtual SALOMEDSImpl_UseCaseBuilder* GetUseCaseBuilder();
213   
214   virtual void Close();
215   
216   void EnableUseCaseAutoFilling(bool isEnabled);
217   
218   virtual std::string GetErrorCode() { return _errorCode; }
219   virtual bool IsError() { return _errorCode != ""; }
220   
221   virtual SALOMEDSImpl_SComponent GetSComponent(const std::string& theEntry);
222   virtual SALOMEDSImpl_SComponent GetSComponent(const DF_Label& theLabel);
223   virtual SALOMEDSImpl_SObject GetSObject(const std::string& theEntry);
224   virtual SALOMEDSImpl_SObject GetSObject(const DF_Label& theEntryLabel);
225   virtual DF_Attribute* GetAttribute(const std::string& theEntry, 
226                                                      const std::string& theType);
227
228   virtual bool HasCurrentContext() { return !_current.IsNull(); }
229
230   virtual bool DumpStudy(const std::string& thePath, 
231                          const std::string& theBaseName, 
232                          bool isPublished,
233                          bool isMultiFile,
234                          SALOMEDSImpl_DriverFactory* theFactory);
235
236   static std::string GetDumpStudyComment(const char* theComponentName = 0);
237   
238   virtual DF_Document* GetDocument() { return _doc; } 
239
240   //The method dump creates a txt file that contain a dump of the study, for debug use
241   void dump(const std::string& theFileName);
242
243   //This method marks the study as being modified
244   void Modify();
245
246   SALOMEDSImpl_AttributeParameter* GetCommonParameters(const char* theID, int theSavePoint);
247
248   SALOMEDSImpl_AttributeParameter* GetModuleParameters(const char* theID, 
249                                                                               const char* theModuleName,
250                                                                               int theSavePoint);
251
252   //Locks the study, theLockerID is identificator of the of the one who locked the study for ex. IOR
253   void SetStudyLock(const char* theLockerID);
254
255   //Returns True if the study is locked
256   bool IsStudyLocked();
257
258   //Unlocks the study
259   void UnLockStudy(const char* theLockerID);
260   
261   //Returns an ID of the study locker
262   std::vector<std::string> GetLockerID();
263
264   //Managing of variables
265   void SetVariable(const std::string& theVarName,
266                    const double theValue, 
267                    const SALOMEDSImpl_GenericVariable::VariableTypes);
268
269   void SetStringVariable(const std::string& theVarName,
270                          const std::string& theValue, 
271                          const SALOMEDSImpl_GenericVariable::VariableTypes);
272
273   void SetStringVariableAsDouble(const std::string& theVarName,
274                                  const double theValue, 
275                                  const SALOMEDSImpl_GenericVariable::VariableTypes);
276   
277   double GetVariableValue(const std::string& theVarName);
278
279   std::string GetStringVariableValue(const std::string& theVarName);
280
281   bool IsTypeOf(const std::string& theVarName,
282                 SALOMEDSImpl_GenericVariable::VariableTypes theType) const;
283         
284   bool IsVariable(const std::string& theVarName) const;
285
286
287   std::vector<std::string> GetVariableNames() const;
288
289   void AddVariable(SALOMEDSImpl_GenericVariable* theVariable);
290
291   SALOMEDSImpl_GenericVariable* GetVariable(const std::string& theName) const;
292
293   bool RemoveVariable(const std::string& theVarName);
294
295   bool RenameVariable(const std::string& theVarName, const std::string& theNewVarName);
296
297   bool IsVariableUsed(const std::string& theVarName);
298
299   bool FindVariableAttribute(SALOMEDSImpl_StudyBuilder* theStudyBuilder,
300                              SALOMEDSImpl_SObject theSObject,
301                              const std::string& theName);
302   bool FindVariableAttribute(const std::string& theName);
303
304   void ReplaceVariableAttribute(SALOMEDSImpl_StudyBuilder* theStudyBuilder,
305                                 SALOMEDSImpl_SObject theSObject,
306                                 const std::string& theSource,
307                                 const std::string& theDest);
308   void ReplaceVariableAttribute(const std::string& theSource, const std::string& theDest);
309
310   std::vector< std::vector<std::string> > ParseVariables(const std::string& theVariables) const;
311
312   //Returns a callback 
313   SALOMEDSImpl_Callback* GetCallback() { return _cb; }
314
315   //Returns a list of IOR's stored in the study
316   std::vector<std::string> GetIORs();
317
318   // Notification mechanism
319   virtual bool addSO_Notification(const SALOMEDSImpl_SObject& theSObject);
320   virtual bool removeSO_Notification(const SALOMEDSImpl_SObject& theSObject);
321   virtual bool modifySO_Notification(const SALOMEDSImpl_SObject& theSObject, int reason);
322   virtual void setNotifier(SALOMEDSImpl_AbstractCallback* notifier);
323
324
325   friend class SALOMEDSImpl_StudyManager;    
326   friend class SALOMEDSImpl_GenericAttribute;
327   friend class SALOMEDSImpl_GenericVariable;
328 };
329 #endif