Salome HOME
Revert "Synchronize adm files"
[modules/yacs.git] / src / runtime / SalomeProc.cxx
1 // Copyright (C) 2006-2014  CEA/DEN, EDF R&D
2 //
3 // This library is free software; you can redistribute it and/or
4 // modify it under the terms of the GNU Lesser General Public
5 // License as published by the Free Software Foundation; either
6 // version 2.1 of the License, or (at your option) any later version.
7 //
8 // This library is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
11 // Lesser General Public License for more details.
12 //
13 // You should have received a copy of the GNU Lesser General Public
14 // License along with this library; if not, write to the Free Software
15 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
16 //
17 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
18 //
19
20 #include <Python.h>
21 #include "SalomeProc.hxx"
22 #include "Runtime.hxx"
23 #include "TypeCode.hxx"
24 #include "Container.hxx"
25 #include "VisitorSaveSalomeSchema.hxx"
26 #include "Basics_Utils.hxx"
27 #include <iostream>
28 #include <cstdlib>
29
30 using namespace YACS::ENGINE;
31
32 SalomeProc::SalomeProc(const std::string& name):Proc(name)
33 {
34   // create default container with some default properties
35   Container* cont=createContainer("DefaultContainer");
36   cont->setProperty("name", "localhost");
37   cont->setProperty("container_name","FactoryServer");
38   cont->decrRef();
39 }
40
41 TypeCode * SalomeProc::createInterfaceTc(const std::string& id, const std::string& name,
42                                    std::list<TypeCodeObjref *> ltc)
43 {
44   std::string myName;
45   if(id == "") myName = "IDL:" + name + ":1.0";
46   else myName = id;
47   return Proc::createInterfaceTc(myName,name,ltc);
48 }
49 TypeCode * SalomeProc::createStructTc(const std::string& id, const std::string& name)
50 {
51   std::string myName;
52   if(id == "") myName = "IDL:" + name + ":1.0";
53   else myName = id;
54   return Proc::createStructTc(myName,name);
55 }
56
57 SalomeProc::~SalomeProc()
58 {
59 }
60
61 //! Save Proc in XML schema file
62 /*!
63  * \param xmlSchemaFile: the file name
64  */
65 void SalomeProc::saveSchema(std::string xmlSchemaFile)
66 {
67   VisitorSaveSalomeSchema vss(this);
68   vss.openFileSchema(xmlSchemaFile);
69   accept(&vss);
70   vss.closeFileSchema();
71 }
72
73 //! Get the default study id for the proc
74 /*!
75  * \return the study id
76  */
77 int SalomeProc::getDefaultStudyId()
78 {
79   std::string value=getProperty("DefaultStudyID");
80   if(value.empty())
81     return 1;
82   else
83     return atoi(value.c_str());
84 }
85
86 //! Initialise the proc
87 void SalomeProc::init(bool start)
88 {
89   std::string value=getProperty("DefaultStudyID");
90   if(!value.empty())
91     {
92       //initialise Python module salome with the study id given by value
93       std::string cmd="import salome;salome.salome_init("+value+")";
94       PyGILState_STATE gstate = PyGILState_Ensure(); // acquire the Global Interpreter Lock
95       PyRun_SimpleString(cmd.c_str());
96       PyGILState_Release(gstate); // Release the Global Interpreter Lock
97     }
98   Proc::init(start);
99 }