Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

I følgende beskrives opsætningstrinene for at komme i gang med NAP platformen, hvis man vil oprette et ny projekt som skal ind i NAP'en. 


Krav til software:

Docker skal være installeret, da opsætningen foregår via docker-compose.

...

database og flyway skal således køres igen med `docker-compose up & docker-compose down`

...

Kom igang med NAP som værtssystem-/ LPS udvikler

I det følgende beskrives, hvordan man som værtssystem-/ LPS udvikler, skal integrerer NAP platformen ind i det respektive system. 

Der er ikke noget som skal opsættes ved siden af, hvis man benytter sig af produktions/test miljøet.

Integrationen med NAP

For at kommunikere med NAP'en skal det givne værtssystem/LPS opsættes, således den lytte på specifikke beskeder fra SDK'et. 

I det nedenstående vil eksemplerne tage udgangspunkt i java, og der kan derfor også tages udgangspunkt i nap-host-java, hvis der er brug for insipiration.

INDSÆT LINK 

Opsætning af kommunikation med SDK.

For at kunne kommunikere med SDK'et, gøres brug af et Webview, hvori man kan indlejre javascript på den indlæste HTML side, da det er den måde SDK'et fungere på. 

I nedenstående eksempel, tilføjes "NAPBridge" på "window" variablen, som er i global scope på den indlæste HTML side.

Code Block
languagejfx
titleIndlejre javascript på den indlæste HTML side
final JSObject window = (JSObject) webEngine.executeScript("window");
window.setMember("NAP", napBridge)


En implementering af NAP Bridge kan se således ud:

Code Block
languagejfx
titleNAPBridge implementering
public class NAPBridge {
        private JSObject bridge;

        /**
         * Transforming a JSON string into a NAPMessage and sending it to subscribers.
         * @param rawEventString
         */
        public void send(String rawEventString) {
            try {
                System.out.println(this.getClass().getName() + " send(): " + rawEventString);
                NAPMessage msg = objectMapper.readValue(rawEventString, NAPMessage.class);
                notifyListeners(msg);
            } catch (IOException ioException) {
                System.out.println(this.getClass().getName() + " " + ioException);
            }
        }

        /**
         * Sets the bridge to act as a callback.
         * @param bridge
         */
        public void setCallback(JSObject bridge) {
            System.out.println(this.getClass().getName() + " setCallBack(): " +  bridge);
            this.bridge = bridge;
        }
   }}

Et JS objekt, som bridge variablen er, gør at man kan eksekvere javascript metoder og undersøge javascript properties. 

Derudover er der implementeret to metoder, som er send() og setCallback(), det er disse to metoder som SDK'et kalder til. 

Send() gør brug af et internt subscribe pattern, som notificere dem som lytter og en implementering af de indkommende beskeder, kunne se således ud:

Code Block
languagejfx
titleIndkommende NAP beskeder
private void handleBridgeCallBacks(NAPMessage napMessage) {
        System.out.println("Bridge got type NAPMessageType" + napMessage.getEvent().getNAPEventType());
        switch (napMessage.getEvent().getNAPEventType()) {
            case WebAppOpen:
                try {
                    WebApp webApp = this.getWebAppById(
                            Configuration.getInstance().getNapAdminUrl(this.environment),
                            FHIRResoureValueGetter.getWebAppId(napMessage),
                            this.base64EncodedSAMLToken
                    );
                    if (webApp != null) {
                        Platform.runLater(() -> this.webAppPane.openURL(webApp.getManifest().getUrl()));
                    }
                } catch (ConnectException e) {
                    System.err.println("Kunne ikke oprette forbindelse til serveren");
                } catch (Exception e) {
                    e.printStackTrace();
                }
                break;
            case PatientOpen:
                sendCurrentPatient(txfCPR.getText(), napMessage.getDate(), napMessage.getId());
                break;
            case SessionOpen:
                sendToken(napMessage);
                break;
            case SessionClose:
                sendSessionClosed(napMessage);
                break;
            case SessionError:
                sendSessionError(napMessage);
        }
    }


Når der skal sendes en NAP besked, kan der så gøres brug af bridgen. Call() tager imod en string, som angiver hvilken metode man vil kalde, her "handle", som sender en string representation af et JSON objekt, her af typen NAPMessage.

Code Block
languagejfx
titleBrug af Nap Bridge
 if(napBridge.bridge != null) {
     this.napBridge.bridge.call("handle", eventRawJSONString);
 }



 

NAP Lobby Web

For at se de projekter der er tilgængelige, skal NAP Lobby Web integreres med det nuværende system. 




Start Nap lobby web på test

Start Nap admin

Derefter skal den ind i NAP'en og være som projekt. 


Inspiration kan bruges NAP Java host som simulere et LPS system. 


NOTE: INTRODUKTION TIL VISIONER OG HVORDAN DET SKAL BRUGES.

...