Salome HOME
4b43cb351c71c60daad09bfc32c20ce8ae0fe97d
[modules/yacs.git] / src / runtime / VisitorSaveSalomeSchema.cxx
1 //  Copyright (C) 2006-2008  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 #include "PresetPorts.hxx"
20 #include "VisitorSaveSalomeSchema.hxx"
21 #include "DataNode.hxx"
22 #include "PresetNode.hxx"
23 #include "OutNode.hxx"
24 #include "StudyNodes.hxx"
25 #include "ComposedNode.hxx"
26 #include "StudyPorts.hxx"
27 #include "TypeCode.hxx"
28
29 #include <cassert>
30 #include <iostream>
31 #include <string>
32 #include <set>
33
34
35 using namespace YACS::ENGINE;
36 using namespace std;
37
38 //#define _DEVDEBUG_
39 #include "YacsTrace.hxx"
40
41 VisitorSaveSalomeSchema::VisitorSaveSalomeSchema(ComposedNode *root)
42   : VisitorSaveSchema(root)
43 {
44 }
45
46 VisitorSaveSalomeSchema::~VisitorSaveSalomeSchema()
47 {
48 }
49
50 void VisitorSaveSalomeSchema::visitPresetNode(DataNode *node)
51 {
52   DEBTRACE("START visitPresetNode " << _root->getChildName(node));
53   beginCase(node);
54   int depth = depthNode(node);
55   _out << indent(depth) << "<datanode name=\"" << node->getName() << "\"";
56   string ref = node->getRef();
57   if (!ref.empty()) _out << " ref=\"" << ref << "\"";
58   if (node->getState() == YACS::DISABLED)
59     _out << " state=\"disabled\">" << endl;
60   else
61     _out << ">" << endl;
62   writeDataNodeParameters(node);
63   writeProperties(node);
64   _out << indent(depth) << "</datanode>" << endl;
65   endCase(node);
66   DEBTRACE("END visitPresetNode " << _root->getChildName(node));
67 }
68
69 void VisitorSaveSalomeSchema::visitOutNode(DataNode *node)
70 {
71   DEBTRACE("START visitOutNode " << _root->getChildName(node));
72   beginCase(node);
73   int depth = depthNode(node);
74   _out << indent(depth) << "<outnode name=\"" << node->getName() << "\"";
75   string ref = node->getRef();
76   if (!ref.empty()) _out << " ref=\"" << ref << "\"";
77   if (node->getState() == YACS::DISABLED)
78     _out << " state=\"disabled\">" << endl;
79   else
80     _out << ">" << endl;
81   writeOutNodeParameters(node);
82   writeProperties(node);
83   _out << indent(depth) << "</outnode>" << endl;
84   endCase(node);
85   DEBTRACE("END visitOutNode " << _root->getChildName(node));
86 }
87
88 void VisitorSaveSalomeSchema::visitStudyInNode(DataNode *node)
89 {
90   DEBTRACE("START visitStudyInNode " << _root->getChildName(node));
91   beginCase(node);
92   int depth = depthNode(node);
93   _out << indent(depth) << "<datanode name=\"" << node->getName() << "\" kind=\"study\"";
94   string ref = node->getRef();
95   if (!ref.empty()) _out << " ref=\"" << ref << "\"";
96   if (node->getState() == YACS::DISABLED)
97     _out << " state=\"disabled\">" << endl;
98   else
99     _out << ">" << endl;
100   writeStudyInNodeParameters(node);
101   writeProperties(node);
102   _out << indent(depth) << "</datanode>" << endl;
103   endCase(node);
104   DEBTRACE("END visitStudyInNode " << _root->getChildName(node));
105 }
106
107 void VisitorSaveSalomeSchema::visitStudyOutNode(DataNode *node)
108 {
109   DEBTRACE("START visitStudyOutNode " << _root->getChildName(node));
110   beginCase(node);
111   int depth = depthNode(node);
112   _out << indent(depth) << "<outnode name=\"" << node->getName() << "\" kind=\"study\"";
113   string ref = node->getRef();
114   if (!ref.empty()) _out << " ref=\"" << ref << "\"";
115   if (node->getState() == YACS::DISABLED)
116     _out << " state=\"disabled\">" << endl;
117   else
118     _out << ">" << endl;
119   writeStudyOutNodeParameters(node);
120   writeProperties(node);
121   _out << indent(depth) << "</outnode>" << endl;
122   endCase(node);
123   DEBTRACE("END visitStudyOutNode " << _root->getChildName(node));
124 }
125
126 void VisitorSaveSalomeSchema::writeDataNodeParameters(DataNode *node)
127 {
128   int depth = depthNode(node)+1;
129   list<OutputPort*> listOfOutputPorts = node->getSetOfOutputPort();
130   for (list<OutputPort*>::iterator it = listOfOutputPorts.begin(); it != listOfOutputPorts.end(); ++it)
131     {
132       _out << indent(depth) << "<parameter name=\"" << (*it)->getName() << "\" type=\"" 
133            << (*it)->edGetType()->name() << "\">" << endl;
134       OutputPresetPort *outp = dynamic_cast<OutputPresetPort*>(*it);
135       assert(outp);
136       _out << indent(depth+1) << outp->getData();
137       _out << indent(depth) << "</parameter>" << endl;
138     }
139 }
140
141 void VisitorSaveSalomeSchema::writeStudyInNodeParameters(DataNode *node)
142 {
143   int depth = depthNode(node)+1;
144   list<OutputPort*> listOfOutputPorts = node->getSetOfOutputPort();
145   for (list<OutputPort*>::iterator it = listOfOutputPorts.begin(); it != listOfOutputPorts.end(); ++it)
146     {
147       _out << indent(depth) << "<parameter name=\"" << (*it)->getName() << "\" type=\"" 
148            << (*it)->edGetType()->name() << "\" ref=\"";
149       OutputStudyPort *outp = dynamic_cast<OutputStudyPort*>(*it);
150       assert(outp);
151       _out << outp->getData() << "\"/>" << endl;
152     }
153 }
154
155 void VisitorSaveSalomeSchema::writeOutNodeParameters(DataNode *node)
156 {
157   int depth = depthNode(node)+1;
158   list<InputPort*> listOfInputPorts = node->getSetOfInputPort();
159   for (list<InputPort*>::iterator it = listOfInputPorts.begin(); it != listOfInputPorts.end(); ++it)
160     {
161       _out << indent(depth) << "<parameter name=\"" << (*it)->getName() << "\" type=\"" 
162            << (*it)->edGetType()->name() << "\"/>" << endl;
163     }
164 }
165
166 void VisitorSaveSalomeSchema::writeStudyOutNodeParameters(DataNode *node)
167 {
168   int depth = depthNode(node)+1;
169   list<InputPort*> listOfInputPorts = node->getSetOfInputPort();
170   for (list<InputPort*>::iterator it = listOfInputPorts.begin(); it != listOfInputPorts.end(); ++it)
171     {
172       _out << indent(depth) << "<parameter name=\"" << (*it)->getName() << "\" type=\"" 
173            << (*it)->edGetType()->name() << "\" ref=\"";
174       InputStudyPort *inp = dynamic_cast<InputStudyPort*>(*it);
175       assert(inp);
176       _out << inp->getData() << "\"/>" << endl;
177     }
178 }