libpappsomspp
Library for mass spectrometry
pappso::XtandemOutputSaxHandler Class Reference

#include <xtandemoutputsaxhandler.h>

Inheritance diagram for pappso::XtandemOutputSaxHandler:

Public Member Functions

 XtandemOutputSaxHandler (const QString &final_tandem_output, const QString &original_msdata_file_name)
 
 ~XtandemOutputSaxHandler ()
 
bool startElement (const QString &namespaceURI, const QString &localName, const QString &qName, const QXmlAttributes &attributes) override
 
bool endElement (const QString &namespaceURI, const QString &localName, const QString &qName) override
 
bool startDocument () override
 
bool endDocument () override
 
bool characters (const QString &str) override
 
bool fatalError (const QXmlParseException &exception) override
 
bool error (const QXmlParseException &exception) override
 
QString errorString () const
 
void setInputParameters (const QString &label_name_attribute, const QString &input_value)
 

Private Member Functions

bool startElement_note (QXmlAttributes attributes)
 
bool endElement_note ()
 
void writeOpenTag (const QString &qName, const QXmlAttributes &attributes)
 

Private Attributes

std::map< QString, QString > m_mapTandemInputParameters
 
std::vector< QString > m_tagStack
 
QFile m_destinationTandemOutputFile
 
QXmlStreamWriter * p_writeXmlTandemOutput
 
QString m_errorString
 
QString m_currentText
 
bool m_isTandemParameter = false
 
QString m_currentLabel
 
QString m_originalMsDataFileName
 

Detailed Description

Definition at line 38 of file xtandemoutputsaxhandler.h.

Constructor & Destructor Documentation

◆ XtandemOutputSaxHandler()

pappso::XtandemOutputSaxHandler::XtandemOutputSaxHandler ( const QString &  final_tandem_output,
const QString &  original_msdata_file_name 
)

Default constructor

Definition at line 35 of file xtandemoutputsaxhandler.cpp.

37  : m_destinationTandemOutputFile(final_tandem_output)
38 {
39  qDebug() << final_tandem_output;
41  QFileInfo(original_msdata_file_name).absoluteFilePath();
42  if(!m_destinationTandemOutputFile.open(QIODevice::WriteOnly))
43  {
45  QObject::tr("ERROR: unable to open %1 to write XML output")
46  .arg(final_tandem_output));
47  }
48  p_writeXmlTandemOutput = new QXmlStreamWriter();
49  p_writeXmlTandemOutput->setAutoFormatting(true);
51 }

References m_destinationTandemOutputFile, m_originalMsDataFileName, and p_writeXmlTandemOutput.

◆ ~XtandemOutputSaxHandler()

pappso::XtandemOutputSaxHandler::~XtandemOutputSaxHandler ( )

Destructor

Definition at line 53 of file xtandemoutputsaxhandler.cpp.

54 {
55  if(p_writeXmlTandemOutput != nullptr)
56  {
59  }
60 }

References m_destinationTandemOutputFile, and p_writeXmlTandemOutput.

Member Function Documentation

◆ characters()

bool pappso::XtandemOutputSaxHandler::characters ( const QString &  str)
override

Definition at line 215 of file xtandemoutputsaxhandler.cpp.

216 {
217  m_currentText += str;
218  if(m_tagStack.back() != "note")
219  {
220  p_writeXmlTandemOutput->writeCharacters(str);
221  }
222  return true;
223 }

References m_currentText, m_tagStack, and p_writeXmlTandemOutput.

◆ endDocument()

bool pappso::XtandemOutputSaxHandler::endDocument ( )
override

Definition at line 204 of file xtandemoutputsaxhandler.cpp.

205 {
206  p_writeXmlTandemOutput->writeEndDocument();
207 
209  delete p_writeXmlTandemOutput;
210  p_writeXmlTandemOutput = nullptr;
211  return true;
212 }

References m_destinationTandemOutputFile, and p_writeXmlTandemOutput.

◆ endElement()

bool pappso::XtandemOutputSaxHandler::endElement ( const QString &  namespaceURI,
const QString &  localName,
const QString &  qName 
)
override

Definition at line 149 of file xtandemoutputsaxhandler.cpp.

