Преглед изворни кода

Factory - Add method allowing to log loading warnings/errors

* Using methods appendLoadWarningString/appendLoadErrorString instead of
qWarning/qCritical will allow the message to be nicely formatted and indented.
Jean-Christophe Fillion-Robin пре 13 година
родитељ
комит
cd2e333425

+ 11 - 1
Libs/Core/ctkAbstractFactory.h

@@ -45,12 +45,14 @@ public:
   //explicit ctkAbstractFactoryItem();
   ctkAbstractFactoryItem();
 
-  virtual QString loadErrorString()const;
   virtual bool load() = 0;
 
   QStringList instantiateErrorStrings()const;
   QStringList instantiateWarningStrings()const;
 
+  QStringList loadErrorStrings()const;
+  QStringList loadWarningStrings()const;
+
   BaseClassType* instantiate();
   bool instantiated()const;
   virtual void uninstantiate();
@@ -66,6 +68,12 @@ protected:
   void appendInstantiateWarningString(const QString& msg);
   void clearInstantiateWarningStrings();
 
+  void appendLoadErrorString(const QString& msg);
+  void clearLoadErrorStrings();
+
+  void appendLoadWarningString(const QString& msg);
+  void clearLoadWarningStrings();
+
   /// Must be reimplemented in subclasses to instanciate a BaseClassType*
   virtual BaseClassType* instanciator() = 0;
   BaseClassType* Instance;
@@ -73,6 +81,8 @@ protected:
 private:
   QStringList InstantiateErrorStrings;
   QStringList InstantiateWarningStrings;
+  QStringList LoadErrorStrings;
+  QStringList LoadWarningStrings;
   bool Verbose;
 };
 

+ 53 - 9
Libs/Core/ctkAbstractFactory.tpp

@@ -40,13 +40,6 @@ ctkAbstractFactoryItem<BaseClassType>::ctkAbstractFactoryItem()
 
 //----------------------------------------------------------------------------
 template<typename BaseClassType>
-QString ctkAbstractFactoryItem<BaseClassType>::loadErrorString()const
-{ 
-  return QString(); 
-}
-
-//----------------------------------------------------------------------------
-template<typename BaseClassType>
 QStringList ctkAbstractFactoryItem<BaseClassType>::instantiateErrorStrings()const
 {
   return this->InstantiateErrorStrings;
@@ -88,6 +81,48 @@ void ctkAbstractFactoryItem<BaseClassType>::clearInstantiateWarningStrings()
 }
 
 //----------------------------------------------------------------------------
+template<typename BaseClassType>
+QStringList ctkAbstractFactoryItem<BaseClassType>::loadErrorStrings()const
+{
+  return this->LoadErrorStrings;
+}
+
+//----------------------------------------------------------------------------
+template<typename BaseClassType>
+void ctkAbstractFactoryItem<BaseClassType>::appendLoadErrorString(const QString& errorString)
+{
+  this->LoadErrorStrings << errorString;
+}
+
+//----------------------------------------------------------------------------
+template<typename BaseClassType>
+void ctkAbstractFactoryItem<BaseClassType>::clearLoadErrorStrings()
+{
+  this->LoadErrorStrings.clear();
+}
+
+//----------------------------------------------------------------------------
+template<typename BaseClassType>
+QStringList ctkAbstractFactoryItem<BaseClassType>::loadWarningStrings()const
+{
+  return this->LoadWarningStrings;
+}
+
+//----------------------------------------------------------------------------
+template<typename BaseClassType>
+void ctkAbstractFactoryItem<BaseClassType>::appendLoadWarningString(const QString& msg)
+{
+  this->LoadWarningStrings << msg;
+}
+
+//----------------------------------------------------------------------------
+template<typename BaseClassType>
+void ctkAbstractFactoryItem<BaseClassType>::clearLoadWarningStrings()
+{
+  this->LoadWarningStrings.clear();
+}
+
+//----------------------------------------------------------------------------
 template<typename BaseClassType>  
 BaseClassType* ctkAbstractFactoryItem<BaseClassType>::instantiate()
 {
@@ -295,10 +330,19 @@ bool ctkAbstractFactory<BaseClassType>::registerItem(const QString& key,
   if (!_item->load())
     {
     this->displayStatusMessage(QtCriticalMsg, description, "Failed", this->verbose());
-    if (this->verbose() && !_item->loadErrorString().isEmpty())
+    if(!_item->loadErrorStrings().isEmpty())
       {
       qCritical().nospace() << qPrintable(QString(" ").repeated(2) + QLatin1String("Error(s):\n"))
-                            << qPrintable(QString(" ").repeated(4) + _item->loadErrorString());
+                            << qPrintable(QString(" ").repeated(4) +
+                                          _item->loadErrorStrings().join(
+                                            QString("\n") + QString(" ").repeated(4)));
+      }
+    if(!_item->loadWarningStrings().isEmpty())
+      {
+      qWarning().nospace() << qPrintable(QString(" ").repeated(2) + QLatin1String("Warning(s):\n"))
+                           << qPrintable(QString(" ").repeated(4) +
+                                         _item->loadWarningStrings().join(
+                                           QString("\n") + QString(" ").repeated(4)));
       }
     return false;
     }

+ 1 - 2
Libs/Core/ctkAbstractLibraryFactory.h

@@ -42,7 +42,6 @@ public:
   //explicit ctkFactoryLibraryItem(const QString& path);
  
   virtual bool load();
-  virtual QString loadErrorString()const;
 
   ///
   /// Set list of required symbols
@@ -59,7 +58,7 @@ public:
   void* symbolAddress(const QString& symbol)const;
 
 protected:
-  QLibrary              Library;
+  mutable QLibrary      Library;
   QHash<QString, void*> ResolvedSymbols;
   QStringList           Symbols;
 };

+ 5 - 7
Libs/Core/ctkAbstractLibraryFactory.tpp

@@ -44,22 +44,20 @@ bool ctkFactoryLibraryItem<BaseClassType>::load()
     {
     if (!this->resolve())
       {
+      this->appendLoadErrorString(this->Library.errorString());
       return false;
       }
     return true;
     }
+  else
+    {
+    this->appendLoadErrorString(this->Library.errorString());
+    }
   return false;
 }
 
 //----------------------------------------------------------------------------
 template<typename BaseClassType>
-QString ctkFactoryLibraryItem<BaseClassType>::loadErrorString()const
-{
-  return this->Library.errorString();
-}
-
-//----------------------------------------------------------------------------
-template<typename BaseClassType>
 void ctkFactoryLibraryItem<BaseClassType>::setSymbols(const QStringList& symbols)
 { 
   this->Symbols = symbols;