Przeglądaj źródła

Add ctkDICOMUtil and ::setDICOMLogLevel helper

This function allows to set the DICOM log level for
diagnostic purposes.
Isaiah Norton 12 lat temu
rodzic
commit
8542108ef7

+ 3 - 0
Libs/DICOM/Core/CMakeLists.txt

@@ -48,6 +48,8 @@ set(KIT_SRCS
   ctkDICOMRetrieve.h
   ctkDICOMTester.cpp
   ctkDICOMTester.h
+  ctkDICOMUtil.cpp
+  ctkDICOMUtil.h
 )
 
 if(DCMTK_VERSION_IS_360)
@@ -72,6 +74,7 @@ set(KIT_MOC_SRCS
   ctkDICOMQuery.h
   ctkDICOMRetrieve.h
   ctkDICOMTester.h
+  ctkDICOMUtil.h
   )
 
 # UI files

+ 100 - 0
Libs/DICOM/Core/ctkDICOMUtil.cpp

@@ -0,0 +1,100 @@
+/*=========================================================================
+
+  Library:   CTK
+
+  Copyright (c) Brigham & Women's Hospital
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0.txt
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+
+=========================================================================*/
+
+// Qt includes
+#include <QStringList>
+#include <QFlags>
+
+// ctkDICOMCore includes
+#include "ctkDICOMUtil.h"
+#include "ctkLogger.h"
+
+// DCMTK includes
+#include <dcmtk/dcmnet/diutil.h>
+
+static ctkLogger logger ( "org.commontk.dicom.DICOMUtil" );
+
+//------------------------------------------------------------------------------
+class ctkDICOMUtilPrivate
+{
+public:
+  ctkDICOMUtilPrivate() {};
+  ~ctkDICOMUtilPrivate() {};
+};
+
+//------------------------------------------------------------------------------
+// ctkDICOMUtil methods
+
+//------------------------------------------------------------------------------
+ctkDICOMUtil::ctkDICOMUtil(QObject* parentObject)
+  : QObject(parentObject)
+  , d_ptr(new ctkDICOMUtilPrivate)
+{
+}
+
+//------------------------------------------------------------------------------
+ctkDICOMUtil::~ctkDICOMUtil()
+{
+}
+
+//------------------------------------------------------------------------------
+void ctkDICOMUtil::setDICOMLogLevel(ctkDICOMUtil::LogLevel level)
+{
+  dcmtk::log4cplus::Logger log = dcmtk::log4cplus::Logger::getRoot();
+  
+  switch (level)
+    {
+    case ctkDICOMUtil::Trace: log.setLogLevel(OFLogger::TRACE_LOG_LEVEL); break;
+    case ctkDICOMUtil::Debug: log.setLogLevel(OFLogger::DEBUG_LOG_LEVEL); break;
+    case ctkDICOMUtil::Info: log.setLogLevel(OFLogger::INFO_LOG_LEVEL); break;
+    case ctkDICOMUtil::Warning: log.setLogLevel(OFLogger::WARN_LOG_LEVEL); break;
+    case ctkDICOMUtil::Error: log.setLogLevel(OFLogger::ERROR_LOG_LEVEL); break;
+    case ctkDICOMUtil::Fatal: log.setLogLevel(OFLogger::FATAL_LOG_LEVEL); break;
+    default:
+      logger.info("ctkDICOMUtil::setDICOMLogLevel: Unsupported DICOM log level specified");
+      break;
+    }
+}
+
+ctkDICOMUtil::LogLevel ctkDICOMUtil::getDICOMLogLevel() const
+{
+  dcmtk::log4cplus::Logger log = dcmtk::log4cplus::Logger::getRoot();
+  
+  switch (log.getLogLevel())
+    {
+    case OFLogger::TRACE_LOG_LEVEL: return ctkDICOMUtil::Trace;
+    case OFLogger::DEBUG_LOG_LEVEL: return ctkDICOMUtil::Debug;
+    case OFLogger::INFO_LOG_LEVEL: return ctkDICOMUtil::Info;
+    case OFLogger::WARN_LOG_LEVEL: return ctkDICOMUtil::Warning;
+    case OFLogger::ERROR_LOG_LEVEL: return ctkDICOMUtil::Error;
+    case OFLogger::FATAL_LOG_LEVEL: return ctkDICOMUtil::Fatal;
+    default:
+      return ctkDICOMUtil::None;
+    }
+}
+
+// --------------------------------------------------------------------------
+QString ctkDICOMUtil::DICOMLogLevel()const
+{
+  ctkDICOMUtil::LogLevel logLevel = getDICOMLogLevel();
+  QMetaEnum logLevelEnum = this->metaObject()->enumerator(0);
+  Q_ASSERT(QString("LogLevel").compare(logLevelEnum.name()) == 0);
+  return QLatin1String(logLevelEnum.valueToKey(logLevel));
+}

+ 69 - 0
Libs/DICOM/Core/ctkDICOMUtil.h

@@ -0,0 +1,69 @@
+/*=========================================================================
+
+  Library:   CTK
+
+  Copyright (c) Brigham & Women's Hospital
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0.txt
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+
+=========================================================================*/
+
+#ifndef __ctkDICOMUtil_h
+#define __ctkDICOMUtil_h
+
+// Qt includes 
+#include <QObject>
+#include <QString>
+
+// CTK includes
+#include "ctkDICOMCoreExport.h"
+#include "ctkDICOMDatabase.h"
+
+class ctkDICOMUtilPrivate;
+
+class CTK_DICOM_CORE_EXPORT ctkDICOMUtil : public QObject
+{
+  Q_OBJECT
+  Q_FLAGS(LogLevel)
+public:
+   enum LogLevel
+    {
+    None     = 0x0,
+    Unknown  = 0x1,
+    Status   = 0x2,
+    Trace    = 0x4,
+    Debug    = 0x8,
+    Info     = 0x10,
+    Warning  = 0x20,
+    Error    = 0x40,
+    Critical = 0x80,
+    Fatal    = 0x100
+    };
+  Q_DECLARE_FLAGS(LogLevels, LogLevel)
+  Q_ENUMS(LogLevel)
+ 
+  explicit ctkDICOMUtil(QObject* parent = 0);
+  virtual ~ctkDICOMUtil();
+
+  Q_INVOKABLE void setDICOMLogLevel(LogLevel level);
+  Q_INVOKABLE LogLevel getDICOMLogLevel() const;
+  Q_INVOKABLE QString DICOMLogLevel() const;
+
+protected:
+  QScopedPointer<ctkDICOMUtilPrivate> d_ptr;
+
+private:
+  Q_DECLARE_PRIVATE(ctkDICOMUtil);
+  Q_DISABLE_COPY(ctkDICOMUtil);
+};
+#endif