153 {
154 
155  bool is_ok = true;
156  // endElement_peptide_list
157  try
158  {
159 
160  if(qName == "note")
161  {
162  is_ok = endElement_note();
163  }
164  else
165  {
166  p_writeXmlTandemOutput->writeEndElement();
167  }
168  }
169  catch(const pappso::PappsoException &exception_pappso)
170  {
171  m_errorString = QObject::tr(
172  "ERROR in XtandemOutputSaxHandler::endElement tag "
173  "%1, PAPPSO exception:\n%2")
174  .arg(qName)
175  .arg(exception_pappso.qwhat());
176  return false;
177  }
178  catch(const std::exception &exception_std)
179  {
180  m_errorString = QObject::tr(
181  "ERROR in XtandemOutputSaxHandler::endElement tag "
182  "%1, std exception:\n%2")
183  .arg(qName)
184  .arg(exception_std.what());
185  return false;
186  }
187 
188  m_currentText.clear();
189  m_tagStack.pop_back();
190 
191  return is_ok;
192 }

References endElement_note(), m_currentText, m_errorString, m_tagStack, p_writeXmlTandemOutput, and pappso::PappsoException::qwhat().

◆ endElement_note()

bool pappso::XtandemOutputSaxHandler::endElement_note ( )
private

Definition at line 281 of file xtandemoutputsaxhandler.cpp.

282 {
283  // qDebug() << "XtandemParamSaxHandler::endElement_note begin " <<
284  // <note type="input" label="spectrum,
285  // path">/tmp/tandemwrapper-IehrEL/msdata.mzxml</note>
286 
287  if(m_currentLabel == "spectrum, path")
288  {
289  //<note type="input"
290  // label="spectrum,path">/gorgone/pappso/jouy/raw/2019_Lumos/20191222_107_Juste/20191222_18_EF1.mzXML</note>
291  // m_originMzDataFileName = m_currentText;
292  // p_writeXmlTandemOutput->writeCharacters(m_destinationMzXmlFileName);
294  p_writeXmlTandemOutput->writeEndElement();
295 
296 
297  for(auto pair_input : m_mapTandemInputParameters)
298  {
299  p_writeXmlTandemOutput->writeStartElement("note");
300  p_writeXmlTandemOutput->writeAttribute("type", "input");
301  p_writeXmlTandemOutput->writeAttribute("label", pair_input.first);
302  p_writeXmlTandemOutput->writeCharacters(pair_input.second);
303  p_writeXmlTandemOutput->writeEndElement();
304  }
305  }
306  else if(m_currentLabel == "output, path")
307  {
308  //<note type="input" label="output,
309  // path">/tmp/tandemwrapper-sSGxtE/output_tandem.xml</note>
310  p_writeXmlTandemOutput->writeCharacters(
311  QFileInfo(m_destinationTandemOutputFile).absoluteFilePath());
312  p_writeXmlTandemOutput->writeEndElement();
313  }
314  else
315  {
316  p_writeXmlTandemOutput->writeCharacters(m_currentText);
317  p_writeXmlTandemOutput->writeEndElement();
318  }
319  return true;
320 }

References m_currentLabel, m_currentText, m_destinationTandemOutputFile, m_mapTandemInputParameters, m_originalMsDataFileName, and p_writeXmlTandemOutput.

Referenced by endElement().

◆ error()

bool pappso::XtandemOutputSaxHandler::error ( const QXmlParseException &  exception)
override

Definition at line 227 of file xtandemoutputsaxhandler.cpp.

228 {
229  m_errorString = QObject::tr(
230  "Parse error at line %1, column %2 :\n"
231  "%3")
232  .arg(exception.lineNumber())
233  .arg(exception.columnNumber())
234  .arg(exception.message());
235  qDebug() << m_errorString;
236  return false;
237 }

References m_errorString.

◆ errorString()

QString pappso::XtandemOutputSaxHandler::errorString ( ) const

Definition at line 254 of file xtandemoutputsaxhandler.cpp.

255 {
256  return m_errorString;
257 }

References m_errorString.

Referenced by pappso::TandemWrapperRun::writeFinalTandemOutput().

◆ fatalError()

bool pappso::XtandemOutputSaxHandler::fatalError ( const QXmlParseException &  exception)
override

Definition at line 241 of file xtandemoutputsaxhandler.cpp.

242 {
243  m_errorString = QObject::tr(
244  "Parse error at line %1, column %2 :\n"
245  "%3")
246  .arg(exception.lineNumber())
247  .arg(exception.columnNumber())
248  .arg(exception.message());
249  qDebug() << m_errorString;
250  return false;
251 }

References m_errorString.

