Salome HOME
Implementation of proxy mecanism into KERNEL/YACS
[modules/kernel.git] / idl / SALOME_ModuleCatalog.idl
index 3f6bfaefbc6225171d08e8541f8b038b43157fba..22aacbc1c5926227b9bc4672a8be4311e402e20c 100644 (file)
@@ -1,40 +1,43 @@
-//  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
-//  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS 
-// 
-//  This library is free software; you can redistribute it and/or 
-//  modify it under the terms of the GNU Lesser General Public 
-//  License as published by the Free Software Foundation; either 
-//  version 2.1 of the License. 
-// 
-//  This library is distributed in the hope that it will be useful, 
-//  but WITHOUT ANY WARRANTY; without even the implied warranty of 
-//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU 
-//  Lesser General Public License for more details. 
-// 
-//  You should have received a copy of the GNU Lesser General Public 
-//  License along with this library; if not, write to the Free Software 
-//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA 
-// 
-//  See http://www.opencascade.org/SALOME/ or email : webmaster.salome@opencascade.org 
+// Copyright (C) 2007-2022  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
 //
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
 //
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
 //  File   : SALOME_ModuleCatalog.idl
 //  Author : Estelle Deville
 //  $Header$
-
-/*! \file SALOME_ModuleCatalog.idl This file conatins a set of interfaces used for  
-  creation of the catalog of components in %SALOME application
+//
+/*! \file SALOME_ModuleCatalog.idl \brief interfaces used for  
+  getting information from module catalog in %SALOME application
 */
 
