From 3aa0d6343911f81efb96746fa1154a5b579199fe Mon Sep 17 00:00:00 2001 From: Nils Dittberner Date: Wed, 25 Nov 2015 21:46:19 +0100 Subject: [PATCH 1/2] Testen ob Port 1111 verfuegbar, wenn nicht App beenden. --- src/main/java/de/uniluebeck/mi/projmi6/Main.java | 30 ++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/src/main/java/de/uniluebeck/mi/projmi6/Main.java b/src/main/java/de/uniluebeck/mi/projmi6/Main.java index 479ab65..a96d61c 100644 --- a/src/main/java/de/uniluebeck/mi/projmi6/Main.java +++ b/src/main/java/de/uniluebeck/mi/projmi6/Main.java @@ -26,6 +26,10 @@ import javafx.scene.text.Font; import javafx.scene.text.Text; import javafx.stage.Stage; import javafx.stage.StageStyle; +import org.slf4j.LoggerFactory; + +import java.io.IOException; +import java.net.ServerSocket; public class Main extends Application { @@ -98,9 +102,35 @@ public class Main extends Application { * @param args Commandline parameters */ public static void main(String[] args) { + if (isRunning()) { + LoggerFactory.getLogger(Main.class).error("App already running or Port 1111 in use."); + System.exit(2); + } + launch(args); } + /** + * @return true wenn der Port 1111 bereits belegt ist, false sonst. + */ + private static boolean isRunning() { + ServerSocket socket = null; + try { + socket = new ServerSocket(1111); + socket.setReuseAddress(true); + return false; + } catch (IOException ignored) { + } finally { + if (socket != null) { + try { + socket.close(); + } catch (IOException ignored) { + } + } + } + return true; + } + @Override public void stop() throws Exception { if (server != null) { From 9c8455e7cd3e06ad742d3eae161782ac9281f444 Mon Sep 17 00:00:00 2001 From: Nils Dittberner Date: Wed, 25 Nov 2015 21:46:54 +0100 Subject: [PATCH 2/2] Sender refactored, fehlende Felder hinzugefuegt. --- src/main/java/de/uniluebeck/mi/projmi6/Main.java | 1 - .../de/uniluebeck/mi/projmi6/hapi/HL7Sender.java | 75 +++++++++++----------- 2 files changed, 39 insertions(+), 37 deletions(-) diff --git a/src/main/java/de/uniluebeck/mi/projmi6/Main.java b/src/main/java/de/uniluebeck/mi/projmi6/Main.java index a96d61c..7acea0f 100644 --- a/src/main/java/de/uniluebeck/mi/projmi6/Main.java +++ b/src/main/java/de/uniluebeck/mi/projmi6/Main.java @@ -106,7 +106,6 @@ public class Main extends Application { LoggerFactory.getLogger(Main.class).error("App already running or Port 1111 in use."); System.exit(2); } - launch(args); } diff --git a/src/main/java/de/uniluebeck/mi/projmi6/hapi/HL7Sender.java b/src/main/java/de/uniluebeck/mi/projmi6/hapi/HL7Sender.java index c7f06be..704d2ce 100644 --- a/src/main/java/de/uniluebeck/mi/projmi6/hapi/HL7Sender.java +++ b/src/main/java/de/uniluebeck/mi/projmi6/hapi/HL7Sender.java @@ -25,76 +25,78 @@ import java.util.List; /** * Manages all HL7 sending tasks. This includes: creating a message, sending the message, * Created by taschi on 22.11.15. - * */ public class HL7Sender { /** * generates an ADT_A05 message for data exchange with OPS group * - * * @param fall to create the message from this content. patient and diagnosis are linked to fall * @throws HL7Exception, IOException, SQLException */ public static void createMessageADT_A01(Fall fall) throws HL7Exception, IOException, SQLException { Patient patient = fall.getPatient(); - ADT_A01 adt = new ADT_A01(); + ADT_A01 adt_a01 = new ADT_A01(); - //default MSH Values (Sets Segments: 1,2,7,9,10,11 - adt.initQuickstart("ADT", "A01", "P"); + //default MSH Values (Sets Segments: 1,2,7,9,10,11,12 + adt_a01.initQuickstart("ADT", "A01", "P"); //MSH Segment: - MSH mshSegment = adt.getMSH(); - mshSegment.getMsh3_SendingApplication().getNamespaceID().parse("KISGruppe6"); - mshSegment.getMsh5_ReceivingApplication().getNamespaceID().parse("OPS Gruppe von Maurice und Torben"); - mshSegment.getMsh12_VersionID().getVersionID().parse("2.5.1"); - mshSegment.getMsh15_AcceptAcknowledgmentType().parse("AL"); + MSH msh = adt_a01.getMSH(); + msh.getMsh3_SendingApplication().getNamespaceID().parse("KISGruppe6"); + msh.getMsh5_ReceivingApplication().getNamespaceID().parse("OPSGruppe3"); + msh.getMsh15_AcceptAcknowledgmentType().parse("AL"); //EVN Segment: - EVN evnSegment = adt.getEVN(); - evnSegment.getEvn1_EventTypeCode().parse("A01"); - evnSegment.getEvn2_RecordedDateTime().getTime().setValue(mshSegment.getDateTimeOfMessage().encode()); - evnSegment.getEvn4_EventReasonCode().parse("01"); + EVN evn = adt_a01.getEVN(); + evn.getEvn1_EventTypeCode().parse("A01"); + evn.getEvn2_RecordedDateTime().getTime().setValue(msh.getDateTimeOfMessage().encode()); + evn.getEvn4_EventReasonCode().parse("01"); //PID - PID pidSegment = adt.getPID(); - pidSegment.getPid2_PatientID().getIDNumber().parse(String.valueOf(patient.getPatID())); - pidSegment.getPid3_PatientIdentifierList(0).getIDNumber().parse(Integer.toString(patient.getPatID())); - pidSegment.getPid5_PatientName(0).getFamilyName().getSurname().parse(patient.getNachname()); - pidSegment.getPid5_PatientName(0).getGivenName().parse(patient.getVorname()); - pidSegment.getPid7_DateTimeOfBirth().getTime().setValue(Date.from(patient.getGeburtsdatum().atStartOfDay().atZone(ZoneId.systemDefault()).toInstant())); - pidSegment.getPid8_AdministrativeSex().parse(String.valueOf(patient.getGeschlecht().id())); - pidSegment.getPid11_PatientAddress(0).getStreetAddress().getStreetName().parse(patient.getStrasse()); - pidSegment.getPid11_PatientAddress(0).getStreetAddress().getDwellingNumber().parse(patient.getHausnummer()); - pidSegment.getPid11_PatientAddress(0).getCity().parse(patient.getOrt()); - pidSegment.getPid13_PhoneNumberHome(0).getTelephoneNumber().parse(patient.getTelefon()); - pidSegment.getPid16_MaritalStatus().getAlternateIdentifier().parse(patient.getFamilienstand().toString()); + PID pid = adt_a01.getPID(); + pid.getPid1_SetIDPID().parse("1"); + pid.getPid2_PatientID().getIDNumber().parse(String.valueOf(patient.getPatID())); + pid.getPid3_PatientIdentifierList(0).getIDNumber().parse(Integer.toString(patient.getPatID())); + pid.getPid5_PatientName(0).getFamilyName().getSurname().parse(patient.getNachname()); + pid.getPid5_PatientName(0).getGivenName().parse(patient.getVorname()); + pid.getPid7_DateTimeOfBirth().getTime().setValue(Date.from(patient.getGeburtsdatum().atStartOfDay().atZone(ZoneId.systemDefault()).toInstant())); + pid.getPid8_AdministrativeSex().parse(String.valueOf(patient.getGeschlecht().id())); + pid.getPid11_PatientAddress(0).getStreetAddress().getStreetName().parse(patient.getStrasse()); + pid.getPid11_PatientAddress(0).getStreetAddress().getDwellingNumber().parse(patient.getHausnummer()); + pid.getPid11_PatientAddress(0).getCity().parse(patient.getOrt()); + pid.getPid11_PatientAddress(0).getZipOrPostalCode().parse(patient.getPlz()); + pid.getPid13_PhoneNumberHome(0).getTelephoneNumber().parse(patient.getTelefon()); + pid.getPid16_MaritalStatus().getAlternateIdentifier().parse(patient.getFamilienstand().toString()); //Diagnosen (DG1 Segmente des PV1 Segments List diagnosen = DBHandler.getDiagnosenByFall(fall); - PV1 pv1Segment = adt.getPV1(); - pv1Segment.getPv12_PatientClass().parse("U"); + PV1 pv1 = adt_a01.getPV1(); + pv1.getPv11_SetIDPV1().parse("1"); + pv1.getPv12_PatientClass().parse("U"); + pv1.getPv119_VisitNumber().getIDNumber().parse(String.valueOf(fall.getFallID())); - int i = 1; - for (Diagnose diagnose : diagnosen) { + for (int i = 0; i < diagnosen.size(); i++) { + Diagnose diagnose = diagnosen.get(i); Mitarbeiter arzt = diagnose.getArzt(); - DG1 dg1 = adt.getDG1(i - 1); - dg1.getDg11_SetIDDG1().setValue(String.valueOf(i)); + DG1 dg1 = adt_a01.getDG1(i); + dg1.getDg11_SetIDDG1().setValue(String.valueOf(i + 1)); dg1.getDg13_DiagnosisCodeDG1().getIdentifier().parse(diagnose.getIcd10code().getCode()); + dg1.getDg13_DiagnosisCodeDG1().getNameOfCodingSystem().parse("I10"); + dg1.getDg14_DiagnosisDescription().parse(diagnose.getFreiText()); + dg1.getDg16_DiagnosisType().parse(diagnose.getDiagArt().id()); XCN xcn = dg1.getDg116_DiagnosingClinician(0); xcn.getIDNumber().setValue(arzt.getEinweisenderArzt()); xcn.getGivenName().setValue(arzt.getVorname()); xcn.getFamilyName().getSurname().setValue(arzt.getNachname()); xcn.getPrefixEgDR().setValue(arzt.getTitel()); - dg1.getDg14_DiagnosisDescription().parse(diagnose.getFreiText()); - dg1.getDg16_DiagnosisType().parse(diagnose.getDiagArt().id()); - i++; } - sendMessage(adt); + sendMessage(adt_a01); } /** * Sending message handler. Calls function to send current message + * * @param message to send * @throws HL7Exception */ @@ -108,6 +110,7 @@ public class HL7Sender { * sends an ADT_A01 message and waits ca 5 seconds for an ACK. If no ACK occurs it sends the message ONLY 5 times again * if after 5 times no ack occurs log message * write log historie in database + * * @param message you want to send * @throws HL7Exception */