◆ setInputParameters()

void pappso::XtandemOutputSaxHandler::setInputParameters ( const QString &  label_name_attribute,
const QString &  input_value 
)

Definition at line 323 of file xtandemoutputsaxhandler.cpp.

325 {
327  std::pair<QString, QString>(label_name_attribute, input_value));
328 }

References m_mapTandemInputParameters.

◆ startDocument()

bool pappso::XtandemOutputSaxHandler::startDocument ( )
override

Definition at line 195 of file xtandemoutputsaxhandler.cpp.

196 {
197 
198  p_writeXmlTandemOutput->setAutoFormatting(true);
199  p_writeXmlTandemOutput->writeStartDocument("1.0");
200  return true;
201 }

References p_writeXmlTandemOutput.

◆ startElement()

bool pappso::XtandemOutputSaxHandler::startElement ( const QString &  namespaceURI,
const QString &  localName,
const QString &  qName,
const QXmlAttributes &  attributes 
)
override

Definition at line 75 of file xtandemoutputsaxhandler.cpp.

80 {
81  m_tagStack.push_back(qName);
82  bool is_ok = true;
83 
84  try
85  {
86  m_currentText.clear();
87  //<bioml label="example api document">
88  if(m_tagStack.size() == 1)
89  {
90  if(qName != "bioml")
91  {
93  QObject::tr(
94  "ERROR in XtandemOutputSaxHandler::startElement "
95  "root tag %1 is not <bioml>")
96  .arg(qName);
97  m_isTandemParameter = false;
98  return false;
99  }
100  else
101  {
102 
103  m_isTandemParameter = true;
104 
105  // <bioml xmlns:GAML="http://www.bioml.com/gaml/" label="models
106  // from '/tmp/msdata.mzxml'">
107  p_writeXmlTandemOutput->writeStartElement("bioml");
108  p_writeXmlTandemOutput->writeAttribute(
109  "xmlns:GAML", attributes.value("xmlns:GAML"));
110  p_writeXmlTandemOutput->writeAttribute(
111  "label",
112  QString("models from '%1'").arg(m_originalMsDataFileName));
113  return true;
114  }
115  }
116  // startElement_group
117 
118  if(qName == "note")
119  {
120  is_ok = startElement_note(attributes);
121  }
122  else
123  {
124  writeOpenTag(qName, attributes);
125  }
126  }
127  catch(const pappso::PappsoException &exception_pappso)
128  {
129  m_errorString = QObject::tr(
130  "ERROR in XtandemOutputSaxHandler::startElement "
131  "tag %1, PAPPSO exception:\n%2")
132  .arg(qName)
133  .arg(exception_pappso.qwhat());
134  return false;
135  }
136  catch(const std::exception &exception_std)
137  {
138  m_errorString = QObject::tr(
139  "ERROR in XtandemOutputSaxHandler::startElement "
140  "tag %1, std exception:\n%2")
141  .arg(qName)
142  .arg(exception_std.what());
143  return false;
144  }
145  return is_ok;
146 }

References m_currentText, m_errorString, m_isTandemParameter, m_originalMsDataFileName, m_tagStack, p_writeXmlTandemOutput, pappso::PappsoException::qwhat(), startElement_note(), and writeOpenTag().

◆ startElement_note()

bool pappso::XtandemOutputSaxHandler::startElement_note ( QXmlAttributes  attributes)
private

Definition at line 261 of file xtandemoutputsaxhandler.cpp.

262 {
263  // qDebug() << "XtandemParamSaxHandler::startElement_note begin " <<
264  // <note type="input"
265  // label="output,path">/gorgone/pappso/jouy/users/Celine/2019_Lumos/20191222_107_Juste_APD/metapappso_condor/test_run/20191222_18_EF1_third_step_test_condor_22janv.xml</note>
266 
267  writeOpenTag("note", attributes);
268  m_currentLabel = "";
269 
270  if(attributes.value("type") == "input")
271  {
272  m_currentLabel = attributes.value("label");
273  }
274 
275  // qDebug() << "XtandemParamSaxHandler::startElement_note _current_label " <<
276  // _current_label;
277  return true;
278 }

References m_currentLabel, and writeOpenTag().

Referenced by startElement().

◆ writeOpenTag()

void pappso::XtandemOutputSaxHandler::writeOpenTag ( const QString &  qName,
const QXmlAttributes &  attributes 
)
private

Definition at line 63 of file xtandemoutputsaxhandler.cpp.

