Version: 9.16.0
SalomeContainerTmpForHP.cxx
Go to the documentation of this file.
1// Copyright (C) 2006-2026 CEA, EDF
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
21#include "ComponentInstance.hxx"
22#include "SalomeHPContainer.hxx"
23#include "AutoLocker.hxx"
24#include "Task.hxx"
25
26using namespace YACS::ENGINE;
27
28CORBA::Object_ptr SalomeContainerTmpForHP::loadComponent(Task *askingNode)
29{
30 const ComponentInstance *inst(askingNode?askingNode->getComponent():0);
31 if(!inst)
32 throw Exception("SalomeContainerTmpForHP::loadComponent : asking to load a component on the given task whereas this task has no component !");
33 std::string compoName(inst->getCompoName());
34 {
35 YACS::BASES::AutoLocker<Container> alck(this);//To be sure
36 if(!this->isAlreadyStarted(askingNode))
37 this->start(askingNode);
38 }
39 CORBA::Object_ptr objComponent=CORBA::Object::_nil();
40 {
41 YACS::BASES::AutoLocker<Container> alck(this);//To be sure
42 std::string compoName(inst->getCompoName());
43 Engines::Container_var container(_launchModeType->getContainer(askingNode));
44 objComponent=container->find_component_instance(compoName.c_str());
45 if(CORBA::is_nil(objComponent))
46 {
47 char *reason;
48 bool isLoadable(container->load_component_Library(compoName.c_str(), reason));
49 if(isLoadable)
50 objComponent=SalomeContainerTools::CreateComponentInstance(this,container,inst);
51 }
52 }
53 return objComponent;
54}
55
57{
58 const SalomeContainerHelper *lmt(0);
59 std::size_t posIn(0);
60 {
62 lmt=cont->getHelperOfTask(askingNode);
63 posIn=cont->locateTask(askingNode);
64 }
65 return new SalomeContainerTmpForHP(*cont,cont->getContainerInfo(),lmt,cont->getComponentNames(),cont->getShutdownLev(),cont,posIn);
66}
Base class for all component instances.
const std::string & getCompoName() const
virtual Engines::Container_var getContainer(const Task *askingNode) const =0
SalomeContainerTmpForHP(const Container &other, const SalomeContainerTools &sct, const SalomeContainerHelper *lmt, const std::vector< std::string > &componentNames, int shutdownLev, const SalomeHPContainer *zeOriginCont, std::size_t pos)
static SalomeContainerTmpForHP * BuildFrom(const SalomeHPContainer *cont, const Task *askingNode)
static CORBA::Object_ptr CreateComponentInstance(Container *cont, Engines::Container_ptr contPtr, const ComponentInstance *inst)
bool isAlreadyStarted(const Task *askingNode) const
Check if the component instance container is already started.
void start(const Task *askingNode) override
Start a salome container (true salome container not yacs one) with given ContainerParameters (_params...
SalomeContainerHelper * _launchModeType
SalomeContainerMonoHelper * getHelperOfTask(const Task *node)
std::vector< std::string > getComponentNames() const
const SalomeContainerTools & getContainerInfo() const
std::size_t locateTask(const Task *askingNode) const
virtual ComponentInstance * getComponent()=0