package ch.elexis.connect.sysmex.packages; import java.text.DecimalFormat; import java.text.NumberFormat; import ch.elexis.data.Patient; import ch.rgw.tools.TimeTool; public abstract class AbstractData { private TimeTool date; private String patId; private String wbc; private String rbc; private String hgb; private String hct; private String mcv; private String mch; private String mchc; private String plt; private String lym_percent; private String mxd_percent; private String neut_percent; private String lym_volume; private String mxd_volume; private String neut_volume; private String rdw_sd; private String rdw_cv; private String pdw; private String mpv; private String p_lcr; /** * Liest Probendaten aus Array * */ public void parse(final String content){ // Datum date = getDate(content); patId = getPatientId(content); wbc = getWBC(content); rbc = getRBC(content); hgb = getHGB(content); hct = getHCT(content); mcv = getMCV(content); mch = getMCH(content); mchc = getMCHC(content); plt = getPLT(content); lym_percent = getLYMPercent(content); mxd_percent = getMXDPercent(content); neut_percent = getNEUTPercent(content); lym_volume = getLYMVolume(content); mxd_volume = getMXDVolume(content); neut_volume = getNEUTVolume(content); rdw_sd = getRDWSD(content); rdw_cv = getRDWCV(content); pdw = getPDW(content); mpv = getMPV(content); p_lcr = getPLCR(content); } /** * Schreibt Labordaten */ public void write(Patient patient) throws PackageException{ Value wbcVal = getValue("WBC"); //$NON-NLS-1$ wbcVal.fetchValue(patient, wbc, "", getDate()); //$NON-NLS-1$ Value rbcVal = getValue("RBC"); //$NON-NLS-1$ rbcVal.fetchValue(patient, rbc, "", getDate()); //$NON-NLS-1$ Value hgbVal = getValue("HGB"); //$NON-NLS-1$ hgbVal.fetchValue(patient, hgb, "", getDate()); //$NON-NLS-1$ Value hctVal = getValue("HCT"); //$NON-NLS-1$ hctVal.fetchValue(patient, hct, "", getDate()); //$NON-NLS-1$ Value mcvVal = getValue("MCV"); //$NON-NLS-1$ mcvVal.fetchValue(patient, mcv, "", getDate()); //$NON-NLS-1$ Value mchVal = getValue("MCH"); //$NON-NLS-1$ mchVal.fetchValue(patient, mch, "", getDate()); //$NON-NLS-1$ Value mchcVal = getValue("MCHC"); //$NON-NLS-1$ mchcVal.fetchValue(patient, mchc, "", getDate()); //$NON-NLS-1$ Value pltVal = getValue("PLT"); //$NON-NLS-1$ pltVal.fetchValue(patient, plt, "", getDate()); //$NON-NLS-1$ Value lymPercentVal = getValue("LYM%"); //$NON-NLS-1$ lymPercentVal.fetchValue(patient, lym_percent, "", getDate()); //$NON-NLS-1$ Value mxdPercentVal = getValue("MXD%"); //$NON-NLS-1$ mxdPercentVal.fetchValue(patient, mxd_percent, "", getDate()); //$NON-NLS-1$ Value neutPercentVal = getValue("NEUT%"); //$NON-NLS-1$ neutPercentVal.fetchValue(patient, neut_percent, "", getDate()); //$NON-NLS-1$ Value lymVolumeVal = getValue("LYM#"); //$NON-NLS-1$ lymVolumeVal.fetchValue(patient, lym_volume, "", getDate()); //$NON-NLS-1$ Value mxdVolumeVal = getValue("MXD#"); //$NON-NLS-1$ mxdVolumeVal.fetchValue(patient, mxd_volume, "", getDate()); //$NON-NLS-1$ Value neutVolumeVal = getValue("NEUT#"); //$NON-NLS-1$ neutVolumeVal.fetchValue(patient, neut_volume, "", getDate()); //$NON-NLS-1$ if (rdw_sd != null) { Value rdwSdVal = getValue("RDW-SD"); //$NON-NLS-1$ rdwSdVal.fetchValue(patient, rdw_sd, "", getDate()); //$NON-NLS-1$ } if (rdw_cv != null) { Value rdwCvVal = getValue("RDW-CV"); //$NON-NLS-1$ rdwCvVal.fetchValue(patient, rdw_cv, "", getDate()); //$NON-NLS-1$ } Value pdwVal = getValue("PDW"); //$NON-NLS-1$ pdwVal.fetchValue(patient, pdw, "", getDate()); //$NON-NLS-1$ Value mpvVal = getValue("MPV"); //$NON-NLS-1$ mpvVal.fetchValue(patient, mpv, "", getDate()); //$NON-NLS-1$ Value pLcrVal = getValue("P-LCR"); //$NON-NLS-1$ pLcrVal.fetchValue(patient, p_lcr, "", getDate()); //$NON-NLS-1$ } public TimeTool getDate(){ return date; } public String getPatientId(){ return patId; } protected String getValueStr(final String content, final int pos, String pattern){ int l1 = 0; int l2 = 0; // Create Pattern String[] parts = pattern.split("\\."); //$NON-NLS-1$ String decimalPattern = parts[0].replace('X', '#').replace('F', ' ').trim(); decimalPattern = decimalPattern.substring(0, decimalPattern.length() - 1) + "0"; l1 = decimalPattern.length(); if (parts.length > 1) { decimalPattern += "." //$NON-NLS-1$ + parts[1].replace('X', '0').replace('F', ' ').trim(); l2 = decimalPattern.length() - l1 - 1; } // Read content String strValue = content.substring(pos, pos + l1); if (l2 > 0) { strValue += "." + content.substring(pos + l1, pos + l1 + l2); //$NON-NLS-1$ } // Parse number double value = 0; try { value = Double.parseDouble(strValue); } catch (NumberFormatException e) { // Do nothing } NumberFormat nf = new DecimalFormat(decimalPattern); return nf.format(value); } protected String getWBC(final String content){ int pos = getDataIndex(); return getValueStr(content, pos, "XXX.XF"); //$NON-NLS-1$ } protected String getRBC(final String content){ int pos = getDataIndex() + 5; return getValueStr(content, pos, "XX.XXF"); //$NON-NLS-1$ } protected String getHGB(final String content){ int pos = getDataIndex() + 10; return getValueStr(content, pos, "XXX.XF"); //$NON-NLS-1$ } protected String getHCT(final String content){ int pos = getDataIndex() + 15; return getValueStr(content, pos, "XXX.XF"); //$NON-NLS-1$ } protected String getMCV(final String content){ int pos = getDataIndex() + 20; return getValueStr(content, pos, "XXX.XF"); //$NON-NLS-1$ } protected String getMCH(final String content){ int pos = getDataIndex() + 25; return getValueStr(content, pos, "XXX.XF"); //$NON-NLS-1$ } protected String getMCHC(final String content){ int pos = getDataIndex() + 30; return getValueStr(content, pos, "XXX.XF"); //$NON-NLS-1$ } protected String getPLT(final String content){ int pos = getDataIndex() + 35; return getValueStr(content, pos, "XXXXF"); //$NON-NLS-1$ } protected String getLYMPercent(final String content){ int pos = getDataIndex() + 40; return getValueStr(content, pos, "XXX.XF"); //$NON-NLS-1$ } protected String getMXDPercent(final String content){ int pos = getDataIndex() + 45; return getValueStr(content, pos, "XXX.XF"); //$NON-NLS-1$ } protected String getNEUTPercent(final String content){ int pos = getDataIndex() + 50; return getValueStr(content, pos, "XXX.XF"); //$NON-NLS-1$ } protected String getLYMVolume(final String content){ int pos = getDataIndex() + 55; return getValueStr(content, pos, "XXX.XF"); //$NON-NLS-1$ } protected String getMXDVolume(final String content){ int pos = getDataIndex() + 60; return getValueStr(content, pos, "XXX.XF"); //$NON-NLS-1$ } protected String getNEUTVolume(final String content){ int pos = getDataIndex() + 65; return getValueStr(content, pos, "XXX.XF"); //$NON-NLS-1$ } protected abstract String getRDWSD(final String content); protected abstract String getRDWCV(final String content); protected abstract String getPDW(final String content); protected abstract String getMPV(final String content); protected abstract String getPLCR(final String content); public abstract int getSize(); protected abstract int getDataIndex(); protected abstract TimeTool getDate(final String content); protected abstract Value getValue(final String paramName) throws PackageException; protected abstract String getPatientId(final String content); }