Coder Social home page Coder Social logo

googlecloudplatform / weasis-chcapi-extension Goto Github PK

View Code? Open in Web Editor NEW
19.0 30.0 15.0 213 KB

Weasis plugin adding support for the Google Cloud Healthcare API

License: Apache License 2.0

Java 98.25% HTML 0.04% Shell 1.71%
dicom dicomweb dicom-viewer

weasis-chcapi-extension's Introduction

About Weasis Google DICOM Plugin

Plugin enables Weasis Viewer users access to Google Cloud Healthcare API DICOM data. It utilizes DICOMweb REST API to interact with Google Cloud services.

Features

  • Login using your Google account
  • Interactive exploration of Google Healthcare API Dicom stores
  • Download and display all kinds of DICOM data
  • Advanced study search capabilities

Google Dicom Explorer

Running the plugin

The plugin runs as an extension to the main Weasis application, so first you need to download the main Weasis application from https://nroduit.github.io/en/.

Please note, latest supported release of Weasis is 3.6.0

Then you need to have existing data in the Cloud Healthcare API and install the plugin to get up and running. Please see more detailed instructions below.

Setting up Google Cloud Healthcare API:

See https://cloud.google.com/healthcare/docs/ to get started.

Installing plugin

  • Get the latest release JAR from this repositories releases tab.
  • Follow instructions at installing plug-ins to add this plugin to Weasis.
  • Run Weasis Viewer executable
  • Switch to Google Dicom Explorer tab and login using your Google Account

NOTE: If you face with some issues when using the plugin, you should remove .Weasis folder wich may cache previous or incorrect settings for the plugin in Weasis.

Using your own OAuth client

The plugin comes with it's own OAuth Client ID for ease of installation, but you can substitute your own if required (e.g. your organization has OAuth policy restriction on external apps). To do this go to the Google API Console and create a set of OAuth 2.0 credentials using the type "Other" and make sure to whitelist the scopes .../auth/cloud-healthcare and .../auth/cloudplatformprojects.readonly. Then download the credentials files in JSON format, name the file client_secrets.json and move it to conf folder, next to the ext-config.properties file.

Building plugin

If you're just trying to run the tool, please see the instructions above. If you need to recompile the plugin for any reason here are the steps to do so.

Weasis requires JDK14. Plugin depends on core Weasis API, that's why you have to clone, build and install core Weasis modules to your local Maven repository first For this purpose follow instructions at building Weasis. After Weasis artifacts installed to your local Maven repository plugin itself can be compiled Detailed build instruction can be found at building Weasis plugins Clone this repository and execute following script:

cd weasis-chcapi-extension

## build plugin
mvn clean install

weasis-chcapi-extension's People

Contributors

arvgord avatar chaopeng avatar danielbeaudreau avatar dependabot[bot] avatar dzelemba avatar google-admin avatar msbukal avatar nroduit avatar pavertomato avatar poojavenkatram avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

weasis-chcapi-extension's Issues

Upgrade Jackson Dependency

Upgrade com.fasterxml.jackson.core:jackson-databind to version 2.9.9 or later. There is a security vulnerability in the existing version.

Have a nice message when a Dataset does not have any DICOM Stores

Right now a pop-up comes up with "unexpected error when fetching google api: null"
Instead, it would be nicer to handle this and pop up: "No DICOM Stores in Dataset"
12:06:26.464 ERROR [AWT-EventQueue-0] org.weasis.dicom.google.api.ui.dicomstore.AbstractDicomSelectorTask: Error on dicom task java.lang.NullPointerException
at org.weasis.dicom.google.api.GoogleAPIClient.fetchDicomstores(GoogleAPIClient.java:365)
at org.weasis.dicom.google.api.ui.dicomstore.LoadDicomStoresTask.doInBackground(LoadDicomStoresTask.java:37)
at org.weasis.dicom.google.api.ui.dicomstore.LoadDicomStoresTask.doInBackground(LoadDicomStoresTask.java:24)

Plugin fails to start: URI is not absolute

I am running Weasis 3.6.0. I did what is says in the "Installing plugin" readme section, but the plugin fails to initialize, throwing the following exception:

