1 // Copyright (C) 2006-2008 CEA/DEN, EDF R&D
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.
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.
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
17 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
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"
35 using namespace YACS::ENGINE;
39 #include "YacsTrace.hxx"
41 VisitorSaveSalomeSchema::VisitorSaveSalomeSchema(ComposedNode *root)
42 : VisitorSaveSchema(root)
46 VisitorSaveSalomeSchema::~VisitorSaveSalomeSchema()
50 void VisitorSaveSalomeSchema::visitPresetNode(DataNode *node)
52 DEBTRACE("START visitPresetNode " << _root->getChildName(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;
62 writeDataNodeParameters(node);
63 writeProperties(node);
64 _out << indent(depth) << "</datanode>" << endl;
66 DEBTRACE("END visitPresetNode " << _root->getChildName(node));
69 void VisitorSaveSalomeSchema::visitOutNode(DataNode *node)
71 DEBTRACE("START visitOutNode " << _root->getChildName(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;
81 writeOutNodeParameters(node);
82 writeProperties(node);
83 _out << indent(depth) << "</outnode>" << endl;
85 DEBTRACE("END visitOutNode " << _root->getChildName(node));
88 void VisitorSaveSalomeSchema::visitStudyInNode(DataNode *node)
90 DEBTRACE("START visitStudyInNode " << _root->getChildName(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;
100 writeStudyInNodeParameters(node);
101 writeProperties(node);
102 _out << indent(depth) << "</datanode>" << endl;
104 DEBTRACE("END visitStudyInNode " << _root->getChildName(node));
107 void VisitorSaveSalomeSchema::visitStudyOutNode(DataNode *node)
109 DEBTRACE("START visitStudyOutNode " << _root->getChildName(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;
119 writeStudyOutNodeParameters(node);
120 writeProperties(node);
121 _out << indent(depth) << "</outnode>" << endl;
123 DEBTRACE("END visitStudyOutNode " << _root->getChildName(node));
126 void VisitorSaveSalomeSchema::writeDataNodeParameters(DataNode *node)
128 int depth = depthNode(node)+1;
129 list<OutputPort*> listOfOutputPorts = node->getSetOfOutputPort();
130 for (list<OutputPort*>::iterator it = listOfOutputPorts.begin(); it != listOfOutputPorts.end(); ++it)
132 _out << indent(depth) << "<parameter name=\"" << (*it)->getName() << "\" type=\""
133 << (*it)->edGetType()->name() << "\">" << endl;
134 OutputPresetPort *outp = dynamic_cast<OutputPresetPort*>(*it);
136 _out << indent(depth+1) << outp->getData();
137 _out << indent(depth) << "</parameter>" << endl;
141 void VisitorSaveSalomeSchema::writeStudyInNodeParameters(DataNode *node)
143 int depth = depthNode(node)+1;
144 list<OutputPort*> listOfOutputPorts = node->getSetOfOutputPort();
145 for (list<OutputPort*>::iterator it = listOfOutputPorts.begin(); it != listOfOutputPorts.end(); ++it)
147 _out << indent(depth) << "<parameter name=\"" << (*it)->getName() << "\" type=\""
148 << (*it)->edGetType()->name() << "\" ref=\"";
149 OutputStudyPort *outp = dynamic_cast<OutputStudyPort*>(*it);
151 _out << outp->getData() << "\"/>" << endl;
155 void VisitorSaveSalomeSchema::writeOutNodeParameters(DataNode *node)
157 int depth = depthNode(node)+1;
158 list<InputPort*> listOfInputPorts = node->getSetOfInputPort();
159 for (list<InputPort*>::iterator it = listOfInputPorts.begin(); it != listOfInputPorts.end(); ++it)
161 _out << indent(depth) << "<parameter name=\"" << (*it)->getName() << "\" type=\""
162 << (*it)->edGetType()->name() << "\"/>" << endl;
166 void VisitorSaveSalomeSchema::writeStudyOutNodeParameters(DataNode *node)
168 int depth = depthNode(node)+1;
169 list<InputPort*> listOfInputPorts = node->getSetOfInputPort();
170 for (list<InputPort*>::iterator it = listOfInputPorts.begin(); it != listOfInputPorts.end(); ++it)
172 _out << indent(depth) << "<parameter name=\"" << (*it)->getName() << "\" type=\""
173 << (*it)->edGetType()->name() << "\" ref=\"";
174 InputStudyPort *inp = dynamic_cast<InputStudyPort*>(*it);
176 _out << inp->getData() << "\"/>" << endl;