[jboss-svn-commits] JBL Code SVN: r27189 - in labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionscheduling: persistence and 1 other directory.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Sat Jun 27 10:51:30 EDT 2009


Author: ge0ffrey
Date: 2009-06-27 10:51:30 -0400 (Sat, 27 Jun 2009)
New Revision: 27189

Added:
   labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionscheduling/domain/Admission.java
   labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionscheduling/domain/Night.java
   labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionscheduling/domain/Patient.java
   labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionscheduling/domain/PreferredPatientEquipment.java
   labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionscheduling/domain/RequiredPatientEquipment.java
Modified:
   labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionscheduling/domain/Bed.java
   labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionscheduling/domain/PatientAdmissionSchedule.java
   labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionscheduling/domain/Room.java
   labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionscheduling/persistence/PatientAdmissionSchedulingInputConvertor.java
Log:
pas domain: patient, admission etc

Added: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionscheduling/domain/Admission.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionscheduling/domain/Admission.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionscheduling/domain/Admission.java	2009-06-27 14:51:30 UTC (rev 27189)
@@ -0,0 +1,61 @@
+package org.drools.solver.examples.patientadmissionscheduling.domain;
+
+import org.apache.commons.lang.builder.CompareToBuilder;
+import org.drools.solver.examples.common.domain.AbstractPersistable;
+
+/**
+ * @author Geoffrey De Smet
+ */
+public class Admission extends AbstractPersistable implements Comparable<Admission> {
+
+    private Patient patient;
+    private Night firstNight;
+    private Night lastNight;
+    private Specialism specialism;
+
+    public Patient getPatient() {
+        return patient;
+    }
+
+    public void setPatient(Patient patient) {
+        this.patient = patient;
+    }
+
+    public Night getFirstNight() {
+        return firstNight;
+    }
+
+    public void setFirstNight(Night firstNight) {
+        this.firstNight = firstNight;
+    }
+
+    public Night getLastNight() {
+        return lastNight;
+    }
+
+    public void setLastNight(Night lastNight) {
+        this.lastNight = lastNight;
+    }
+
+    public Specialism getSpecialism() {
+        return specialism;
+    }
+
+    public void setSpecialism(Specialism specialism) {
+        this.specialism = specialism;
+    }
+
+    public int compareTo(Admission other) {
+        return new CompareToBuilder()
+                .append(patient, other.patient)
+                .append(firstNight, other.firstNight)
+                .append(id, other.id)
+                .toComparison();
+    }
+
+    @Override
+    public String toString() {
+        return patient + "(" + firstNight + "-" + lastNight + ")";
+    }
+
+}
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionscheduling/domain/Bed.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionscheduling/domain/Bed.java	2009-06-27 14:08:50 UTC (rev 27188)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionscheduling/domain/Bed.java	2009-06-27 14:51:30 UTC (rev 27189)
@@ -29,6 +29,8 @@
 
     public int compareTo(Bed other) {
         return new CompareToBuilder()
+                .append(room, other.room)
+                .append(indexInRoom, other.indexInRoom)
                 .append(id, other.id)
                 .toComparison();
     }

Copied: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionscheduling/domain/Night.java (from rev 27186, labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionscheduling/domain/Bed.java)
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionscheduling/domain/Night.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionscheduling/domain/Night.java	2009-06-27 14:51:30 UTC (rev 27189)
@@ -0,0 +1,33 @@
+package org.drools.solver.examples.patientadmissionscheduling.domain;
+
+import org.apache.commons.lang.builder.CompareToBuilder;
+import org.drools.solver.examples.common.domain.AbstractPersistable;
+
+/**
+ * @author Geoffrey De Smet
+ */
+public class Night extends AbstractPersistable implements Comparable<Night> {
+
+    private int index;
+
+    public int getIndex() {
+        return index;
+    }
+
+    public void setIndex(int index) {
+        this.index = index;
+    }
+
+    public int compareTo(Night other) {
+        return new CompareToBuilder()
+                .append(index, other.index)
+                .append(id, other.id)
+                .toComparison();
+    }
+
+    @Override
+    public String toString() {
+        return Integer.toString(index);
+    }
+
+}
\ No newline at end of file

