+// Copyright (C) 2006-2024 CEA, EDF
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
#include "XMLPorts.hxx"
#include <iostream>
+//#define _DEVDEBUG_
+#include "YacsTrace.hxx"
+
using namespace YACS::ENGINE;
using namespace std;
-InputXmlPort::InputXmlPort(const string& name, Node * node, TypeCode * type)
- : InputPort(name, node, type), Port(node)
+InputXmlPort::InputXmlPort(const std::string& name, Node * node, TypeCode * type)
+ : InputPort(name, node, type), DataPort(name, node, type), Port(node), _initData(""), _data("")
+{
+}
+
+InputXmlPort::InputXmlPort(const InputXmlPort& other, Node *newHelder):InputPort(other,newHelder),DataPort(other,newHelder),Port(other,newHelder),_initData(other._initData),_data(other._data)
+{
+}
+
+bool InputXmlPort::edIsManuallyInitialized() const
{
- _impl="XML";
+ return _initData != "";
}
-const char * InputXmlPort::getXml() const
+void InputXmlPort::edRemoveManInit()
{
+ _initData="";
+ InputPort::edRemoveManInit();
+}
+
+const char *InputXmlPort::getXml() const
+{
+ DEBTRACE(_data);
return _data.c_str();
}
-void InputXmlPort::put(const void *data) throw (ConversionException)
+void *InputXmlPort::get() const
+{
+ return (void *) _data.c_str();
+}
+
+void InputXmlPort::put(const void *data)
{
+ DEBTRACE("put(void *)");
put((const char*)data);
- _empty = false;
}
-void InputXmlPort::put(const char *data) throw (ConversionException)
+void InputXmlPort::put(const char *data)
{
- cerr << "InputXmlPort::put" << endl;
+ DEBTRACE(data);
_data = data;
- cerr << "data: " << data << endl;
}
+void InputXmlPort::releaseData()
+{//nothing because _data has no ref counter
+}
+bool InputXmlPort::isEmpty()
+{
+ return _data.empty();
+}
-OutputXmlPort::OutputXmlPort(const string& name, Node* node, TypeCode * type)
- : OutputPort(name, node, type), Port(node)
+InputPort *InputXmlPort::clone(Node *newHelder) const
{
- _impl="XML";
+ return new InputXmlPort(*this,newHelder);
}
-const char * OutputXmlPort::get() const throw (ConversionException)
+//! Save the current data value for further reinitialization of the port
+/*!
+ *
+ */
+void InputXmlPort::exSaveInit()
+{
+ _initData=_data;
+}
+
+//! Restore the saved data value to current data value
+/*!
+ * If no data has been saved (_initData == 0) don't restore
+ */
+void InputXmlPort::exRestoreInit()
+{
+ if(_initData!="")return;
+ _data=_initData;
+}
+
+std::string InputXmlPort::dump()
+{
+ return _data;
+}
+
+std::string InputXmlPort::valToStr()
+{
+ return _data;
+}
+
+void InputXmlPort::valFromStr(std::string valstr)
+{
+ _data = valstr;
+}
+
+
+OutputXmlPort::OutputXmlPort(const std::string& name, Node* node, TypeCode * type)
+ : OutputPort(name, node, type), DataPort(name, node, type), Port(node)
+{
+}
+
+OutputXmlPort::OutputXmlPort(const OutputXmlPort& other, Node *newHelder):OutputPort(other,newHelder),DataPort(other,newHelder),
+ Port(other,newHelder),_data(other._data)
+{
+}
+
+const char * OutputXmlPort::get() const
{
return _data.c_str();
}
-void OutputXmlPort::put(const void *data) throw (ConversionException)
+void OutputXmlPort::put(const void *data)
{
put((const char*)data);
}
-void OutputXmlPort::put(const char *data) throw (ConversionException)
+void OutputXmlPort::put(const char *data)
{
- cerr << "OutputXmlPort::put-------" << getName() << endl;
+ DEBTRACE(data);
InputPort *p;
- cerr << "data: " << data << endl;
_data=data;
- set<InputPort *>::iterator iter;
- for(iter=_setOfInputPort.begin();iter!=_setOfInputPort.end();iter++)
- {
- p=*iter;
- p->put((void*)data);
- }
+ OutputPort::put(data);
}
+
+OutputPort *OutputXmlPort::clone(Node *newHelder) const
+{
+ return new OutputXmlPort(*this,newHelder);
+}
+
+std::string OutputXmlPort::dump()
+{
+ return _data;
+}
+
+std::string OutputXmlPort::valToStr()
+{
+ return _data;
+}
+
+void OutputXmlPort::valFromStr(std::string valstr)
+{
+ _data = valstr;
+}
+