Introduktion

Formål

Dette dokument er en vejledning til anvendelse af den Nationale Afprøvningsplatform (NAP). 

På baggrund af dette dokument, er det muligt for leverandører af både lægepraksissystemer (LPS) og afprøvningsprojekter, at udvikle systemer som integrerer med NAP. 

Sammenhæng med øvrige dokumenter

Dette dokument er en del af den samlede dokumentation for NAP Platformen.

Dokumentet er udformet, så det i videst muligt omfang opfylder sit formål uafhængigt af de øvrige dokumenter.

Ønskes mere information omkring arkitektur og design findes dette på NAP Platform - Design og Arkitektur beskrivelse.

Ønskes mere information omkring installationsvejledning til anvender kan findes på NAP Platform - Installationsvejledning.

Kom i gang med NAP som projektudvikler

For at oprette et nyt projekt i NAP er der 3 trin:

  1. Hent NapJavaHost
  2. Udvikling af dit projekt
  3. Publicering af dit projekt på test miljøerne

I følgende beskrives opsætningstrinene for at komme i gang med NAP platformen mere detaljeret.

Nap-host-java

Start med at hente nap-host-java I den executable der skal bruges.

Windows

Mac OS X

Linux

Alternativt kan projektet hentes fra  NapJavaHost, bygges med java 13 og eksekveres med `java -jar`.


Når nap-host-java åbnes, vil der blive præsenteret en login dialog.  

Login ved at trykke på test1 og bruge default login credentials. Dette vil trække en SAMLAssertion fra STS på test1, som kan bruges i 30 min. Når der er brugt et gyldigt login, vil man se et eksempel på et værtssystem. 

Applikationen viser 4 faner, hvor 3 af dem har screenshots som billeder (for at simulere et værtssytem), men den fanen "Afprøvningsløsning", indeholder en chromium browser som åbner nap-lobby-web.

Her fra kan brugerens tilgængelig projekter ses.

Indtast et cpr nummer på en test person (Eksempelvis "2708599967", som er et hyppigt anvendt test cpr nummer), herefter kan der browses rundt i fanerne.

Udvikling af dit projekt 

Der ligger et udviklingsprojekt som hedder "Developer", som der hurtigt kan sætte gang i anvendelsen af NAP platformen som udviklingsmiljø.

Hvis dette projekt trykkes på, vil nap-java-host åbne en, hvilken som helst applikation der hostes på http://localhost:4600.

For at se eksempler på anvendelse af kontekstbroen til at kommunikere med hostsystemet henvises til NAP SDK - Guide til anvendere samt NAP Ref.Impl. - Guide til anvendere.

Publicering af dit projekt

Når dit projekt er klar til at blive testet i NSPs testmiljøer skal du have registret dit personlige / din virksomheds moces test certifikat som administrator i NAP.

Dette gøres ved at oprette en support sag på SDS´s Nationale Servicedesk.

Efterfølgende kan du bruge det certifikat til at logge ind på

NAP test1

hvorfra du kan tilføje metadata omkring dit projekt.

NapJavaHost understøtter tilføjelse af nye moces certifikater, hvis moces certifkaterne kun har 1 enkelt registreret autorisation.

Derfor kan du tilføje dit certifikat i nap-javahost-host, login på test1 i NapJavaHost, og se om projektet er tilgængeligt for dig og virker som forventet. 

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

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

Integrationen med NAP

For at kommunikere med NAP'en, skal det givne værtssystem/LPS opsættes, således den kan 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 inspiration.

nap-java-host på SVN.

Opsætning af kommunikation med SDK.

For at kunne kommunikere med SDK'et, gøres brug af et Webview, som er en JavaFX komponent. Webviewet kan indlæse hjemmesider, samt der er mulighed for at indlejre javascript på den indlæste HTML side.

Det er vigtigt, at det er mulighed for at indlejre javascript i Webviewet, da det er den måde SDK'et fungere på. Endvidere skal Webviewet være kompatibel med en af de understøttede browser, som er beskrevet i NAP Platform - Yderligere dokumentation.

Læs mere om dette her NAP SDK - Guide til udviklere.

I nedenstående eksempel, tilføjes "NAPBridge" i variablen "NAP" på window, som er i global scope 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:

public class NAPBridge {
        private JSObject handler;

        /**
         * Transforming a JSON string into a NAPMessage and sending it to subscribers.
         * The handle to send messages to this host.
         * @param rawEventString A raw string representation of the NAP message
         */
        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.
         * This handle will be used to send messages out from the host.
         * @param handler JSObject representing the callback handle.
         */
        public void setCallback(JSObject handler) {
            System.out.println(this.getClass().getName() + " setCallBack(): " +  handler);
            this.handler = handler;
        }
    }

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

Der er implementeret to metoder, som er send() og setCallback(), det er disse to metoder som SDK'et wrapper og kalder. 


Send(), er et håndtag til at sende beskeder til hosten, der gør brug af et internt subscribe pattern, som notificerer dem, som lytter. En implementering observer / listener, kunne se således ud:

private void handleBridgeCallBacks(NAPMessage napMessage) {
        switch (napMessage.getEvent().getNAPEventType()) {
            case PatientOpen:
                sendCurrentPatient(txfCPR.getText(), napMessage.getDate(), napMessage.getId());
                break;
            case WebAppSelected:
                handleWebAppSelected(napMessage);
                break;
            case ProjectsRetrieved:
                filterProjectsRetrievedAndSendMessage(napMessage);
                break;
            case SessionClose:
                handleSessionClose(napMessage);
                break;
            case SessionError:
                handleSessionError(napMessage);
                break;
            default:
                System.err.println("Unexpected event type: " + napMessage.getEvent().getNAPEventType());
        }
}


Når der skal sendes en NAP besked fra værts applikation, kan der så gøres brug af bridgen. Call() tager imod en string, som angiver hvilken metode man vil kalde, her "handle", da det er den variable som SDK'et lytter på. Metoden tager en string som parameter, hvori indholdet er en JSON struktur der repræsenterer en NAPMessage.

 if(napBridge.bridge != null) {
     this.napBridge.bridge.call("handle", eventRawJSONString);
 }


NAP Test Web

Projektet har til hensigt at teste værtssystemers integration af NAP. Der udstilles en test suite indeholdende en test, der sender en NAP besked for samtlige events.

Der er separate tests cases, som kan køres enkeltvis eller samlet. Den er derfor oplagt til at teste et værksystems implementering af eventkataloget.

Dette afprøvningsprojekt ligger både på test1 og test2 og kan åbnes fra lobbyen i det givne miljø.

Test1: http://test1-nap.insp.nspop.dk:8080/testweb/


NAP Lobby Web

Når kommunikationen er opsat med SDK'erne, er det nu klart til at vise alle de projekter der er tildelt.

De forskellige typer events kan læses på NAP SDK - Guide til anvendere.

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

Dette gøres ved at få WebView'et til at poste det idkort, der er vekslet ved STSen på http://test1.ekstern-test.nspop.dk:8080/sts/services/Sosi2OIOSaml som unsoliscited samlresponse til nedenstående URL

Test 1: https://test1-nap.insp.nspop.dk:8443/lobby/saml/SAMLAssertionConsumer

Lobbyen kan også åbnes om standalone på Test1: https://test1-nap.insp.nspop.dk:8443/lobby