Browse Source

Connect query button to perform actual dicom query

Still does not support filters, but does iterate through
server nodes and performs the queries.  Results are in
the tree view (results)
Steve Pieper 14 years ago
parent
commit
48800c3e91
1 changed files with 27 additions and 47 deletions
  1. 27 47
      Libs/DICOM/Widgets/ctkDICOMQueryRetrieveWidget.cpp

+ 27 - 47
Libs/DICOM/Widgets/ctkDICOMQueryRetrieveWidget.cpp

@@ -25,6 +25,7 @@ public:
   ctkDICOMQueryRetrieveWidgetPrivate(){}
 
   QMap<QString, ctkDICOMQuery*> queries;
+  ctkDICOMModel model;
 };
 
 //----------------------------------------------------------------------------
@@ -70,50 +71,7 @@ void ctkDICOMQueryRetrieveWidget::setRetrieveDatabaseFileName(const QString& fil
 void ctkDICOMQueryRetrieveWidget::processQuery()
 {
   Q_D(ctkDICOMQueryRetrieveWidget);
-
-  ctkDICOMQuery query;
-
-  // TODO: convert widget to query parameters
-  // TODO: add interface to ctkDICOMQuery for specifying query params
-  //d->queryWidget->populateQuery();
-
-  QStringList nodes = d->serverNodeWidget->nodes();
-  foreach (QString node, nodes)
-  {
-    d->queries[node] = new ctkDICOMQuery;
-    QMap<QString, QString> parameters = d->serverNodeWidget->nodeParameters(node);
-    d->queries[node]->setCallingAETitle(node);
-  }
-
-#if 0
-TODO: map the server node options to the query classes
-
-  query.setCallingAETitle ( QString ( argv[2] ) );
-  query.setCalledAETitle ( QString ( argv[3] ) );
-  query.setHost ( QString ( argv[4] ) );
-  int port;
-  bool ok;
-  port = QString ( argv[5] ).toInt ( &ok );
-  if ( !ok )
-    {
-    std::cerr << "Could not convert " << argv[5] << " to an integer" << std::endl;
-    print_usage();
-    return EXIT_FAILURE;
-    }
-  query.setPort ( port );
-
-  try
-    {
-    query.query ( myCTK.database() );
-    }
-  catch (std::exception e)
-  {
-    return EXIT_FAILURE;
-  }
-  return EXIT_SUCCESS;
-#endif
-
-  // TODO: create a map of server locations to query results in the private class
+  
   ctkDICOMDatabase queryResultDatabase;
 
   try { queryResultDatabase.openDatabase( ":memory:" ); }
@@ -124,7 +82,29 @@ TODO: map the server node options to the query classes
     return;
   }
 
-  ctkDICOMModel model;
-  model.setDatabase(queryResultDatabase.database());
-  d->results->setModel(&model);
+  QStringList serverNodes = d->serverNodeWidget->nodes();
+  foreach (QString server, serverNodes)
+  {
+    d->queries[server] = new ctkDICOMQuery;
+    QMap<QString, QString> parameters = d->serverNodeWidget->nodeParameters(server);
+    d->queries[server]->setCallingAETitle(d->serverNodeWidget->callingAETitle());
+    d->queries[server]->setCalledAETitle(parameters["AETitle"]);
+    d->queries[server]->setHost(parameters["Address"]);
+    d->queries[server]->setPort(parameters["Port"].toInt());
+    // TODO: add interface to ctkDICOMQuery for specifying query params
+    // for now, query for everything
+
+    try
+    {
+      // run the query against the selected server and put results in database
+      d->queries[server]->query ( queryResultDatabase );
+    }
+    catch (std::exception e)
+    {
+      logger.error ( "Query error: " + parameters["Name"] );
+    }
+  }
+
+  d->model.setDatabase(queryResultDatabase.database());
+  d->results->setModel(&d->model);
 }