public static int solveLab(String fileName, boolean showInfo) { try { int ans; if (showInfo) { Reader reader = new Reader(fileName); Lab labIn = reader.readLab(); System.out.println("------------------"); System.out.println("Input Labyrinth:"); System.out.println("------------------"); labIn.showLab(); Solver solver = new Solver(labIn); ans = solver.solve(); if (ans < 0) { System.out.println("Finish point is not reachable from start point"); } else { System.out.println("-----------------------------"); System.out.print("The shortest path length: "); System.out.println(ans); System.out.println("The shortest path:"); System.out.println("-----------------------------"); labIn.setAnswer(solver.findPath()); labIn.showLabWithAnswer(); } } else { Reader reader = new Reader(fileName); Lab labIn = reader.readLab(); Solver solver = new Solver(labIn); ans = solver.solve(); } return ans; } catch (Exception e) { System.out.println(e.getMessage()); System.out.println("Problem solving failed\n"); return 0; } }
private List<Lab> assembleLabs() { // Gather hl7TextInfo labs List<PatientLabRouting> tempRouting = patientLabRoutingDao.findByDemographicAndLabType(demographicNo, "HL7"); List<Hl7TextInfo> tempLabs = new ArrayList<Hl7TextInfo>(); for (PatientLabRouting routing : tempRouting) { Hl7TextInfo temp = hl7TextInfoDao.findLabId(routing.getLabNo()); if (temp != null) { tempLabs.add(temp); } } // Short circuit if no labs if (tempLabs.size() < 1) return null; // Gather and filter measurements based on existence of lab_no field List<Measurement> rawMeasurements = measurementDao.findByDemographicNo(demographicNo); List<Measurement> tempMeasurements = new ArrayList<Measurement>(); for (Measurement entry : rawMeasurements) { MeasurementsExt isFromLab = measurementsExtDao.getMeasurementsExtByMeasurementIdAndKeyVal(entry.getId(), "lab_no"); if (isFromLab != null && isValidLabMeasurement(tempRouting, isFromLab.getVal())) { tempMeasurements.add(entry); } } // Gather measurementsExt List<List<MeasurementsExt>> tempMeasurementsExt = new ArrayList<List<MeasurementsExt>>(); for (Measurement entry : tempMeasurements) { List<MeasurementsExt> tempMeasurementsExtElement = measurementsExtDao.getMeasurementsExtByMeasurementId(entry.getId()); tempMeasurementsExt.add(tempMeasurementsExtElement); } // Create Lab Objects List<Lab> allLabs = new ArrayList<Lab>(); // Group Measurements into Lab Objects for (Hl7TextInfo labReport : tempLabs) { Lab labObj = new Lab(); labObj.hl7TextInfo = labReport; // Group Measurements by Lab Number int labNumber = labReport.getLabNumber(); List<Measurement> labMeasurementAll = new ArrayList<Measurement>(); List<List<MeasurementsExt>> labMeasurementsExtAll = new ArrayList<List<MeasurementsExt>>(); for (int i = 0; i < tempMeasurementsExt.size(); i++) { List<MeasurementsExt> entry = tempMeasurementsExt.get(i); String entryLabNo = getLabExtValue(entry, "lab_no"); // Add related entries to correct Lab if (labNumber == Integer.valueOf(entryLabNo)) { labMeasurementsExtAll.add(entry); entry.get(0).getMeasurementId(); Measurement entryMeasurement = tempMeasurements.get(i); labMeasurementAll.add(entryMeasurement); } } // Group Measurements into Organizer Groups int prevGroup = 0; LabGroup tempGroup = new LabGroup(prevGroup); for (int i = 0; i < labMeasurementsExtAll.size(); i++) { String temp = getLabExtValue(labMeasurementsExtAll.get(i), "other_id"); if (temp != null && !temp.isEmpty()) { int currGroup = parseOtherID(temp)[0]; // Create New Group if (prevGroup != currGroup) { labObj.group.add(tempGroup); prevGroup = currGroup; tempGroup = new LabGroup(prevGroup); } } // Add current measurement to Organizer Group tempGroup.measurement.add(labMeasurementAll.get(i)); tempGroup.measurementsExt.add(labMeasurementsExtAll.get(i)); } // Save final Group labObj.group.add(tempGroup); // Save Lab Object allLabs.add(labObj); } return allLabs; }