Copied: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionscheduling/domain/Patient.java (from rev 27186, labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionscheduling/domain/Bed.java)
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionscheduling/domain/Patient.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionscheduling/domain/Patient.java	2009-06-27 14:51:30 UTC (rev 27189)
@@ -0,0 +1,59 @@
+package org.drools.solver.examples.patientadmissionscheduling.domain;
+
+import org.apache.commons.lang.builder.CompareToBuilder;
+import org.drools.solver.examples.common.domain.AbstractPersistable;
+
+/**
+ * @author Geoffrey De Smet
+ */
+public class Patient extends AbstractPersistable implements Comparable<Patient> {
+
+    private String name;
+    private Gender gender;
+    private int age;
+    private int preferredMaximumRoomCapacity;
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public Gender getGender() {
+        return gender;
+    }
+
+    public void setGender(Gender gender) {
+        this.gender = gender;
+    }
+
+    public int getAge() {
+        return age;
+    }
+
+    public void setAge(int age) {
+        this.age = age;
+    }
+
+    public int getPreferredMaximumRoomCapacity() {
+        return preferredMaximumRoomCapacity;
+    }
+
+    public void setPreferredMaximumRoomCapacity(int preferredMaximumRoomCapacity) {
+        this.preferredMaximumRoomCapacity = preferredMaximumRoomCapacity;
+    }
+
+    public int compareTo(Patient other) {
+        return new CompareToBuilder()
+                .append(id, other.id)
+                .toComparison();
+    }
+
+    @Override
+    public String toString() {
+        return name;
+    }
+
+}
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionscheduling/domain/PatientAdmissionSchedule.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionscheduling/domain/PatientAdmissionSchedule.java	2009-06-27 14:08:50 UTC (rev 27188)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionscheduling/domain/PatientAdmissionSchedule.java	2009-06-27 14:51:30 UTC (rev 27189)
@@ -23,6 +23,11 @@
     private List<RoomSpecialism> roomSpecialismList;
     private List<RoomEquipment> roomEquipmentList;
     private List<Bed> bedList;
+    private List<Night> nightList;
+    private List<Patient> patientList;
+    private List<Admission> admissionList;
+    private List<RequiredPatientEquipment> requiredPatientEquipmentList;
+    private List<PreferredPatientEquipment> preferredPatientEquipmentList;
 
     private List<Exam> examList;
 
@@ -94,6 +99,46 @@
         this.bedList = bedList;
     }
 
