Salome HOME
Use a CORBA single thread model for study to avoid problems on concurrent access...
[modules/kernel.git] / src / SALOMEDS / SALOMEDS_Study_i.hxx
1 // Copyright (C) 2007-2016  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, or (at your option) any later version.
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   : SALOMEDS_Study_i.hxx
24 //  Author : Sergey RUIN
25 //  Module : SALOME
26 //
27 #ifndef __SALOMEDS_STUDY_I_H__
28 #define __SALOMEDS_STUDY_I_H__
29
30 // std C++ headers
31 #include <iostream>
32
33 // IDL headers
34 #include <SALOMEconfig.h>
35 #include CORBA_SERVER_HEADER(SALOME_GenericObj)
36 #include CORBA_SERVER_HEADER(SALOMEDS)
37
38 #include <stdio.h>
39
40 //SALOMEDS headers
41 #include "SALOMEDS_StudyManager_i.hxx"
42 #include "SALOMEDS_SComponentIterator_i.hxx"
43 #include "SALOMEDS_StudyBuilder_i.hxx"
44 #include "SALOMEDS_SObject_i.hxx"
45 #include "SALOMEDS_UseCaseBuilder_i.hxx"
46
47 #include "SALOMEDSImpl_Study.hxx"
48 #include "SALOMEDSImpl_AttributeIOR.hxx"
49
50 class Standard_EXPORT SALOMEDS_Study_i: public POA_SALOMEDS::Study
51 {
52 private:
53   CORBA::ORB_var                 _orb;
54   SALOMEDSImpl_Study*            _impl;  
55   SALOMEDS_StudyBuilder_i*       _builder;    
56   static std::map<SALOMEDSImpl_Study*, SALOMEDS_Study_i*> _mapOfStudies;
57   SALOMEDSImpl_AbstractCallback* _notifier;
58   SALOMEDSImpl_AbstractCallback* _genObjRegister;
59   bool                           _closed;
60
61 public:
62
63   //! standard constructor
64   SALOMEDS_Study_i(SALOMEDSImpl_Study*, CORBA::ORB_ptr);
65   
66   //! standard destructor
67   virtual ~SALOMEDS_Study_i(); 
68
69   virtual PortableServer::POA_ptr _default_POA();
70   
71   //! method to Get persistent reference of study (idem URL())
72   /*!
73     \sa URL()
74     \return char* arguments, the persistent reference of the study
75   */  
76   virtual char* GetPersistentReference();
77
78
79   //! method to Get transient reference of study
80   /*!
81     \return char* arguments, the transient reference of the study
82   */  
83   virtual char* GetTransientReference();
84
85   //! method to detect if a study is empty
86   /*!
87     \return bool arguments, true if study is empty
88   */  
89   virtual CORBA::Boolean IsEmpty();
90
91   //! method to Find a Component with ComponentDataType = aComponentName
92   /*!
93     \param aComponentName char* arguments
94     \return SComponent_ptr arguments, the component found
95   */  
96   virtual SALOMEDS::SComponent_ptr FindComponent (const char* aComponentName);
97
98   //! method to Find a Component Find a Component from it's ID
99   /*!
100     \param aComponentID char* arguments
101     \return SComponent_ptr arguments, the component found
102   */  
103   virtual SALOMEDS::SComponent_ptr FindComponentID(const char* aComponentID);
104
105   //! method to  Find an Object with SALOMEDS::Name = anObjectName 
106   /*!
107     \param anObjectName char* arguments
108     \return SObject_ptr arguments, the object found
109   */  
110   virtual SALOMEDS::SObject_ptr FindObject(const char* anObjectName);
111
112
113   //! method to Find Object(s) with SALOMEDS::Name = anObjectName in a component with ComponentDataType = aComponentName
114   /*!
115     \param anObjectName char* arguments
116     \param aComponentName char* arguments
117     \return ListOfSObject_ptr arguments, a list of objects found
118   */  
119   
120   virtual SALOMEDS::Study::ListOfSObject* FindObjectByName( const char* anObjectName, const char* aComponentName ) ;
121   
122   //! method to Find an Object with ID = anObjectID 
123   /*!
124     \param anObjectID char* arguments
125     \return SObject_ptr arguments, the object found
126   */  
127   virtual SALOMEDS::SObject_ptr FindObjectID(const char* anObjectID);
128
129   //! method to Create an Object with ID = anObjectID 
130   /*!
131     \param anObjectID char* arguments
132     \return SObject_ptr arguments, the object found
133   */  
134   virtual SALOMEDS::SObject_ptr CreateObjectID(const char* anObjectID);
135
136   //! method to Find an Object with ID = anObjectIOR 
137   /*!
138     \param anObjectIOR char* arguments
139     \return SObject_ptr arguments, the object found
140   */  
141   virtual SALOMEDS::SObject_ptr FindObjectIOR(const char* anObjectIOR);
142
143   //! method to Find an Object by its path
144   /*!
145     \param thePath char* arguments
146     \return SObject_ptr arguments, the object found
147   */
148   virtual SALOMEDS::SObject_ptr FindObjectByPath(const char* thePath);
149
150   //! method to get a path of SObject
151   /*!
152     \param aSO  SObject_ptr arguments
153     \return char* arguments, the path of the SObject
154   */
155   virtual char* GetObjectPath(CORBA::Object_ptr theObject);
156
157   //! method to set a context: root ('/') is UserData component
158   /*!
159   */
160   virtual void SetContext(const char* thePath);
161
162   //! method to get a context
163   /*!
164   */
165   virtual char* GetContext();  
166
167   //! method to get all object names in the given context (or in the current context, if 'theContext' is empty)
168   /*!
169   */
170   virtual SALOMEDS::ListOfStrings* GetObjectNames(const char* theContext);
171
172   //! method to get all directory names in the given context (or in the current context, if 'theContext' is empty)
173   /*!
174   */
175   virtual SALOMEDS::ListOfStrings* GetDirectoryNames(const char* theContext);
176
177   //! method to get all file names in the given context (or in the current context, if 'theContext' is empty)
178   /*!
179   */
180   virtual SALOMEDS::ListOfStrings* GetFileNames(const char* theContext);
181
182   //! method to get all components names
183   /*!
184   */
185   virtual SALOMEDS::ListOfStrings* GetComponentNames(const char* theContext);
186
187   //! method to Create a ChildIterator from an SObject 
188   /*!
189     \param aSO  SObject_ptr arguments
190     \return ChildIterator_ptr arguments, the created ChildIterator
191   */  
192   virtual SALOMEDS::ChildIterator_ptr NewChildIterator(SALOMEDS::SObject_ptr aSO);
193
194   //! method to Create a SComponentIterator 
195   /*!
196     \return SComponentIterator_ptr arguments, the created SComponentIterator
197   */  
198   virtual SALOMEDS::SComponentIterator_ptr NewComponentIterator();
199
200   //! method to Create a StudyBuilder
201   /*!
202     \return StudyBuilder_ptr arguments, the created StudyBuilder
203   */  
204   virtual SALOMEDS::StudyBuilder_ptr NewBuilder();
205  
206   //! method to get study name
207   /*!
208     \return char* arguments, the study name
209   */
210   virtual char* Name();
211
212   //! method to set study name
213   /*!
214     \param name char* arguments, the study name
215   */
216   virtual void  Name(const char* name);
217
218   //! method to get if study has been saved
219   /*!
220     \return bool arguments
221   */
222   virtual CORBA::Boolean IsSaved();
223
224  //! method to set if study has been saved
225   /*!
226     \param save bool arguments
227   */
228   virtual void  IsSaved(CORBA::Boolean save);
229
230  //! method to Detect if a Study has been modified since it has been saved
231   /*!
232     \return bool arguments
233   */
234   virtual CORBA::Boolean IsModified();
235
236  //! method to set Modified flag of a Study to True
237   virtual void Modified();
238
239   //! method to get URL of the study (idem GetPersistentReference) 
240   /*!
241     \return char* arguments, the study URL 
242   */
243   virtual char* URL();
244
245  //! method to set URL of the study
246   /*!
247     \param url char* arguments, the study URL
248   */
249   virtual void  URL(const char* url);
250
251   virtual CORBA::Short StudyId();
252   virtual void  StudyId(CORBA::Short id);
253
254   static SALOMEDS::Study_ptr GetStudy(const DF_Label& theLabel, CORBA::ORB_ptr orb);
255   static SALOMEDS_Study_i* GetStudyServant(SALOMEDSImpl_Study*, CORBA::ORB_ptr orb);
256
257   static void IORUpdated(SALOMEDSImpl_AttributeIOR* theAttribute);
258
259   virtual void UpdateIORLabelMap(const char* anIOR, const char* aLabel);
260   
261   virtual SALOMEDS::Study::ListOfSObject* FindDependances(SALOMEDS::SObject_ptr anObject);
262
263   virtual SALOMEDS::AttributeStudyProperties_ptr GetProperties();
264
265   virtual char* GetLastModificationDate();
266
267   virtual SALOMEDS::ListOfDates* GetModificationsDate();
268
269   virtual char* ConvertObjectToIOR(CORBA::Object_ptr theObject) {return _orb->object_to_string(theObject); }
270   virtual CORBA::Object_ptr ConvertIORToObject(const char* theIOR) { return _orb->string_to_object(theIOR); };
271
272   virtual SALOMEDS::UseCaseBuilder_ptr GetUseCaseBuilder();
273
274   virtual void Close();
275
276   void EnableUseCaseAutoFilling(CORBA::Boolean isEnabled); 
277
278   // postponed destroying of CORBA object functionality
279   virtual void AddPostponed(const char* theIOR);
280
281   virtual void AddCreatedPostponed(const char* theIOR);
282
283   virtual void RemovePostponed(CORBA::Long theUndoLimit); // removes postponed IORs of old transaction
284                                                         // if theUndoLimit==0, removes all
285   virtual void UndoPostponed(CORBA::Long theWay); // theWay = 1: resurrect objects,
286                                                 // theWay = -1: get back to the list of postponed
287
288   virtual SALOMEDS::AttributeParameter_ptr GetCommonParameters(const char* theID, CORBA::Long theSavePoint);
289   virtual SALOMEDS::AttributeParameter_ptr GetModuleParameters(const char* theID, 
290                                                                const char* theModuleName, 
291                                                                CORBA::Long theSavePoint);
292
293   virtual void SetStudyLock(const char* theLockerID);
294
295   virtual bool IsStudyLocked();
296
297   virtual void UnLockStudy(const char* theLockerID);
298
299   virtual SALOMEDS::ListOfStrings* GetLockerID();
300
301   virtual void SetReal(const char* theVarName, CORBA::Double theValue);
302   
303   virtual void SetInteger(const char* theVarName, CORBA::Long theValue);
304
305   virtual void SetBoolean(const char* theVarName, CORBA::Boolean theValue);
306
307   virtual void SetString(const char* theVarName, const char* theValue);
308
309   virtual void SetStringAsDouble(const char* theVarName, CORBA::Double theValue);
310
311   virtual CORBA::Double GetReal(const char* theVarName);
312   
313   virtual CORBA::Long GetInteger(const char* theVarName);
314
315   virtual CORBA::Boolean GetBoolean(const char* theVarName);
316
317   virtual char* GetString(const char* theVarName);
318
319   virtual CORBA::Boolean IsReal(const char* theVarName);
320   
321   virtual CORBA::Boolean IsInteger(const char* theVarName);
322
323   virtual CORBA::Boolean IsBoolean(const char* theVarName);
324
325   virtual CORBA::Boolean IsString(const char* theVarName);
326
327   virtual CORBA::Boolean IsVariable(const char* theVarName);
328
329   virtual SALOMEDS::ListOfStrings* GetVariableNames();
330
331   virtual CORBA::Boolean RemoveVariable(const char* theVarName);
332
333   virtual CORBA::Boolean RenameVariable(const char* theVarName, const char* theNewVarName);
334
335   virtual CORBA::Boolean IsVariableUsed(const char* theVarName);
336   
337   virtual SALOMEDS::ListOfListOfStrings* ParseVariables(const char* theVars);
338
339   virtual char* GetDefaultScript(const char* theModuleName, const char* theShift);
340
341   virtual CORBA::Boolean DumpStudy(const char* thePath,
342                                    const char* theBaseName,
343                                    CORBA::Boolean isPublished,
344                                    CORBA::Boolean isMultiFile);
345
346   virtual SALOMEDSImpl_Study* GetImpl() { return _impl; }
347
348   virtual CORBA::LongLong GetLocalImpl(const char* theHostname, CORBA::Long thePID, CORBA::Boolean& isLocal);
349
350   virtual void attach(SALOMEDS::Observer_ptr theObs, CORBA::Boolean modify);
351   virtual void detach(SALOMEDS::Observer_ptr theObs);
352 };
353 #endif