[Ctk-developers] data exchange in the DICOM Hosting implementation

Caylus, Michael (SCR US) michael.caylus at siemens.com
Wed Jun 8 01:24:58 EDT 2011


Hi Sascha,

I have been feeding the available data structure through multiple calls to the addToAvailableData(ctkDicomAppHosting::AvailableData& data,
                        ctkDicomObjectLocatorCache* objectLocatorCache,
                        const QString& filename)

function: one call per file found in my DICOM folder and then I send the notifyDataAvailable message only once.

You should have got the SOAP messages on both the server and client side from my previous mail if not let me know I can send you the files again.

I have also tried to send only the objectDescriptors array as suggested by Ben but I have observed the same issue.

Best,
Michael

-----Original Message-----
From: ctk-developers-bounces at commontk.org [mailto:ctk-developers-bounces at commontk.org] On Behalf Of ctk-developers-request at commontk.org
Sent: Tuesday, June 07, 2011 10:27 AM
To: ctk-developers at commontk.org
Subject: Ctk-developers Digest, Vol 23, Issue 10

Send Ctk-developers mailing list submissions to
        ctk-developers at commontk.org

To subscribe or unsubscribe via the World Wide Web, visit
        http://public.kitware.com/cgi-bin/mailman/listinfo/ctk-developers
or, via email, send a message with subject or body 'help' to
        ctk-developers-request at commontk.org

You can reach the person managing the list at
        ctk-developers-owner at commontk.org

When replying, please edit your Subject line so it is more specific than "Re: Contents of Ctk-developers digest..."


Today's Topics:

   1. Re: External projects in commontk github  organization
      (Sascha Zelzer)
   2. Re: data exchange in the DICOM Hosting implementation /
      QtSoap Limitation (Sascha Zelzer)


----------------------------------------------------------------------

Message: 1
Date: Tue, 07 Jun 2011 16:08:49 +0200
From: Sascha Zelzer <s.zelzer at dkfz-heidelberg.de>
Subject: Re: [Ctk-developers] External projects in commontk github
        organization
To: Zach Mullen <zach.mullen at kitware.com>
Cc: "ctk-developers at commontk.org" <ctk-developers at commontk.org>
Message-ID: <4DEE30F1.4020504 at dkfz-heidelberg.de>
Content-Type: text/plain; charset="iso-8859-1"; Format="flowed"

Of course Qt depends on a native sqlite implementation, but it provides a library which is database-backend independent:

http://doc.qt.nokia.com/4.7/qtsql.html

It uses Qt plugins for delegating the calls to specific RDBMS implementations.

Best,
Sascha

On 06/07/2011 03:32 PM, Zach Mullen wrote:
> The MIDAScpp library linked against kwsys/expat/curl because
> originally it did not depend on Qt.  In the future, we could remove
> these dependencies; it would just require a lot of rewriting to use
> the Qt capabilities instead.  Sqlite will have to stay as a dependency
> since Qt doesn't have any RDBMS capabilities.
>
> -Zach
>
> On Tue, Jun 7, 2011 at 9:19 AM, Jean-Christophe Fillion-Robin
> <jchris.fillionr at kitware.com <mailto:jchris.fillionr at kitware.com>> wrote:
>
>     Hi Sasha,
>
>     You bring a very good point !
>
>     The work related to these projects has just been published and is
>     open to review.
>     See
>
> https://github.com/zachmullen/CTK/commit/1051813f5046bb08835b73a12138a
> 672c9c48c82
>
>     Expat, KWSys, Sqlite and libcurl were initially shipped with
>     MIDAScpp library ... I advocates to externalize and CMake-ifie
>     properly these libraries as a first step. That way the code
>     checked in CTK would "really" corresponds to the library itself.
>
>     Having an other perspective is always fruitful :)  You are right,
>     since MIDAScpp would be part of CTK, it makes sens to not depend
>     on these external project and rely on Qt directly. Qt is a
>     mandatory dependency after all.
>
>     I am cc'ing Zach in the email and I am sure I will be able to
>     provide more comments.
>
>     Zach> Instead of using expat, libcurl, sqlite and kwsys, would it
>     make sens to depends on Qt ?
>
>     In the mean time, I have the following questions:
>
>      - Currently the library is named "CTKMIDAScppCore" and
>     CTKMIDAScppWidgets", I was thinking we could have something like
>     CTKDataManagementMIDAScppCore and CTKDataManagementMIDAScppWidgets.
>     What do you think ? Doing so would leave room to library like
>     "CTKDataManagementHadoopCore" ...
>
>      - Does introducing a "DataManagement" hierachy of libraries make
>     sens ? As far as I am concerned, I think it's important to provide
>     both functionality to process, store and retrieve the data.
>
>     Thanks
>     Jc
>
>
>     On Tue, Jun 7, 2011 at 1:48 AM, Sascha Zelzer
>     <s.zelzer at dkfz-heidelberg.de <mailto:s.zelzer at dkfz-heidelberg.de>>
>     wrote:
>
>         Hi guys,
>
>         Recently, I observed an explosion in the number of
>         repositories containing external repositories in the CommonTK
>         organization of github. Could we discuss the need of some of
>         them, and maybe have these discussions in the future in
>         advance of pushing those projects?
>
>         I am looking especially at the projects below, where Qt might
>         already offer enough functionality. Of course I could be
>         wrong, so thank you for your feedback!
>
>         - sqlite (why not use the Qt sqlite wrapper?)
>         - KWSys (where is it needed? I did not find any reference to
>         it in CTK)
>         - libexpat (Qt also provides a streaming XML API, also not
>         used anywhere)
>         - libcurl (there is also no reference to libcurl in CTK)
>
>
>         Thanks,
>
>         Sascha
>         _______________________________________________
>         Ctk-developers mailing list
>         Ctk-developers at commontk.org <mailto:Ctk-developers at commontk.org>
>
> http://public.kitware.com/cgi-bin/mailman/listinfo/ctk-developers
>
>
>
>
>     --
>     +1 919 869 8849 <tel:%2B1%20919%20869%208849>
>
>
>
>
> --
> Zach Mullen
> R & D Engineer
> Kitware Inc.
> (919) 969-6990 x314
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/ctk-developers/attachments/20110607/5a0cb00f/attachment-0001.htm>