+    public List<Night> getNightList() {
+        return nightList;
+    }
+
+    public void setNightList(List<Night> nightList) {
+        this.nightList = nightList;
+    }
+
+    public List<Patient> getPatientList() {
+        return patientList;
+    }
+
+    public void setPatientList(List<Patient> patientList) {
+        this.patientList = patientList;
+    }
+
+    public List<Admission> getAdmissionList() {
+        return admissionList;
+    }
+
+    public void setAdmissionList(List<Admission> admissionList) {
+        this.admissionList = admissionList;
+    }
+
+    public List<RequiredPatientEquipment> getRequiredPatientEquipmentList() {
+        return requiredPatientEquipmentList;
+    }
+
+    public void setRequiredPatientEquipmentList(List<RequiredPatientEquipment> requiredPatientEquipmentList) {
+        this.requiredPatientEquipmentList = requiredPatientEquipmentList;
+    }
+
+    public List<PreferredPatientEquipment> getPreferredPatientEquipmentList() {
+        return preferredPatientEquipmentList;
+    }
+
+    public void setPreferredPatientEquipmentList(List<PreferredPatientEquipment> preferredPatientEquipmentList) {
+        this.preferredPatientEquipmentList = preferredPatientEquipmentList;
+    }
+
     public Collection<? extends Object> getFacts() {
         List<Object> facts = new ArrayList<Object>();
         facts.addAll(specialismList);
@@ -104,6 +149,11 @@
         facts.addAll(roomSpecialismList);
         facts.addAll(roomEquipmentList);
         facts.addAll(bedList);
+        facts.addAll(nightList);
+        facts.addAll(patientList);
+        facts.addAll(admissionList);
+        facts.addAll(requiredPatientEquipmentList);
+        facts.addAll(preferredPatientEquipmentList);
 
 
 //        facts.addAll(roomList);
@@ -129,6 +179,11 @@
         clone.roomSpecialismList = roomSpecialismList;
         clone.roomEquipmentList = roomEquipmentList;
         clone.bedList = bedList;
+        clone.nightList = nightList;
+        clone.patientList = patientList;
+        clone.admissionList = admissionList;
+        clone.requiredPatientEquipmentList = requiredPatientEquipmentList;
+        clone.preferredPatientEquipmentList = preferredPatientEquipmentList;
 
         
 //        clone.roomList = roomList;

Added: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionscheduling/domain/PreferredPatientEquipment.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionscheduling/domain/PreferredPatientEquipment.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionscheduling/domain/PreferredPatientEquipment.java	2009-06-27 14:51:30 UTC (rev 27189)
@@ -0,0 +1,43 @@
+package org.drools.solver.examples.patientadmissionscheduling.domain;
+
+import org.apache.commons.lang.builder.CompareToBuilder;
+import org.drools.solver.examples.common.domain.AbstractPersistable;
+
+/**
+ * @author Geoffrey De Smet
+ */
+public class PreferredPatientEquipment extends AbstractPersistable implements Comparable<PreferredPatientEquipment> {
+
+    private Patient patient;
+    private Equipment equipment;
+
+    public Patient getPatient() {
+        return patient;
+    }
+
+    public void setPatient(Patient patient) {
+        this.patient = patient;
+    }
+
+    public Equipment getEquipment() {
+        return equipment;
+    }
+
+    public void setEquipment(Equipment equipment) {
+        this.equipment = equipment;
+    }
+
+    public int compareTo(PreferredPatientEquipment other) {
+        return new CompareToBuilder()
+                .append(patient, other.patient)
+                .append(equipment, other.equipment)
+                .append(id, other.id)
+                .toComparison();
+    }
+
+    @Override
+    public String toString() {
+        return patient + "-" + equipment;
+    }
+
+}
\ No newline at end of file

Copied: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionscheduling/domain/RequiredPatientEquipment.java (from rev 27185, labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionscheduling/domain/RoomEquipment.java)
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionscheduling/domain/RequiredPatientEquipment.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionscheduling/domain/RequiredPatientEquipment.java	2009-06-27 14:51:30 UTC (rev 27189)
@@ -0,0 +1,43 @@
+package org.drools.solver.examples.patientadmissionscheduling.domain;
+
+import org.apache.commons.lang.builder.CompareToBuilder;
+import org.drools.solver.examples.common.domain.AbstractPersistable;
+
+/**
+ * @author Geoffrey De Smet
+ */
+public class RequiredPatientEquipment extends AbstractPersistable implements Comparable<RequiredPatientEquipment> {
+
+    private Patient patient;
+    private Equipment equipment;
+
+    public Patient getPatient() {
+        return patient;
+    }
+
+    public void setPatient(Patient patient) {
+        this.patient = patient;
+    }
+
+    public Equipment getEquipment() {
+        return equipment;
+    }
+
+    public void setEquipment(Equipment equipment) {
+        this.equipment = equipment;
+    }
+
+    public int compareTo(RequiredPatientEquipment other) {
+        return new CompareToBuilder()
+                .append(patient, other.patient)
+                .append(equipment, other.equipment)
+                .append(id, other.id)
+                .toComparison();
+    }
+
+    @Override
+    public String toString() {
+        return patient + "-" + equipment;
+    }
+
+}
\ No newline at end of file

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionscheduling/domain/Room.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionscheduling/domain/Room.java	2009-06-27 14:08:50 UTC (rev 27188)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionscheduling/domain/Room.java	2009-06-27 14:51:30 UTC (rev 27189)
@@ -48,6 +48,7 @@
 
     public int compareTo(Room other) {
         return new CompareToBuilder()
+                .append(department, other.department)
                 .append(id, other.id)
                 .toComparison();
     }

Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionscheduling/persistence/PatientAdmissionSchedulingInputConvertor.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionscheduling/persistence/PatientAdmissionSchedulingInputConvertor.java	2009-06-27 14:08:50 UTC (rev 27188)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionscheduling/persistence/PatientAdmissionSchedulingInputConvertor.java	2009-06-27 14:51:30 UTC (rev 27189)
@@ -17,6 +17,12 @@
 import org.drools.solver.examples.patientadmissionscheduling.domain.GenderLimitation;
 import org.drools.solver.examples.patientadmissionscheduling.domain.RoomEquipment;
 import org.drools.solver.examples.patientadmissionscheduling.domain.Bed;
+import org.drools.solver.examples.patientadmissionscheduling.domain.Night;
+import org.drools.solver.examples.patientadmissionscheduling.domain.Patient;
+import org.drools.solver.examples.patientadmissionscheduling.domain.Admission;
+import org.drools.solver.examples.patientadmissionscheduling.domain.RequiredPatientEquipment;
+import org.drools.solver.examples.patientadmissionscheduling.domain.PreferredPatientEquipment;
+import org.drools.solver.examples.patientadmissionscheduling.domain.Gender;
 import org.drools.solver.core.solution.Solution;
 
 /**
@@ -45,13 +51,14 @@
         private int equipmentListSize;
         private int roomListSize;
         private int bedListSize;
+        private int nightListSize;
         private int patientListSize;
-        private int nightListSize;
 
         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();
@@ -69,8 +76,10 @@
             readEmptyLine();
             readBedList();
             readEmptyLine();
-
-
+            generateNightList();
+            readPatientListAndAdmissionListAndRequiredPatientEquipmentListAndPreferredPatientEquipmentList();
+            readEmptyLine();
+            readConstantLine("END.");
             return patientAdmissionSchedule;
         }
 
@@ -130,7 +139,7 @@
                 if (departmentSpecialismTokens.length % 2 != 0) {
                     throw new IllegalArgumentException("Read line (" + line
                             + ") is expected to contain even number of tokens (" + departmentSpecialismTokens.length
-                            + ") after pipeline (|) seperated by a space ( ).");
+                            + ") after 1st pipeline (|) seperated by a space ( ).");
                 }
                 for (int j = 0; j < departmentSpecialismTokens.length; j += 2) {
                     DepartmentSpecialism departmentSpecialism = new DepartmentSpecialism();
@@ -187,7 +196,7 @@
                 if (roomSpecialismTokens.length % 2 != 0) {
                     throw new IllegalArgumentException("Read line (" + line
                             + ") is expected to contain even number of tokens (" + roomSpecialismTokens.length
-                            + ") after pipeline (|) seperated by a space ( ).");
+                            + ") after 4th pipeline (|) seperated by a space ( ).");
                 }
                 for (int j = 0; j < roomSpecialismTokens.length; j += 2) {
                     int priority = Integer.parseInt(roomSpecialismTokens[j]);
@@ -201,10 +210,10 @@
                 }
 
                 String[] roomEquipmentTokens = splitBySpace(lineTokens[5]);
-                if (roomEquipmentTokens.length % 2 != 0) {
+                if (roomEquipmentTokens.length != equipmentListSize) {
                     throw new IllegalArgumentException("Read line (" + line
-                            + ") is expected to contain even number of tokens (" + roomEquipmentTokens.length
-                            + ") after pipeline (|) seperated by a space ( ).");
+                            + ") 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]);
@@ -249,7 +258,141 @@
             patientAdmissionSchedule.setBedList(bedList);
         }
 
+        private void generateNightList() {
+            List<Night> nightList = new ArrayList<Night>(nightListSize);
+            indexToNightMap = new HashMap<Integer, Night>(nightListSize);
+            for (int i = 0; i < nightListSize; i++) {
+                Night night = new Night();
+                night.setId((long) i);
+                night.setIndex(i);
+                nightList.add(night);
+                indexToNightMap.put(i, night);
+            }
+            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);
+            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 (|).");
+                }
+                long admissionId = 0;
+                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 patientEquipment = new RequiredPatientEquipment();
+                        patientEquipment.setId((long) j);
+                        patientEquipment.setPatient(patient);
+                        patientEquipment.setEquipment(indexToEquipmentMap.get(j));
+                        requiredPatientEquipmentList.add(patientEquipment);
+                    } 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 patientEquipment = new PreferredPatientEquipment();
+                        patientEquipment.setId((long) j);
+                        patientEquipment.setPatient(patient);
+                        patientEquipment.setEquipment(indexToEquipmentMap.get(j));
+                        preferredPatientEquipmentList.add(patientEquipment);
+                    } 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()) {
+                for (int j = nightList.size(); j <= lastNightIndex; j++) {
+                    Night night = new Night();
+                    night.setId((long) j);
+                    night.setIndex(j);
+                    nightList.add(night);
+                    indexToNightMap.put(j, night);
+                }
+            }
+        }
+
+
         // ************************************************************************
         // Helper methods
         // ************************************************************************




More information about the jboss-svn-commits mailing list