Salome HOME
[EDF29576] : flush the latest version of monitoring before shutting down
[modules/kernel.git] / idl / SALOME_ModuleCatalog.idl
1 // Copyright (C) 2007-2024  CEA, EDF, 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   : SALOME_ModuleCatalog.idl
24 //  Author : Estelle Deville
25 //  $Header$
26 //
27 /*! \file SALOME_ModuleCatalog.idl \brief interfaces used for  
28   getting information from module catalog in %SALOME application
29 */
30
31 /*!  \brief
32 The main package of interfaces used for the module catalog in %SALOME application.
33
34 Module catalog allows to manage components of %SALOME application, to call specified in the
35 xml files interfaces with the help of AComponent interface.
36 */
37 module SALOME_ModuleCatalog
38 {
39 /*! \brief This enumeration contains a current set of definitions of the components integrated
40 into %SALOME application.
41 */
42   enum ComponentType {  GEOM,  /*!<Module %GEOM */
43                         MESH,  /*!<Module %MESH */
44                          Med,  /*!<Module %Med*/
45                       SOLVER,  /*!<Module of %SOLVER type */
46                         DATA,  /*!<Module %DATA */
47                         VISU,  /*!<Module %VISU */
48                       SUPERV,  /*!<Module %SUPERVISION */
49                        OTHER   /*!<Any other type of module */
50                      } ;
51 //! This struct contains fields defining the parameter of the service.
52   struct ServicesParameter
53   {
54     string Parametertype; /*!<Parameter type name.*/
55     string Parametername; /*!<Parameter name.*/
56   } ;
57
58 //! enumeration to define datastream ports dependency
59   enum DataStreamDependency {
60     DATASTREAM_UNDEFINED, /*!< dependency not defined */
61     DATASTREAM_TEMPORAL, /*!< time dependency */
62     DATASTREAM_ITERATIVE /*!< iterative dependency */
63   } ;
64
65 //! struct to define datastream ports 
66   struct ServicesDataStreamParameter
67   {
68     string Parametertype;                     /*!<Parameter type name.*/
69     string Parametername;                     /*!<Parameter name.*/
70     DataStreamDependency Parameterdependency; /*!<Temporal or iterative dependency.*/
71   } ;
72
73 //!  The list of the parameters of service.
74   typedef sequence<ServicesParameter> ListOfServicesParameter;
75 //!  The list of datastream parameters of service.
76   typedef sequence<ServicesDataStreamParameter> ListOfServicesDataStreamParameter;
77
78 //!  a string list
79   typedef sequence<string> ListOfString;
80
81 //! enumeration to define data types used by services
82   enum TypeKind 
83   {
84     NONE     ,
85     Dble   , /*!< a double */
86     Int      , /*!< an integer  */
87     Str   , /*!< a string */
88     Bool     , /*!< a boolean */
89     Objref   , /*!< an object reference */
90     Seq , /*!< a sequence of a content type */
91     Array    , /*!< an array */
92     Struc  /*!< a structure with named members */
93   };
94
95 //! struct to define members of a Struc TypeKind
96   struct MemberDefinition
97   {
98     string name; /*!< Member name */
99     string type; /*!< Member type name */
100   };
101 //! List of member definitions in a structure
102   typedef sequence<MemberDefinition> ListOfMemberDefinition;
103
104 //! Struct to get the definition of types used in Salome catalogs
105   struct TypeDefinition
106   {
107     string name; /*!< Type name*/
108     TypeKind kind; /*!< Type kind.*/
109     string id; /*!< id (if needed) */
110     string content; /*!< Content type (if needed) */
111     ListOfString bases; /*!< base types (if needed) */
112     ListOfMemberDefinition members; /*!< Member types (if needed) */
113   };
114
115 //! list of type definitions
116   typedef sequence<TypeDefinition> ListOfTypeDefinition;
117
118 //! This struct contains fields defining each service.
119   struct Service
120   {
121     string                            ServiceName; /*!<Name of the service.*/
122     ListOfServicesParameter           ServiceinParameter; /*!< List of input parameters of the services.*/
123     ListOfServicesParameter           ServiceoutParameter; /*!< List of output parameters of the services.*/
124     ListOfServicesDataStreamParameter ServiceinDataStreamParameter; /*!< List of input parameters of the services.*/
125     ListOfServicesDataStreamParameter ServiceoutDataStreamParameter; /*!< List of output parameters of the services.*/
126     boolean                           Servicebydefault; /*!<True if the service is taken with its default fields.*/
127     boolean                           TypeOfNode; /*!<True is the service is a factory node. Otherwise, it's a compute node.*/
128   } ;
129 //!  List of services of the interface.
130   typedef sequence<Service> ListOfInterfaceService;
131 //!  List of services.
132   typedef sequence<string> ListOfServices ;
133 //! This struct contains fields defining each interface.
134   struct DefinitionInterface
135   {
136     string                 interfacename ; /*!<Name of the interface.*/
137     ListOfInterfaceService interfaceservicelist ; /*!<List of services of the interface.*/
138   } ;
139 //!  List of interface definitions.
140   typedef sequence<DefinitionInterface> ListOfDefInterface ;
141 //!  List of interface names.
142   typedef sequence<string> ListOfInterfaces ;
143
144 /*! \brief PathPrefix : association of a machine name and
145 a path to a component
146 */
147   struct PathPrefix {
148     string             machine;
149     string             path;
150   };
151
152 //!  List of path prefixes
153   typedef sequence<PathPrefix> PathPrefixes;
154
155 //! Component implementation type
156   enum ImplType {
157     SO,                       /*!< component implemented as a dynamic library loadable with dlopen */
158     PY,                       /*!< component implemented as a python module loadable with import */
159     EXE,                      /*!< component implemented as an executable */
160     CEXE                      /*!< component to be loaded by a container which executable is given in the catalog */
161   } ;
162
163 //! Description of a component
164   struct ComponentDef
165   {
166     ComponentType      type;
167     string             name;
168     string             username;
169     ImplType           implementationType;
170     string             implname;
171     string             icon;
172     string             constraint;
173     ListOfDefInterface interfaces;
174     PathPrefixes       paths;
175   };
176
177 //!  List of component names.
178   typedef sequence<string> ListOfComponents ;
179 //!  List of computer names.
180   typedef sequence<string> ListOfComputers ;
181 //! This struct contains GUI elements used for representation of the module in %IAPP component.
182   struct IAPP_Affich
183   {
184     string modulename;     /*!<Name of the module.*/
185     string moduleusername; /*!<UserName of the module.*/
186     string moduleicone;    /*!<Icone representing the module.*/
187     string moduleversion;  /*!<Version of the module.*/
188     string modulecomment;  /*!<Comment to the module.*/
189   };
190 /*! \brief  List of pair GUI elements (component name, component icone)
191
192  used for representation of the module in %IAPP component.
193 */
194   typedef sequence<IAPP_Affich> ListOfIAPP_Affich ;
195
196 //! This exception is raised when a %component, a %service or a %pathPrefix is not found.
197   exception NotFound
198   {
199     string what ; /*!<Indicates if it's a %component, a %service or a % pathPrefix.*/
200   } ;
201
202   /*! \brief  This interface provides the common functionality information of corresponding component.
203
204    Information is loaded from specific xml files.
205   */
206   interface Acomponent
207   {
208   /*! \brief  Get the list of interface names of the component
209
210     \return a list of interfaces of the component 
211   */
212     ListOfInterfaces GetInterfaceList() ;
213
214   /*! \brief Get an interface of the component
215
216     \note <BR>If the specified interface doesn't exist, Notfound exception is thrown
217     \param interfacename  Name of the interface 
218     \return Required interface
219   */
220     DefinitionInterface GetInterface(in string interfacename) raises(NotFound);
221
222  /*! \brief  Get the list of service names of an interface belonging to the component.
223
224    \note <BR>If the specified interface doesn't exist, Notfound exception is thrown.
225    \param interfacename Name of the interface 
226    \return List of services of the required interface
227  */
228     ListOfServices GetServiceList(in string interfacename) raises(NotFound);
229
230     
231  /*! \brief  Get a service of an interface of the component.
232
233    \note <BR>If the required service or the specified interface don't exist, Notfound exception is thrown.
234    \param interfacename Name of the interface
235    \param servicename Name of the service
236    \return Required service
237  */
238     Service GetService(in string interfacename, 
239                        in string servicename) raises(NotFound);
240
241 /*! \brief Get the default service of an interface of the component.
242
243    \note <BR>If the required service or the specified interface don't exist, Notfound exception is thrown.
244    \param interfacename Name of the interface
245    \return Required service
246  */
247     Service GetDefaultService(in string interfacename) raises(NotFound);
248
249  /*!  \brief Get the prefix path of the computer containing the %component.
250
251    \note <BR>If the required computer doesn't exist, Notfound exception is thrown
252    \param machinename Name of the machine 
253    \return Prefix path
254  */
255     string GetPathPrefix(in string machinename) raises(NotFound);
256
257 /*! \brief Get the constraint affected to the component 
258
259     constraint to be resolved by LifeCycle for the computer choice
260 */
261     readonly attribute string constraint ;
262
263 /*! \brief Get the component name
264 */
265     readonly attribute string componentname;
266
267 /*!  \brief Get the user name of the component
268 */
269     readonly attribute string componentusername;
270
271 /*!  \brief Get the type of the component
272 */
273     readonly attribute ComponentType component_type ;
274
275 /*! \brief Get the icone of the component (for IAPP)
276 */
277     readonly attribute string component_icone;
278
279 /*! \brief Get the implementation type of the component 
280
281  C++ (dyn lib), Python (module) or executable 
282 */
283     readonly attribute ImplType implementation_type;
284 /*! \brief Get the implementation name of the component 
285
286  It's the name of the dyn lib or the python module or the executable
287 if the default naming scheme is not convenient.
288 */
289     readonly attribute string implementation_name;
290   } ;
291
292 /*! \brief %Module catalog interface
293
294 Interface to get information about components from the module catalog in %SALOME application.
295 */
296   interface ModuleCatalog
297   {
298 /*!  \brief ping the ModuleCatalog server
299 */
300     void ping();
301
302 /*!  \brief Returns the PID of the ModuleCatalog server
303 */
304     long getPID();
305
306 /*! \brief  Shutdown the ModuleCatalog server
307 */    
308     oneway void ShutdownWithExit();
309
310 /*!  \brief Get the types of the catalog
311  */   
312     ListOfTypeDefinition GetTypes();
313
314 /*! \brief Get a list of computer names of the catalog 
315 */   
316     ListOfComputers GetComputerList();
317
318 //!  Get the %PathPrefix of a computer
319     string GetPathPrefix(in string machinename) raises(NotFound);
320
321 //! Get a list of component names of the catalog 
322     ListOfComponents GetComponentList();
323
324 /*! \brief  Get a list of pair GUI elements (component name, component icone) 
325 used for representation of the module in %IAPP component.
326 */
327     ListOfIAPP_Affich GetComponentIconeList();
328
329 /*! \brief  Get a list of component names of a particular type, which belong to this catalog.
330 */  
331     ListOfComponents GetTypedComponentList(in ComponentType _component_type);
332
333 /*! \brief Get one component of the catalog.
334 */
335     Acomponent GetComponent(in string componentname) raises(NotFound);
336
337 /*! \brief Get the description of a component of the catalog.
338 */
339     ComponentDef GetComponentInfo(in string componentName) raises(NotFound);
340
341 /*! \brief  Read a xml file and import new components from this file.
342
343 New components replace existing components with the same name.
344 */
345     void ImportXmlCatalogFile(in string filename) raises(NotFound);
346
347 /*! \brief  Shutdown the module catalog server
348 */
349     void shutdown();
350   } ;
351 };