-/*! \ingroup Kernel 
-The main package of interfaces used for creation of the module catalog in %SALOME application.
+/*!  \brief
+The main package of interfaces used for the module catalog in %SALOME application.
+
+Module catalog allows to manage components of %SALOME application, to call specified in the
+xml files interfaces with the help of AComponent interface.
 */
 module SALOME_ModuleCatalog
 {
-  // Type Definitions
-/*! 
-This enumeration contains a set of definitions of %SALOME modules.
+/*! \brief This enumeration contains a current set of definitions of the components integrated
+into %SALOME application.
 */
   enum ComponentType {  GEOM,  /*!<Module %GEOM */
                         MESH,  /*!<Module %MESH */
@@ -45,107 +48,179 @@ This enumeration contains a set of definitions of %SALOME modules.
                       SUPERV,  /*!<Module %SUPERVISION */
                        OTHER   /*!<Any other type of module */
                      } ;
-/*! 
-This struct contains fields defining the parameters of the services.
-*/
-
+//! This struct contains fields defining the parameter of the service.
   struct ServicesParameter
   {
-    string Parametertype; /*!<Type of the parameter.*/
-    string Parametername; /*!<Name of the parameter.*/
+    string Parametertype; /*!<Parameter type name.*/
+    string Parametername; /*!<Parameter name.*/
+  } ;
+
+//! enumeration to define datastream ports dependency
+  enum DataStreamDependency {
+    DATASTREAM_UNDEFINED, /*!< dependency not defined */
+    DATASTREAM_TEMPORAL, /*!< time dependency */
+    DATASTREAM_ITERATIVE /*!< iterative dependency */
   } ;
 
+//! struct to define datastream ports 
+  struct ServicesDataStreamParameter
+  {
+    string Parametertype;                     /*!<Parameter type name.*/
+    string Parametername;                     /*!<Parameter name.*/
+    DataStreamDependency Parameterdependency; /*!<Temporal or iterative dependency.*/
+  } ;
+
+//!  The list of the parameters of service.
   typedef sequence<ServicesParameter> ListOfServicesParameter;
-/*! 
-This struct contains fields completely defining each service.
-*/
+//!  The list of datastream parameters of service.
+  typedef sequence<ServicesDataStreamParameter> ListOfServicesDataStreamParameter;
+
+//!  a string list
+  typedef sequence<string> ListOfString;
 
+//! enumeration to define data types used by services
+  enum TypeKind 
+  {
+    NONE     ,
+    Dble   , /*!< a double */
+    Int      , /*!< an integer  */
+    Str   , /*!< a string */
+    Bool     , /*!< a boolean */
+    Objref   , /*!< an object reference */
+    Seq , /*!< a sequence of a content type */
+    Array    , /*!< an array */
+    Struc  /*!< a structure with named members */
+  };
+
+//! struct to define members of a Struc TypeKind
+  struct MemberDefinition
+  {
+    string name; /*!< Member name */
+    string type; /*!< Member type name */
+  };
+//! List of member definitions in a structure
+  typedef sequence<MemberDefinition> ListOfMemberDefinition;
+
+//! Struct to get the definition of types used in Salome catalogs
+  struct TypeDefinition
+  {
+    string name; /*!< Type name*/
+    TypeKind kind; /*!< Type kind.*/
+    string id; /*!< id (if needed) */
+    string content; /*!< Content type (if needed) */
+    ListOfString bases; /*!< base types (if needed) */
+    ListOfMemberDefinition members; /*!< Member types (if needed) */
+  };
+
+//! list of type definitions
+  typedef sequence<TypeDefinition> ListOfTypeDefinition;
+
+//! This struct contains fields defining each service.
   struct Service
   {
-    string                  ServiceName; /*!<Name of the service.*/
-    ListOfServicesParameter ServiceinParameter; /*!< List of input parameters of the services.*/
-    ListOfServicesParameter ServiceoutParameter; /*!< List of input parameters of the services.*/
-    boolean                 Servicebydefault; /*!<True if the service is taken with its defult fields.*/
+    string                            ServiceName; /*!<Name of the service.*/
+    ListOfServicesParameter           ServiceinParameter; /*!< List of input parameters of the services.*/
+    ListOfServicesParameter           ServiceoutParameter; /*!< List of output parameters of the services.*/
+    ListOfServicesDataStreamParameter ServiceinDataStreamParameter; /*!< List of input parameters of the services.*/
+    ListOfServicesDataStreamParameter ServiceoutDataStreamParameter; /*!< List of output parameters of the services.*/
+    boolean                           Servicebydefault; /*!<True if the service is taken with its default fields.*/
+    boolean                           TypeOfNode; /*!<True is the service is a factory node. Otherwise, it's a compute node.*/
   } ;
-/*! 
-List of services of the interface.
-*/
+//!  List of services of the interface.
   typedef sequence<Service> ListOfInterfaceService;
-/*! 
-List of services.
-*/
+//!  List of services.
   typedef sequence<string> ListOfServices ;
-/*! 
-This struct contains fields defining each interface.
-*/
+//! This struct contains fields defining each interface.
   struct DefinitionInterface
   {
     string                 interfacename ; /*!<Name of the interface.*/
     ListOfInterfaceService interfaceservicelist ; /*!<List of services of the interface.*/
   } ;
-/*! 
-List of interface definitions.
-*/
+//!  List of interface definitions.
   typedef sequence<DefinitionInterface> ListOfDefInterface ;
-/*! 
-List of interfaces.
-*/
+//!  List of interface names.
   typedef sequence<string> ListOfInterfaces ;
-/*! 
-List of names of components.
+
+/*! \brief PathPrefix : association of a machine name and
+a path to a component
 */
+  struct PathPrefix {
+    string             machine;
+    string             path;
+  };
+
+//!  List of path prefixes
+  typedef sequence<PathPrefix> PathPrefixes;
+
+//! Component implementation type
+  enum ImplType {
+    SO,                       /*!< component implemented as a dynamic library loadable with dlopen */
+    PY,                       /*!< component implemented as a python module loadable with import */
+    EXE,                      /*!< component implemented as an executable */
+    CEXE                      /*!< component to be loaded by a container which executable is given in the catalog */
+  } ;
+
+//! Description of a component
+  struct ComponentDef
+  {
+    ComponentType      type;
+    string             name;
+    string             username;
+    ImplType           implementationType;
+    string             implname;
+    string             icon;
+    string             constraint;
+    ListOfDefInterface interfaces;
+    PathPrefixes       paths;
+  };
+
+//!  List of component names.
   typedef sequence<string> ListOfComponents ;
-/*! 
-List of names of computers.
-*/
+//!  List of computer names.
   typedef sequence<string> ListOfComputers ;
-/*! 
-This struct contains GUI elements used for representation of the module in %IAPP component.
-*/
+//! This struct contains GUI elements used for representation of the module in %IAPP component.
   struct IAPP_Affich
   {
-    string modulename; /*!<Name of the module.*/
+    string modulename;     /*!<Name of the module.*/
     string moduleusername; /*!<UserName of the module.*/
-    string moduleicone; /*!<Icone representing the module.*/
+    string moduleicone;    /*!<Icone representing the module.*/
+    string moduleversion;  /*!<Version of the module.*/
+    string modulecomment;  /*!<Comment to the module.*/
   };
-/*!
-List of pair GUI elements (component name, component icone)
+/*! \brief  List of pair GUI elements (component name, component icone)
+
  used for representation of the module in %IAPP component.
 */
   typedef sequence<IAPP_Affich> ListOfIAPP_Affich ;
 
-/*! 
- This exception is raised when a %component, a %service or a % pathPrefix is not found.
-*/
+//! This exception is raised when a %component, a %service or a %pathPrefix is not found.
   exception NotFound
   {
     string what ; /*!<Indicates if it's a %component, a %service or a % pathPrefix.*/
   } ;
 
+  /*! \brief  This interface provides the common functionality information of corresponding component.
+
+   Information is loaded from specific xml files.
+  */
   interface Acomponent
   {
-    // GetInterfaceList : operation to get a list of the interfaces name of
-    //                    a component
-  /*!
-   Gets a list of names of interfaces of the component
+  /*! \brief  Get the list of interface names of the component
+
     \return a list of interfaces of the component 
   */
     ListOfInterfaces GetInterfaceList() ;
 
-    // GetInterface : operation to get one interface of a component
-  
-  /*! 
-    Gets a definite interface of the component
+  /*! \brief Get an interface of the component
+
     \note <BR>If the specified interface doesn't exist, Notfound exception is thrown
     \param interfacename  Name of the interface 
     \return Required interface
   */
     DefinitionInterface GetInterface(in string interfacename) raises(NotFound);
 
-    // GetServiceList : operation to get a list of the services name of
-    //                  an interface of a component
- /*! 
-   Gets a list of names of services of a definite interface belonging to the component.
+ /*! \brief  Get the list of service names of an interface belonging to the component.
+
    \note <BR>If the specified interface doesn't exist, Notfound exception is thrown.
    \param interfacename Name of the interface 
    \return List of services of the required interface
@@ -153,108 +228,124 @@ List of pair GUI elements (component name, component icone)
     ListOfServices GetServiceList(in string interfacename) raises(NotFound);
 
     
-    // GetService : operation to get one service of an interface of a component
-  
- /*! 
-   Gets a definite service of an interface of the component.
+ /*! \brief  Get a service of an interface of the component.
+
    \note <BR>If the required service or the specified interface don't exist, Notfound exception is thrown.
    \param interfacename Name of the interface
    \param servicename Name of the service
    \return Required service
  */
-
     Service GetService(in string interfacename, 
                       in string servicename) raises(NotFound);
 
-    // GetDefaultService : operation to get the default service
-    //                     of an interface of a component
-/*! 
-   Gets the default service of an interface of the component.
+/*! \brief Get the default service of an interface of the component.
+
    \note <BR>If the required service or the specified interface don't exist, Notfound exception is thrown.
    \param interfacename Name of the interface
    \return Required service
  */
-
     Service GetDefaultService(in string interfacename) raises(NotFound);
 
-    // GetPathPrefix : operation to get the PathPrefix of a computer
- /*!  
-   Gets the prefix path of the computer containing the %component.
+ /*!  \brief Get the prefix path of the computer containing the %component.
+
    \note <BR>If the required computer doesn't exist, Notfound exception is thrown
    \param machinename Name of the machine 
    \return Prefix path
  */
-
     string GetPathPrefix(in string machinename) raises(NotFound);
 
-/*! 
-    Sets/gets the constraint affected to the component 
-    (to be resolved by LifeCycle for the computer choice)
+/*! \brief Get the constraint affected to the component 
+
+    constraint to be resolved by LifeCycle for the computer choice
 */
     readonly attribute string constraint ;
 
-/*! 
-Sets/gets the name of the component
+/*! \brief Get the component name
 */
     readonly attribute string componentname;
 
-/*! 
-Sets/gets the user name of the component
+/*!  \brief Get the user name of the component
 */
     readonly attribute string componentusername;
 
-/*! 
-Defines whether the component can be multistudy or not
-*/
-    readonly attribute boolean multistudy;
-
-/*! 
-Defines the type of the component
+/*!  \brief Get the type of the component
 */
     readonly attribute ComponentType component_type ;
 
-/*! 
-Sets/gets the icone of the component (for IAPP)
+/*! \brief Get the icone of the component (for IAPP)
 */
     readonly attribute string component_icone;
+
+/*! \brief Get the implementation type of the component 
+
+ C++ (dyn lib), Python (module) or executable 
+*/
+    readonly attribute ImplType implementation_type;
+/*! \brief Get the implementation name of the component 
+
+ It's the name of the dyn lib or the python module or the executable
+if the default naming scheme is not convenient.
+*/
+    readonly attribute string implementation_name;
   } ;
+
 /*! \brief %Module catalog interface
 
-This interface is used for creation of the module catalog in %SALOME application.
+Interface to get information about components from the module catalog in %SALOME application.
 */
   interface ModuleCatalog
   {
+/*!  \brief ping the ModuleCatalog server
+*/
     void ping();
 
-/*! 
- Gets a list of names of computers of the catalog 
+/*!  \brief Returns the PID of the ModuleCatalog server
+*/
+    long getPID();
+
+/*! \brief  Shutdown the ModuleCatalog server
+*/    
+    oneway void ShutdownWithExit();
+
+/*!  \brief Get the types of the catalog
+ */   
+    ListOfTypeDefinition GetTypes();
+
+/*! \brief Get a list of computer names of the catalog 
 */   
     ListOfComputers GetComputerList();
 
-/*! 
-Gets the %PathPrefix of a computer
-*/
+//!  Get the %PathPrefix of a computer
     string GetPathPrefix(in string machinename) raises(NotFound);
-/*! 
- Gets a list of names of components of the catalog 
-*/   
+
+//! Get a list of component names of the catalog 
     ListOfComponents GetComponentList();
-/*! 
-Gets a list of pair GUI elements (component name, component icone) 
+
+/*! \brief  Get a list of pair GUI elements (component name, component icone) 
 used for representation of the module in %IAPP component.
 */
-
     ListOfIAPP_Affich GetComponentIconeList();
-/*! 
-Gets a list of names of components of a particular type, which belong to this catalog.
+
+/*! \brief  Get a list of component names of a particular type, which belong to this catalog.
 */  
-    // GetComponentList : operation to get a list of the components name of
-    //                    a particular type of the catalog   
     ListOfComponents GetTypedComponentList(in ComponentType _component_type);
 
-/*! 
-Gets one component of the catalog.
+/*! \brief Get one component of the catalog.
 */
     Acomponent GetComponent(in string componentname) raises(NotFound);
+
+/*! \brief Get the description of a component of the catalog.
+*/
+    ComponentDef GetComponentInfo(in string componentName) raises(NotFound);
+
+/*! \brief  Read a xml file and import new components from this file.
+
+New components replace existing components with the same name.
+*/
+    void ImportXmlCatalogFile(in string filename) raises(NotFound);
+
+/*! \brief  Shutdown the module catalog server
+*/
+    void shutdown();
   } ;
 };