19.05.2020 07:43:52.437 *SEVERE* [main] org.weasis.launcher.FileUtil: Cannot install bundle weasis-chcapi-extension-3.0.7
java.lang.IllegalArgumentException: URI is not absolute
	at java.base/java.net.URL.fromURI(URL.java:719)
	at java.base/java.net.URI.toURL(URI.java:1139)
	at org.weasis.launcher.AutoProcessor.installBundle(AutoProcessor.java:530)
	at org.weasis.launcher.AutoProcessor.processAutoProperties(AutoProcessor.java:351)
	at org.weasis.launcher.AutoProcessor.process(AutoProcessor.java:106)
	at org.weasis.launcher.WeasisLoader.setFelix(WeasisLoader.java:248)
	at org.weasis.launcher.WeasisLauncher.launch(WeasisLauncher.java:247)
	at org.weasis.launcher.AppLauncher.main(AppLauncher.java:27)
19.05.2020 07:43:52.450 *SEVERE* [main] org.weasis.launcher.FileUtil: Cannot start bundle weasis-chcapi-extension-3.0.7
java.lang.IllegalArgumentException: URI is not absolute
	at java.base/java.net.URL.fromURI(URL.java:719)
	at java.base/java.net.URI.toURL(URI.java:1139)
	at org.weasis.launcher.AutoProcessor.installBundle(AutoProcessor.java:530)
	at org.weasis.launcher.AutoProcessor.processAutoProperties(AutoProcessor.java:389)
	at org.weasis.launcher.AutoProcessor.process(AutoProcessor.java:106)
	at org.weasis.launcher.WeasisLoader.setFelix(WeasisLoader.java:248)
	at org.weasis.launcher.WeasisLauncher.launch(WeasisLauncher.java:247)
	at org.weasis.launcher.AppLauncher.main(AppLauncher.java:27)

Error when displaying the error message during authentication

The component must be created in EDT:

org.pushingpixels.substance.api.UiThreadingViolationException: Component creation must be done on Event Dispatch Thread
at org.pushingpixels.substance.internal.utils.SubstanceCoreUtilities.testComponentCreationThreadingViolation(SubstanceCoreUtilities.java:1832)
at org.pushingpixels.substance.internal.ui.SubstanceOptionPaneUI.createUI(SubstanceOptionPaneUI.java:99)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:71)
at sun.reflect.GeneratedMethodAccessor2.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:275)
at javax.swing.UIDefaults.getUI(UIDefaults.java:770)
at javax.swing.UIManager.getUI(UIManager.java:1016)
at javax.swing.JOptionPane.updateUI(JOptionPane.java:1882)
at javax.swing.JOptionPane.(JOptionPane.java:1845)
at javax.swing.JOptionPane.showOptionDialog(JOptionPane.java:857)
at javax.swing.JOptionPane.showMessageDialog(JOptionPane.java:666)
at javax.swing.JOptionPane.showMessageDialog(JOptionPane.java:637)
at javax.swing.JOptionPane.showMessageDialog(JOptionPane.java:608)
at org.weasis.dicom.google.api.ui.dicomstore.GoogleLoginTask.doInBackground(GoogleLoginTask.java:49)
at org.weasis.dicom.google.api.ui.dicomstore.GoogleLoginTask.doInBackground(GoogleLoginTask.java:24)
at javax.swing.SwingWorker$1.call(SwingWorker.java:295)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at javax.swing.SwingWorker.run(SwingWorker.java:334)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
UIDefaults.getUI() failed: createUI() failed for javax.swing.JOptionPane[,0,0,0x0,invalid,alignmentX=0.0,alignmentY=0.0,border=,flags=0,maximumSize=,minimumSize=,preferredSize=,icon=,initialValue=,message=Error occured on fetching google API.
Make sure you created OAuth Client ID credential
in Google Cloud console at https://console.cloud.google.com/apis/credentials
and copied your client_secrets.json to Weasis root folder.
Error message:400 Bad Request
{
"error" : "invalid_grant",
"error_description" : "Bad Request"
},messageType=INFORMATION_MESSAGE,optionType=DEFAULT_OPTION,wantsInput=false] java.lang.reflect.InvocationTargetException
java.lang.Error
at javax.swing.UIDefaults.getUIError(UIDefaults.java:731)

incorrect display of multiseries studies

