package ch.elexis.tarmed.printer; import java.util.Comparator; import java.util.GregorianCalendar; import ch.fd.invoice440.request.RecordDRGType; import ch.fd.invoice440.request.RecordDrugType; import ch.fd.invoice440.request.RecordLabType; import ch.fd.invoice440.request.RecordMigelType; import ch.fd.invoice440.request.RecordOtherType; import ch.fd.invoice440.request.RecordParamedType; import ch.fd.invoice440.request.RecordServiceType; import ch.fd.invoice440.request.RecordTarmedType; import ch.rgw.tools.TimeTool; public class Rn44Comparator implements Comparator<Object> { private static final String TARMED_TARIF = "001"; TimeTool time1 = new TimeTool(); TimeTool time2 = new TimeTool(); private GregorianCalendar cal1; private GregorianCalendar cal2; private String tarifType1; private String tarifType2; private String code1; private String code2; private String name1; private String name2; public Rn44Comparator(){} @Override public int compare(Object o1, Object o2){ initRecordValues1(o1); initRecordValues2(o2); if (cal1 == null) { return 1; } if (cal2 == null) { return -1; } time1.set(cal1); time2.set(cal2); int dat = time1.compareTo(time2); if (dat != 0) { return dat; } if (TARMED_TARIF.equals(tarifType1)) { // tarmed-tarmed: nach code sortieren if (TARMED_TARIF.equals(tarifType2)) { return code1.compareTo(code2); } else { return -1; // tarmed immer oberhab nicht-tarmed } } else if (TARMED_TARIF.equals(tarifType2)) { return 1; // nicht-tarmed immer unterhalb tarmed } else { // nicht-tarmed - nicht-tarmed: alphabetisch int diffc = tarifType1.compareTo(tarifType2); if (diffc == 0) { diffc = name1.compareToIgnoreCase(name2); } return diffc; } } private void initRecordValues1(Object object){ clearValues(); if (object instanceof RecordServiceType) { RecordServiceType rec = (RecordServiceType) object; if (rec.getDateBegin() != null) { cal1 = rec.getDateBegin().toGregorianCalendar(); } tarifType1 = getTarifType(rec); code1 = rec.getCode(); name1 = rec.getName(); } else if (object instanceof RecordTarmedType) { RecordTarmedType tarmed = (RecordTarmedType) object; if (tarmed.getDateBegin() != null) { cal1 = tarmed.getDateBegin().toGregorianCalendar(); } tarifType1 = tarmed.getTariffType(); code1 = tarmed.getCode(); name1 = tarmed.getName(); } } private void clearValues(){ cal1 = null; cal2 = null; tarifType1 = ""; tarifType2 = ""; code1 = ""; code2 = ""; name1 = ""; name2 = ""; } private void initRecordValues2(Object object){ if (object instanceof RecordServiceType) { RecordServiceType rec = (RecordServiceType) object; if (rec.getDateBegin() != null) { cal2 = rec.getDateBegin().toGregorianCalendar(); } tarifType2 = getTarifType(rec); code2 = rec.getCode(); name2 = rec.getName(); } else if (object instanceof RecordTarmedType) { RecordTarmedType tarmed = (RecordTarmedType) object; if (tarmed.getDateBegin() != null) { cal2 = tarmed.getDateBegin().toGregorianCalendar(); } tarifType2 = tarmed.getTariffType(); code2 = tarmed.getCode(); name2 = tarmed.getName(); } } private String getTarifType(RecordServiceType rec){ if (rec instanceof RecordOtherType) { RecordOtherType other = (RecordOtherType) rec; return other.getTariffType(); } else if (rec instanceof RecordDrugType) { RecordDrugType drug = (RecordDrugType) rec; return drug.getTariffType(); } else if (rec instanceof RecordDRGType) { RecordDRGType drg = (RecordDRGType) rec; return drg.getTariffType(); } else if (rec instanceof RecordMigelType) { RecordMigelType migel = (RecordMigelType) rec; return migel.getTariffType(); } else if (rec instanceof RecordLabType) { RecordLabType lab = (RecordLabType) rec; return lab.getTariffType(); } else if (rec instanceof RecordParamedType) { RecordParamedType param = (RecordParamedType) rec; return param.getTariffType(); } return ""; } }