65 {
66  p_writeXmlTandemOutput->writeStartElement(qName);
67  for(int i = 0; i < attributes.length(); i++)
68  {
69  p_writeXmlTandemOutput->writeAttribute(attributes.qName(i),
70  attributes.value(i));
71  }
72 }

References p_writeXmlTandemOutput.

Referenced by startElement(), and startElement_note().

Member Data Documentation

◆ m_currentLabel

QString pappso::XtandemOutputSaxHandler::m_currentLabel
private

Definition at line 89 of file xtandemoutputsaxhandler.h.

Referenced by endElement_note(), and startElement_note().

◆ m_currentText

QString pappso::XtandemOutputSaxHandler::m_currentText
private

Definition at line 87 of file xtandemoutputsaxhandler.h.

Referenced by characters(), endElement(), endElement_note(), and startElement().

◆ m_destinationTandemOutputFile

QFile pappso::XtandemOutputSaxHandler::m_destinationTandemOutputFile
private

◆ m_errorString

QString pappso::XtandemOutputSaxHandler::m_errorString
private

Definition at line 86 of file xtandemoutputsaxhandler.h.

Referenced by endElement(), error(), errorString(), fatalError(), and startElement().

◆ m_isTandemParameter

bool pappso::XtandemOutputSaxHandler::m_isTandemParameter = false
private

Definition at line 88 of file xtandemoutputsaxhandler.h.

Referenced by startElement().

◆ m_mapTandemInputParameters

std::map<QString, QString> pappso::XtandemOutputSaxHandler::m_mapTandemInputParameters
private

Definition at line 82 of file xtandemoutputsaxhandler.h.

Referenced by endElement_note(), and setInputParameters().

◆ m_originalMsDataFileName

QString pappso::XtandemOutputSaxHandler::m_originalMsDataFileName
private

◆ m_tagStack

std::vector<QString> pappso::XtandemOutputSaxHandler::m_tagStack
private

Definition at line 83 of file xtandemoutputsaxhandler.h.

Referenced by characters(), endElement(), and startElement().

◆ p_writeXmlTandemOutput

QXmlStreamWriter* pappso::XtandemOutputSaxHandler::p_writeXmlTandemOutput
private

The documentation for this class was generated from the following files:
pappso::XtandemOutputSaxHandler::m_destinationTandemOutputFile
QFile m_destinationTandemOutputFile
Definition: xtandemoutputsaxhandler.h:84
pappso::XtandemOutputSaxHandler::m_originalMsDataFileName
QString m_originalMsDataFileName
Definition: xtandemoutputsaxhandler.h:90
pappso::XtandemOutputSaxHandler::m_currentLabel
QString m_currentLabel
Definition: xtandemoutputsaxhandler.h:89
pappso::XtandemOutputSaxHandler::startElement_note
bool startElement_note(QXmlAttributes attributes)
Definition: xtandemoutputsaxhandler.cpp:261
pappso::XtandemOutputSaxHandler::endElement_note
bool endElement_note()
Definition: xtandemoutputsaxhandler.cpp:281
pappso::XtandemOutputSaxHandler::m_mapTandemInputParameters
std::map< QString, QString > m_mapTandemInputParameters
Definition: xtandemoutputsaxhandler.h:82
pappso::XtandemOutputSaxHandler::m_isTandemParameter
bool m_isTandemParameter
Definition: xtandemoutputsaxhandler.h:88
pappso::XtandemOutputSaxHandler::m_errorString
QString m_errorString
Definition: xtandemoutputsaxhandler.h:86
pappso::XtandemOutputSaxHandler::p_writeXmlTandemOutput
QXmlStreamWriter * p_writeXmlTandemOutput
Definition: xtandemoutputsaxhandler.h:85
pappso::XtandemOutputSaxHandler::writeOpenTag
void writeOpenTag(const QString &qName, const QXmlAttributes &attributes)
Definition: xtandemoutputsaxhandler.cpp:63
pappso::XtandemOutputSaxHandler::m_currentText
QString m_currentText
Definition: xtandemoutputsaxhandler.h:87
pappso::PappsoException::qwhat
virtual const QString & qwhat() const
Definition: pappsoexception.h:66
pappso::XtandemOutputSaxHandler::m_tagStack
std::vector< QString > m_tagStack
Definition: xtandemoutputsaxhandler.h:83
pappso::PappsoException
Definition: pappsoexception.h:42