if study is multiseries, frames from all series will be displayed as one series.

if these series multiframe, then frames will be displayed with strange sequence - sorted by frame first

series0frame0-series1frame0-series2frame0-series0frame1...

also if sum of all series is more than some limit, extension will fail to display frames as described #6

The plugin finds the study, but does not open it in the viewer

I got the plugin working up to the point where I get a study in the list. When I double-click on it, I see the loading indicator in the Status column "dancing" for several seconds, then stops, but nothing happens. The viewer does not open.

The last log entry I see in ~/.weasis/log/boot-0.log is this:

07.08.2020 15:45:55.298 *CONFIG* [Google Dicom Explorer-pool-4-thread-1] com.google.api.client.http.HttpTransport: -------------- REQUEST  --------------
GET https://healthcare.googleapis.com/v1beta1/projects/chuck-dev-[REDACTED]/locations/europe-west4/datasets/veye-feedback/dicomStores/veye-feedback/dicomWeb/studies/1.2.840.113745.101000.1186002.40721.8111.13846623
Accept: multipart/related; type=application/dicom; transfer-syntax=*
Accept-Encoding: gzip
Authorization: <Not Logged>
User-Agent: Google-HTTP-Java-Client/1.28.0 (gzip)

07.08.2020 15:45:55.298 *CONFIG* [Google Dicom Explorer-pool-4-thread-1] com.google.api.client.http.HttpTransport: curl -v --compressed -H 'Accept: multipart/related; type=application/dicom; transfer-syntax=*' -H 'Accept-Encoding: gzip' -H 'Authorization: <Not Logged>' -H 'User-Agent: Google-HTTP-Java-Client/1.28.0 (gzip)' -- 'https://healthcare.googleapis.com/v1beta1/projects/chuck-dev-[REDACTED]/locations/europe-west4/datasets/veye-feedback/dicomStores/veye-feedback/dicomWeb/studies/1.2.840.113745.101000.1186002.40721.8111.13846623'
07.08.2020 15:45:55.557 *CONFIG* [Google Dicom Explorer-pool-4-thread-1] com.google.api.client.http.HttpTransport: -------------- RESPONSE --------------
HTTP/1.1 200 OK
X-Frame-Options: SAMEORIGIN
Transfer-Encoding: chunked
Alt-Svc: h3-29=":443"; ma=2592000,h3-27=":443"; ma=2592000,h3-T050=":443"; ma=2592000,h3-Q050=":443"; ma=2592000,h3-Q046=":443"; ma=2592000,h3-Q043=":443"; ma=2592000,quic=":443"; ma=2592000; v="46,43"
Server: ESF
X-Content-Type-Options: nosniff
Vary: Referer
Vary: X-Origin
Vary: Origin
X-XSS-Protection: 0
Date: Fri, 07 Aug 2020 13:45:55 GMT
Content-Type: multipart/related; boundary=4ffba0f755780eec54b75fcc0e1d4c2f558da714b127b04b7431d4b6c770; transfer-syntax=*; type="application/dicom"

The window as I see it:
image

I am kinda suspecting that something is probably wrong with my GCP project setup. Is there any way I can debug this further?

latest plugin does not load

I have installed Weasis v3.6.0 and downloaded the latest jar file v3.0.13 and followed the instructions for installing the plugin. I have placed the plugin in the plugins directory (which I created) and modified the ext-config.properties file to include the absolute path (felix.auto.start.85=file:///C:/Program%20Files/Weasis/app/plugins/weasis-chcapi-extension-3.0.13.jar). After starting, it never properly loads the jar file. Internal logs for the app do not show the plugin trying to load. What am I missing?

fail to display big series

extension fails to display series bigger than some limit(something near 70MB, 100MB definitely won't be displayed) but according to network activity it seems to be downloaded

20.05.2019 22:05:37.517 *ERROR* [Google Dicom Explorer-pool-5-thread-1] org.weasis.dicom.google.explorer.DownloadManager$LoadGoogleDicom: Error occured javax.net.ssl.SSLException: SSL peer shut down incorrectly at sun.security.ssl.InputRecord.readV3Record(InputRecord.java:596) at sun.security.ssl.InputRecord.read(InputRecord.java:532) at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:975)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.