|
@@ -22,26 +22,47 @@
|
|
|
#include "ctkCmdLineModuleReference.h"
|
|
|
#include "ctkCmdLineModuleReference_p.h"
|
|
|
#include "ctkCmdLineModuleXmlParser_p.h"
|
|
|
+#include "ctkCmdLineModuleXmlException.h"
|
|
|
|
|
|
#include <QBuffer>
|
|
|
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
|
ctkCmdLineModuleReferencePrivate::ctkCmdLineModuleReferencePrivate()
|
|
|
- : Backend(NULL)
|
|
|
+ : Backend(NULL), XmlException(NULL)
|
|
|
{
|
|
|
}
|
|
|
|
|
|
//----------------------------------------------------------------------------
|
|
|
+ctkCmdLineModuleReferencePrivate::~ctkCmdLineModuleReferencePrivate()
|
|
|
+{
|
|
|
+ delete XmlException;
|
|
|
+}
|
|
|
+
|
|
|
+//----------------------------------------------------------------------------
|
|
|
ctkCmdLineModuleDescription ctkCmdLineModuleReferencePrivate::description() const
|
|
|
{
|
|
|
+ // If we already got an XML exception just throw it immediately, since
|
|
|
+ // the XML description cannot change for this module reference.
|
|
|
+ if (XmlException)
|
|
|
+ {
|
|
|
+ throw *XmlException;
|
|
|
+ }
|
|
|
+
|
|
|
// Lazy creation. The title is a required XML element.
|
|
|
if (Description.title().isNull())
|
|
|
{
|
|
|
QByteArray xml(RawXmlDescription);
|
|
|
QBuffer xmlInput(&xml);
|
|
|
ctkCmdLineModuleXmlParser parser(&xmlInput, &Description);
|
|
|
- parser.doParse();
|
|
|
+ try
|
|
|
+ {
|
|
|
+ parser.doParse();
|
|
|
+ }
|
|
|
+ catch (const ctkCmdLineModuleXmlException& e)
|
|
|
+ {
|
|
|
+ XmlException = e.clone();
|
|
|
+ }
|
|
|
}
|
|
|
return Description;
|
|
|
}
|