Browse Source

First successful notifyDataAvailable/getData w XIP

Ivo Wolf 14 years ago
parent
commit
15fb58237a

+ 3 - 4
Plugins/org.commontk.dah.core/ctkDicomAppHostingTypes.h

@@ -21,7 +21,6 @@
 
 #include <QString>
 #include <QList>
-#include <QUuid>
 
 #ifndef CTKDICOMAPPHOSTINGTYPES_H
 #define CTKDICOMAPPHOSTINGTYPES_H
@@ -56,8 +55,8 @@ namespace ctkDicomAppHosting {
   };
 
   struct ObjectLocator {
-    QUuid locator;
-    QUuid source;
+    QString locator;
+    QString source;
     QString transferSyntax;
     qint64 length;
     qint64 offset;
@@ -65,7 +64,7 @@ namespace ctkDicomAppHosting {
   };
 
   struct ObjectDescriptor {
-    QUuid descriptorUUID;
+    QString descriptorUUID;
     QString mimeType;
     QString classUID;
     QString transferSyntaxUID;

+ 38 - 16
Plugins/org.commontk.dah.core/ctkDicomAppHostingTypesHelper.cpp

@@ -161,7 +161,7 @@ QString ctkDicomSoapUID::getUID(const QtSoapType& type)
 
 
 ctkDicomSoapBool::ctkDicomSoapBool(const QString& name, bool boolean)
-  : QtSoapSimpleType(QtSoapQName(name), boolean)
+  : QtSoapSimpleType(QtSoapQName(name), boolean, 0)
 {}
 
 bool ctkDicomSoapBool::getBool(const QtSoapType& type)
@@ -172,44 +172,66 @@ bool ctkDicomSoapBool::getBool(const QtSoapType& type)
 
 ctkDicomSoapArrayOfStringType::ctkDicomSoapArrayOfStringType(const QString& typeName,
                                                              const QString& name, const QStringList& array)
-  : QtSoapArray(QtSoapQName(name), QtSoapType::String, array.size())
+//  : QtSoapArray(QtSoapQName(name), QtSoapType::String, array.size())
+  : QtSoapStruct(QtSoapQName(name))
 {
   for (QStringList::ConstIterator it = array.constBegin();
        it < array.constEnd(); it++)
   {
-    this->append(new QtSoapSimpleType(QtSoapQName(typeName),*it));
+    this->insert(new QtSoapSimpleType(QtSoapQName(typeName),*it));
+//    this->append(new QtSoapSimpleType(QtSoapQName(typeName),*it));
   }
 }
 
-QStringList ctkDicomSoapArrayOfStringType::getArray(const QtSoapArray& array)
+QStringList ctkDicomSoapArrayOfStringType::getArray(const QtSoapType& array)
 {
   QStringList list;
   for (int i = 0; i < array.count() ; i++)
   {
-    const QString str = array.at(i).value().toString();
+    const QString str = array[i].value().toString();
     list << str;
   }
   return list;
 }
 
+ctkDicomSoapUUID::ctkDicomSoapUUID(const QString& name, const QUuid& uuid)
+//  : QtSoapArray(QtSoapQName(name), QtSoapType::String, array.size())
+  : QtSoapStruct(QtSoapQName(name))
+{
+  QString uuidstring(uuid.toString());
+  uuidstring.remove(0,1).chop(1);
+  this->insert(new QtSoapSimpleType(QtSoapQName("uuid"),uuidstring));
+}
+
+QUuid ctkDicomSoapUUID::getUuid(const QtSoapType& type)
+{
+  QUuid uuid;
+  if(type.type()==QtSoapType::Struct)
+    uuid = QUuid(type[0].value().toString());
+  else
+    uuid = QUuid(type.value().toString());
+  return uuid;
+}
 
 ctkDicomSoapArrayOfUUIDS::ctkDicomSoapArrayOfUUIDS(const QString& name, const QList<QUuid>& array)
-  : QtSoapArray(QtSoapQName(name), QtSoapType::String, array.size())
+//  : QtSoapArray(QtSoapQName(name), QtSoapType::String, array.size())
+  : QtSoapStruct(QtSoapQName(name))
 {
   for (QList<QUuid>::ConstIterator it = array.constBegin();
        it < array.constEnd(); it++)
   {
-    this->append(new QtSoapSimpleType(QtSoapQName("UUID"),(*it).toString()));
+    QString uuidstring((*it).toString());
+    uuidstring.remove(0,1).chop(1);
+    this->insert(new ctkDicomSoapUUID("uuid",uuidstring));
   }
 }
 
-QList<QUuid> ctkDicomSoapArrayOfUUIDS::getArray(const QtSoapArray& array)
+QList<QUuid> ctkDicomSoapArrayOfUUIDS::getArray(const QtSoapType& array)
 {
   QList<QUuid> list;
   for (int i = 0; i < array.count() ; i++)
   {
-    const QString str = array.at(i).value().toString();
-    list << QUuid(str);
+    list << QUuid(array[i].value().toString());
   }
   return list;
 }
@@ -219,7 +241,7 @@ ctkDicomSoapObjectDescriptor::ctkDicomSoapObjectDescriptor(const QString& name,
                                                            const ctkDicomAppHosting::ObjectDescriptor& od)
   : QtSoapStruct(QtSoapQName(name))
 {
-  this->insert(new QtSoapSimpleType(QtSoapQName("uuid"),
+  this->insert(new ctkDicomSoapUUID("uuid",
                                     od.descriptorUUID) );
   this->insert(new QtSoapSimpleType(
                  QtSoapQName("mimeType"),
@@ -238,7 +260,7 @@ ctkDicomSoapObjectDescriptor::ctkDicomSoapObjectDescriptor(const QString& name,
 ctkDicomAppHosting::ObjectDescriptor ctkDicomSoapObjectDescriptor::getObjectDescriptor(const QtSoapType& type)
 {
   ctkDicomAppHosting::ObjectDescriptor od;
-  od.descriptorUUID = QUuid(type["uuid"].value().toString());
+  od.descriptorUUID = ctkDicomSoapUUID::getUuid(type["uuid"]);
   od.mimeType =
       type["mimeType"].value().toString();
   od.classUID =
@@ -521,8 +543,8 @@ ctkDicomAppHosting::ObjectLocator ctkDicomSoapObjectLocator::getObjectLocator(co
 {
   ctkDicomAppHosting::ObjectLocator ol;
 
-  ol.locator = QUuid(type["Locator"].value().toString());
-  ol.source = QUuid(type["Source"].value().toString());
+  ol.locator = type["Locator"].value().toString();
+  ol.source = type["Source"].value().toString();
   ol.transferSyntax =
       type["TransferSyntax"].value().toString();
   ol.length =
@@ -546,14 +568,14 @@ ctkDicomSoapArrayOfObjectLocators::ctkDicomSoapArrayOfObjectLocators(
   }
 }
 
-QList<ctkDicomAppHosting::ObjectLocator> ctkDicomSoapArrayOfObjectLocators::getArray(const QtSoapArray& array)
+QList<ctkDicomAppHosting::ObjectLocator> ctkDicomSoapArrayOfObjectLocators::getArray(const QtSoapType& array)
 {
   QList<ctkDicomAppHosting::ObjectLocator> list;
 
   for (int i = 0; i < array.count() ; i++)
   {
     const ctkDicomAppHosting::ObjectLocator ol =
-        ctkDicomSoapObjectLocator::getObjectLocator(array.at(i));
+        ctkDicomSoapObjectLocator::getObjectLocator(array[i]);
     list << ol;
   }
   return list;

+ 12 - 5
Plugins/org.commontk.dah.core/ctkDicomAppHostingTypesHelper.h

@@ -70,19 +70,26 @@ struct org_commontk_dah_core_EXPORT ctkDicomSoapBool : public QtSoapSimpleType
 };
 
 //Not easy to template, will see later for other types
-struct org_commontk_dah_core_EXPORT ctkDicomSoapArrayOfStringType : public QtSoapArray
+struct org_commontk_dah_core_EXPORT ctkDicomSoapArrayOfStringType : public QtSoapStruct
 {
   ctkDicomSoapArrayOfStringType(const QString& typeName,
                                 const QString& name, const QStringList& array);
 
-  static QStringList getArray(const QtSoapArray& array);
+  static QStringList getArray(const QtSoapType& array);
 };
 
-struct org_commontk_dah_core_EXPORT ctkDicomSoapArrayOfUUIDS : public QtSoapArray
+struct org_commontk_dah_core_EXPORT ctkDicomSoapUUID : public QtSoapStruct
+{
+  ctkDicomSoapUUID(const QString& name, const QUuid& uuid);
+
+  static QUuid getUuid(const QtSoapType& array);
+};
+
+struct org_commontk_dah_core_EXPORT ctkDicomSoapArrayOfUUIDS : public QtSoapStruct
 {
   ctkDicomSoapArrayOfUUIDS(const QString& name, const QList<QUuid>& array);
 
-  static QList<QUuid> getArray(const QtSoapArray& array);
+  static QList<QUuid> getArray(const QtSoapType& array);
 };
 
 struct org_commontk_dah_core_EXPORT ctkDicomSoapObjectDescriptor : public QtSoapStruct
@@ -147,7 +154,7 @@ struct org_commontk_dah_core_EXPORT ctkDicomSoapArrayOfObjectLocators : public Q
 {
   ctkDicomSoapArrayOfObjectLocators(const QString& name, const QList<ctkDicomAppHosting::ObjectLocator>& array);
 
-  static QList<ctkDicomAppHosting::ObjectLocator> getArray(const QtSoapArray& array);
+  static QList<ctkDicomAppHosting::ObjectLocator> getArray(const QtSoapType& array);
 };
 
 #endif // CTKDICOMAPPHOSTINGTYPESHELPER_H

+ 1 - 0
Plugins/org.commontk.dah.core/ctkDicomExchangeInterface.h

@@ -25,6 +25,7 @@
 
 #include <QRect>
 #include <QObject>
+#include <QUuid>
 
 #include "ctkDicomAppHostingTypes.h"
 

+ 15 - 5
Plugins/org.commontk.dah.core/ctkDicomExchangeService.cpp

@@ -53,11 +53,21 @@ QList<ctkDicomAppHosting::ObjectLocator> ctkDicomExchangeService::getData(
   //Q_D(ctkDicomService);
   QList<QtSoapType*> list;
 
-  list << new ctkDicomSoapArrayOfUUIDS("objectUUIDS",objectUUIDs);
-  list << new ctkDicomSoapArrayOfStringType("UID","acceptableTransferSyntaxUIDs", acceptableTransferSyntaxUIDs);
-  list << new ctkDicomSoapBool("includeBulkData", includeBulkData);
-  const QtSoapType & result = submitSoapRequest("getData",list);
-  return ctkDicomSoapArrayOfObjectLocators::getArray(static_cast<const QtSoapArray &>(result));
+  //list << new ctkDicomSoapArrayOfUUIDS("objectUUIDS",objectUUIDs);
+  //list << new ctkDicomSoapArrayOfStringType("UID","acceptableTransferSyntaxUIDs", acceptableTransferSyntaxUIDs);
+  //list << new ctkDicomSoapBool("includeBulkData", includeBulkData);
+  //const QtSoapType & result = submitSoapRequest("getData",list);
+  //const QtSoapType & result = submitSoapRequest("getData",list);
+QtSoapType *tt;
+  list << (tt=new ctkDicomSoapArrayOfUUIDS("uuids",objectUUIDs));
+extern void DumpAll(const QtSoapType& type, int indent=0);
+DumpAll(*tt);
+  list << (tt=new ctkDicomSoapBool("includeBulkData", includeBulkData));
+DumpAll(*tt);
+  const QtSoapType & result = submitSoapRequest("getDataAsFile",list);
+DumpAll(result); //xxx
+
+  return ctkDicomSoapArrayOfObjectLocators::getArray(result);
 }
 
 void ctkDicomExchangeService::releaseData(QList<QUuid> objectUUIDs)

+ 2 - 0
Plugins/org.commontk.dah.core/ctkSimpleSoapClient.cpp

@@ -113,6 +113,8 @@ const QtSoapType & ctkSimpleSoapClient::submitSoapRequest(const QString& methodN
   //qDebug() << reply->readAll();
   const QtSoapMessage& response = d->http.getResponse();
 
+  CTK_SOAP_LOG( << "Got Response." );
+
   if (response.isFault())
   {
     qCritical() << "ctkSimpleSoapClient: server error (response.IsFault())";

+ 33 - 0
Plugins/org.commontk.dah.exampleapp/ctkExampleDicomAppLogic.cpp

@@ -62,6 +62,7 @@ bool ctkExampleDicomAppLogic::bringToFront(const QRect& /*requestedScreenArea*/)
 void ctkExampleDicomAppLogic::do_something()
 {
   button = new QPushButton("Button from App");
+  connect(button, SIGNAL(clicked()), this, SLOT(buttonClicked()));
   try
   {
 
@@ -134,6 +135,17 @@ bool ctkExampleDicomAppLogic::notifyDataAvailable(ctkDicomAppHosting::AvailableD
   if(data.patients.count()>0)
   {
     s=s+" name:"+data.patients.begin()->name+" studies.count(): "+QString().setNum(data.patients.begin()->studies.count());
+    if(data.patients.begin()->studies.count()>0)
+    {
+      s=s+" series.count():" + QString().setNum(data.patients.begin()->studies.begin()->series.count());
+      if(data.patients.begin()->studies.begin()->series.count()>0)
+      {
+        s=s+" uid:" + data.patients.begin()->studies.begin()->series.begin()->seriesUID;
+//        QUuid uuid("93097dc1-caf9-43a3-a814-51a57f8d861d");//data.patients.begin()->studies.begin()->series.begin()->seriesUID);
+        uuid = data.patients.begin()->studies.begin()->series.begin()->objectDescriptors.begin()->descriptorUUID;
+        s=s+" uuid:"+uuid.toString();
+      }
+    }
   }
   button->setText(s);
   return false;
@@ -161,3 +173,24 @@ ctkDicomHostInterface* ctkExampleDicomAppLogic::getHostInterface() const
   if (!host) throw std::runtime_error("DICOM Host Interface not available");
   return host;
 }
+
+void ctkExampleDicomAppLogic::buttonClicked()
+{
+  QList<QUuid> uuidlist;
+  uuidlist.append(uuid);
+  QString transfersyntax("1.2.840.10008.1.2.1");
+  QList<QString> transfersyntaxlist;
+  transfersyntaxlist.append(transfersyntax);
+  QList<ctkDicomAppHosting::ObjectLocator> locators;
+  locators = getHostInterface()->getData(uuidlist, transfersyntaxlist, false);
+  qDebug() << "got locators! " << QString().setNum(locators.count());
+
+  QString s;
+  s=s+" loc.count:"+QString().setNum(locators.count());
+  if(locators.count()>0)
+  {
+    s=s+" URI: "+locators.begin()->URI;
+    qDebug() << "URI: " << locators.begin()->URI;
+  }
+  button->setText(s);
+}

+ 4 - 0
Plugins/org.commontk.dah.exampleapp/ctkExampleDicomAppLogic_p.h

@@ -68,6 +68,8 @@ protected slots:
 
   void changeState(int);
 
+  void buttonClicked();
+
 private:
 
   ctkDicomHostInterface* getHostInterface() const;
@@ -76,6 +78,8 @@ private:
 
   QPushButton *button;
 
+  QUuid uuid;
+
 }; // ctkExampleDicomAppLogic
 
 #endif // ctkExampleDicomAppLogic_P_H