Public Member Functions | Static Public Attributes | Protected Member Functions
ExtTarget Class Reference

Brief description of class still missing. More...

#include <ExtTarget.h>

Inheritance diagram for ExtTarget:
QGpCoreTools::XMLClass

List of all members.

Public Member Functions

QString command () const
 ExtTarget ()
 ExtTarget (const ExtTarget &o)
bool isOk (int nParams)
void setCommand (QString c)
void setWorkingDirectory (QString wd)
QString workingDirectory () const
virtual const QString & xml_tagName () const

Static Public Attributes

static const QString xmlExtTargetTag = "ExtTarget"

Protected Member Functions

virtual XMLMember xml_member (XML_MEMBER_ARGS)
virtual bool xml_setProperty (XML_SETPROPERTY_ARGS)
virtual void xml_writeProperties (XML_WRITEPROPERTIES_ARGS) const

Detailed Description

Brief description of class still missing.

Full description of class still missing


Constructor & Destructor Documentation

ExtTarget::ExtTarget ( ) [inline]
{}
    : XMLClass()
{
  _command=o._command;
  _workingDirectory=o._workingDirectory;
}

Member Function Documentation

QString ExtTarget::command ( ) const [inline]

Referenced by ExtTargetWidget::setFrom().

{return _command;}
bool ExtTarget::isOk ( int  nParams)

References QGpCoreTools::endl(), QGpCoreTools::tr(), and TRACE.

Referenced by Forward::setTarget().

{
  TRACE;
  if(_command.isEmpty()) {
    App::stream() << tr("Empty command, computing of misfit disabled. A uniform null misfit will be returned for each model.") << endl;
    return true;
  }
  QDir d(_workingDirectory);
  // Write fake 'parameter' file
  QFile fp(d.absoluteFilePath("parameters"));
  if(!fp.open(QIODevice::WriteOnly)) {
    App::stream() << tr("Cannot write to file %1").arg(d.absoluteFilePath("parameters")) << endl;
    return false;
  }
  QTextStream s(&fp);
  for(int i=0;i<nParams;i++) {
    s << 0.0 << "\n";
  }
  fp.close();
  QProcess p;
  p.setWorkingDirectory(_workingDirectory);
  p.start(_command);
  while(!p.waitForStarted (1000) && p.state()==QProcess::Starting) {}
  while(!p.waitForFinished (1000) && p.state()==QProcess::Running) {}
  switch(p.error()) {
  case QProcess::FailedToStart:
    App::stream() << tr("%1 failed to start. Either %1 is missing, or you may have insufficient permissions to invoke it.")
              .arg(_command) << endl;
    return false;
  case QProcess::Crashed:
    App::stream() << tr("%1 crashed some time after starting successfully.").arg(_command) << endl;
    return false;
  default:
    break;
  }
  return true;
}
void ExtTarget::setCommand ( QString  c) [inline]

Referenced by ExtTargetWidget::target().

{_command=c;}
void ExtTarget::setWorkingDirectory ( QString  wd) [inline]

Referenced by ExtTargetWidget::target().

{_workingDirectory=wd;}
QString ExtTarget::workingDirectory ( ) const [inline]

Referenced by ExtTargetWidget::setFrom().

{return _workingDirectory;}
XMLMember ExtTarget::xml_member ( XML_MEMBER_ARGS  ) [protected, virtual]

Re-implement this function to offer XML restore (children and properties) support to your class.

From tag and map (with contains the attibute value) return a unique identifier under the format of a XMLMember. XMLMember is initialized with 3 types of contructors:

  • An integer: id number of a property
  • A XMLClass * : a child of this object identified by tag
  • Default constructor: error, unknow child or property

Map of attributes can be inspected in this way (can be achived also in xml_setProperty()):

    static const QString tmp("childrenName");
    XMLRestoreAttributeIterator it=map.find(tmp);
    if(it!=map.end()) {
      // found attribute "childrenName"
    }

If the map of attributes is not used:

    Q_UNUSED(attributes);
    if(tag=="x1") return XMLMember(0);
    else if(tag=="y1") return XMLMember(1);
    else if(tag=="x2") return XMLMember(2);
    else if(tag=="y2") return XMLMember(3);
    else return XMLMember(XMLMember::Unknown);

Arithmetic operations + and - apply to XMLMember to avoid confusion of property id numbers between inherited objects. Offset 3 corresponds to the number of properties defined in this object.

    if(tag=="anInteger") return XMLMember(0);
    else if(tag=="aString") return XMLMember(1);
    else if(tag=="aDouble") return XMLMember(2);
    return AbstractLine::xml_member(tag, attributes, context)+3;

For the arguments of this function use Macro XML_MEMBER_ARGS.

Reimplemented from QGpCoreTools::XMLClass.

References TRACE.

{
  TRACE;
  Q_UNUSED(attributes)
  Q_UNUSED(context);
  if(tag=="command" ) return XMLMember(0);
  else if(tag=="workingDirectory" ) return XMLMember(1);
  else return XMLMember(XMLMember::Unknown);
}
bool ExtTarget::xml_setProperty ( XML_SETPROPERTY_ARGS  ) [protected, virtual]

Re-implement this function to offer XML restore properties support to your class.

From memberID set the corresponding property with value content. The map of attributes is given as a supplementary information (not useful in all cases).

For a general case:

  Q_UNUSED(attributes);
  double val=content.toDouble();
  switch (memberID) {
  case 0:
    _x1=val;
    return true;
  case 1:
    _y1=val;
    return true;
  case 2:
    _x2=val;
    return true;
  case 3:
    _y2=val;
    return true;
  default:
    return false;
  }

For classes inheriting other classes (see also xml_member())

  switch (memberID) {
  case 0:
    _anInteger=content.toString();
    return true;
  case 1:
    _aString=content.toInt();
    return true;
  case 2:
    _aDouble=content.toDouble();
    return true;
  default:
    return AbstractLine::xml_setProperty(memberID-3, map, content);

For the arguments of this function use Macro XML_SETPROPERTY_ARGS.

Reimplemented from QGpCoreTools::XMLClass.

References TRACE.

{
  TRACE;
  Q_UNUSED(tag)
  Q_UNUSED(attributes)
  Q_UNUSED(context);
  switch (memberID) {
  case 0: _command=content.toString(); return true;
  case 1: _workingDirectory=content.toString(); return true;
  default: return false;
  }
}
virtual const QString& ExtTarget::xml_tagName ( ) const [inline, virtual]

Implements QGpCoreTools::XMLClass.

References xmlExtTargetTag.

{return xmlExtTargetTag;}
void ExtTarget::xml_writeProperties ( XML_WRITEPROPERTIES_ARGS  ) const [protected, virtual]

Reimplemented from QGpCoreTools::XMLClass.

References TRACE, and QGpCoreTools::XMLClass::writeProperty().

{
  TRACE;
  Q_UNUSED(context);
  writeProperty(s, "command", _command);
  writeProperty(s, "workingDirectory", _workingDirectory);
}

Member Data Documentation

const QString ExtTarget::xmlExtTargetTag = "ExtTarget" [static]

Referenced by xml_tagName().


The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines