[jboss-svn-commits] JBL Code SVN: r27201 - labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionschedule/persistence.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Sat Jun 27 12:13:51 EDT 2009


Author: ge0ffrey
Date: 2009-06-27 12:13:50 -0400 (Sat, 27 Jun 2009)
New Revision: 27201

Added:
   labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionschedule/persistence/PatientAdmissionScheduleInputConvertor.java
Removed:
   labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionschedule/persistence/PatientAdmissionSchedulingInputConvertor.java
Log:
pas: scheduling rename to schedule + basic plumbing

Copied: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionschedule/persistence/PatientAdmissionScheduleInputConvertor.java (from rev 27200, labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionschedule/persistence/PatientAdmissionSchedulingInputConvertor.java)
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionschedule/persistence/PatientAdmissionScheduleInputConvertor.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionschedule/persistence/PatientAdmissionScheduleInputConvertor.java	2009-06-27 16:13:50 UTC (rev 27201)
@@ -0,0 +1,444 @@
+package org.drools.solver.examples.patientadmissionschedule.persistence;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.HashMap;
+
+import org.drools.solver.examples.common.persistence.AbstractInputConvertor;
+import org.drools.solver.examples.patientadmissionschedule.domain.PatientAdmissionSchedule;
+import org.drools.solver.examples.patientadmissionschedule.domain.Specialism;
+import org.drools.solver.examples.patientadmissionschedule.domain.Department;
+import org.drools.solver.examples.patientadmissionschedule.domain.DepartmentSpecialism;
+import org.drools.solver.examples.patientadmissionschedule.domain.Equipment;
+import org.drools.solver.examples.patientadmissionschedule.domain.Room;
+import org.drools.solver.examples.patientadmissionschedule.domain.RoomSpecialism;
+import org.drools.solver.examples.patientadmissionschedule.domain.GenderLimitation;
+import org.drools.solver.examples.patientadmissionschedule.domain.RoomEquipment;
+import org.drools.solver.examples.patientadmissionschedule.domain.Bed;
+import org.drools.solver.examples.patientadmissionschedule.domain.Night;
+import org.drools.solver.examples.patientadmissionschedule.domain.Patient;
+import org.drools.solver.examples.patientadmissionschedule.domain.Admission;
+import org.drools.solver.examples.patientadmissionschedule.domain.RequiredPatientEquipment;
+import org.drools.solver.examples.patientadmissionschedule.domain.PreferredPatientEquipment;
+import org.drools.solver.examples.patientadmissionschedule.domain.Gender;
+import org.drools.solver.core.solution.Solution;
+
+/**
+ * @author Geoffrey De Smet
+ */
+public class PatientAdmissionScheduleInputConvertor extends AbstractInputConvertor {
+
+    public static void main(String[] args) {
+        new PatientAdmissionScheduleInputConvertor().convertAll();
+    }
+
+    protected String getExampleDirName() {
+        return "patientadmissionschedule";
+    }
+
+    public InputBuilder createInputBuilder() {
+        return new PatientAdmissionSchedulingInputBuilder();
+    }
+
+    public class PatientAdmissionSchedulingInputBuilder extends InputBuilder {
+
+        private PatientAdmissionSchedule patientAdmissionSchedule;
+
+        private int specialismListSize;
+        private int departmentListSize;
+        private int equipmentListSize;
+        private int roomListSize;
+        private int bedListSize;
+        private int nightListSize;
+        private int patientListSize;
+
+        private Map<Long, Specialism> idToSpecialismMap = null;
+        private Map<Long, Department> idToDepartmentMap = null;
+        private Map<Integer, Equipment> indexToEquipmentMap = null;
+        private Map<Long, Room> idToRoomMap = null;
+        private Map<Integer, Night> indexToNightMap = null;
+
+        public Solution readSolution() throws IOException {
+            patientAdmissionSchedule = new PatientAdmissionSchedule();
+            patientAdmissionSchedule.setId(0L);
+            readSizes();
+            readEmptyLine();
+            readEmptyLine();
+            readSpecialismList();
+            readEmptyLine();
+            readDepartmentListAndDepartmentSpecialismList();
+            readEmptyLine();
+            readEquipmentList();
+            readEmptyLine();
+            readRoomListAndRoomSpecialismListAndRoomEquipmentList();
+            readEmptyLine();
+            readBedList();
+            readEmptyLine();
+            generateNightList();
+            readPatientListAndAdmissionListAndRequiredPatientEquipmentListAndPreferredPatientEquipmentList();
+            readEmptyLine();
+            readConstantLine("END.");
+
+
+            return patientAdmissionSchedule;
+        }
+
+        private void readSizes() throws IOException {
+            readConstantLine("ARTICLE BENCHMARK DATA SET");
+            roomListSize = readIntegerValue("Rooms:");
+            equipmentListSize = readIntegerValue("Roomproperties:");
+            bedListSize = readIntegerValue("Beds:");
+            departmentListSize = readIntegerValue("Departments:");
+            specialismListSize = readIntegerValue("Specialisms:");
+            patientListSize = readIntegerValue("Patients:");
+            nightListSize = readIntegerValue("Planning horizon:");
+        }
+
+        private void readSpecialismList() throws IOException {
+            readConstantLine("SPECIALISMS:");
+            List<Specialism> specialismList = new ArrayList<Specialism>(specialismListSize);
+            idToSpecialismMap = new HashMap<Long, Specialism>(specialismListSize);
+            for (int i = 0; i < specialismListSize; i++) {
+                String line = bufferedReader.readLine();
+                String[] lineTokens = splitBySpace(line, 2);
+                Specialism specialism = new Specialism();
+                specialism.setId(Long.parseLong(lineTokens[0]));
+                specialism.setName(lineTokens[1]);
+                specialismList.add(specialism);
+                idToSpecialismMap.put(specialism.getId(), specialism);
+            }
+            patientAdmissionSchedule.setSpecialismList(specialismList);
+        }
+
+        private void readDepartmentListAndDepartmentSpecialismList() throws IOException {
+            readConstantLine("DEPARTMENTS:");
+            List<Department> departmentList = new ArrayList<Department>(departmentListSize);
+            idToDepartmentMap = new HashMap<Long, Department>(departmentListSize);
+            List<DepartmentSpecialism> departmentSpecialismList = new ArrayList<DepartmentSpecialism>(
+                    departmentListSize * 5);
+            long departmentSpecialismId = 0L;
+            for (int i = 0; i < departmentListSize; i++) {
+                String line = bufferedReader.readLine();
+                String[] lineTokens = splitByPipeline(line, 2);
+
+                String[] departmentTokens = splitBySpace(lineTokens[0], 4);
+                Department department = new Department();
+                department.setId(Long.parseLong(departmentTokens[0]));
+                department.setName(departmentTokens[1]);
+                int minimumAge = Integer.parseInt(departmentTokens[2]);
+                if (minimumAge != 0) {
+                    department.setMinimumAge(Integer.valueOf(minimumAge));
+                }
+                int maximumAge = Integer.parseInt(departmentTokens[3]);
+                if (maximumAge != 0) {
+                    department.setMaximumAge(Integer.valueOf(maximumAge));
+                }
+                departmentList.add(department);
+                idToDepartmentMap.put(department.getId(), department);
+
+                String[] departmentSpecialismTokens = splitBySpace(lineTokens[1]);
+                if (departmentSpecialismTokens.length % 2 != 0) {
+                    throw new IllegalArgumentException("Read line (" + line
+                            + ") is expected to contain even number of tokens (" + departmentSpecialismTokens.length
+                            + ") after 1st pipeline (|) seperated by a space ( ).");
+                }
+                for (int j = 0; j < departmentSpecialismTokens.length; j += 2) {
+                    DepartmentSpecialism departmentSpecialism = new DepartmentSpecialism();
+                    departmentSpecialism.setId(departmentSpecialismId);
+                    departmentSpecialism.setDepartment(department);
+                    departmentSpecialism.setPriority(Integer.parseInt(departmentSpecialismTokens[j]));
+                    departmentSpecialism.setSpecialism(idToSpecialismMap.get(
+                            Long.parseLong(departmentSpecialismTokens[j + 1])));
+                    departmentSpecialismList.add(departmentSpecialism);
+                    departmentSpecialismId++;
+                }
+            }
+            patientAdmissionSchedule.setDepartmentList(departmentList);
+            patientAdmissionSchedule.setDepartmentSpecialismList(departmentSpecialismList);
+        }
+
+        private void readEquipmentList() throws IOException {
+            readConstantLine("ROOMPROPERTIES:");
+            List<Equipment> equipmentList = new ArrayList<Equipment>(equipmentListSize);
+            indexToEquipmentMap = new HashMap<Integer, Equipment>(equipmentListSize);
+            for (int i = 0; i < equipmentListSize; i++) {
+                String line = bufferedReader.readLine();
+                String[] lineTokens = splitBySpace(line, 2);
+                Equipment equipment = new Equipment();
+                equipment.setId(Long.parseLong(lineTokens[0]));
+                equipment.setName(lineTokens[1]);
+                equipmentList.add(equipment);
+                indexToEquipmentMap.put(i, equipment);
+            }
+            patientAdmissionSchedule.setEquipmentList(equipmentList);
+        }
+
+        private void readRoomListAndRoomSpecialismListAndRoomEquipmentList() throws IOException {
+            readConstantLine("ROOMS:");
+            List<Room> roomList = new ArrayList<Room>(roomListSize);
+            idToRoomMap = new HashMap<Long, Room>(roomListSize);
+            List<RoomSpecialism> roomSpecialismList = new ArrayList<RoomSpecialism>(roomListSize * 5);
+            List<RoomEquipment> roomEquipmentList = new ArrayList<RoomEquipment>(roomListSize * 2);
+            long roomSpecialismId = 0L;
+            long roomEquipmentId = 0L;
+            for (int i = 0; i < roomListSize; i++) {
+                String line = bufferedReader.readLine();
+                String[] lineTokens = splitByPipeline(line, 6);
+
+                String[] roomTokens = splitBySpace(lineTokens[0], 2);
+                Room room = new Room();
+                room.setId(Long.parseLong(roomTokens[0]));
+                room.setName(roomTokens[1]);
+                room.setCapacity(Integer.parseInt(lineTokens[1]));
+                room.setDepartment(idToDepartmentMap.get(
+                        Long.parseLong(lineTokens[2])));
+                room.setGenderLimitation(GenderLimitation.valueOfCode(lineTokens[3]));
+                roomList.add(room);
+                idToRoomMap.put(room.getId(), room);
+
+                String[] roomSpecialismTokens = splitBySpace(lineTokens[4]);
+                if (roomSpecialismTokens.length % 2 != 0) {
+                    throw new IllegalArgumentException("Read line (" + line
+                            + ") is expected to contain even number of tokens (" + roomSpecialismTokens.length
+                            + ") after 4th pipeline (|) seperated by a space ( ).");
+                }
+                for (int j = 0; j < roomSpecialismTokens.length; j += 2) {
+                    int priority = Integer.parseInt(roomSpecialismTokens[j]);
+                    long specialismId = Long.parseLong(roomSpecialismTokens[j + 1]);
+                    RoomSpecialism roomSpecialism = new RoomSpecialism();
+                    roomSpecialism.setId(roomSpecialismId);
+                    roomSpecialism.setRoom(room);
+                    roomSpecialism.setSpecialism(idToSpecialismMap.get(specialismId));
+                    roomSpecialism.setPriority(priority);
+                    roomSpecialismList.add(roomSpecialism);
+                    roomSpecialismId++;
+                }
+
+                String[] roomEquipmentTokens = splitBySpace(lineTokens[5]);
+                if (roomEquipmentTokens.length != equipmentListSize) {
+                    throw new IllegalArgumentException("Read line (" + line
+                            + ") is expected to contain equal number of tokens (" + roomEquipmentTokens.length
+                            + ") as equipmentListSize (" + equipmentListSize + ") after 5th pipeline (|).");
+                }
+                for (int j = 0; j < roomEquipmentTokens.length; j++) {
+                    int hasEquipment = Integer.parseInt(roomEquipmentTokens[j]);
+                    if (hasEquipment == 1) {
+                        RoomEquipment roomEquipment = new RoomEquipment();
+                        roomEquipment.setId(roomEquipmentId);
+                        roomEquipment.setRoom(room);
+                        roomEquipment.setEquipment(indexToEquipmentMap.get(j));
+                        roomEquipmentList.add(roomEquipment);
+                        roomEquipmentId++;
+                    } else if (hasEquipment != 0) {
+                        throw new IllegalArgumentException("Read line (" + line
+                            + ") is expected to have 0 or 1 hasEquipment (" + hasEquipment + ").");
+                    }
+                }
+            }
+            patientAdmissionSchedule.setRoomList(roomList);
+            patientAdmissionSchedule.setRoomSpecialismList(roomSpecialismList);
+            patientAdmissionSchedule.setRoomEquipmentList(roomEquipmentList);
+        }
+
+        private void readBedList() throws IOException {
+            readConstantLine("BEDS:");
+            List<Bed> bedList = new ArrayList<Bed>(bedListSize);
+            Map<Room, Integer> roomToLastIndexInRoomMap = new HashMap<Room, Integer>(roomListSize);
+            for (int i = 0; i < bedListSize; i++) {
+                String line = bufferedReader.readLine();
+                String[] lineTokens = splitBySpace(line, 2);
+                Bed bed = new Bed();
+                bed.setId(Long.parseLong(lineTokens[0]));
+                Room room = idToRoomMap.get(Long.parseLong(lineTokens[1]));
+                bed.setRoom(room);
+                Integer indexInRoom = roomToLastIndexInRoomMap.get(room);
+                if (indexInRoom == null) {
+                    indexInRoom = 0;
+                } else {
+                    indexInRoom++;
+                }
+                bed.setIndexInRoom(indexInRoom);
+                roomToLastIndexInRoomMap.put(room, indexInRoom);
+                bedList.add(bed);
+            }
+            patientAdmissionSchedule.setBedList(bedList);
+        }
+
+        private void generateNightList() {
+            List<Night> nightList = new ArrayList<Night>(nightListSize);
+            indexToNightMap = new HashMap<Integer, Night>(nightListSize);
+            long nightId = 0L;
+            for (int i = 0; i < nightListSize; i++) {
+                Night night = new Night();
+                night.setId(nightId);
+                night.setIndex(i);
+                nightList.add(night);
+                indexToNightMap.put(i, night);
+                nightId++;
+            }
+            patientAdmissionSchedule.setNightList(nightList);
+        }
+
+        private void readPatientListAndAdmissionListAndRequiredPatientEquipmentListAndPreferredPatientEquipmentList() throws IOException {
+            readConstantLine("PATIENTS:");
+            List<Patient> patientList = new ArrayList<Patient>(patientListSize);
+            List<Admission> admissionList = new ArrayList<Admission>(patientListSize);
+            List<RequiredPatientEquipment> requiredPatientEquipmentList = new ArrayList<RequiredPatientEquipment>(patientListSize * equipmentListSize);
+            List<PreferredPatientEquipment> preferredPatientEquipmentList = new ArrayList<PreferredPatientEquipment>(patientListSize * equipmentListSize);
+            long admissionId = 0L;
+            long requiredPatientEquipmentId = 0L;
+            long preferredPatientEquipmentId = 0L;
+            for (int i = 0; i < patientListSize; i++) {
+                String line = bufferedReader.readLine();
+                String[] lineTokens = splitByPipeline(line, 6);
+
+                String[] patientTokens = splitBySpace(lineTokens[0], 4);
+                Patient patient = new Patient();
+                patient.setId(Long.parseLong(patientTokens[0]));
+                patient.setName(patientTokens[1]);
+                patient.setAge(Integer.parseInt(patientTokens[2]));
+                patient.setGender(Gender.valueOfCode(patientTokens[3]));
+                patient.setPreferredMaximumRoomCapacity(Integer.parseInt(lineTokens[3]));
+                patientList.add(patient);
+
+                String[] nightTokens = splitBySpace(lineTokens[1], 2);
+                Night firstNight = indexToNightMap.get(Integer.parseInt(nightTokens[0]));
+                int lastNightIndex = Integer.parseInt(nightTokens[1]);
+                ensureEnoughNights(lastNightIndex);
+                Night endNight = indexToNightMap.get(lastNightIndex);
+                int patientNightListSize = endNight.getIndex() - firstNight.getIndex();
+
+                String[] admissionTokens = splitBySpace(lineTokens[2]);
+                if (admissionTokens.length % 2 != 1) {
+                }
+                int patientAdmissionListSize = Integer.parseInt(admissionTokens[0]);
+                if (admissionTokens.length != ((patientAdmissionListSize * 2) + 1)) {
+                    throw new IllegalArgumentException("Read line (" + line
+                            + ") is expected to contain " + ((patientAdmissionListSize * 2) + 1)
+                            + " number of tokens after 2th pipeline (|).");
+                }
+                int nextFirstNightIndex = firstNight.getIndex();
+                for (int j = 1; j < admissionTokens.length; j += 2) {
+                    long specialismId = Long.parseLong(admissionTokens[j]);
+                    int admissionNightListSize = Integer.parseInt(admissionTokens[j + 1]);
+                    Admission admission = new Admission();
+                    admission.setId(admissionId);
+                    admission.setPatient(patient);
+                    admission.setSpecialism(idToSpecialismMap.get(specialismId));
+                    admission.setFirstNight(indexToNightMap.get(nextFirstNightIndex));
+                    admission.setLastNight(indexToNightMap.get(nextFirstNightIndex + admissionNightListSize - 1));
+                    admissionList.add(admission);
+                    admissionId++;
+                    nextFirstNightIndex += admissionNightListSize;
+                }
+                if (nextFirstNightIndex != nextFirstNightIndex) {
+                    throw new IllegalArgumentException("Read line (" + line
+                            + ") has patientNightListSize (" + patientNightListSize
+                            + ") different from the sum of admissionNightListSize (" + nextFirstNightIndex + ")");
+                }
+
+                String[] requiredPatientEquipmentTokens = splitBySpace(lineTokens[4]);
+                if (requiredPatientEquipmentTokens.length != equipmentListSize) {
+                    throw new IllegalArgumentException("Read line (" + line
+                            + ") is expected to contain equal number of tokens ("
+                            + requiredPatientEquipmentTokens.length
+                            + ") as equipmentListSize (" + equipmentListSize + ") after 4th pipeline (|).");
+                }
+                for (int j = 0; j < requiredPatientEquipmentTokens.length; j++) {
+                    int hasEquipment = Integer.parseInt(requiredPatientEquipmentTokens[j]);
+                    if (hasEquipment == 1) {
+                        RequiredPatientEquipment requiredPatientEquipment = new RequiredPatientEquipment();
+                        requiredPatientEquipment.setId(requiredPatientEquipmentId);
+                        requiredPatientEquipment.setPatient(patient);
+                        requiredPatientEquipment.setEquipment(indexToEquipmentMap.get(j));
+                        requiredPatientEquipmentList.add(requiredPatientEquipment);
+                        requiredPatientEquipmentId++;
+                    } else if (hasEquipment != 0) {
+                        throw new IllegalArgumentException("Read line (" + line
+                            + ") is expected to have 0 or 1 hasEquipment (" + hasEquipment + ").");
+                    }
+                }
+
+                String[] preferredPatientEquipmentTokens = splitBySpace(lineTokens[5]);
+                if (preferredPatientEquipmentTokens.length != equipmentListSize) {
+                    throw new IllegalArgumentException("Read line (" + line
+                            + ") is expected to contain equal number of tokens ("
+                            + preferredPatientEquipmentTokens.length
+                            + ") as equipmentListSize (" + equipmentListSize + ") after 5th pipeline (|).");
+                }
+                for (int j = 0; j < preferredPatientEquipmentTokens.length; j++) {
+                    int hasEquipment = Integer.parseInt(preferredPatientEquipmentTokens[j]);
+                    if (hasEquipment == 1) {
+                        PreferredPatientEquipment preferredPatientEquipment = new PreferredPatientEquipment();
+                        preferredPatientEquipment.setId(preferredPatientEquipmentId);
+                        preferredPatientEquipment.setPatient(patient);
+                        preferredPatientEquipment.setEquipment(indexToEquipmentMap.get(j));
+                        preferredPatientEquipmentList.add(preferredPatientEquipment);
+                        preferredPatientEquipmentId++;
+                    } else if (hasEquipment != 0) {
+                        throw new IllegalArgumentException("Read line (" + line
+                            + ") is expected to have 0 or 1 hasEquipment (" + hasEquipment + ").");
+                    }
+                }
+            }
+            patientAdmissionSchedule.setPatientList(patientList);
+            patientAdmissionSchedule.setAdmissionList(admissionList);
+            patientAdmissionSchedule.setRequiredPatientEquipmentList(requiredPatientEquipmentList);
+            patientAdmissionSchedule.setPreferredPatientEquipmentList(preferredPatientEquipmentList);
+        }
+
+        /**
+         * hack to make sure there are enough nights
+         * @param lastNightIndex >= 0
+         */
+        private void ensureEnoughNights(int lastNightIndex) {
+            List<Night> nightList = patientAdmissionSchedule.getNightList();
+            if (lastNightIndex >= nightList.size()) {
+                long nightId = nightList.size();
+                for (int j = nightList.size(); j <= lastNightIndex; j++) {
+                    Night night = new Night();
+                    night.setId(nightId);
+                    night.setIndex(j);
+                    nightList.add(night);
+                    indexToNightMap.put(j, night);
+                    nightId++;
+                }
+            }
+        }
+
+
+        // ************************************************************************
+        // Helper methods
+        // ************************************************************************
+
+        private String[] splitBySpace(String line) {
+            String[] lineTokens = line.split("\\ ");
+            return lineTokens;
+        }
+
+        private String[] splitBySpace(String line, int numberOfTokens) {
+            String[] lineTokens = line.split("\\ ");
+            if (lineTokens.length != numberOfTokens) {
+                throw new IllegalArgumentException("Read line (" + line
+                        + ") is expected to contain " +  numberOfTokens + " tokens seperated by a space ( ).");
+            }
+            return lineTokens;
+        }
+
+        private String[] splitByPipeline(String line, int numberOfTokens) {
+            String[] lineTokens = line.split("\\|");
+            if (lineTokens.length != numberOfTokens) {
+                throw new IllegalArgumentException("Read line (" + line
+                        + ") is expected to contain " +  numberOfTokens + " tokens seperated by a pipeline (|).");
+            }
+            for (int i = 0; i < lineTokens.length; i++) {
+                lineTokens[i] = lineTokens[i].trim();
+            }
+            return lineTokens;
+        }
+
+    }
+
+}
\ No newline at end of file

Deleted: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionschedule/persistence/PatientAdmissionSchedulingInputConvertor.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionschedule/persistence/PatientAdmissionSchedulingInputConvertor.java	2009-06-27 16:13:01 UTC (rev 27200)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionschedule/persistence/PatientAdmissionSchedulingInputConvertor.java	2009-06-27 16:13:50 UTC (rev 27201)
@@ -1,444 +0,0 @@
-package org.drools.solver.examples.patientadmissionschedule.persistence;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.HashMap;
-
-import org.drools.solver.examples.common.persistence.AbstractInputConvertor;
-import org.drools.solver.examples.patientadmissionschedule.domain.PatientAdmissionSchedule;
-import org.drools.solver.examples.patientadmissionschedule.domain.Specialism;
-import org.drools.solver.examples.patientadmissionschedule.domain.Department;
-import org.drools.solver.examples.patientadmissionschedule.domain.DepartmentSpecialism;
-import org.drools.solver.examples.patientadmissionschedule.domain.Equipment;
-import org.drools.solver.examples.patientadmissionschedule.domain.Room;
-import org.drools.solver.examples.patientadmissionschedule.domain.RoomSpecialism;
-import org.drools.solver.examples.patientadmissionschedule.domain.GenderLimitation;
-import org.drools.solver.examples.patientadmissionschedule.domain.RoomEquipment;
-import org.drools.solver.examples.patientadmissionschedule.domain.Bed;
-import org.drools.solver.examples.patientadmissionschedule.domain.Night;
-import org.drools.solver.examples.patientadmissionschedule.domain.Patient;
-import org.drools.solver.examples.patientadmissionschedule.domain.Admission;
-import org.drools.solver.examples.patientadmissionschedule.domain.RequiredPatientEquipment;
-import org.drools.solver.examples.patientadmissionschedule.domain.PreferredPatientEquipment;
-import org.drools.solver.examples.patientadmissionschedule.domain.Gender;
-import org.drools.solver.core.solution.Solution;
-
-/**
- * @author Geoffrey De Smet
- */
-public class PatientAdmissionSchedulingInputConvertor extends AbstractInputConvertor {
-
-    public static void main(String[] args) {
-        new PatientAdmissionSchedulingInputConvertor().convertAll();
-    }
-
-    protected String getExampleDirName() {
-        return "patientadmissionschedule";
-    }
-
-    public InputBuilder createInputBuilder() {
-        return new PatientAdmissionSchedulingInputBuilder();
-    }
-
-    public class PatientAdmissionSchedulingInputBuilder extends InputBuilder {
-
-        private PatientAdmissionSchedule patientAdmissionSchedule;
-
-        private int specialismListSize;
-        private int departmentListSize;
-        private int equipmentListSize;
-        private int roomListSize;
-        private int bedListSize;
-        private int nightListSize;
-        private int patientListSize;
-
-        private Map<Long, Specialism> idToSpecialismMap = null;
-        private Map<Long, Department> idToDepartmentMap = null;
-        private Map<Integer, Equipment> indexToEquipmentMap = null;
-        private Map<Long, Room> idToRoomMap = null;
-        private Map<Integer, Night> indexToNightMap = null;
-
-        public Solution readSolution() throws IOException {
-            patientAdmissionSchedule = new PatientAdmissionSchedule();
-            patientAdmissionSchedule.setId(0L);
-            readSizes();
-            readEmptyLine();
-            readEmptyLine();
-            readSpecialismList();
-            readEmptyLine();
-            readDepartmentListAndDepartmentSpecialismList();
-            readEmptyLine();
-            readEquipmentList();
-            readEmptyLine();
-            readRoomListAndRoomSpecialismListAndRoomEquipmentList();
-            readEmptyLine();
-            readBedList();
-            readEmptyLine();
-            generateNightList();
-            readPatientListAndAdmissionListAndRequiredPatientEquipmentListAndPreferredPatientEquipmentList();
-            readEmptyLine();
-            readConstantLine("END.");
-
-
-            return patientAdmissionSchedule;
-        }
-
-        private void readSizes() throws IOException {
-            readConstantLine("ARTICLE BENCHMARK DATA SET");
-            roomListSize = readIntegerValue("Rooms:");
-            equipmentListSize = readIntegerValue("Roomproperties:");
-            bedListSize = readIntegerValue("Beds:");
-            departmentListSize = readIntegerValue("Departments:");
-            specialismListSize = readIntegerValue("Specialisms:");
-            patientListSize = readIntegerValue("Patients:");
-            nightListSize = readIntegerValue("Planning horizon:");
-        }
-
-        private void readSpecialismList() throws IOException {
-            readConstantLine("SPECIALISMS:");
-            List<Specialism> specialismList = new ArrayList<Specialism>(specialismListSize);
-            idToSpecialismMap = new HashMap<Long, Specialism>(specialismListSize);
-            for (int i = 0; i < specialismListSize; i++) {
-                String line = bufferedReader.readLine();
-                String[] lineTokens = splitBySpace(line, 2);
-                Specialism specialism = new Specialism();
-                specialism.setId(Long.parseLong(lineTokens[0]));
-                specialism.setName(lineTokens[1]);
-                specialismList.add(specialism);
-                idToSpecialismMap.put(specialism.getId(), specialism);
-            }
-            patientAdmissionSchedule.setSpecialismList(specialismList);
-        }
-
-        private void readDepartmentListAndDepartmentSpecialismList() throws IOException {
-            readConstantLine("DEPARTMENTS:");
-            List<Department> departmentList = new ArrayList<Department>(departmentListSize);
-            idToDepartmentMap = new HashMap<Long, Department>(departmentListSize);
-            List<DepartmentSpecialism> departmentSpecialismList = new ArrayList<DepartmentSpecialism>(
-                    departmentListSize * 5);
-            long departmentSpecialismId = 0L;
-            for (int i = 0; i < departmentListSize; i++) {
-                String line = bufferedReader.readLine();
-                String[] lineTokens = splitByPipeline(line, 2);
-
-                String[] departmentTokens = splitBySpace(lineTokens[0], 4);
-                Department department = new Department();
-                department.setId(Long.parseLong(departmentTokens[0]));
-                department.setName(departmentTokens[1]);
-                int minimumAge = Integer.parseInt(departmentTokens[2]);
-                if (minimumAge != 0) {
-                    department.setMinimumAge(Integer.valueOf(minimumAge));
-                }
-                int maximumAge = Integer.parseInt(departmentTokens[3]);
-                if (maximumAge != 0) {
-                    department.setMaximumAge(Integer.valueOf(maximumAge));
-                }
-                departmentList.add(department);
-                idToDepartmentMap.put(department.getId(), department);
-
-                String[] departmentSpecialismTokens = splitBySpace(lineTokens[1]);
-                if (departmentSpecialismTokens.length % 2 != 0) {
-                    throw new IllegalArgumentException("Read line (" + line
-                            + ") is expected to contain even number of tokens (" + departmentSpecialismTokens.length
-                            + ") after 1st pipeline (|) seperated by a space ( ).");
-                }
-                for (int j = 0; j < departmentSpecialismTokens.length; j += 2) {
-                    DepartmentSpecialism departmentSpecialism = new DepartmentSpecialism();
-                    departmentSpecialism.setId(departmentSpecialismId);
-                    departmentSpecialism.setDepartment(department);
-                    departmentSpecialism.setPriority(Integer.parseInt(departmentSpecialismTokens[j]));
-                    departmentSpecialism.setSpecialism(idToSpecialismMap.get(
-                            Long.parseLong(departmentSpecialismTokens[j + 1])));
-                    departmentSpecialismList.add(departmentSpecialism);
-                    departmentSpecialismId++;
-                }
-            }
-            patientAdmissionSchedule.setDepartmentList(departmentList);
-            patientAdmissionSchedule.setDepartmentSpecialismList(departmentSpecialismList);
-        }
-
-        private void readEquipmentList() throws IOException {
-            readConstantLine("ROOMPROPERTIES:");
-            List<Equipment> equipmentList = new ArrayList<Equipment>(equipmentListSize);
-            indexToEquipmentMap = new HashMap<Integer, Equipment>(equipmentListSize);
-            for (int i = 0; i < equipmentListSize; i++) {
-                String line = bufferedReader.readLine();
-                String[] lineTokens = splitBySpace(line, 2);
-                Equipment equipment = new Equipment();
-                equipment.setId(Long.parseLong(lineTokens[0]));
-                equipment.setName(lineTokens[1]);
-                equipmentList.add(equipment);
-                indexToEquipmentMap.put(i, equipment);
-            }
-            patientAdmissionSchedule.setEquipmentList(equipmentList);
-        }
-
-        private void readRoomListAndRoomSpecialismListAndRoomEquipmentList() throws IOException {
-            readConstantLine("ROOMS:");
-            List<Room> roomList = new ArrayList<Room>(roomListSize);
-            idToRoomMap = new HashMap<Long, Room>(roomListSize);
-            List<RoomSpecialism> roomSpecialismList = new ArrayList<RoomSpecialism>(roomListSize * 5);
-            List<RoomEquipment> roomEquipmentList = new ArrayList<RoomEquipment>(roomListSize * 2);
-            long roomSpecialismId = 0L;
-            long roomEquipmentId = 0L;
-            for (int i = 0; i < roomListSize; i++) {
-                String line = bufferedReader.readLine();
-                String[] lineTokens = splitByPipeline(line, 6);
-
-                String[] roomTokens = splitBySpace(lineTokens[0], 2);
-                Room room = new Room();
-                room.setId(Long.parseLong(roomTokens[0]));
-                room.setName(roomTokens[1]);
-                room.setCapacity(Integer.parseInt(lineTokens[1]));
-                room.setDepartment(idToDepartmentMap.get(
-                        Long.parseLong(lineTokens[2])));
-                room.setGenderLimitation(GenderLimitation.valueOfCode(lineTokens[3]));
-                roomList.add(room);
-                idToRoomMap.put(room.getId(), room);
-
-                String[] roomSpecialismTokens = splitBySpace(lineTokens[4]);
-                if (roomSpecialismTokens.length % 2 != 0) {
-                    throw new IllegalArgumentException("Read line (" + line
-                            + ") is expected to contain even number of tokens (" + roomSpecialismTokens.length
-                            + ") after 4th pipeline (|) seperated by a space ( ).");
-                }
-                for (int j = 0; j < roomSpecialismTokens.length; j += 2) {
-                    int priority = Integer.parseInt(roomSpecialismTokens[j]);
-                    long specialismId = Long.parseLong(roomSpecialismTokens[j + 1]);
-                    RoomSpecialism roomSpecialism = new RoomSpecialism();
-                    roomSpecialism.setId(roomSpecialismId);
-                    roomSpecialism.setRoom(room);
-                    roomSpecialism.setSpecialism(idToSpecialismMap.get(specialismId));
-                    roomSpecialism.setPriority(priority);
-                    roomSpecialismList.add(roomSpecialism);
-                    roomSpecialismId++;
-                }
-
-                String[] roomEquipmentTokens = splitBySpace(lineTokens[5]);
-                if (roomEquipmentTokens.length != equipmentListSize) {
-                    throw new IllegalArgumentException("Read line (" + line
-                            + ") is expected to contain equal number of tokens (" + roomEquipmentTokens.length
-                            + ") as equipmentListSize (" + equipmentListSize + ") after 5th pipeline (|).");
-                }
-                for (int j = 0; j < roomEquipmentTokens.length; j++) {
-                    int hasEquipment = Integer.parseInt(roomEquipmentTokens[j]);
-                    if (hasEquipment == 1) {
-                        RoomEquipment roomEquipment = new RoomEquipment();
-                        roomEquipment.setId(roomEquipmentId);
-                        roomEquipment.setRoom(room);
-                        roomEquipment.setEquipment(indexToEquipmentMap.get(j));
-                        roomEquipmentList.add(roomEquipment);
-                        roomEquipmentId++;
-                    } else if (hasEquipment != 0) {
-                        throw new IllegalArgumentException("Read line (" + line
-                            + ") is expected to have 0 or 1 hasEquipment (" + hasEquipment + ").");
-                    }
-                }
-            }
-            patientAdmissionSchedule.setRoomList(roomList);
-            patientAdmissionSchedule.setRoomSpecialismList(roomSpecialismList);
-            patientAdmissionSchedule.setRoomEquipmentList(roomEquipmentList);
-        }
-
-        private void readBedList() throws IOException {
-            readConstantLine("BEDS:");
-            List<Bed> bedList = new ArrayList<Bed>(bedListSize);
-            Map<Room, Integer> roomToLastIndexInRoomMap = new HashMap<Room, Integer>(roomListSize);
-            for (int i = 0; i < bedListSize; i++) {
-                String line = bufferedReader.readLine();
-                String[] lineTokens = splitBySpace(line, 2);
-                Bed bed = new Bed();
-                bed.setId(Long.parseLong(lineTokens[0]));
-                Room room = idToRoomMap.get(Long.parseLong(lineTokens[1]));
-                bed.setRoom(room);
-                Integer indexInRoom = roomToLastIndexInRoomMap.get(room);
-                if (indexInRoom == null) {
-                    indexInRoom = 0;
-                } else {
-                    indexInRoom++;
-                }
-                bed.setIndexInRoom(indexInRoom);
-                roomToLastIndexInRoomMap.put(room, indexInRoom);
-                bedList.add(bed);
-            }
-            patientAdmissionSchedule.setBedList(bedList);
-        }
-
-        private void generateNightList() {
-            List<Night> nightList = new ArrayList<Night>(nightListSize);
-            indexToNightMap = new HashMap<Integer, Night>(nightListSize);
-            long nightId = 0L;
-            for (int i = 0; i < nightListSize; i++) {
-                Night night = new Night();
-                night.setId(nightId);
-                night.setIndex(i);
-                nightList.add(night);
-                indexToNightMap.put(i, night);
-                nightId++;
-            }
-            patientAdmissionSchedule.setNightList(nightList);
-        }
-
-        private void readPatientListAndAdmissionListAndRequiredPatientEquipmentListAndPreferredPatientEquipmentList() throws IOException {
-            readConstantLine("PATIENTS:");
-            List<Patient> patientList = new ArrayList<Patient>(patientListSize);
-            List<Admission> admissionList = new ArrayList<Admission>(patientListSize);
-            List<RequiredPatientEquipment> requiredPatientEquipmentList = new ArrayList<RequiredPatientEquipment>(patientListSize * equipmentListSize);
-            List<PreferredPatientEquipment> preferredPatientEquipmentList = new ArrayList<PreferredPatientEquipment>(patientListSize * equipmentListSize);
-            long admissionId = 0L;
-            long requiredPatientEquipmentId = 0L;
-            long preferredPatientEquipmentId = 0L;
-            for (int i = 0; i < patientListSize; i++) {
-                String line = bufferedReader.readLine();
-                String[] lineTokens = splitByPipeline(line, 6);
-
-                String[] patientTokens = splitBySpace(lineTokens[0], 4);
-                Patient patient = new Patient();
-                patient.setId(Long.parseLong(patientTokens[0]));
-                patient.setName(patientTokens[1]);
-                patient.setAge(Integer.parseInt(patientTokens[2]));
-                patient.setGender(Gender.valueOfCode(patientTokens[3]));
-                patient.setPreferredMaximumRoomCapacity(Integer.parseInt(lineTokens[3]));
-                patientList.add(patient);
-
-                String[] nightTokens = splitBySpace(lineTokens[1], 2);
-                Night firstNight = indexToNightMap.get(Integer.parseInt(nightTokens[0]));
-                int lastNightIndex = Integer.parseInt(nightTokens[1]);
-                ensureEnoughNights(lastNightIndex);
-                Night endNight = indexToNightMap.get(lastNightIndex);
-                int patientNightListSize = endNight.getIndex() - firstNight.getIndex();
-
-                String[] admissionTokens = splitBySpace(lineTokens[2]);
-                if (admissionTokens.length % 2 != 1) {
-                }
-                int patientAdmissionListSize = Integer.parseInt(admissionTokens[0]);
-                if (admissionTokens.length != ((patientAdmissionListSize * 2) + 1)) {
-                    throw new IllegalArgumentException("Read line (" + line
-                            + ") is expected to contain " + ((patientAdmissionListSize * 2) + 1)
-                            + " number of tokens after 2th pipeline (|).");
-                }
-                int nextFirstNightIndex = firstNight.getIndex();
-                for (int j = 1; j < admissionTokens.length; j += 2) {
-                    long specialismId = Long.parseLong(admissionTokens[j]);
-                    int admissionNightListSize = Integer.parseInt(admissionTokens[j + 1]);
-                    Admission admission = new Admission();
-                    admission.setId(admissionId);
-                    admission.setPatient(patient);
-                    admission.setSpecialism(idToSpecialismMap.get(specialismId));
-                    admission.setFirstNight(indexToNightMap.get(nextFirstNightIndex));
-                    admission.setLastNight(indexToNightMap.get(nextFirstNightIndex + admissionNightListSize - 1));
-                    admissionList.add(admission);
-                    admissionId++;
-                    nextFirstNightIndex += admissionNightListSize;
-                }
-                if (nextFirstNightIndex != nextFirstNightIndex) {
-                    throw new IllegalArgumentException("Read line (" + line
-                            + ") has patientNightListSize (" + patientNightListSize
-                            + ") different from the sum of admissionNightListSize (" + nextFirstNightIndex + ")");
-                }
-
-                String[] requiredPatientEquipmentTokens = splitBySpace(lineTokens[4]);
-                if (requiredPatientEquipmentTokens.length != equipmentListSize) {
-                    throw new IllegalArgumentException("Read line (" + line
-                            + ") is expected to contain equal number of tokens ("
-                            + requiredPatientEquipmentTokens.length
-                            + ") as equipmentListSize (" + equipmentListSize + ") after 4th pipeline (|).");
-                }
-                for (int j = 0; j < requiredPatientEquipmentTokens.length; j++) {
-                    int hasEquipment = Integer.parseInt(requiredPatientEquipmentTokens[j]);
-                    if (hasEquipment == 1) {
-                        RequiredPatientEquipment requiredPatientEquipment = new RequiredPatientEquipment();
-                        requiredPatientEquipment.setId(requiredPatientEquipmentId);
-                        requiredPatientEquipment.setPatient(patient);
-                        requiredPatientEquipment.setEquipment(indexToEquipmentMap.get(j));
-                        requiredPatientEquipmentList.add(requiredPatientEquipment);
-                        requiredPatientEquipmentId++;
-                    } else if (hasEquipment != 0) {
-                        throw new IllegalArgumentException("Read line (" + line
-                            + ") is expected to have 0 or 1 hasEquipment (" + hasEquipment + ").");
-                    }
-                }
-
-                String[] preferredPatientEquipmentTokens = splitBySpace(lineTokens[5]);
-                if (preferredPatientEquipmentTokens.length != equipmentListSize) {
-                    throw new IllegalArgumentException("Read line (" + line
-                            + ") is expected to contain equal number of tokens ("
-                            + preferredPatientEquipmentTokens.length
-                            + ") as equipmentListSize (" + equipmentListSize + ") after 5th pipeline (|).");
-                }
-                for (int j = 0; j < preferredPatientEquipmentTokens.length; j++) {
-                    int hasEquipment = Integer.parseInt(preferredPatientEquipmentTokens[j]);
-                    if (hasEquipment == 1) {
-                        PreferredPatientEquipment preferredPatientEquipment = new PreferredPatientEquipment();
-                        preferredPatientEquipment.setId(preferredPatientEquipmentId);
-                        preferredPatientEquipment.setPatient(patient);
-                        preferredPatientEquipment.setEquipment(indexToEquipmentMap.get(j));
-                        preferredPatientEquipmentList.add(preferredPatientEquipment);
-                        preferredPatientEquipmentId++;
-                    } else if (hasEquipment != 0) {
-                        throw new IllegalArgumentException("Read line (" + line
-                            + ") is expected to have 0 or 1 hasEquipment (" + hasEquipment + ").");
-                    }
-                }
-            }
-            patientAdmissionSchedule.setPatientList(patientList);
-            patientAdmissionSchedule.setAdmissionList(admissionList);
-            patientAdmissionSchedule.setRequiredPatientEquipmentList(requiredPatientEquipmentList);
-            patientAdmissionSchedule.setPreferredPatientEquipmentList(preferredPatientEquipmentList);
-        }
-
-        /**
-         * hack to make sure there are enough nights
-         * @param lastNightIndex >= 0
-         */
-        private void ensureEnoughNights(int lastNightIndex) {
-            List<Night> nightList = patientAdmissionSchedule.getNightList();
-            if (lastNightIndex >= nightList.size()) {
-                long nightId = nightList.size();
-                for (int j = nightList.size(); j <= lastNightIndex; j++) {
-                    Night night = new Night();
-                    night.setId(nightId);
-                    night.setIndex(j);
-                    nightList.add(night);
-                    indexToNightMap.put(j, night);
-                    nightId++;
-                }
-            }
-        }
-
-
-        // ************************************************************************
-        // Helper methods
-        // ************************************************************************
-
-        private String[] splitBySpace(String line) {
-            String[] lineTokens = line.split("\\ ");
-            return lineTokens;
-        }
-
-        private String[] splitBySpace(String line, int numberOfTokens) {
-            String[] lineTokens = line.split("\\ ");
-            if (lineTokens.length != numberOfTokens) {
-                throw new IllegalArgumentException("Read line (" + line
-                        + ") is expected to contain " +  numberOfTokens + " tokens seperated by a space ( ).");
-            }
-            return lineTokens;
-        }
-
-        private String[] splitByPipeline(String line, int numberOfTokens) {
-            String[] lineTokens = line.split("\\|");
-            if (lineTokens.length != numberOfTokens) {
-                throw new IllegalArgumentException("Read line (" + line
-                        + ") is expected to contain " +  numberOfTokens + " tokens seperated by a pipeline (|).");
-            }
-            for (int i = 0; i < lineTokens.length; i++) {
-                lineTokens[i] = lineTokens[i].trim();
-            }
-            return lineTokens;
-        }
-
-    }
-
-}
\ No newline at end of file




More information about the jboss-svn-commits mailing list