------------------------------

Message: 2
Date: Tue, 07 Jun 2011 16:27:17 +0200
From: Sascha Zelzer <s.zelzer at dkfz-heidelberg.de>
Subject: Re: [Ctk-developers] data exchange in the DICOM Hosting
        implementation / QtSoap Limitation
To: "Caylus, Michael (SCR US)" <michael.caylus at siemens.com>
Cc: "Ljung, Patric \(SCR US\)" <patric.ljung at siemens.com>,
        "ctk-developers at commontk.org" <ctk-developers at commontk.org>
Message-ID: <4DEE3545.9030505 at dkfz-heidelberg.de>
Content-Type: text/plain; charset="iso-8859-1"; Format="flowed"

Hi Michael,

As far as I know, we only tested the data exchange interface with one
single .dcm file yet. I am also not aware of any restrictions regarding
the QtSoap array support (apart from a max dimension of 5).

How are you updating the AvailableData structure? Could you send the
SOAP messages send by the client and received by the server (you might
have to edit /opt/git/CTK/Plugins/org.commontk.dah.core/ctkSoapLog.h to
enable logging).

Maybe Ivo and Benoit can also comment on this issue, they where mainly
involved in writing the data exchange interface.

Thanks,
Sascha

On 06/06/2011 09:35 PM, Caylus, Michael (SCR US) wrote:
> Hi Sascha,
> First thanks a lot for the quick reply I got on my previous post.  I
> decided to go for the first approach and created my own CTK plugin as
> we should stay in the context of a hosting application. I managed to
> start and run my hosted application through the DICOM Application Host
> interface with this approach.
> I am now looking into passing some dataset to the hosted application.
> I wanted to start with something simple where the end-user select a
> folder that contains a list of DICOM files (one series) and pass it to
> my application. After choosing the folder; I am updating the
> AvailableData structure and then publish it to the hosted application
> when I am starting it. By the time the SOAP request is done I could
> see that the SOAP message will contains my list of uuids I created for
> one series but when the message is received
> (ctkSoapMessageProcessorList::process method) on the hosted
> application; the message is not the same and only contains one uuid
> now for the series. Is there any limitation currently within QtSoap to
> support arrays that you are aware of?  I have seen some discussion
> regarding on the ctk website
> (_http://www.commontk.org/index.php/Documentation/DicomApplicationHosting:DataExchangeDevelopment_)
> but I am not sure what the status here.
> If there is still some restriction with QtSoap regarding the array;
> should I send multiple notifyDataAvailable messages to the
> application; one for each file I am willing to get on the application
> side. Is there any other best alternative beside my first approach?
> Best,
> Michael
> -------------------------------------------------------------------------------------------------------------------------------
> From: Sascha Zelzer <s.zelzer at dkfz-heidelberg.de>
> Subject: Re: [Ctk-developers] How to wrap a Qt App into an hosted app
>         confirming to DICOM Supplement 118 / Working Group 23
> To: ctk-developers at commontk.org
> Message-ID: <4DCD447F.7060402 at dkfz-heidelberg.de>
> Content-Type: text/plain; charset="windows-1252"; Format="flowed"
> Hi Michael,
> Welcome to the CTK mailing list.
> DICOM Application Hosting support in CTK is still work in progress, so
> please be aware that not everything will work yet. Especially the data
> exchange interface needs more work. Nevertheless, I hope my comments
> below will get you started to experiment with your own Qt based DICOM
> App. Comments, bug reports, patches etc. are also always welcome!
> Best,
> Sascha
> On 05/13/2011 03:56 AM, Caylus, Michael (SCR US) wrote:
> > Hello,
> > I am new to the CTK SDK and would like to wrap my Qt application into
> > an hosted app. I have seen such an example by turning on in the CMake
> > configuration:  ctkExampleHost and ctkExampleHosted App.  I came up
> > with the following questions after playing with it:
> >
> >    1. In order to make this wrap-up for my app; I was considering to
> >       edit the org_commontk_dah_exampleapp plug-in which relies on the
> >       org_commontk_dah_app and org_commontk_dah_core plug-in and keep
> >       the ctkExampleHostedApp. Is this approach the right way to
> >       proceed? This implies splitting my app into the hostedApp and a
> >       CTK plugin; with most of the work to be done on the plug-in
> >       level I guess. I have seen some doc explaining how to embed the
> >       CTK plugin framework in my app too. Can I achieve the same
> >       result with this approach and how?
> >
> As you have already seen, it is possible to use the plugin framework
> from inside your own application and this is also the preferred way
> (instead of modifying the existing CTK plug-ins directly). In the case
> of a DICOM App, I can think of two different approaches, depending on
> your requirements:
> 1.) Your app is a "pure" DICOM App, i.e. you do not need run it
> outside the context of a "Hosting Application"
> This is the easier approach. You would create your own plug-in,
> equivalent to org.commontk.dah.exampleapp, which contains all your app
> code (logic, widgets, etc.). Additionally, you create your own
> ctkExampleHostedApp executable, which is essentially the same code as
> in the CTK repository (just adapt paths and plug-in names).
> The
> _http://www.commontk.org/index.php/Documentation/CTK_Plugin_Framework:_Setting_up_a_project?action=purge_
> tutorial explains how to create a CTK-based project.
> 2.) You want to use your app both "stand-alone" and as a "hosted app"
> This involves a little bit more knowledge about the plugin framework,
> but should also be easy to achieve. What the
> org.commontk.dah.exampleapp plug-in actually does, is to register a
> class containing the DICOM "application logic" as a service within the
> plugin-framework. You could either create this class (similar as the
> ctkExampleDicomAppLocig class) inside your current project (not in a
> separate plug-in) and register an instance by using the plugin
> framework context, or create a small plug-in containing this class and
> taking care of the registration itself. Then start the plugin
> framework from inside your executable, if you recognize the host and
> app url command line parameters (otherwise, create a QMainWindow
> yourself).
> Depending on how fancy you would like to get concerning the
> minimization of dependencies of your app in stand-alone mode to the
> CTK libraries, you could think of a more complex set-up containing two
> small wrapper executables, one for "app mode" starting the CTK plugin
> framework and one for "stand-alone mode", both linked to a library
> containing your application gui and logic...
> >    1. I couldn?t find to which QMainWindow is the button attached to
> >       in the ctkExampleDicomAppLogic::do_something()function.It
> >       doesn?t look like thectkExampleDicomAppLogic is heritating from
> >       a widgetalso. Which object is responsible of the creation of the
> >       mainwindow?
> >
> The org.commontk.dah.exampleapp plugin does not create a QMainWindow.
> It just create a button an shows it (moved and resized to respect the
> prescribed screen area from the host). In Qt, widgets become top-level
> windows if they don't have a parent widget and are "shown".
> >    1. Is there any doc that explains how to create a CTK plug-in and
> >       App from scratch. It would be probably better in my case to
> >       create a new plugin instead of editing an existing one.
> >
> There is no doc about creating a plug-in yet, but you can easily
> create one by using the ctkPluginGenerator executable (you may have to
> enable it in CMake). It might have some rough edges though...
> A CTK "app" is actually nothing special. Any executable can do, which
> links to the CTK libraries. The tutorial linked above explains how to
> use the plugin framework in an arbitrary executable.
> >    1. How can I add additional includes directories through a
> >       CMakeLists in the CTK framework.  I couldn?t find a way to
> >       define additional directories in the CMakeList of a plug-in (no
> >       include_directories). Is that define somewhere else?
> >
> Inside CTK itself, include directories are set-up auto-magically
> through our custom CMake dependency system. If you need to use
> external libraries in your own CTK plug-in (contained in your own
> project), just use standard CMake INCLUDE_DIRECTORIES (before calling
> the ctkMacroBuildPlugin macro) and LINK_LIBRARIES(${PROJECT_NAME} ...)
> (after the ctkMacroBuildPlugin call) commands.
> Happy coding,
> Sascha
> -------------- next part --------------
> An HTML attachment was scrubbed...
> URL:
> <_http://public.kitware.com/pipermail/ctk-developers/attachments/20110513/539b8908/attachment-0001.htm_>
> ------------------------------
> _______________________________________________
> Ctk-developers mailing list
> _Ctk-developers at commontk.org_ <mailto:Ctk-developers at commontk.org>
> _http://public.kitware.com/cgi-bin/mailman/listinfo/ctk-developers_
> End of Ctk-developers Digest, Vol 22, Issue 6
> *********************************************

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/ctk-developers/attachments/20110607/8e27e4d7/attachment.htm>

------------------------------

_______________________________________________
Ctk-developers mailing list
Ctk-developers at commontk.org
http://public.kitware.com/cgi-bin/mailman/listinfo/ctk-developers


End of Ctk-developers Digest, Vol 23, Issue 10
**********************************************



More information about the Ctk-developers mailing list