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