Versions Compared

Key

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

...

Introduktion

Formål

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

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

...

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

Denne guide er til opsætning af et lokalt miljø. 


Krav til software:

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

For at alle komponenterne skal virke, skal nap-compose køre hele tiden.

Et docker netværk kaldet nap_net skal laves "docker network create nap_net".

...

Windows

Mac OS X

Linux

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

Login ved at trykke på localhost og bruge default login credentials. Dette vil trække en SAMLassertion SAMLAssertion fra STS på test1, som kan bruges i 30 min.

...

For at fanen "afprøvningsplatformen" kan fungere, skal Napnap-Compose compose og Napnap-lobby-Lobby web startes, som er de næste trin i opsætning.Dette vil hoste lobbyen på http://localhost:8080/nap/lobby/web/, som er den url nap-java-host kigger efter. denne opsætning.

Nap-Compose

Ideen med nap-compose er , at denne opsætte en reverse proxy, som skal fungerer som en NSP loadbalancer med path rewriting.

For at starte denne reverse proxy køres `docker"docker-compose up`up". Dette vil åbne port 8080 på localhost.

nap-compose på SVN

Nap-Lobby-web

Nap-lobby-web er kataloget for de afprøvningsprojekter, der findes i nappenNAP.

Kør `docker"docker-compose up` fra compose/test. Med Nap-compose kørende, er denne nu tilgængelig for up"  fra compose/development og den er derefter tilgængelig for nap-host-java, da den vil hoste lobbyen på http://localhost:8080/nap/lobby/web/, som er den url nap-host-java kigger efter. 

For at at Lobby nap-lobby-web skal vise nogen projekter, skal den have forbindelse til nap-administration.

nap-lobby-web på SVN

Nap-

...

administration

Nap-

...

administration er backenden, hvor projekterne bliver gemt.

Kør `docker"docker-compose up` up" fra compose/test. Med Nap-compose kørende, er denne nu tilgængelig for Lobbyen og projekter bliver vistdevelopment og den er derefter tilgængelig for nap-lobby-web og projekterne bliver herefter vist.

nap-administration på SVN

Ny implementering / Dit projekt

Der ligger et udviklingsprojekt som hedder "Developer projekt", 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å lokalhost http://localhost:4600.

Konfigurer din løsning ind i NAP

Når en ny applikation skal ind på platformennyt projekt skal fungere med NAP Platformen, er der 2 steder, hvor platformen lokalt skal konfigureres før det fungerer.

Reverse proxy

Denne reverse Reverse proxy konfigureres ved at opdatere nap-httpd.conf. i nap-compose.

<VirtualHost *:8080> ServerName nap

...

For at dit projekt skal vises i lobbyen, skal projektet optræde i din lokale napadmindb i nap-administration. 

Du kan gøre dette med sql inserts direkte eller opdatere compose/db/migration/V2__insert_data_localhost.sql med en kopi af nedenstående, som bare opdateres med dit nye info

insert into administration.Project (active, description, releaseDate, version, name, id) values (true, 'Dit udviklingsprojekt kan åbnes her.', '2018-11-30', '1.0.0', 'Nap Web Develop',  UuidToBin(UUID()));
insert into administration.Manifest (releaseDate, url, version, id) values ('2019-11-30', 'http://localhost:8080/nap/developer/web/', '1.0.0', UuidToBin(UUID()));
insert into WebApp (active, manifest_id, name, id, project_id) values (true, (select id from administration.Manifest where url LIKE 'http://localhost:8080/nap/developer/web/' ), 'Nap Web Developer version 0.0.1', UuidToBin(UUID()), (select id from administration.Project where name LIKE 'Nap Web Develop'));
insert into WebApp_cvr (WebApp_id, cvr) values ((select id from administration.WebApp where name LIKE 'Nap Web Developer version 0.0.1'), '20921897');
insert into Manifest_eventCatalogueVersions (Manifest_id, eventCatalogueVersions) values ((select id from administration.Manifest where url LIKE 'http://localhost:8080/nap/developer/web/' ), 1);

...

For at ændringer bliver reflekteret, skal databasen og flyway genstartes, og dette gøres med "docker-compose up & docker-compose down". 

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

...

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 JavaFX, og der kan derfor også tages udgangspunkt i nap-host-java, hvis der er brug for inspiration.

Projektet nap-host-java, kan findes på SVN https://svn.nspop.dk/svn/components/nap/nap-host-java/-host på SVN

Opsætning af kommunikation med SDK.

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

...

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

Derudover Der 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 . En implementering af de indkommende beskederdem der lytter, 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);
        }
    }
}

...