Salome HOME
Merge from V6_main_20120808 08Aug12
[modules/yacs.git] / src / engine / ServerNode.cxx
1 // Copyright (C) 2006-2012  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.
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 "ServerNode.hxx"
21 #include "Container.hxx"
22 #include "Visitor.hxx"
23
24 using namespace YACS::ENGINE;
25
26 ServerNode::ServerNode(const std::string& name):InlineFuncNode(name),_container(0)
27 {
28 }
29
30 ServerNode::ServerNode(const ServerNode& other, ComposedNode *father):InlineFuncNode(other,father),_container(0)
31 {
32 }
33
34 void ServerNode::performDuplicationOfPlacement(const Node& other)
35 {
36   const ServerNode &otherC=*(dynamic_cast<const ServerNode *>(&other));
37   //if other has no container don't clone: this will not have one
38   if(otherC._container)
39     _container=otherC._container->clone();
40 }
41
42 void ServerNode::load()
43 {
44   if(_container)
45     {
46       if(!_container->isAlreadyStarted(0))
47         {
48           try
49             {
50               _container->start(0);
51             }
52           catch(Exception& e)
53             {
54               _errorDetails=e.what();
55               throw e;
56             }
57         }
58     }
59   else
60     {
61       std::string what("ServerNode::load : a load operation requested on ServerNode called \"");
62       what+=_name; what+="\" with no container specified.";
63       _errorDetails=what;
64       throw Exception(what);
65     }
66 }
67
68 void ServerNode::accept(Visitor *visitor)
69 {
70   visitor->visitServerNode(this);
71 }
72
73 void ServerNode::setContainer(Container *container)
74 {
75   if(_container==container)
76     return ;
77   if(_container)
78     _container->decrRef();
79   _container=container;
80   if(_container)
81     _container->incrRef();
82   modified();
83 }
84
85 //! By definition of ServerNode class.
86 bool ServerNode::isDeployable() const
87 {
88   return true;
89 }
90
91 ServerNode::~ServerNode()
92 {
93   if(_container)
94     _container->decrRef();
95 }