Salome HOME
Avoid FileNotFound exception
[modules/kernel.git] / idl / SALOMEDS.idl
index 87a4f2df2113f8e2fa100d3acaef55c09fa4718f..c6a709bcf1514e6dca3945c1a038df245f0e4a71 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2016  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2021  CEA/DEN, EDF R&D, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -41,7 +41,7 @@ module SALOMEDS
 {
 /*! \brief Name of the file in which the %Study is saved.
 */
-  typedef wstring URL;
+  typedef wstring URLPath;
 
 /*! \brief Main identifier of an object in %SALOME application
 */
@@ -55,12 +55,6 @@ module SALOMEDS
 */
   typedef string SalomeReference;
 
-/*! \brief List of the names of studies which are currently open in this %SALOME session.
-
-Since %SALOME is a multi-study application, it allows to open a lot of studies
-during each working session.
-*/
-  typedef sequence<URL> ListOfOpenStudies;
 //! List of file names
   typedef sequence<string> ListOfFileNames;
 //! List of modification dates of a study
@@ -81,7 +75,6 @@ during each working session.
 
   interface GenericAttribute;
   interface Study;
-  interface StudyManager;
   interface StudyBuilder;
   interface SObject;
   interface SComponent;
@@ -105,899 +98,763 @@ during each working session.
 //! Exception indicating that this feature hasn't been implemented in %SALOME application.
   exception NotImplemented {};
 
+  //==========================================================================
+/*! \brief %Study Builder Interface
 
-  //===========================================================================
- /*! \brief %Study Interface
-
-    The purpose of the %Study is to manage the data produced by various components of %SALOME platform.
-   Most of the %Study operations are handled by the StudyManager and the StudyBuilder.
-   What is left in the %Study interface are elementary inquiries.
-   (Incidentally, we recall that a CORBA attribute is implemented as a pair of get
-      and set methods.) A %Study is explored by a set of tools, mainly iterators
-    , which are described further. Nevertheless, the %Study
-     interface allows the search of an object by name or by ID.
-     \note
-     <BR><VAR>The Path </VAR>of an object in %SALOME application is much alike a standard path of a file.
-    In general it's a string of names of directories divided by a slash '/'.
-     <BR><VAR>The Context</VAR> is the current directory of an object.</P>
+  The purpose of the Builder is to add and/or remove objects and attributes.
+  A %StudyBuilder is linked to a %Study. A
+  command management is provided for the undo/redo functionalities.
+  \note
+  <BR><VAR>The Tag</VAR> of an item in %SALOME application is a symbolic description of
+  item's position in the tree-type structure of the browser. In general it has the following
+  form: <TT>0:2:1:1</TT>
 */
+  //==========================================================================
 
-  interface Study
+  interface StudyBuilder
   {
+/*! \brief %LockProtection Exception
 
-//! Invalid study reference
-    exception StudyInvalidReference {};
-//! Invalid study context
-    exception StudyInvalidContext {};
-//! Invalid study component
-    exception StudyInvalidComponent {};
-//! Invalid directory of the %study exception
-    exception StudyInvalidDirectory {};
-//! Exception pointing that this name of the study has already been used.
-    exception StudyNameAlreadyUsed {};
-//! study object already exists
-    exception StudyObjectAlreadyExists {};
-//! Invalid name of the %study exception
-    exception StudyNameError {};
-//! Invalid study comment
-    exception StudyCommentError {};
-
-/*! \brief The name of the %Study
-
-   This is equivalent to the methods setName() & getName()
+    This exception is raised while attempting to modify a locked %study.
 */
-    attribute wstring     Name; // equivalent to setName() & getName()
-/*! \brief The ID of the %Study
+    exception LockProtection {};
+/*! \brief Creation of a new %SComponent.
 
-   This is equivalent to the methods setID() & getID()
-*/
-    attribute short      StudyId;
-//! Sequence containing %SObjects
-    typedef sequence<SObject> ListOfSObject;
-//!  Get the persistent reference to the %Study.
-    PersistentReference  GetPersistentReference() raises(StudyInvalidReference);
-//! Get a transient reference to the %Study.
-    SalomeReference      GetTransientReference() raises(StudyInvalidReference);
+   Creates a new %SComponent
+   \param ComponentDataType    Data type of the %SComponent which will be created.
 
-/*! \brief indicate whether the %Study is empty
+<em>See \ref example17 for an example of this method usage in batchmode of %SALOME application.</em>
 
-    \return True if the %Study is empty
 */
-    boolean IsEmpty() raises(StudyInvalidReference);
-/*! \brief  Find a %SComponent by its name.
-
-   \param aComponentName    It's a string value in the Comment Attribute of the Component,
-    which is looked for, defining the data type of this Component.
+    SComponent NewComponent(in string ComponentDataType) raises(LockProtection);
 
-<em>See \ref example1 for an example of this method usage in batchmode of %SALOME application.</em>
+/*! \brief Definition of the instance to the %SComponent
 
+    Defines the instance to the %SComponent.
 */
-    SComponent FindComponent  (in string aComponentName) raises(StudyInvalidReference);
+    void       DefineComponentInstance (in SComponent aComponent,in Object ComponentIOR) raises(LockProtection);
 
-/*! \brief  Find a %SComponent by ID of the according %SObject
+/*! \brief Deletion of a %SComponent
+
+  Removes a %SComponent.
 */
-    SComponent FindComponentID(in ID aComponentID) raises(StudyInvalidReference);
-/*! \brief  Find a %SObject by the Name Attribute of this %SObject
+    void       RemoveComponent(in SComponent aComponent) raises(LockProtection);
 
-    \param anObjectName String parameter defining the name of the object
-    \return The obtained %SObject
+/*! \brief Creation of a new %SObject
 
-<em>See \ref example19 for an example of this method usage in batchmode of %SALOME application.</em>
-*/
-    SObject       FindObject      (in string anObjectName) raises(StudyInvalidReference);
-/*! \brief  Find a %SObject by its ID
+   Creates a new %SObject under a definite father %SObject.
 
-    \param aObjectID This parameter defines the ID of the required object
-    \return The obtained %SObject
-*/
-    SObject       FindObjectID    (in ID aObjectID) raises(StudyInvalidReference);
-/*! \brief Create a %SObject by its ID
+   \param theFatherObject The father %SObject under which this one should be created.
+   \return New %SObject
 
-    \param aObjectID This parameter defines the ID of the required object
-    \return The created %SObject
-*/
-    SObject       CreateObjectID    (in ID aObjectID) raises(StudyInvalidReference);
-/*!  \brief Find a %SObject by IOR of the object belonging to this %SObject.
+<em>See \ref example18 for an example of this method usage in batchmode of %SALOME application.</em>
 
-    \param anObjectName This parameter defines the IOR of the object
-    \return The obtained %SObject
 */
-    SObject       FindObjectIOR   (in ID aObjectIOR) raises(StudyInvalidReference);
-/*! \brief  Find in the study all %SObjects produced by a given %Component.
 
-    \param anObjectName The Name Attribute of the searched %SObjects should correspond to <VAR>anObjectName</VAR>.
-    \param aComponentName The name of the component, which objects are searched for.
-*/
-    ListOfSObject FindObjectByName(in string anObjectName, in string aComponentName) raises(StudyInvalidReference);
-/*! \brief  Find a %SObject by the path to it.
+    SObject NewObject      (in SObject theFatherObject) raises(LockProtection);
 
-    \param thePath The path to the required %SObject.
-    \return The obtained %SObject.
-*/
-    SObject FindObjectByPath(in string thePath) raises(StudyInvalidReference);
-/*! \brief Get the path to the %SObject.
-*/
-    string GetObjectPath(in Object theObject) raises(StudyInvalidReference);
+/*! \brief Creation of a new %SObject with a definite %tag
 
-/*! \brief  Set the context of the %Study.
+   Creates a new %SObject with a definite %tag.
 
-    \param thePath String parameter defining the context of the study.
+   \param atag Long value corresponding to the tag of the new %SObject.
+   \return New %SObject
 
-<em>See \ref example23 for an example of this method usage in batchmode of %SALOME application.</em>
 */
-    void SetContext(in string thePath) raises (StudyInvalidReference, StudyInvalidContext);
-/*!  \brief Get the context of the %Study.
+    SObject NewObjectToTag (in SObject theFatherObject, in long atag) raises(LockProtection);
+/*! \brief Deletion of the %SObject
 
-<em>See \ref example23 for an example of this method usage in batchmode of %SALOME application.</em>
-*/
-    string GetContext() raises (StudyInvalidReference, StudyInvalidContext);
-/*!  \brief Get a list of names of objects corresponding to the context.
+  Removes a %SObject from the %StudyBuilder.
 
-   \note  If the parameter <VAR>theContext</VAR> is empty, then the current context will be used.
+  \param anObject The %SObject to be deleted.
 */
-    ListOfStrings GetObjectNames(in string theContext) raises (StudyInvalidReference, StudyInvalidContext);
-/*! \brief Get a list of names of directories and subdirectories corresponding to the context.
+    void    RemoveObject   (in SObject anObject) raises(LockProtection);
+/*! \brief Deletion of the %SObject with all his child objects.
 
-   \note  If the parameter <VAR>theContext</VAR> is empty, then the current context will be used.
-*/
-    ListOfStrings GetDirectoryNames(in string theContext) raises (StudyInvalidReference, StudyInvalidContext);
-/*! \brief  Get a list of names of Files corresponding to the context.
+  Removes the %SObject with all his child objects.
 
-    \note  If the parameter <VAR>theContext</VAR> is empty, then the current context will be used.
+  \param anObject The %SObject to be deleted with all child objects.
 */
-    ListOfStrings GetFileNames(in string theContext) raises (StudyInvalidReference, StudyInvalidContext);
-/*! \brief Get a list of names of Components corresponding to the context.
+    void    RemoveObjectWithChildren(in SObject anObject) raises(LockProtection);
 
-   \note  If the parameter <VAR>theContext</VAR> is empty, then the current context will be used.
-*/
-    ListOfStrings GetComponentNames(in string theContext) raises(StudyInvalidReference);
-/*!  \brief Create a new iterator of child levels of the given %SObject.
+/*!
+   Loads a %SComponent.
 
-    \param aSO The given %SObject
-    \return A new iterator of child levels of the given %SObject.
-*/
-    ChildIterator NewChildIterator(in SObject aSO) raises(StudyInvalidReference);
+<em>See \ref example19 for an example of this method usage in batchmode of %SALOME application.</em>
 
-/*!  \brief Create a new iterator of the %SComponents.
+*/
+    void  LoadWith (in SComponent sco, in Driver Engine) raises (SALOME::SALOME_Exception);
+/*!
+   Loads a %SObject.
 
-    \return A new iterator of the %SComponents.
+   \param sco %SObject to be loaded.
 */
-    SComponentIterator NewComponentIterator() raises(StudyInvalidReference);
+    void  Load (in SObject sco);
 
-/*! \brief  Create a new %StudyBuilder to add or modify an object in the study.
+/*! \brief Looking for or creating an attribute assigned to the %SObject
 
-   \return A new %StudyBuilder.
+    Allows to find or create an attribute of a specific type which is assigned to the object.
+    \param anObject        The %SObject corresponding to the attribute which is looked for.
+    \param aTypeOfAttribute     Type of the attribute.
 
-<em>See \ref example20 for an example of this method usage in batchmode of %SALOME application.</em>
+<em>See \ref example1 for an example of this method usage in batchmode of %SALOME application.</em>
 */
-    StudyBuilder NewBuilder() raises(StudyInvalidReference);
-/*! \brief Labels dependency
 
-    Updates the map with IOR attribute. It's an inner method used for optimization.
-*/
-    void UpdateIORLabelMap(in string anIOR, in string anEntry) raises(StudyInvalidReference);
+    GenericAttribute FindOrCreateAttribute(in  SObject        anObject,
+                                         in  string         aTypeOfAttribute) raises(LockProtection);
 
-/*! \brief Getting properties of the study
+/*! \brief Looking for an attribute assigned to a %SObject
 
-   Returns the attribute, which contains the properties of this study.
+    Allows to find an attribute of a specific type which is assigned to the object.
+    \param anObject        The %SObject corresponding to the attribute which is looked for.
+    \param aTypeOfAttribute     Type of the attribute.
+    \param anAttribute       Where the attribute is placed if it's found.
+    \return True if it finds an attribute.
+ */
 
-<em>See \ref example20 for an example of this method usage in batchmode of %SALOME application.</em>
+    boolean FindAttribute(in  SObject        anObject,
+                                 out GenericAttribute anAttribute,
+                                 in  string         aTypeOfAttribute);
+/*! \brief Deleting the attribute assigned to the %SObject
 
-*/
-    AttributeStudyProperties GetProperties() raises(StudyInvalidReference);
-/*! \brief  Indicate whether the %study has been saved
-*/
-    attribute boolean IsSaved;
-/*! \brief  Indicate whether the %study has been modified and not saved.
+    Removes the attribute of a specific type which is assigned to the object.
+    \param anObject        The %SObject corresponding to the attribute.
+    \param aTypeOfAttribute     Type of the attribute.
 
-  Returns True if the %study has been modified and not saved.
+<em>See \ref example17 for an example of this method usage in batchmode of %SALOME application.</em>
 */
-    boolean IsModified() raises(StudyInvalidReference);
-
-/*! \brief  Mark the %study as being modified and not saved.
+    void RemoveAttribute(in  SObject        anObject,
+                         in  string         aTypeOfAttribute) raises(LockProtection);
+/*!
+    Adds a reference between %anObject and %theReferencedObject.
+    \param anObject The %SObject which will get a reference
+    \param theReferencedObject The %SObject having a reference
 */
-    void Modified() raises(StudyInvalidReference);
 
-/*! \brief  Indicate the file where the %study has been saved
+    void Addreference(in SObject anObject,
+                      in SObject theReferencedObject) ;
+
+/*!
+    Removes a reference from %anObject to another object.
+    \param anObject The %SObject which contains a reference
 */
-    attribute wstring URL;
 
-/*! \brief List of %SObjects
+    void RemoveReference(in SObject anObject) ;
 
-    Returns the list of %SObjects which refers to %anObject.
-*/
-    ListOfSObject FindDependances(in SObject anObject) raises(StudyInvalidReference);
+/*! \brief Identification of the %SObject's substructure.
 
-/*! \brief The date of the last saving of the study
+      Identification of the %SObject's substructure by GUID.
 
-    Returns the date of the last saving of study with format: "DD/MM/YYYY HH:MM"
-*/
-    string GetLastModificationDate() raises(StudyInvalidReference);
-/*! \brief The list of modification dates of the study
 
-    Returns the list of modification dates (without creation date) with format "DD/MM/YYYY HH:MM".
-      Note : the first modification begins the list.
+      \param anObject The %SObject which will be identified
+      \param theGUID GUID has the following format "00000000-0000-0000-0000-000000000000"
 */
-    ListOfDates GetModificationsDate() raises(StudyInvalidReference);
-/*! \brief Object conversion.
+    void SetGUID(in SObject anObject, in string theGUID) raises(LockProtection);
+/*!
+Searches for a definite %SObject with a definite GUID and returns True if it finds it.
 
-    Converts an object into IOR.
-    \return    IOR
+\param anObject A definite %SObject which will be identified
+\param theGUID GUID has the following format "00000000-0000-0000-0000-000000000000"
 */
-    string ConvertObjectToIOR(in Object theObject);
-/*! \brief Object conversion.
+     boolean IsGUID(in SObject anObject, in string theGUID);
 
-    Converts IOR into an object.
-    \return    An object
-*/
-    Object ConvertIORToObject(in string theIOR);
+/*! \brief Creation of a new command
 
-/*!  \brief Get a new %UseCaseBuilder.
-*/
-    UseCaseBuilder  GetUseCaseBuilder() raises(StudyInvalidReference);
+   Creates a new command which can contain several different actions.
 
-/*! \brief  Close the components in the study, remove itself from the %StudyManager.
-*/
-    void Close() raises(StudyInvalidReference);
+<em>See \ref example3 for an example of this method usage in batchmode of %SALOME application.</em>
 
-/*! \brief  Enable (if isEnabled = True)/disable automatic addition of new %SObjects to the use case.
 */
-    void EnableUseCaseAutoFilling(in boolean isEnabled) raises(StudyInvalidReference);
+    void NewCommand(); // command management
+/*! \brief Execution of the command
 
-/*!
-    Functions for internal usage only
-*/
-    void AddPostponed(in string theIOR) raises(StudyInvalidReference);
+   Commits all actions declared within this command.
 
-    void AddCreatedPostponed(in string theIOR) raises(StudyInvalidReference);
+   \exception LockProtection This exception is raised, when trying to perform this command a study, which is protected for modifications.
 
-    void RemovePostponed(in long theUndoLimit) raises(StudyInvalidReference);
+<em>See \ref example16 for an example of this method usage in batchmode of %SALOME application.</em>
 
-    void UndoPostponed(in long theWay) raises(StudyInvalidReference);
-
-    boolean DumpStudy(in string thePath,
-                      in string theBaseName,
-                      in boolean isPublished,
-                      in boolean isMultiFile) raises(StudyInvalidReference);
-
-/*! \brief  Get an AttributeParameter used to store common parameters for given %theSavePoint.
-
-    \param theID identifies a common parameters set (Example: "Interface Applicative")
-    \param theSavePoint is number of a set of parameters as there can be several sets
 */
-    AttributeParameter GetCommonParameters(in string theID, in long theSavePoint) raises(StudyInvalidReference);
-
-/*! \brief  Get an AttributeParameter used to store parameters for given %theModuleName.
-
-    \param theID identifies a common parameters set (Example: "Interface Applicative")
-    \param theModuleName is a name of the module (Example: "Geometry")
-    \param theSavePoint is number of a set of parameters as there can be several sets
+    void CommitCommand() raises(LockProtection); // command management
+/*!
+    Returns True if at this moment there is a command under execution.
 */
-    AttributeParameter GetModuleParameters(in string theID, in string theModuleName, in long theSavePoint) raises(StudyInvalidReference);
-
+    boolean HasOpenCommand();
+/*! \brief Cancellation of the command
 
-/*! \brief Get a default Python script to restore visual parameters for given %theModuleName.
+    Cancels all actions declared within the command.
 
-    \param theModuleName is a name of the module (Example: "Geometry")
-    \param indent is a string to use for script indentation
+<em>See \ref example17 for an example of this method usage in batchmode of %SALOME application.</em>
 */
-    string GetDefaultScript(in string theModuleName, in string indent) raises(StudyInvalidReference);
+    void AbortCommand(); // command management
+/*! \brief Undolimit
 
-/*!
-    Private method, returns an implementation of this Study.
-   \param theHostname is a hostname of the caller
-   \param thePID is a process ID of the caller
-   \param isLocal is set True if the Study is launched locally with the caller
+    The number of actions which can be undone
 */
-    long long GetLocalImpl(in string theHostname, in long thePID, out boolean isLocal);
-
+    attribute long  UndoLimit;
+/*! \brief Undo method
 
-/*! \brief  Mark this Study as being locked by the given locker.
+    Cancels all actions of the last command.
 
-    The lock status can be checked by method IsStudyLocked
-    \param theLockerID identifies a locker of the study can be for ex. IOR of the engine that locks the study.
-*/
-    void SetStudyLock(in string theLockerID) raises(StudyInvalidReference);
+    \exception LockProtection This exception is raised, when trying to perform this command a study, which is protected for modifications.
 
-/*! \brief Indicate if the Study is locked
+<em>See \ref example16 for an example of this method usage in batchmode of %SALOME application.</em>
 
-   Returns True if the Study was marked locked.
 */
-    boolean IsStudyLocked() raises(StudyInvalidReference);
-
-/*! \brief  Mark this Study as being unlocked by the given locker.
+    void Undo() raises (LockProtection);
+/*! \brief Redo method
 
-     The lock status can be checked by method IsStudyLocked
-    \param theLockerID identifies a locker of the study can be for ex. IOR of the engine that unlocks the study.
-*/
-    void UnLockStudy(in string theLockerID) raises(StudyInvalidReference);
+    Redoes all actions of the last command.
 
-/*! \brief  Get the list of IDs of the Study's lockers.
-*/
-    ListOfStrings GetLockerID() raises(StudyInvalidReference);
+\exception LockProtection This exception is raised, when trying to perform this command a study, which is protected for modifications.
 
-/*! \brief  Create real variable with Name theVarName and value theValue
+<em>See \ref example16 for an example of this method usage in batchmode of %SALOME application.</em>
 
-    (or set if variable value into theValue already exists)
-    \param theVarName is a name of the variable
-    \param theVarName is a value of the variable.
 */
-    void SetReal( in string theVarName, in double theValue ) raises(StudyInvalidReference);
-
-/*! \brief  Create integer variable with Name theVarName and value theValue
+    void Redo() raises (LockProtection);
+/*!
+    Returns True if at this moment there are any actions which can be canceled.
 
-    (or set if variable value into theValue already exists)
-    \param theVarName is a name of the variable
-    \param theVarName is a value of the variable.
-*/
-    void SetInteger( in string theVarName, in long theValue ) raises(StudyInvalidReference);
-/*! \brief  Create boolean variable with Name theVarName and value theValue
+<em>See \ref example16 for an example of this method usage in batchmode of %SALOME application.</em>
 
-    (or set if variable value into theValue already exists)
-    \param theVarName is a name of the variable
-    \param theVarName is a value of the variable.
 */
-    void SetBoolean( in string theVarName, in boolean theValue ) raises(StudyInvalidReference);
-
-/*! \brief  Create string variable with Name theVarName and value theValue
+    boolean GetAvailableUndos();
+/*!
+    Returns True if at this moment there are any actions which can be redone.
 
-    (or set if variable value into theValue already exists)
-    \param theVarName is a name of the variable
-    \param theVarName is a value of the variable.
-*/
-    void SetString( in string theVarName, in string theValue ) raises(StudyInvalidReference);
+<em>See \ref example3 for an example of this method usage in batchmode of %SALOME application.</em>
 
-/*! \brief  Set current value as double for string variable
 */
-    void SetStringAsDouble( in string theVarName, in double theValue ) raises(StudyInvalidReference);
-
-/*! \brief Get value of a real variable
+    boolean GetAvailableRedos();
+/*!
+    Puts name attribute with the given string value to the given %SObject
 
-    \param theVarName is a name of the variable.
+    \param theSO Existing SObject to set name attribute.
+    \param theValue The value to be set to the name attribute.
 */
-    double GetReal( in string theVarName ) raises(StudyInvalidReference);
+    void SetName(in SObject theSO, in string theValue) raises (LockProtection);
 
-/*! \brief Get value of an integer variable
+/*!
+    Puts comment attribute with the given string value to the given %SObject
 
-    \param theVarName is a name of the variable.
+    \param theSO Existing SObject to set comment attribute.
+    \param theValue The value to be set to the comment attribute.
 */
-    long GetInteger( in string theVarName ) raises(StudyInvalidReference);
+    void SetComment(in SObject theSO, in string theValue) raises (LockProtection);
 
-/*! \brief Get value of a boolean variable
+/*!
+    Puts IOR attribute with the given string value to the given %SObject
 
-    \param theVarName is a name of the variable.
+    \param theSO Existing SObject to set IOR attribute.
+    \param theValue The value to be set to the IOR attribute.
 */
-    boolean GetBoolean( in string theVarName ) raises(StudyInvalidReference);
+    void SetIOR(in SObject theSO, in string theValue) raises (LockProtection);
+  };
 
-/*! \brief Get value of a string variable
+  //===========================================================================
+ /*! \brief %Study Interface
 
-    \param theVarName is a name of the variable.
+    The purpose of the %Study is to manage the data produced by various components of %SALOME platform.
+   Most of the %Study operations are handled by the StudyBuilder.
+   What is left in the %Study interface are elementary inquiries.
+   (Incidentally, we recall that a CORBA attribute is implemented as a pair of get
+      and set methods.) A %Study is explored by a set of tools, mainly iterators
+    , which are described further. Nevertheless, the %Study
+     interface allows the search of an object by name or by ID.
+     \note
+     <BR><VAR>The Path </VAR>of an object in %SALOME application is much alike a standard path of a file.
+    In general it's a string of names of directories divided by a slash '/'.
+     <BR><VAR>The Context</VAR> is the current directory of an object.</P>
 */
-    string GetString( in string theVarName ) raises(StudyInvalidReference);
-
 
-/*! \brief Indicate if a variable is real
-
-    Return true if variable is real otherwise return false.
-    \param theVarName is a name of the variable.
-*/
-    boolean IsReal( in string theVarName ) raises(StudyInvalidReference);
+  interface Study
+  {
 
-/*! \brief Indicate if a variable is integer
+//! Invalid study reference
+    exception StudyInvalidReference {};
+//! Invalid study component
+    exception StudyInvalidComponent {};
+//! Invalid directory of the %study exception
+    exception StudyInvalidDirectory {};
+//! Exception pointing that this name of the study has already been used.
+    exception StudyNameAlreadyUsed {};
+//! study object already exists
+    exception StudyObjectAlreadyExists {};
+//! Invalid name of the %study exception
+    exception StudyNameError {};
+//! Invalid study comment
+    exception StudyCommentError {};
 
-    Return true if variable is integer otherwise return false.
-    \param theVarName is a name of the variable.
+/*!
+    Determines whether the server has already been loaded or not.
 */
-    boolean IsInteger( in string theVarName ) raises(StudyInvalidReference);
-
-/*! \brief Indicate if a variable is boolean
-
-    Return true if variable is boolean otherwise return false.
-    \param theVarName is a name of the variable.
+    void ping();
+    void Shutdown();
+/*!
+    Returns the PID of the server
 */
-    boolean IsBoolean( in string theVarName ) raises(StudyInvalidReference);
-
-/*! \brief Indicate if a variable is string
+    long getPID();
 
-    Return true if variable is string otherwise return false.
-    \param theVarName is a name of the variable.
+/*!
+    Shutdown the Study process.
 */
-    boolean IsString( in string theVarName ) raises(StudyInvalidReference);
+    oneway void ShutdownWithExit();
 
-/*! \brief Indicate if a variable exists in the study
+/*! \brief The name of the %Study
 
-    Return true if variable exists in the study,
-    otherwise return false.
-    \param theVarName is a name of the variable.
+   This is equivalent to the methods setName() & getName()
 */
-    boolean IsVariable( in string theVarName ) raises(StudyInvalidReference);
+    attribute wstring Name; // equivalent to getName()
 
-/*! \brief Get names of all variables from the study.
+/*! \brief  Indicate the file where the %study has been saved
 */
-    ListOfStrings GetVariableNames() raises(StudyInvalidReference);
 
-/*! \brief Remove a variable
+//! Sequence containing %SObjects
+    typedef sequence<SObject> ListOfSObject;
+//!  Get the persistent reference to the %Study.
+    PersistentReference  GetPersistentReference() raises(StudyInvalidReference);
 
-   Remove variable with the specified name from the study with substitution of its value.
+/*! \brief indicate whether the %Study is empty
 
-   \param theVarName Name of the variable.
-   \return Status of operation.
+    \return True if the %Study is empty
 */
-    boolean RemoveVariable( in string theVarName ) raises(StudyInvalidReference);
+    boolean IsEmpty() raises(StudyInvalidReference);
+/*! \brief  Find a %SComponent by its name.
 
-/*! \brief Rename a variable
+   \param aComponentName    It's a string value in the Comment Attribute of the Component,
+    which is looked for, defining the data type of this Component.
 
-   Rename variable with the specified name within the study.
+<em>See \ref example1 for an example of this method usage in batchmode of %SALOME application.</em>
 
-   \param theVarName Name of the variable.
-   \param theNewVarName New name for the variable.
-   \return Status of operation.
 */
-    boolean RenameVariable( in string theVarName, in string theNewVarName ) raises(StudyInvalidReference);
-
-/*! \brief Indicate whether variable is used
-
-   Check that variable is used in the study.
+    SComponent FindComponent  (in string aComponentName) raises(StudyInvalidReference);
 
-   \param theVarName Name of the variable.
-   \return Variable usage.
+/*! \brief  Find a %SComponent by ID of the according %SObject
 */
-    boolean IsVariableUsed( in string theVarName ) raises(StudyInvalidReference);
+    SComponent FindComponentID(in ID aComponentID) raises(StudyInvalidReference);
+/*! \brief  Find a %SObject by the Name Attribute of this %SObject
 
-/*! \brief Parse variables used for object creation
+    \param anObjectName String parameter defining the name of the object
+    \return The obtained %SObject
 
-   \param string with variables, separated by special symbol.
-   \return Variables list.
+<em>See \ref example19 for an example of this method usage in batchmode of %SALOME application.</em>
 */
-    ListOfListOfStrings ParseVariables( in string theVars ) raises(StudyInvalidReference);
-
-/*!
-     Attach an observer to the Study
+    SObject       FindObject      (in string anObjectName) raises(StudyInvalidReference);
+/*! \brief  Find a %SObject by its ID
 
-    \param theObserver observer being attached
-    \param modify when \c true, observer receives any object's modification events;
-           otherwise observer receives object's creation events only
+    \param aObjectID This parameter defines the ID of the required object
+    \return The obtained %SObject
 */
-     void attach(in SALOMEDS::Observer theObserver, in boolean modify);
-/*!
-     Detach an observer from the Study
+    SObject       FindObjectID    (in ID aObjectID) raises(StudyInvalidReference);
+/*! \brief Create a %SObject by its ID
 
-    \param theObserver observer to be detached
+    \param aObjectID This parameter defines the ID of the required object
+    \return The created %SObject
 */
-     void detach(in SALOMEDS::Observer theObserver);
-  };
-
-  //==========================================================================
-/*! \brief %Study Builder Interface
+    SObject       CreateObjectID    (in ID aObjectID) raises(StudyInvalidReference);
+/*!  \brief Find a %SObject by IOR of the object belonging to this %SObject.
 
-  The purpose of the Builder is to add and/or remove objects and attributes.
-  A %StudyBuilder is linked to a %Study. A
-  command management is provided for the undo/redo functionalities.
-  \note
-  <BR><VAR>The Tag</VAR> of an item in %SALOME application is a symbolic description of
-  item's position in the tree-type structure of the browser. In general it has the following
-  form: <TT>0:2:1:1</TT>
+    \param anObjectName This parameter defines the IOR of the object
+    \return The obtained %SObject
 */
-  //==========================================================================
-
-  interface StudyBuilder
-  {
-/*! \brief %LockProtection Exception
+    SObject       FindObjectIOR   (in ID aObjectIOR) raises(StudyInvalidReference);
+/*! \brief  Find in the study all %SObjects produced by a given %Component.
 
-    This exception is raised while attempting to modify a locked %study.
+    \param anObjectName The Name Attribute of the searched %SObjects should correspond to <VAR>anObjectName</VAR>.
+    \param aComponentName The name of the component, which objects are searched for.
 */
-    exception LockProtection {};
-/*! \brief Creation of a new %SComponent.
-
-   Creates a new %SComponent
-   \param ComponentDataType    Data type of the %SComponent which will be created.
-
-<em>See \ref example17 for an example of this method usage in batchmode of %SALOME application.</em>
+    ListOfSObject FindObjectByName(in string anObjectName, in string aComponentName) raises(StudyInvalidReference);
+/*! \brief  Find a %SObject by the path to it.
 
+    \param thePath The path to the required %SObject.
+    \return The obtained %SObject.
 */
-    SComponent NewComponent(in string ComponentDataType) raises(LockProtection);
-/*! \brief Definition of the instance to the %SComponent
-
-    Defines the instance to the %SComponent.
+    SObject FindObjectByPath(in string thePath) raises(StudyInvalidReference);
+/*! \brief Get the path to the %SObject.
 */
-    void       DefineComponentInstance (in SComponent aComponent,in Object ComponentIOR) raises(LockProtection);
+    string GetObjectPath(in Object theObject) raises(StudyInvalidReference);
 
-/*! \brief Deletion of a %SComponent
+/*!  \brief Create a new iterator of child levels of the given %SObject.
 
-  Removes a %SComponent.
+    \param aSO The given %SObject
+    \return A new iterator of child levels of the given %SObject.
 */
-    void       RemoveComponent(in SComponent aComponent) raises(LockProtection);
+    ChildIterator NewChildIterator(in SObject aSO) raises(StudyInvalidReference);
 
-/*! \brief Creation of a new %SObject
+/*!  \brief Create a new iterator of the %SComponents.
 
-   Creates a new %SObject under a definite father %SObject.
+    \return A new iterator of the %SComponents.
+*/
+    SComponentIterator NewComponentIterator() raises(StudyInvalidReference);
 
-   \param theFatherObject The father %SObject under which this one should be created.
-   \return New %SObject
+/*! \brief  Create a new %StudyBuilder to add or modify an object in the study.
 
-<em>See \ref example18 for an example of this method usage in batchmode of %SALOME application.</em>
+   \return A new %StudyBuilder.
 
+<em>See \ref example20 for an example of this method usage in batchmode of %SALOME application.</em>
 */
+    StudyBuilder NewBuilder() raises(StudyInvalidReference);
+/*! \brief Labels dependency
 
-    SObject NewObject      (in SObject theFatherObject) raises(LockProtection);
+    Updates the map with IOR attribute. It's an inner method used for optimization.
+*/
+    void UpdateIORLabelMap(in string anIOR, in string anEntry) raises(StudyInvalidReference);
 
-/*! \brief Creation of a new %SObject with a definite %tag
+/*! \brief Getting properties of the study
 
-   Creates a new %SObject with a definite %tag.
+   Returns the attribute, which contains the properties of this study.
 
-   \param atag Long value corresponding to the tag of the new %SObject.
-   \return New %SObject
+<em>See \ref example20 for an example of this method usage in batchmode of %SALOME application.</em>
 
 */
-    SObject NewObjectToTag (in SObject theFatherObject, in long atag) raises(LockProtection);
-/*! \brief Deletion of the %SObject
-
-  Removes a %SObject from the %StudyBuilder.
-
-  \param anObject The %SObject to be deleted.
+    AttributeStudyProperties GetProperties() raises(StudyInvalidReference);
+/*! \brief  Indicate whether the %study has been saved
 */
-    void    RemoveObject   (in SObject anObject) raises(LockProtection);
-/*! \brief Deletion of the %SObject with all his child objects.
-
-  Removes the %SObject with all his child objects.
+    attribute boolean IsSaved;
+/*! \brief  Indicate whether the %study has been modified and not saved.
 
-  \param anObject The %SObject to be deleted with all child objects.
+  Returns True if the %study has been modified and not saved.
 */
-    void    RemoveObjectWithChildren(in SObject anObject) raises(LockProtection);
-
-/*!
-   Loads a %SComponent.
-
-<em>See \ref example19 for an example of this method usage in batchmode of %SALOME application.</em>
+    boolean IsModified() raises(StudyInvalidReference);
 
+/*! \brief  Mark the %study as being modified and not saved.
 */
-    void  LoadWith (in SComponent sco, in Driver Engine) raises (SALOME::SALOME_Exception);
-/*!
-   Loads a %SObject.
+    void Modified() raises(StudyInvalidReference);
 
-   \param sco %SObject to be loaded.
+/*! \brief  Indicate the file where the %study has been saved
 */
-    void  Load (in SObject sco);
-
-/*! \brief Looking for or creating an attribute assigned to the %SObject
+    attribute wstring URL;
 
-    Allows to find or create an attribute of a specific type which is assigned to the object.
-    \param anObject        The %SObject corresponding to the attribute which is looked for.
-    \param aTypeOfAttribute     Type of the attribute.
+/*! \brief List of %SObjects
 
-<em>See \ref example1 for an example of this method usage in batchmode of %SALOME application.</em>
+    Returns the list of %SObjects which refers to %anObject.
 */
+    ListOfSObject FindDependances(in SObject anObject) raises(StudyInvalidReference);
 
-    GenericAttribute FindOrCreateAttribute(in  SObject        anObject,
-                                         in  string         aTypeOfAttribute) raises(LockProtection);
-
-/*! \brief Looking for an attribute assigned to a %SObject
-
-    Allows to find an attribute of a specific type which is assigned to the object.
-    \param anObject        The %SObject corresponding to the attribute which is looked for.
-    \param aTypeOfAttribute     Type of the attribute.
-    \param anAttribute       Where the attribute is placed if it's found.
-    \return True if it finds an attribute.
- */
-
-    boolean FindAttribute(in  SObject        anObject,
-                                 out GenericAttribute anAttribute,
-                                 in  string         aTypeOfAttribute);
-/*! \brief Deleting the attribute assigned to the %SObject
-
-    Removes the attribute of a specific type which is assigned to the object.
-    \param anObject        The %SObject corresponding to the attribute.
-    \param aTypeOfAttribute     Type of the attribute.
+/*! \brief The date of the last saving of the study
 
-<em>See \ref example17 for an example of this method usage in batchmode of %SALOME application.</em>
-*/
-    void RemoveAttribute(in  SObject        anObject,
-                         in  string         aTypeOfAttribute) raises(LockProtection);
-/*!
-    Adds a reference between %anObject and %theReferencedObject.
-    \param anObject The %SObject which will get a reference
-    \param theReferencedObject The %SObject having a reference
+    Returns the date of the last saving of study with format: "DD/MM/YYYY HH:MM"
 */
+    string GetLastModificationDate() raises(StudyInvalidReference);
+/*! \brief The list of modification dates of the study
 
-    void Addreference(in SObject anObject,
-                      in SObject theReferencedObject) ;
-
-/*!
-    Removes a reference from %anObject to another object.
-    \param anObject The %SObject which contains a reference
+    Returns the list of modification dates (without creation date) with format "DD/MM/YYYY HH:MM".
+      Note : the first modification begins the list.
 */
+    ListOfDates GetModificationsDate() raises(StudyInvalidReference);
+/*! \brief Object conversion.
 
-    void RemoveReference(in SObject anObject) ;
-
-/*!
-   Adds a directory in the %Study.
-   \param theName String parameter defining the name of the directory.
-
-<em>See \ref example23 for an example of this method usage in batchmode of %SALOME application.</em>
-
+    Converts an object into IOR.
+    \return    IOR
 */
-    void AddDirectory(in string theName) raises(LockProtection);
+    string ConvertObjectToIOR(in Object theObject);
+/*! \brief Object conversion.
 
-/*! \brief Identification of the %SObject's substructure.
+    Converts IOR into an object.
+    \return    An object
+*/
+    Object ConvertIORToObject(in string theIOR);
 
-      Identification of the %SObject's substructure by GUID.
+/*! \brief Get a new %UseCaseBuilder.
+*/
+    UseCaseBuilder  GetUseCaseBuilder() raises(StudyInvalidReference);
 
+/*! \brief Clear a study object
+*/
+    void Clear() raises(StudyInvalidReference);
 
-      \param anObject The %SObject which will be identified
-      \param theGUID GUID has the following format "00000000-0000-0000-0000-000000000000"
+/*! \brief Initialization a study object
 */
+    void Init() raises(StudyInvalidReference);
 
-     void SetGUID(in SObject anObject, in string theGUID) raises(LockProtection);
-/*!
-Searches for a definite %SObject with a definite GUID and returns True if it finds it.
+/*! \brief Open a study by url
 
-\param anObject A definite %SObject which will be identified
-\param theGUID GUID has the following format "00000000-0000-0000-0000-000000000000"
+    Reads and activates the structure of the study %Objects.
+    \param aStudyUrl The path to the study
 */
-     boolean IsGUID(in SObject anObject, in string theGUID);
+    boolean Open (in URLPath aStudyUrl) raises (SALOME::SALOME_Exception);
 
-/*! \brief Creation of a new command
+/*! \brief Check if study can be opened
 
-   Creates a new command which can contain several different actions.
+    Tries to open and read given url.
+    \param aStudyUrl The path to the study
+*/
+    boolean CanOpen (in URLPath aStudyUrl);
 
-<em>See \ref example3 for an example of this method usage in batchmode of %SALOME application.</em>
+/*! \brief Saving the study in a file (or files).
 
+    Saves a study.
+    \param theMultiFile If this parameter is True the study will be saved in several files.
+    \param theASCII If this parameter is True the study will be saved in ASCII format, otherwise in HDF format.
 */
-    void NewCommand(); // command management
-/*! \brief Execution of the command
+    boolean Save(in boolean theMultiFile, in boolean theASCII) raises(StudyInvalidReference);
 
-   Commits all actions declared within this command.
-
-   \exception LockProtection This exception is raised, when trying to perform this command a study, which is protected for modifications.
+/*! \brief Saving the study in a specified file (or files).
 
-<em>See \ref example16 for an example of this method usage in batchmode of %SALOME application.</em>
+    Saves the study in a specified file (or files).
+    \param aUrl The path to the definite file in which the study will be saved
+    \param theMultiFile If this parameter is True the study will be saved in several files.
+    \param theASCII If this parameter is True the study will be saved in ASCII format, otherwise in HDF format.
 
+<em>See \ref example1 for an example of this method usage in batchmode of %SALOME application.</em>
+*/
+    boolean  SaveAs(in URLPath aUrl, // if the file already exists
+                    in boolean theMultiFile, // overwrite (as option)
+                    in boolean theASCII)
+                    raises(StudyInvalidReference);
+/*!
+    Returns True, if the given %SObject can be copied to the clipboard.
+*/
+    boolean CanCopy(in SObject theObject) raises(StudyInvalidReference);
+/*!
+    Returns True, if the given %SObject is copied to the clipboard.
+    \param theObject The %SObject which will be copied
+*/
+    boolean Copy(in SObject theObject) raises(StudyInvalidReference);
+/*!
+    Returns True, if the object from the clipboard can be pasted to the given %SObject.
+    \param theObject The %SObject stored in the clipboard.
 */
-    void CommitCommand() raises(LockProtection); // command management
+    boolean CanPaste(in SObject theObject) raises(StudyInvalidReference);
 /*!
-    Returns True if at this moment there is a command under execution.
+    Returns the %SObject in which the object from the clipboard was pasted to.
+    \param theObject The %SObject which will be pasted
+    \exception SALOMEDS::StudyBuilder::LockProtection This exception is raised, when trying to paste
+    an object into a study, which is protected for modifications.
 */
-    boolean HasOpenCommand();
-/*! \brief Cancelation of the command
-
-    Cancels all actions declared within the command.
+    SObject Paste(in SObject theObject) raises (SALOMEDS::StudyBuilder::LockProtection);
 
-<em>See \ref example17 for an example of this method usage in batchmode of %SALOME application.</em>
+/*! \brief  Enable (if isEnabled = True)/disable automatic addition of new %SObjects to the use case.
 */
-    void AbortCommand(); // command management
-/*! \brief Undolimit
+    void EnableUseCaseAutoFilling(in boolean isEnabled) raises(StudyInvalidReference);
 
-    The number of actions which can be undone
+/*!
+    Functions for internal usage only
 */
-    attribute long  UndoLimit;
-/*! \brief Undo method
+    void AddPostponed(in string theIOR) raises(StudyInvalidReference);
 
-    Cancels all actions of the last command.
+    void AddCreatedPostponed(in string theIOR) raises(StudyInvalidReference);
 
-    \exception LockProtection This exception is raised, when trying to perform this command a study, which is protected for modifications.
+    void RemovePostponed(in long theUndoLimit) raises(StudyInvalidReference);
 
-<em>See \ref example16 for an example of this method usage in batchmode of %SALOME application.</em>
+    void UndoPostponed(in long theWay) raises(StudyInvalidReference);
+
+    boolean DumpStudy(in string thePath,
+                      in string theBaseName,
+                      in boolean isPublished,
+                      in boolean isMultiFile) raises(StudyInvalidReference);
 
+/*! \brief  Returns the folder of the python script which is currently dumped.
 */
-    void Undo() raises (LockProtection);
-/*! \brief Redo method
+    string GetDumpPath();
 
-    Redoes all actions of the last command.
+/*! \brief  Get an AttributeParameter used to store common parameters for given %theSavePoint.
 
-\exception LockProtection This exception is raised, when trying to perform this command a study, which is protected for modifications.
+    \param theID identifies a common parameters set (Example: "Interface Applicative")
+    \param theSavePoint is number of a set of parameters as there can be several sets
+*/
+    AttributeParameter GetCommonParameters(in string theID, in long theSavePoint) raises(StudyInvalidReference);
 
-<em>See \ref example16 for an example of this method usage in batchmode of %SALOME application.</em>
+/*! \brief  Get an AttributeParameter used to store parameters for given %theModuleName.
 
+    \param theID identifies a common parameters set (Example: "Interface Applicative")
+    \param theModuleName is a name of the module (Example: "Geometry")
+    \param theSavePoint is number of a set of parameters as there can be several sets
 */
-    void Redo() raises (LockProtection);
-/*!
-    Returns True if at this moment there are any actions which can be canceled.
+    AttributeParameter GetModuleParameters(in string theID, in string theModuleName, in long theSavePoint) raises(StudyInvalidReference);
 
-<em>See \ref example16 for an example of this method usage in batchmode of %SALOME application.</em>
 
+/*! \brief Get a default Python script to restore visual parameters for given %theModuleName.
+
+    \param theModuleName is a name of the module (Example: "Geometry")
+    \param indent is a string to use for script indentation
 */
-    boolean GetAvailableUndos();
+    string GetDefaultScript(in string theModuleName, in string indent) raises(StudyInvalidReference);
+
 /*!
-    Returns True if at this moment there are any actions which can be redone.
+    Private method, returns an implementation of this Study.
+   \param theHostname is a hostname of the caller
+   \param thePID is a process ID of the caller
+   \param isLocal is set True if the Study is launched locally with the caller
+*/
+    long long GetLocalImpl(in string theHostname, in long thePID, out boolean isLocal);
 
-<em>See \ref example3 for an example of this method usage in batchmode of %SALOME application.</em>
 
-*/
-    boolean GetAvailableRedos();
-/*!
-    Puts name attribute with the given string value to the given %SObject
+/*! \brief  Mark this Study as being locked by the given locker.
 
-    \param theSO Existing SObject to set name attribute.
-    \param theValue The value to be set to the name attribute.
+    The lock status can be checked by method IsStudyLocked
+    \param theLockerID identifies a locker of the study can be for ex. IOR of the engine that locks the study.
 */
-    void SetName(in SObject theSO, in string theValue) raises (LockProtection);
+    void SetStudyLock(in string theLockerID) raises(StudyInvalidReference);
 
-/*!
-    Puts comment attribute with the given string value to the given %SObject
+/*! \brief Indicate if the Study is locked
 
-    \param theSO Existing SObject to set comment attribute.
-    \param theValue The value to be set to the comment attribute.
+   Returns True if the Study was marked locked.
 */
-    void SetComment(in SObject theSO, in string theValue) raises (LockProtection);
+    boolean IsStudyLocked() raises(StudyInvalidReference);
 
-/*!
-    Puts IOR attribute with the given string value to the given %SObject
+/*! \brief  Mark this Study as being unlocked by the given locker.
 
-    \param theSO Existing SObject to set IOR attribute.
-    \param theValue The value to be set to the IOR attribute.
+     The lock status can be checked by method IsStudyLocked
+    \param theLockerID identifies a locker of the study can be for ex. IOR of the engine that unlocks the study.
 */
-    void SetIOR(in SObject theSO, in string theValue) raises (LockProtection);
-  };
-
-  //==========================================================================
-/*! \brief %Study Manager interface
+    void UnLockStudy(in string theLockerID) raises(StudyInvalidReference);
 
-    The purpose of the Manager is to manipulate the %Studies. You will find in this
-    interface the methods to create, open,
-    close, and save a %Study. Since a %SALOME session is multi-document, you will
-    also find the methods allowing to navigate
-    through the collection of studies present in a session.
+/*! \brief  Get the list of IDs of the Study's lockers.
 */
-  //==========================================================================
+    ListOfStrings GetLockerID() raises(StudyInvalidReference);
 
-  interface StudyManager
-  {
-/*!
-    Determines whether the server has already been loaded or not.
+/*! \brief  Create real variable with Name theVarName and value theValue
+
+    (or set if variable value into theValue already exists)
+    \param theVarName is a name of the variable
+    \param theVarName is a value of the variable.
 */
-    void ping();
+    void SetReal( in string theVarName, in double theValue ) raises(StudyInvalidReference);
 
-    void Shutdown();
+/*! \brief  Create integer variable with Name theVarName and value theValue
 
-/*!
-    Returns the PID of the server
+    (or set if variable value into theValue already exists)
+    \param theVarName is a name of the variable
+    \param theVarName is a value of the variable.
 */
-    long getPID();
+    void SetInteger( in string theVarName, in long theValue ) raises(StudyInvalidReference);
+/*! \brief  Create boolean variable with Name theVarName and value theValue
 
-/*!
-    Shutdown the StudyManager process.
+    (or set if variable value into theValue already exists)
+    \param theVarName is a name of the variable
+    \param theVarName is a value of the variable.
 */
-    oneway void ShutdownWithExit();
+    void SetBoolean( in string theVarName, in boolean theValue ) raises(StudyInvalidReference);
 
-/*! \brief Creation of a new study
+/*! \brief  Create string variable with Name theVarName and value theValue
 
-     Creates a new study with a definite name.
+    (or set if variable value into theValue already exists)
+    \param theVarName is a name of the variable
+    \param theVarName is a value of the variable.
+*/
+    void SetString( in string theVarName, in string theValue ) raises(StudyInvalidReference);
 
-     \param study_name String parameter defining the name of the study
+/*! \brief  Set current value as double for string variable
+*/
+    void SetStringAsDouble( in string theVarName, in double theValue ) raises(StudyInvalidReference);
 
-<em>See \ref example17 for an example of this method usage in batchmode of %SALOME application.</em>
+/*! \brief Get value of a real variable
 
+    \param theVarName is a name of the variable.
 */
-    Study NewStudy(in wstring study_name) raises (SALOME::SALOME_Exception);
-
-/*! \brief Open a study
+    double GetReal( in string theVarName ) raises(StudyInvalidReference);
 
-     Reads and activates the structure of the study %Objects.
-     \param aStudyUrl The path to the study
-    \warning This method doesn't activate the corba objects. Only a component can do it.
+/*! \brief Get value of an integer variable
 
-<em>See \ref example1 for an example of this method usage in batchmode of %SALOME application.</em>
+    \param theVarName is a name of the variable.
 */
-    Study Open (in URL aStudyUrl) raises (SALOME::SALOME_Exception);
+    long GetInteger( in string theVarName ) raises(StudyInvalidReference);
 
-/*! \brief Closing the study
+/*! \brief Get value of a boolean variable
 
-    Closes a study.
+    \param theVarName is a name of the variable.
 */
-    void  Close(in Study aStudy);
-/*! \brief Saving the study in a HDF file (or files).
+    boolean GetBoolean( in string theVarName ) raises(StudyInvalidReference);
 
-    Saves a study.
+/*! \brief Get value of a string variable
 
-    \param theMultiFile If this parameter is True the study will be saved in several files.
+    \param theVarName is a name of the variable.
+*/
+    string GetString( in string theVarName ) raises(StudyInvalidReference);
 
-<em>See \ref example19 for an example of this method usage in batchmode of %SALOME application.</em>
 
-*/
-    boolean  Save(in  Study aStudy, in boolean theMultiFile);
-/*! \brief Saving a study in a ASCII file (or files).
+/*! \brief Indicate if a variable is real
 
-    Saves a study in an ASCII format file (or files).
-    \param theMultiFile If this parameter is True the study will be saved in several files.
+    Return true if variable is real otherwise return false.
+    \param theVarName is a name of the variable.
 */
-    boolean  SaveASCII(in  Study aStudy, in boolean theMultiFile);
-/*! \brief Saving the study in a specified HDF file (or files).
+    boolean IsReal( in string theVarName ) raises(StudyInvalidReference);
 
-    Saves the study in a specified file (or files).
-    \param aUrl The path to the definite file in whcih the study will be saved
-    \param aStudy The study which will be saved
-    \param theMultiFile If this parameter is True the study will be saved in several files.
+/*! \brief Indicate if a variable is integer
 
-<em>See \ref example1 for an example of this method usage in batchmode of %SALOME application.</em>
+    Return true if variable is integer otherwise return false.
+    \param theVarName is a name of the variable.
 */
-    boolean  SaveAs(in URL   aUrl, // if the file already exists
-                in Study aStudy,
-                in boolean theMultiFile); // overwrite (as option)
-/*! \brief Saving the study in a specified ASCII file (or files).
+    boolean IsInteger( in string theVarName ) raises(StudyInvalidReference);
 
-    Saves the study in a specified ASCII file (or files).
+/*! \brief Indicate if a variable is boolean
 
-    \param aUrl The path to the definite file in whcih the study will be saved
-    \param aStudy The study which will be saved
-    \param theMultiFile If this parameter is True the study will be saved in several files.
+    Return true if variable is boolean otherwise return false.
+    \param theVarName is a name of the variable.
 */
-    boolean  SaveAsASCII(in URL   aUrl, // if the file already exists
-                      in Study aStudy,
-                      in boolean theMultiFile); // overwrite (as option)
+    boolean IsBoolean( in string theVarName ) raises(StudyInvalidReference);
 
+/*! \brief Indicate if a variable is string
 
-/*! \brief List of open studies.
+    Return true if variable is string otherwise return false.
+    \param theVarName is a name of the variable.
+*/
+    boolean IsString( in string theVarName ) raises(StudyInvalidReference);
 
-Gets the list of open studies
+/*! \brief Indicate if a variable exists in the study
 
-    \return A list of open studies in the current session.
+    Return true if variable exists in the study,
+    otherwise return false.
+    \param theVarName is a name of the variable.
 */
-    ListOfOpenStudies GetOpenStudies();
-
-/*! \brief Getting a particular %Study picked by name
+    boolean IsVariable( in string theVarName ) raises(StudyInvalidReference);
 
-    Activates a particular %Study
-    among the session collection picking it by name.
-    \param aStudyName The name of the study
+/*! \brief Get names of all variables from the study.
 */
-    Study GetStudyByName  (in URL aStudyName);
+    ListOfStrings GetVariableNames() raises(StudyInvalidReference);
+
+/*! \brief Remove a variable
 
-/*! \brief Getting a particular %Study picked by ID
+   Remove variable with the specified name from the study with substitution of its value.
 
-    Activates a particular %Study
-    among the session collection picking it by ID.
-    \param aStudyID The ID of the study
+   \param theVarName Name of the variable.
+   \return Status of operation.
 */
-    Study GetStudyByID  (in short aStudyID);
+    boolean RemoveVariable( in string theVarName ) raises(StudyInvalidReference);
 
-    // copy/paste methods
+/*! \brief Rename a variable
 
-/*!
-    Returns True, if the given %SObject can be copied to the clipboard.
-*/
-    boolean CanCopy(in SObject theObject);
-/*!
-    Returns True, if the given %SObject is copied to the clipboard.
-    \param theObject The %SObject which will be copied
-*/
-    boolean Copy(in SObject theObject);
-/*!
-    Returns True, if the object from the clipboard can be pasted to the given %SObject.
-    \param theObject The %SObject stored in the clipboard.
-*/
-    boolean CanPaste(in SObject theObject);
-/*!
-    Returns the %SObject in which the object from the clipboard was pasted to.
-    \param theObject The %SObject which will be pasted
-    \exception SALOMEDS::StudyBuilder::LockProtection This exception is raised, when trying to paste
-    an object into a study, which is protected for modifications.
+   Rename variable with the specified name within the study.
+
+   \param theVarName Name of the variable.
+   \param theNewVarName New name for the variable.
+   \return Status of operation.
 */
-    SObject Paste(in SObject theObject) raises (SALOMEDS::StudyBuilder::LockProtection);
+    boolean RenameVariable( in string theVarName, in string theNewVarName ) raises(StudyInvalidReference);
 
-/*! \brief Object conversion.
+/*! \brief Indicate whether variable is used
 
-    Converts an object into IOR.
-    \return    IOR
+   Check that variable is used in the study.
+
+   \param theVarName Name of the variable.
+   \return Variable usage.
 */
-    string ConvertObjectToIOR(in Object theObject);
-/*! \brief Object conversion.
+    boolean IsVariableUsed( in string theVarName ) raises(StudyInvalidReference);
 
-    Converts IOR into an object.
-    \return    An object
+/*! \brief Parse variables used for object creation
+
+   \param string with variables, separated by special symbol.
+   \return Variables list.
 */
-    Object ConvertIORToObject(in string theIOR);
+    ListOfListOfStrings ParseVariables( in string theVars ) raises(StudyInvalidReference);
 
 /*!
-    Private method, returns an implementation of this StudyManager.
-   \param theHostname is a hostname of the caller
-   \param thePID is a process ID of the caller
-   \param isLocal is set True if the StudyManager is launched locally with the caller
+     Attach an observer to the Study
+
+    \param theObserver observer being attached
+    \param modify when \c true, observer receives any object's modification events;
+           otherwise observer receives object's creation events only
 */
-    long long GetLocalImpl(in string theHostname, in long thePID, out boolean isLocal);
+     void attach(in SALOMEDS::Observer theObserver, in boolean modify);
+/*!
+     Detach an observer from the Study
 
+    \param theObserver observer to be detached
+*/
+     void detach(in SALOMEDS::Observer theObserver);
   };
 
-
   //==========================================================================
 /*! \brief %SObject interface
 
@@ -1081,11 +938,6 @@ Gets the list of open studies
 */
     ListOfAttributes     GetAllAttributes();
 
-/*! Gets the study of a given %SObject.
-    \return The study containing the given %SObject.
-*/
-    Study GetStudy();
-
 /*! Gets the CORBA object by its own IOR attribute.
     Returns nil, if can't.
     \return The CORBA object of the %SObject.
@@ -1314,6 +1166,10 @@ Activates the %UseCaseIterator.
    Adds a child object <VAR>theObject</VAR> to the given father <VAR>theFather</VAR> object in the use case.
 */
     boolean AppendTo(in SObject theFather, in SObject theObject);
+/*!
+    Return index of a child among father children
+*/
+    long GetIndexInFather(in SObject theFather, in SObject theObject);
 /*!
     Inserts in the use case the object <VAR>theFirst</VAR> before the object <VAR>theNext</VAR>.
 */
@@ -1374,8 +1230,8 @@ This class represents a common tool for all components integrated into SALOME ap
 can be called by any component and which provide the following functionality:
 <ul>
     <li> publishing in the study of the objects created by a definite component
-    <li> saving/loading of the data created by a definite component. These methods are called by the StudyManager when loading/saving a study containing the data created by a definite component.
-    <li> transforming of the transient references into persistant references (or vice versa) of the SObjects when saving (or loading) a study
+    <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.
+    <li> transforming of the transient references into persistent references (or vice versa) of the SObjects when saving (or loading) a study
     <li> copy/paste common functionality. These methods can be called by any component in order to copy/paste its object created in the study
 </ul>
 
@@ -1386,7 +1242,7 @@ can be called by any component and which provide the following functionality:
 
     /*! \brief Saving the data produced by a definite component.
 
-        This method is called by the StudyManager when saving a study.
+        This method is called when saving a study.
        \param theComponent    %SComponent corresponding to this Component
        \param theURL  The path to the file in which the data will be saved.
        \param isMultiFile  If the value of this boolean parameter is True, the data will be saved in several files.
@@ -1401,7 +1257,7 @@ can be called by any component and which provide the following functionality:
 
 /*! \brief Saving the data in ASCII format produced by a definite component.
 
-        This method is called by the StudyManager when saving a study in ASCII format.
+        This method is called when saving a study in ASCII format.
        \param theComponent    %SComponent corresponding to this Component
        \param theURL  The path to the file in which the data will be saved.
        \param isMultiFile  If the value of this boolean parameter is True, the data will be saved in several files.
@@ -1414,7 +1270,7 @@ can be called by any component and which provide the following functionality:
 
     /*! \brief Loading the data.
 
-       This method is called by the StudyManager when opening a study.
+       This method is called when opening a study.
        \param theComponent      %SComponent corresponding to this Component
        \param theStream   The file which contains all data saved by the component on Save method
        \param isMultiFile  If the value of this boolean parameter is True, the data will be loaded from several files
@@ -1425,7 +1281,7 @@ can be called by any component and which provide the following functionality:
 
     /*! \brief Loading the data from files in ASCII format.
 
-       This method is called by the StudyManager when opening a study.
+       This method is called when opening a study.
        \param theComponent      %SComponent corresponding to this Component
        \param theStream   The file which contains all data saved by the component on Save method
        \param isMultiFile  If the value of this boolean parameter is True, the data will be loaded from several files
@@ -1436,7 +1292,7 @@ can be called by any component and which provide the following functionality:
 
     /*! \brief Closing of the study
 
-      This method Close is called by the StudyManager when closing a study.
+      This method Close is called when closing a study.
     \param aSComponent The according %SComponent
      */
 
@@ -1500,7 +1356,6 @@ study is open, these references are transformed into persintent IORs.
 /*! \brief Publishing in the study
 
    Publishes the given object in the %study, using the algorithm of this component.
-    \param theStudy     The %study in which the object is published
     \param theSObject     If this parameter is null the object is published for the first time. Otherwise
     this parameter should contain a reference to the object published earlier
     \param theObject      The object which is published
@@ -1509,7 +1364,7 @@ study is open, these references are transformed into persintent IORs.
 
     \return The published %SObject.
 */
-    SObject PublishInStudy(in Study theStudy, in SObject theSObject, in Object theObject, in string theName);
+    SObject PublishInStudy(in SObject theSObject, in Object theObject, in string theName);
 
     // copy/paste methods