]> SALOME platform Git repositories - modules/kernel.git/blob - idl/SALOMEDS.idl
Salome HOME
SALOMEDS changes:
[modules/kernel.git] / idl / SALOMEDS.idl
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.idl
24 //  Author : Yves FRICAUD
25 //
26 /*!  \file SALOMEDS.idl  \brief This file contains a set of interfaces used for creation, management
27   and modification of the %Study
28 */
29
30 #ifndef _SALOMEDS_IDL_
31 #define _SALOMEDS_IDL_
32
33 #include "SALOME_Exception.idl"
34 #include "SALOME_GenericObj.idl"
35
36 /*! \brief
37      This package contains the interfaces used for creation, management
38      and modification of the %Study
39 */
40 module SALOMEDS
41 {
42 /*! \brief Name of the file in which the %Study is saved.
43 */
44   typedef string URLPath;
45
46 /*! \brief Main identifier of an object in %SALOME application
47 */
48   typedef string ID;
49
50 /*! \brief While saving the data, IOR is transformed into persistent reference
51 */
52   typedef string PersistentReference;
53
54 /*! \brief IOR of the study in %SALOME application
55 */
56   typedef string SalomeReference;
57
58 //! List of modification dates of a study
59   typedef sequence<string> ListOfDates ;
60 //! An unbounded sequence of strings
61   typedef sequence<string> ListOfStrings ;
62 //! An unbounded sequence of sequence of strings
63   typedef sequence<ListOfStrings> ListOfListOfStrings ;
64 //! A byte stream which is used for binary data transfer between different components
65   typedef sequence<octet> TMPFile;
66
67   // Reference to other objects is treated with function AddReference
68   // and ReferencedObject
69   // All other type of attributes defined in AttributeType enum are
70   // treated with AddAdttribute and GetAttribute
71   // The difference is made because Reference attribute don't contain
72   // strings but reference to ID of other objects
73
74   interface GenericAttribute;
75   interface Study;
76   interface StudyBuilder;
77   interface SObject;
78   interface SComponent;
79   interface SComponentIterator;
80   interface ChildIterator;
81   interface Driver;
82   interface AttributeStudyProperties;
83   interface AttributeParameter;
84   interface UseCaseIterator;
85   interface UseCaseBuilder;
86
87   interface Observer
88   {
89     oneway void notifyObserverID(in string theID, in long event);
90   };
91
92
93 //! List of attributes of %SObjects
94   typedef sequence<GenericAttribute> ListOfAttributes;
95
96 //! Exception indicating that this feature hasn't been implemented in %SALOME application.
97   exception NotImplemented {};
98
99   //==========================================================================
100 /*! \brief %Study Builder Interface
101
102   The purpose of the Builder is to add and/or remove objects and attributes.
103   A %StudyBuilder is linked to a %Study. A
104   command management is provided for the undo/redo functionalities.
105   \note
106   <BR><VAR>The Tag</VAR> of an item in %SALOME application is a symbolic description of
107   item's position in the tree-type structure of the browser. In general it has the following
108   form: <TT>0:2:1:1</TT>
109 */
110   //==========================================================================
111
112   interface StudyBuilder
113   {
114 /*! \brief %LockProtection Exception
115
116     This exception is raised while attempting to modify a locked %study.
117 */
118     exception LockProtection {};
119 /*! \brief Creation of a new %SComponent.
120
121    Creates a new %SComponent
122    \param ComponentDataType    Data type of the %SComponent which will be created.
123
124 <em>See \ref example17 for an example of this method usage in batchmode of %SALOME application.</em>
125
126 */
127     SComponent NewComponent(in string ComponentDataType) raises(LockProtection);
128 /*! \brief Definition of the instance to the %SComponent
129
130     Defines the instance to the %SComponent.
131 */
132     void       DefineComponentInstance (in SComponent aComponent,in Object ComponentIOR) raises(LockProtection);
133
134 /*! \brief Deletion of a %SComponent
135
136   Removes a %SComponent.
137 */
138     void       RemoveComponent(in SComponent aComponent) raises(LockProtection);
139
140 /*! \brief Creation of a new %SObject
141
142    Creates a new %SObject under a definite father %SObject.
143
144    \param theFatherObject The father %SObject under which this one should be created.
145    \return New %SObject
146
147 <em>See \ref example18 for an example of this method usage in batchmode of %SALOME application.</em>
148
149 */
150
151     SObject NewObject      (in SObject theFatherObject) raises(LockProtection);
152
153 /*! \brief Creation of a new %SObject with a definite %tag
154
155    Creates a new %SObject with a definite %tag.
156
157    \param atag Long value corresponding to the tag of the new %SObject.
158    \return New %SObject
159
160 */
161     SObject NewObjectToTag (in SObject theFatherObject, in long atag) raises(LockProtection);
162 /*! \brief Deletion of the %SObject
163
164   Removes a %SObject from the %StudyBuilder.
165
166   \param anObject The %SObject to be deleted.
167 */
168     void    RemoveObject   (in SObject anObject) raises(LockProtection);
169 /*! \brief Deletion of the %SObject with all his child objects.
170
171   Removes the %SObject with all his child objects.
172
173   \param anObject The %SObject to be deleted with all child objects.
174 */
175     void    RemoveObjectWithChildren(in SObject anObject) raises(LockProtection);
176
177 /*!
178    Loads a %SComponent.
179
180 <em>See \ref example19 for an example of this method usage in batchmode of %SALOME application.</em>
181
182 */
183     void  LoadWith (in SComponent sco, in Driver Engine) raises (SALOME::SALOME_Exception);
184 /*!
185    Loads a %SObject.
186
187    \param sco %SObject to be loaded.
188 */
189     void  Load (in SObject sco);
190
191 /*! \brief Looking for or creating an attribute assigned to the %SObject
192
193     Allows to find or create an attribute of a specific type which is assigned to the object.
194     \param anObject        The %SObject corresponding to the attribute which is looked for.
195     \param aTypeOfAttribute     Type of the attribute.
196
197 <em>See \ref example1 for an example of this method usage in batchmode of %SALOME application.</em>
198 */
199
200     GenericAttribute FindOrCreateAttribute(in  SObject        anObject,
201                                          in  string         aTypeOfAttribute) raises(LockProtection);
202
203 /*! \brief Looking for an attribute assigned to a %SObject
204
205     Allows to find an attribute of a specific type which is assigned to the object.
206     \param anObject        The %SObject corresponding to the attribute which is looked for.
207     \param aTypeOfAttribute     Type of the attribute.
208     \param anAttribute       Where the attribute is placed if it's found.
209     \return True if it finds an attribute.
210  */
211
212     boolean FindAttribute(in  SObject        anObject,
213                                  out GenericAttribute anAttribute,
214                                  in  string         aTypeOfAttribute);
215 /*! \brief Deleting the attribute assigned to the %SObject
216
217     Removes the attribute of a specific type which is assigned to the object.
218     \param anObject        The %SObject corresponding to the attribute.
219     \param aTypeOfAttribute     Type of the attribute.
220
221 <em>See \ref example17 for an example of this method usage in batchmode of %SALOME application.</em>
222 */
223     void RemoveAttribute(in  SObject        anObject,
224                          in  string         aTypeOfAttribute) raises(LockProtection);
225 /*!
226     Adds a reference between %anObject and %theReferencedObject.
227     \param anObject The %SObject which will get a reference
228     \param theReferencedObject The %SObject having a reference
229 */
230
231     void Addreference(in SObject anObject,
232                       in SObject theReferencedObject) ;
233
234 /*!
235     Removes a reference from %anObject to another object.
236     \param anObject The %SObject which contains a reference
237 */
238
239     void RemoveReference(in SObject anObject) ;
240
241 /*! \brief Identification of the %SObject's substructure.
242
243       Identification of the %SObject's substructure by GUID.
244
245
246       \param anObject The %SObject which will be identified
247       \param theGUID GUID has the following format "00000000-0000-0000-0000-000000000000"
248 */
249
250      void SetGUID(in SObject anObject, in string theGUID) raises(LockProtection);
251 /*!
252 Searches for a definite %SObject with a definite GUID and returns True if it finds it.
253
254 \param anObject A definite %SObject which will be identified
255 \param theGUID GUID has the following format "00000000-0000-0000-0000-000000000000"
256 */
257      boolean IsGUID(in SObject anObject, in string theGUID);
258
259 /*! \brief Creation of a new command
260
261    Creates a new command which can contain several different actions.
262
263 <em>See \ref example3 for an example of this method usage in batchmode of %SALOME application.</em>
264
265 */
266     void NewCommand(); // command management
267 /*! \brief Execution of the command
268
269    Commits all actions declared within this command.
270
271    \exception LockProtection This exception is raised, when trying to perform this command a study, which is protected for modifications.
272
273 <em>See \ref example16 for an example of this method usage in batchmode of %SALOME application.</em>
274
275 */
276     void CommitCommand() raises(LockProtection); // command management
277 /*!
278     Returns True if at this moment there is a command under execution.
279 */
280     boolean HasOpenCommand();
281 /*! \brief Cancelation of the command
282
283     Cancels all actions declared within the command.
284
285 <em>See \ref example17 for an example of this method usage in batchmode of %SALOME application.</em>
286 */
287     void AbortCommand(); // command management
288 /*! \brief Undolimit
289
290     The number of actions which can be undone
291 */
292     attribute long  UndoLimit;
293 /*! \brief Undo method
294
295     Cancels all actions of the last command.
296
297     \exception LockProtection This exception is raised, when trying to perform this command a study, which is protected for modifications.
298
299 <em>See \ref example16 for an example of this method usage in batchmode of %SALOME application.</em>
300
301 */
302     void Undo() raises (LockProtection);
303 /*! \brief Redo method
304
305     Redoes all actions of the last command.
306
307 \exception LockProtection This exception is raised, when trying to perform this command a study, which is protected for modifications.
308
309 <em>See \ref example16 for an example of this method usage in batchmode of %SALOME application.</em>
310
311 */
312     void Redo() raises (LockProtection);
313 /*!
314     Returns True if at this moment there are any actions which can be canceled.
315
316 <em>See \ref example16 for an example of this method usage in batchmode of %SALOME application.</em>
317
318 */
319     boolean GetAvailableUndos();
320 /*!
321     Returns True if at this moment there are any actions which can be redone.
322
323 <em>See \ref example3 for an example of this method usage in batchmode of %SALOME application.</em>
324
325 */
326     boolean GetAvailableRedos();
327 /*!
328     Puts name attribute with the given string value to the given %SObject
329
330     \param theSO Existing SObject to set name attribute.
331     \param theValue The value to be set to the name attribute.
332 */
333     void SetName(in SObject theSO, in string theValue) raises (LockProtection);
334
335 /*!
336     Puts comment attribute with the given string value to the given %SObject
337
338     \param theSO Existing SObject to set comment attribute.
339     \param theValue The value to be set to the comment attribute.
340 */
341     void SetComment(in SObject theSO, in string theValue) raises (LockProtection);
342
343 /*!
344     Puts IOR attribute with the given string value to the given %SObject
345
346     \param theSO Existing SObject to set IOR attribute.
347     \param theValue The value to be set to the IOR attribute.
348 */
349     void SetIOR(in SObject theSO, in string theValue) raises (LockProtection);
350   };
351
352   //===========================================================================
353  /*! \brief %Study Interface
354
355     The purpose of the %Study is to manage the data produced by various components of %SALOME platform.
356    Most of the %Study operations are handled by the StudyBuilder.
357    What is left in the %Study interface are elementary inquiries.
358    (Incidentally, we recall that a CORBA attribute is implemented as a pair of get
359       and set methods.) A %Study is explored by a set of tools, mainly iterators
360     , which are described further. Nevertheless, the %Study
361      interface allows the search of an object by name or by ID.
362      \note
363      <BR><VAR>The Path </VAR>of an object in %SALOME application is much alike a standard path of a file.
364     In general it's a string of names of directories divided by a slash '/'.
365      <BR><VAR>The Context</VAR> is the current directory of an object.</P>
366 */
367
368   interface Study
369   {
370
371 //! Invalid study reference
372     exception StudyInvalidReference {};
373 //! Invalid study component
374     exception StudyInvalidComponent {};
375 //! Invalid directory of the %study exception
376     exception StudyInvalidDirectory {};
377 //! Exception pointing that this name of the study has already been used.
378     exception StudyNameAlreadyUsed {};
379 //! study object already exists
380     exception StudyObjectAlreadyExists {};
381 //! Invalid name of the %study exception
382     exception StudyNameError {};
383 //! Invalid study comment
384     exception StudyCommentError {};
385     
386 /*!
387     Determines whether the server has already been loaded or not.
388 */
389     void ping();
390     void Shutdown();
391 /*!
392     Returns the PID of the server
393 */
394     long getPID();
395
396 /*!
397     Shutdown the Study process.
398 */
399     oneway void ShutdownWithExit();
400
401 /*! \brief The name of the %Study
402
403    This is equivalent to the methods setName() & getName()
404 */
405     readonly attribute string Name; // equivalent to getName()
406
407 //! Sequence containing %SObjects
408     typedef sequence<SObject> ListOfSObject;
409 //!  Get the persistent reference to the %Study.
410     PersistentReference  GetPersistentReference() raises(StudyInvalidReference);
411 //! Get a transient reference to the %Study.
412     SalomeReference      GetTransientReference() raises(StudyInvalidReference);
413
414 /*! \brief indicate whether the %Study is empty
415
416     \return True if the %Study is empty
417 */
418     boolean IsEmpty() raises(StudyInvalidReference);
419 /*! \brief  Find a %SComponent by its name.
420
421    \param aComponentName    It's a string value in the Comment Attribute of the Component,
422     which is looked for, defining the data type of this Component.
423
424 <em>See \ref example1 for an example of this method usage in batchmode of %SALOME application.</em>
425
426 */
427     SComponent FindComponent  (in string aComponentName) raises(StudyInvalidReference);
428
429 /*! \brief  Find a %SComponent by ID of the according %SObject
430 */
431     SComponent FindComponentID(in ID aComponentID) raises(StudyInvalidReference);
432 /*! \brief  Find a %SObject by the Name Attribute of this %SObject
433
434     \param anObjectName String parameter defining the name of the object
435     \return The obtained %SObject
436
437 <em>See \ref example19 for an example of this method usage in batchmode of %SALOME application.</em>
438 */
439     SObject       FindObject      (in string anObjectName) raises(StudyInvalidReference);
440 /*! \brief  Find a %SObject by its ID
441
442     \param aObjectID This parameter defines the ID of the required object
443     \return The obtained %SObject
444 */
445     SObject       FindObjectID    (in ID aObjectID) raises(StudyInvalidReference);
446 /*! \brief Create a %SObject by its ID
447
448     \param aObjectID This parameter defines the ID of the required object
449     \return The created %SObject
450 */
451     SObject       CreateObjectID    (in ID aObjectID) raises(StudyInvalidReference);
452 /*!  \brief Find a %SObject by IOR of the object belonging to this %SObject.
453
454     \param anObjectName This parameter defines the IOR of the object
455     \return The obtained %SObject
456 */
457     SObject       FindObjectIOR   (in ID aObjectIOR) raises(StudyInvalidReference);
458 /*! \brief  Find in the study all %SObjects produced by a given %Component.
459
460     \param anObjectName The Name Attribute of the searched %SObjects should correspond to <VAR>anObjectName</VAR>.
461     \param aComponentName The name of the component, which objects are searched for.
462 */
463     ListOfSObject FindObjectByName(in string anObjectName, in string aComponentName) raises(StudyInvalidReference);
464 /*! \brief  Find a %SObject by the path to it.
465
466     \param thePath The path to the required %SObject.
467     \return The obtained %SObject.
468 */
469     SObject FindObjectByPath(in string thePath) raises(StudyInvalidReference);
470 /*! \brief Get the path to the %SObject.
471 */
472     string GetObjectPath(in Object theObject) raises(StudyInvalidReference);
473
474 /*!  \brief Create a new iterator of child levels of the given %SObject.
475
476     \param aSO The given %SObject
477     \return A new iterator of child levels of the given %SObject.
478 */
479     ChildIterator NewChildIterator(in SObject aSO) raises(StudyInvalidReference);
480
481 /*!  \brief Create a new iterator of the %SComponents.
482
483     \return A new iterator of the %SComponents.
484 */
485     SComponentIterator NewComponentIterator() raises(StudyInvalidReference);
486
487 /*! \brief  Create a new %StudyBuilder to add or modify an object in the study.
488
489    \return A new %StudyBuilder.
490
491 <em>See \ref example20 for an example of this method usage in batchmode of %SALOME application.</em>
492 */
493     StudyBuilder NewBuilder() raises(StudyInvalidReference);
494 /*! \brief Labels dependency
495
496     Updates the map with IOR attribute. It's an inner method used for optimization.
497 */
498     void UpdateIORLabelMap(in string anIOR, in string anEntry) raises(StudyInvalidReference);
499
500 /*! \brief Getting properties of the study
501
502    Returns the attribute, which contains the properties of this study.
503
504 <em>See \ref example20 for an example of this method usage in batchmode of %SALOME application.</em>
505
506 */
507     AttributeStudyProperties GetProperties() raises(StudyInvalidReference);
508 /*! \brief  Indicate whether the %study has been saved
509 */
510     attribute boolean IsSaved;
511 /*! \brief  Indicate whether the %study has been modified and not saved.
512
513   Returns True if the %study has been modified and not saved.
514 */
515     boolean IsModified() raises(StudyInvalidReference);
516
517 /*! \brief  Mark the %study as being modified and not saved.
518 */
519     void Modified() raises(StudyInvalidReference);
520
521 /*! \brief  Indicate the file where the %study has been saved
522 */
523     attribute string URL;
524
525 /*! \brief List of %SObjects
526
527     Returns the list of %SObjects which refers to %anObject.
528 */
529     ListOfSObject FindDependances(in SObject anObject) raises(StudyInvalidReference);
530
531 /*! \brief The date of the last saving of the study
532
533     Returns the date of the last saving of study with format: "DD/MM/YYYY HH:MM"
534 */
535     string GetLastModificationDate() raises(StudyInvalidReference);
536 /*! \brief The list of modification dates of the study
537
538     Returns the list of modification dates (without creation date) with format "DD/MM/YYYY HH:MM".
539       Note : the first modification begins the list.
540 */
541     ListOfDates GetModificationsDate() raises(StudyInvalidReference);
542 /*! \brief Object conversion.
543
544     Converts an object into IOR.
545     \return    IOR
546 */
547     string ConvertObjectToIOR(in Object theObject);
548 /*! \brief Object conversion.
549
550     Converts IOR into an object.
551     \return    An object
552 */
553     Object ConvertIORToObject(in string theIOR);
554
555 /*! \brief Get a new %UseCaseBuilder.
556 */
557     UseCaseBuilder  GetUseCaseBuilder() raises(StudyInvalidReference);
558     
559 /*! \brief Clear a study object
560 */
561     void Clear() raises(StudyInvalidReference);
562
563 /*! \brief Initialization a study object
564 */
565     void Init() raises(StudyInvalidReference);
566     
567 /*! \brief Open a study by url
568
569     Reads and activates the structure of the study %Objects.
570     \param aStudyUrl The path to the study
571 */
572     boolean Open (in URLPath aStudyUrl) raises (SALOME::SALOME_Exception);
573     
574 /*! \brief Saving the study in a file (or files).
575
576     Saves a study.
577     \param theMultiFile If this parameter is True the study will be saved in several files.
578     \param theASCII If this parameter is True the study will be saved in ASCII format, otherwise in HDF format.
579 */
580     boolean Save(in boolean theMultiFile, in boolean theASCII) raises(StudyInvalidReference);
581     
582 /*! \brief Saving the study in a specified file (or files).
583
584     Saves the study in a specified file (or files).
585     \param aUrl The path to the definite file in whcih the study will be saved
586     \param theMultiFile If this parameter is True the study will be saved in several files.
587     \param theASCII If this parameter is True the study will be saved in ASCII format, otherwise in HDF format.
588
589 <em>See \ref example1 for an example of this method usage in batchmode of %SALOME application.</em>
590 */
591     boolean  SaveAs(in URLPath aUrl, // if the file already exists
592                     in boolean theMultiFile, // overwrite (as option)
593                     in boolean theASCII) 
594                     raises(StudyInvalidReference); 
595 /*!
596     Returns True, if the given %SObject can be copied to the clipboard.
597 */
598     boolean CanCopy(in SObject theObject) raises(StudyInvalidReference);
599 /*!
600     Returns True, if the given %SObject is copied to the clipboard.
601     \param theObject The %SObject which will be copied
602 */
603     boolean Copy(in SObject theObject) raises(StudyInvalidReference);
604 /*!
605     Returns True, if the object from the clipboard can be pasted to the given %SObject.
606     \param theObject The %SObject stored in the clipboard.
607 */
608     boolean CanPaste(in SObject theObject) raises(StudyInvalidReference);
609 /*!
610     Returns the %SObject in which the object from the clipboard was pasted to.
611     \param theObject The %SObject which will be pasted
612     \exception SALOMEDS::StudyBuilder::LockProtection This exception is raised, when trying to paste
613     an object into a study, which is protected for modifications.
614 */
615     SObject Paste(in SObject theObject) raises (SALOMEDS::StudyBuilder::LockProtection);
616
617 /*! \brief  Enable (if isEnabled = True)/disable automatic addition of new %SObjects to the use case.
618 */
619     void EnableUseCaseAutoFilling(in boolean isEnabled) raises(StudyInvalidReference);
620
621 /*!
622     Functions for internal usage only
623 */
624     void AddPostponed(in string theIOR) raises(StudyInvalidReference);
625
626     void AddCreatedPostponed(in string theIOR) raises(StudyInvalidReference);
627
628     void RemovePostponed(in long theUndoLimit) raises(StudyInvalidReference);
629
630     void UndoPostponed(in long theWay) raises(StudyInvalidReference);
631
632     boolean DumpStudy(in string thePath,
633                       in string theBaseName,
634                       in boolean isPublished,
635                       in boolean isMultiFile) raises(StudyInvalidReference);
636
637 /*! \brief  Get an AttributeParameter used to store common parameters for given %theSavePoint.
638
639     \param theID identifies a common parameters set (Example: "Interface Applicative")
640     \param theSavePoint is number of a set of parameters as there can be several sets
641 */
642     AttributeParameter GetCommonParameters(in string theID, in long theSavePoint) raises(StudyInvalidReference);
643
644 /*! \brief  Get an AttributeParameter used to store parameters for given %theModuleName.
645
646     \param theID identifies a common parameters set (Example: "Interface Applicative")
647     \param theModuleName is a name of the module (Example: "Geometry")
648     \param theSavePoint is number of a set of parameters as there can be several sets
649 */
650     AttributeParameter GetModuleParameters(in string theID, in string theModuleName, in long theSavePoint) raises(StudyInvalidReference);
651
652
653 /*! \brief Get a default Python script to restore visual parameters for given %theModuleName.
654
655     \param theModuleName is a name of the module (Example: "Geometry")
656     \param indent is a string to use for script indentation
657 */
658     string GetDefaultScript(in string theModuleName, in string indent) raises(StudyInvalidReference);
659
660 /*!
661     Private method, returns an implementation of this Study.
662    \param theHostname is a hostname of the caller
663    \param thePID is a process ID of the caller
664    \param isLocal is set True if the Study is launched locally with the caller
665 */
666     long long GetLocalImpl(in string theHostname, in long thePID, out boolean isLocal);
667
668
669 /*! \brief  Mark this Study as being locked by the given locker.
670
671     The lock status can be checked by method IsStudyLocked
672     \param theLockerID identifies a locker of the study can be for ex. IOR of the engine that locks the study.
673 */
674     void SetStudyLock(in string theLockerID) raises(StudyInvalidReference);
675
676 /*! \brief Indicate if the Study is locked
677
678    Returns True if the Study was marked locked.
679 */
680     boolean IsStudyLocked() raises(StudyInvalidReference);
681
682 /*! \brief  Mark this Study as being unlocked by the given locker.
683
684      The lock status can be checked by method IsStudyLocked
685     \param theLockerID identifies a locker of the study can be for ex. IOR of the engine that unlocks the study.
686 */
687     void UnLockStudy(in string theLockerID) raises(StudyInvalidReference);
688
689 /*! \brief  Get the list of IDs of the Study's lockers.
690 */
691     ListOfStrings GetLockerID() raises(StudyInvalidReference);
692
693 /*! \brief  Create real variable with Name theVarName and value theValue
694
695     (or set if variable value into theValue already exists)
696     \param theVarName is a name of the variable
697     \param theVarName is a value of the variable.
698 */
699     void SetReal( in string theVarName, in double theValue ) raises(StudyInvalidReference);
700
701 /*! \brief  Create integer variable with Name theVarName and value theValue
702
703     (or set if variable value into theValue already exists)
704     \param theVarName is a name of the variable
705     \param theVarName is a value of the variable.
706 */
707     void SetInteger( in string theVarName, in long theValue ) raises(StudyInvalidReference);
708 /*! \brief  Create boolean variable with Name theVarName and value theValue
709
710     (or set if variable value into theValue already exists)
711     \param theVarName is a name of the variable
712     \param theVarName is a value of the variable.
713 */
714     void SetBoolean( in string theVarName, in boolean theValue ) raises(StudyInvalidReference);
715
716 /*! \brief  Create string variable with Name theVarName and value theValue
717
718     (or set if variable value into theValue already exists)
719     \param theVarName is a name of the variable
720     \param theVarName is a value of the variable.
721 */
722     void SetString( in string theVarName, in string theValue ) raises(StudyInvalidReference);
723
724 /*! \brief  Set current value as double for string variable
725 */
726     void SetStringAsDouble( in string theVarName, in double theValue ) raises(StudyInvalidReference);
727
728 /*! \brief Get value of a real variable
729
730     \param theVarName is a name of the variable.
731 */
732     double GetReal( in string theVarName ) raises(StudyInvalidReference);
733
734 /*! \brief Get value of an integer variable
735
736     \param theVarName is a name of the variable.
737 */
738     long GetInteger( in string theVarName ) raises(StudyInvalidReference);
739
740 /*! \brief Get value of a boolean variable
741
742     \param theVarName is a name of the variable.
743 */
744     boolean GetBoolean( in string theVarName ) raises(StudyInvalidReference);
745
746 /*! \brief Get value of a string variable
747
748     \param theVarName is a name of the variable.
749 */
750     string GetString( in string theVarName ) raises(StudyInvalidReference);
751
752
753 /*! \brief Indicate if a variable is real
754
755     Return true if variable is real otherwise return false.
756     \param theVarName is a name of the variable.
757 */
758     boolean IsReal( in string theVarName ) raises(StudyInvalidReference);
759
760 /*! \brief Indicate if a variable is integer
761
762     Return true if variable is integer otherwise return false.
763     \param theVarName is a name of the variable.
764 */
765     boolean IsInteger( in string theVarName ) raises(StudyInvalidReference);
766
767 /*! \brief Indicate if a variable is boolean
768
769     Return true if variable is boolean otherwise return false.
770     \param theVarName is a name of the variable.
771 */
772     boolean IsBoolean( in string theVarName ) raises(StudyInvalidReference);
773
774 /*! \brief Indicate if a variable is string
775
776     Return true if variable is string otherwise return false.
777     \param theVarName is a name of the variable.
778 */
779     boolean IsString( in string theVarName ) raises(StudyInvalidReference);
780
781 /*! \brief Indicate if a variable exists in the study
782
783     Return true if variable exists in the study,
784     otherwise return false.
785     \param theVarName is a name of the variable.
786 */
787     boolean IsVariable( in string theVarName ) raises(StudyInvalidReference);
788
789 /*! \brief Get names of all variables from the study.
790 */
791     ListOfStrings GetVariableNames() raises(StudyInvalidReference);
792
793 /*! \brief Remove a variable
794
795    Remove variable with the specified name from the study with substitution of its value.
796
797    \param theVarName Name of the variable.
798    \return Status of operation.
799 */
800     boolean RemoveVariable( in string theVarName ) raises(StudyInvalidReference);
801
802 /*! \brief Rename a variable
803
804    Rename variable with the specified name within the study.
805
806    \param theVarName Name of the variable.
807    \param theNewVarName New name for the variable.
808    \return Status of operation.
809 */
810     boolean RenameVariable( in string theVarName, in string theNewVarName ) raises(StudyInvalidReference);
811
812 /*! \brief Indicate whether variable is used
813
814    Check that variable is used in the study.
815
816    \param theVarName Name of the variable.
817    \return Variable usage.
818 */
819     boolean IsVariableUsed( in string theVarName ) raises(StudyInvalidReference);
820
821 /*! \brief Parse variables used for object creation
822
823    \param string with variables, separated by special symbol.
824    \return Variables list.
825 */
826     ListOfListOfStrings ParseVariables( in string theVars ) raises(StudyInvalidReference);
827
828 /*!
829      Attach an observer to the Study
830
831     \param theObserver observer being attached
832     \param modify when \c true, observer receives any object's modification events;
833            otherwise observer receives object's creation events only
834 */
835      void attach(in SALOMEDS::Observer theObserver, in boolean modify);
836 /*!
837      Detach an observer from the Study
838
839     \param theObserver observer to be detached
840 */
841      void detach(in SALOMEDS::Observer theObserver);
842   };
843
844   //==========================================================================
845 /*! \brief %SObject interface
846
847    The objects in the %study are built by the %StudyBuilder. The %SObject interface
848    provides methods for elementary inquiries, like getting an object %ID or its attribuites.
849  \note
850
851    <BR><VAR>Tag</VAR> of an item in %SALOME application is an integer value uniquely defining an item
852    in the tree-type data structure.
853    <BR><VAR>ID</VAR> of an item is a description of item's position in the tree-type data structure.
854    ID is a list of tags and it has the following form: <TT>0:2:1:1</TT>.
855 */
856   //==========================================================================
857
858   interface SObject : SALOME::GenericObj
859   {
860 /*! Name of the %SObject
861 */
862     attribute string Name; // equivalent to setName() & getName()
863
864 /*! Returns true if the %SObject does not belong to any %Study
865 */
866     boolean IsNull();
867
868 /*! Gets an object %ID
869    \return ID of the %SObject.
870 */
871     ID GetID();
872
873 /*!  Acquisition of the father %Component of the %SObject
874   \return The father %Component of the %SObject.
875 */
876     SComponent GetFatherComponent();
877
878 /*! Acquisition of the father %SObject of the %SObject
879    \return the father %SObject of the given %SObject.
880 */
881     SObject    GetFather();
882
883 /*! Gets the %tag of a %SObject
884     \return the %tag of a %SObject.
885 */
886     short      Tag();
887
888 /*! Returns a tag of the last child %SObject (if any) of this %SObject.
889     Returns zero if this %SObject has no children.
890 */
891     short      GetLastChildTag();
892
893 /*! Gets the depth of a %SObject
894     \return the depth of a %SObject.
895 */
896     short      Depth();
897
898 /*! Looks for subobjects of a given %SObject.
899     \param atag Tag of the given %SObject
900     \return True if it finds a subobject of the %SObject with a definite tag as well as the required subobject.
901 */
902     boolean FindSubObject (in long atag, out SObject obj);
903
904 /*! Looks for attributes of a given %SObject
905    \param aTypeOfAttribute String value defining the type of the required attribute of the given %SObject.
906    \return True if it finds an attribute of a definite type of the given %SObject as well as the discovered attribute.
907
908 <em>See \ref example1 for an example of this method usage in batchmode of %SALOME application.</em>
909 */
910     boolean FindAttribute(out GenericAttribute anAttribute,
911                                   in  string         aTypeOfAttribute);
912
913 /*! Looks for a %SObject which the given %SObject refers to.
914     \return The object which the given %SObject refers to as well as True if it finds
915     this object.
916 */
917     boolean ReferencedObject(out SObject obj); // A REVOIR
918
919 /*! Gets all attributes of a given %SObject
920     \return The list of all attributes of the given %SObject.
921
922 <em>See \ref example17 for an example of this method usage in batchmode of %SALOME application.</em>
923
924 */
925     ListOfAttributes     GetAllAttributes();
926
927 /*! Gets the study of a given %SObject.
928     \return The study containing the given %SObject.
929 */
930     Study GetStudy();
931
932 /*! Gets the CORBA object by its own IOR attribute.
933     Returns nil, if can't.
934     \return The CORBA object of the %SObject.
935 */
936     Object GetObject();
937
938 /*!
939     Returns the name attribute value of this SObject.
940     Returns empty string if there is no name attribute.
941 */
942     string GetName();
943
944 /*!
945     Returns the comment attribute value of this SObject.
946     Returns empty string if there is no comment attribute.
947 */
948     string GetComment();
949
950 /*!
951     Returns the IOR attribute value of this SObject.
952     Returns empty string if there is no IOR attribute.
953 */
954     string GetIOR();
955
956 /*!
957     Set an attribute value (of type string)
958    \param name the name of the attribute
959    \param value the value of the attribute
960 */
961     void SetAttrString(in string name, in string value);
962
963 /*!
964     Private method, returns an implementation of this SObject.
965    \param theHostname is a hostname of the caller
966    \param thePID is a process ID of the caller
967    \param isLocal is set True if the SObject is launched locally with the caller
968 */
969     long long GetLocalImpl(in string theHostname, in long thePID, out boolean isLocal);
970   };
971
972
973   //==========================================================================
974 /*! \brief %Generic attribute interface
975
976    %Generic attribute is a base interface for all attributes which can be assigned to the SObjects created in the study.
977 */
978   //==========================================================================
979   interface GenericAttribute : SALOME::GenericObj
980   {
981 /*! \brief Exception locking all changes
982
983     This exception locks all modifications in attributes.
984 */
985     exception LockProtection {};
986 /*! \brief Method CheckLocked
987
988    Checks whether the %Study is protected for modifications.
989
990    \note <BR>This exception is raised only outside a transaction.
991 */
992     void CheckLocked() raises (LockProtection);
993
994     //! Get Type
995     string Type();
996
997     //! Get the class type
998     string GetClassType();
999
1000     //! Get SObject
1001     SObject GetSObject();
1002
1003   //!  Private method, returns an implementation of this GenericAttribute.
1004 /*!
1005    \param theHostname is a hostname of the caller
1006    \param thePID is a process ID of the caller
1007    \param isLocal is set True if the GenericAttribute is launched locally with the caller
1008 */
1009     long long GetLocalImpl(in string theHostname, in long thePID, out boolean isLocal);
1010   };
1011
1012
1013
1014   //==========================================================================
1015 /*! \brief %SComponent interface
1016
1017    The %SComponent interface establishes in the study a permanent assocition to the Components integrated into %SALOME platform.
1018    The %SComponent interface is a specialization of the %SObject interface.
1019    It inherits the most of its methods from the %SObject interface.
1020 */
1021   //==========================================================================
1022   interface SComponent : SObject
1023   {
1024 /*! \brief Gets the data type of the given %SComponent
1025
1026     \return The data type of this %SComponent.
1027 */
1028     string  ComponentDataType();
1029 /*! \brief Gets the IOR of the given component
1030
1031   \return True (if there is an instance of the given component) and its IOR.
1032 */
1033     boolean ComponentIOR (out ID theID); //returns True if there is an instance
1034                                          //In this case ID identifies this one
1035   };
1036
1037
1038   //==========================================================================
1039 /*! \brief %SComponentIterator interface
1040
1041   This interface contains the methods allowing to iterate over all components in the list.
1042   The search is started from the first %SComponent in the list.
1043 */
1044   //==========================================================================
1045   interface SComponentIterator : SALOME::GenericObj
1046   {
1047 /*!
1048 \brief Activates the %SComponentIterator.
1049 */
1050     void Init();
1051 /*!  \brief Method More
1052
1053    \return True if there is one more %SComponent in the list.
1054 */
1055     boolean More();
1056 /*!
1057 \brief Moves the iterator to the next %SComponent in the list.
1058 */
1059     void Next();
1060 /*!
1061     \brief Returns the %SComponent corresponding to the current %SComponent found by the iterator.
1062
1063 <em>See \ref example1 for an example of this method usage in batchmode of %SALOME application.</em>
1064
1065 */
1066     SComponent Value();
1067   };
1068
1069   //==========================================================================
1070 /*! \brief %ChildIterator interface
1071
1072     This interface contains methods which allow to iterate over all child
1073     levels.
1074 */
1075   //==========================================================================
1076   interface ChildIterator : SALOME::GenericObj
1077   {
1078 /*!
1079
1080 \brief Activates the %ChildIterator.
1081 */
1082     void Init();
1083 /*!
1084
1085 \brief Activates the %ChildIterator for all child levels.
1086
1087 \param allLevels If this boolean parameter is True, the %ChildIterator will be activated for all child levels.
1088 */
1089     void InitEx(in boolean allLevels);
1090 /*! \brief Method More
1091
1092    \return True if there is one more %ChildIterator in the list.
1093 */
1094     boolean More();
1095 /*!
1096     \brief Passes the iterator to the next level.
1097 */
1098     void Next();
1099 /*!
1100     \brief Returns the %SObject corresponding to the current object found by the iterator.
1101 */
1102     SObject Value();
1103   };
1104
1105   //==========================================================================
1106   //==========================================================================
1107 /*! \brief Interface of the %UseCaseIterator.
1108
1109    This interface contains a set of methods used for iteration over the objects in the use case.
1110 */
1111   interface UseCaseIterator : SALOME::GenericObj
1112   {
1113 /*!
1114 Activates the %UseCaseIterator.
1115 \param allLevels If the value of this parameter is True the Iterator is activated for all subobjects.
1116 */
1117     void Init(in boolean allLevels);
1118 /*! Method More
1119
1120     \return True if the %UseCaseIterator finds one more object.
1121 */
1122     boolean More();
1123 /*!
1124     Passes the iterator to the next object.
1125 */
1126     void Next();
1127 /*!
1128     Returns the %SObject corresponding to the current object found by the Iterator.
1129 */
1130     SObject Value();
1131   };
1132
1133   //==========================================================================
1134   //==========================================================================
1135 /*! \brief Interface of the %UseCaseBuilder
1136
1137    Use case in the study represents a user-managed subtree, containing all or some of the objects which exist in the study.
1138    The %UseCaseBuilder interface contains a set of methods used for management of the use case in the study.
1139 */
1140   interface UseCaseBuilder : SALOME::GenericObj
1141   {
1142 /*!
1143    Adds to the use case an object as a child of the current object of the use case.
1144
1145    \param theObject The added %SObject.
1146    \return True if this %SObject has been added in the use case.
1147 */
1148     boolean Append(in SObject theObject);
1149 /*!
1150    Removes an object from the use case.
1151
1152    \param theObject The deleted %SObject
1153    \return True if this %SObject has been deleted from the use case.
1154 */
1155     boolean Remove(in SObject theObject);
1156 /*!
1157    Adds a child object <VAR>theObject</VAR> to the given father <VAR>theFather</VAR> object in the use case.
1158 */
1159     boolean AppendTo(in SObject theFather, in SObject theObject);
1160 /*!
1161     Inserts in the use case the object <VAR>theFirst</VAR> before the object <VAR>theNext</VAR>.
1162 */
1163     boolean InsertBefore(in SObject theFirst, in SObject theNext);
1164 /*!
1165     Sets the current object of the use case.
1166 */
1167     boolean SetCurrentObject(in SObject theObject);
1168 /*!
1169     Makes the root object to be the current object of the use case.
1170 */
1171     boolean SetRootCurrent();
1172 /*!
1173    Returns True if the given object <VAR>theObject</VAR> of the use case has child objects.
1174 */
1175     boolean HasChildren(in SObject theObject);
1176 /*!
1177    Returns True if children of the given object <VAR>theObject</VAR> of the use case tree were sorted successfully.
1178 */
1179     boolean SortChildren(in SObject theObject, in boolean theAscendingOrder);
1180 /*!
1181    Gets father object of the given object <VAR>theObject</VAR> in the use cases tree.
1182 */
1183     SObject GetFather(in SObject theObject);
1184 /*!
1185    Sets the name of the use case.
1186 */
1187     boolean SetName(in string theName);
1188 /*!
1189    Gets the name of the use case.
1190 */
1191     string GetName();
1192 /*!
1193    Returns True if the given object <VAR>theObject</VAR> represents a use case.
1194 */
1195     boolean IsUseCase(in SObject theObject);
1196 /*!
1197    Returns True if the given object <VAR>theObject</VAR> is included in the use cases tree on any level.
1198 */
1199     boolean IsUseCaseNode(in SObject theObject);
1200 /*!
1201     Gets the current object of the use case.
1202 */
1203     SObject GetCurrentObject();
1204 /*!
1205     Creates a new use case in the use case browser.
1206 */
1207     SObject AddUseCase(in string theName);
1208 /*!
1209     Returns the %UseCaseIterator for the given object <VAR>theObject</VAR> in the use case.
1210 */
1211     UseCaseIterator GetUseCaseIterator(in SObject theObject);
1212   };
1213   //==========================================================================
1214 /*! \brief %Driver interface
1215
1216 This class represents a common tool for all components integrated into SALOME application, that allows them to communicate with the study. It contains a set of methods which
1217 can be called by any component and which provide the following functionality:
1218 <ul>
1219     <li> publishing in the study of the objects created by a definite component
1220     <li> saving/loading of the data created by a definite component. These methods are called when loading/saving a study containing the data created by a definite component.
1221     <li> transforming of the transient references into persistant references (or vice versa) of the SObjects when saving (or loading) a study
1222     <li> copy/paste common functionality. These methods can be called by any component in order to copy/paste its object created in the study
1223 </ul>
1224
1225 */
1226   //==========================================================================
1227   interface Driver
1228   {
1229
1230     /*! \brief Saving the data produced by a definite component.
1231
1232         This method is called when saving a study.
1233        \param theComponent    %SComponent corresponding to this Component
1234        \param theURL  The path to the file in which the data will be saved.
1235        \param isMultiFile  If the value of this boolean parameter is True, the data will be saved in several files.
1236        \return A byte stream TMPFile that contains all saved data
1237
1238 <em>See \ref example19 for an example of this method usage in batchmode of %SALOME application.</em>
1239
1240      */
1241
1242
1243     TMPFile Save(in SComponent theComponent, in string theURL, in boolean isMultiFile);
1244
1245 /*! \brief Saving the data in ASCII format produced by a definite component.
1246
1247         This method is called when saving a study in ASCII format.
1248        \param theComponent    %SComponent corresponding to this Component
1249        \param theURL  The path to the file in which the data will be saved.
1250        \param isMultiFile  If the value of this boolean parameter is True, the data will be saved in several files.
1251        \return A byte stream TMPFile that will contain all saved data
1252
1253 <em>See \ref example19 for an example of this method usage in batchmode of %SALOME application.</em>
1254
1255      */
1256     TMPFile SaveASCII(in SComponent theComponent, in string theURL, in boolean isMultiFile);
1257
1258     /*! \brief Loading the data.
1259
1260        This method is called when opening a study.
1261        \param theComponent      %SComponent corresponding to this Component
1262        \param theStream   The file which contains all data saved by the component on Save method
1263        \param isMultiFile  If the value of this boolean parameter is True, the data will be loaded from several files
1264
1265      */
1266
1267     boolean Load(in SComponent theComponent, in TMPFile theStream, in string theURL, in boolean isMultiFile);
1268
1269     /*! \brief Loading the data from files in ASCII format.
1270
1271        This method is called when opening a study.
1272        \param theComponent      %SComponent corresponding to this Component
1273        \param theStream   The file which contains all data saved by the component on Save method
1274        \param isMultiFile  If the value of this boolean parameter is True, the data will be loaded from several files
1275
1276      */
1277
1278     boolean LoadASCII(in SComponent theComponent, in TMPFile theStream, in string theURL, in boolean isMultiFile);
1279
1280     /*! \brief Closing of the study
1281
1282       This method Close is called when closing a study.
1283     \param aSComponent The according %SComponent
1284      */
1285
1286     void Close (in SComponent aSComponent);
1287     //void Close ( in string  aIORSComponent);
1288
1289     /*! Gets the type of the data
1290
1291         \return The type of data produced by the Component in the study.
1292      */
1293
1294      string ComponentDataType();
1295
1296     // Driver Transient -> persistent called for each object in study
1297 /*!
1298    Transforms IOR of a given %SObject into PersistentID. It is called for each
1299    object in the %study.
1300 \note <br> In %SALOME the objects which are present in an active study are identified by an IOR, when this
1301 study is saved these references are transformed into persintent IDs.
1302
1303    \param theSObject The given %SObject.
1304    \param IORString The IOR of the given %SObject.
1305    \param isMultiFile If this parameter is True the study containing the given %SObject is stored in several files.
1306    \param isASCII If this parameter is True the study containing the given %SObject is stored in ASCII format.
1307
1308    \return The persistent ID of the given %SObject
1309
1310 */
1311     string IORToLocalPersistentID (in SObject theSObject,
1312                                    in string IORString,
1313                                    in boolean isMultiFile,
1314                                    in boolean isASCII);
1315 /*!
1316   Transforms PersistentID into IOR of the object. It is called for each
1317    object in the %study.
1318
1319    \note <br> In %SALOME the objects which are present in an saved study (file) are identified by a persistent ID, when this
1320 study is open, these references are transformed into persintent IORs.
1321
1322    \param theSObject The given %SObject.
1323    \param IORString The IOR of the given %SObject.
1324    \param isMultiFile If this parameter is True the study containing the given %SObject is stored in several files.
1325    \param isASCII If this parameter is True the study containing the given %SObject is stored in ASCII format.
1326
1327    \return The IOR of the given %SObject
1328
1329 */
1330     string LocalPersistentIDToIOR (in SObject theSObject,
1331                                    in string aLocalPersistentID,
1332                                    in boolean isMultiFile,
1333                                    in boolean isASCII)
1334       raises (SALOME::SALOME_Exception);
1335
1336     // Publishing in the study
1337 /*! Publishing in the study
1338
1339     \return True if the given %Component can publish a definite object with a given IOR in the %study.
1340     \param theIOR The IOR of a definite object
1341 */
1342     boolean CanPublishInStudy(in Object theIOR) raises (SALOME::SALOME_Exception);
1343 /*! \brief Publishing in the study
1344
1345    Publishes the given object in the %study, using the algorithm of this component.
1346     \param theSObject     If this parameter is null the object is published for the first time. Otherwise
1347     this parameter should contain a reference to the object published earlier
1348     \param theObject      The object which is published
1349     \param theName      The name of the published object. If this parameter is empty, the name is generated
1350     automatically by the component.
1351
1352     \return The published %SObject.
1353 */
1354     SObject PublishInStudy(in SObject theSObject, in Object theObject, in string theName);
1355
1356     // copy/paste methods
1357
1358 /*!
1359     Returns True, if the given %SObject can be copied to the clipboard.
1360
1361     \param theObject The given %SObject which should be copied.
1362 */
1363     boolean CanCopy(in SObject theObject);
1364 /*!
1365     Returns the object %ID and the %TMPFile of the object from the given %SObject.
1366 */
1367     TMPFile CopyFrom(in SObject theObject, out long theObjectID);
1368 /*!
1369     Returns True, if the component can paste the object with given %ID of the component with name <VAR>theComponentName</VAR>.
1370 */
1371     boolean CanPaste(in string theComponentName, in long theObjectID);
1372 /*!
1373     Returns the %SObject of the pasted object.
1374 */
1375     SObject PasteInto(in TMPFile theStream, in long theObjectID, in SObject theObject);
1376
1377   };
1378 };
1379
1380 #endif