[jboss-svn-commits] JBL Code SVN: r27185 - 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 08:30:29 EDT 2009


Author: ge0ffrey
Date: 2009-06-27 08:30:28 -0400 (Sat, 27 Jun 2009)
New Revision: 27185

Added:
   labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionscheduling/domain/Gender.java
   labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionscheduling/domain/GenderLimitation.java
   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/RoomSpecialism.java
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/Room.java
   labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionscheduling/persistence/PatientAdmissionSchedulingInputConvertor.java
Log:
pas domain: room, roomspecialism, roomequipment

Copied: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionscheduling/domain/Gender.java (from rev 27151, labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/manners2009/domain/JobType.java)
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionscheduling/domain/Gender.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionscheduling/domain/Gender.java	2009-06-27 12:30:28 UTC (rev 27185)
@@ -0,0 +1,29 @@
+package org.drools.solver.examples.patientadmissionscheduling.domain;
+
+/**
+ * @author Geoffrey De Smet
+ */
+public enum Gender {
+    MALE("M"),
+    FEMALE("F");
+
+    public static Gender valueOfCode(String code) {
+        for (Gender gender : values()) {
+            if (code.equalsIgnoreCase(gender.getCode())) {
+                return gender;
+            }
+        }
+        return null;
+    }
+
+    private String code;
+
+    private Gender(String code) {
+        this.code = code;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+}
\ No newline at end of file

Added: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionscheduling/domain/GenderLimitation.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionscheduling/domain/GenderLimitation.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionscheduling/domain/GenderLimitation.java	2009-06-27 12:30:28 UTC (rev 27185)
@@ -0,0 +1,31 @@
+package org.drools.solver.examples.patientadmissionscheduling.domain;
+
+/**
+ * @author Geoffrey De Smet
+ */
+public enum GenderLimitation {
+    ANY_GENDER("N"), // mixed
+    MALE_ONLY("M"),
+    FEMALE_ONLY("F"),
+    SAME_GENDER("D"); // dependend on the first
+
+    public static GenderLimitation valueOfCode(String code) {
+        for (GenderLimitation gender : GenderLimitation.values()) {
+            if (code.equalsIgnoreCase(gender.getCode())) {
+                return gender;
+            }
+        }
+        return null;
+    }
+
+    private String code;
+
+    private GenderLimitation(String code) {
+        this.code = code;
+    }
+
+    public String getCode() {
+        return code;
+    }
+
+}
\ 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 12:08:43 UTC (rev 27184)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionscheduling/domain/PatientAdmissionSchedule.java	2009-06-27 12:30:28 UTC (rev 27185)
@@ -8,8 +8,7 @@
 import org.apache.commons.lang.builder.HashCodeBuilder;
 import org.drools.solver.core.solution.Solution;
 import org.drools.solver.examples.common.domain.AbstractPersistable;
-import org.drools.solver.examples.itc2007.examination.domain.*;
-import org.drools.solver.examples.itc2007.examination.domain.Room;
+import org.drools.solver.examples.itc2007.examination.domain.Exam;
 
 /**
  * @author Geoffrey De Smet
@@ -20,6 +19,9 @@
     private List<Department> departmentList;
     private List<DepartmentSpecialism> departmentSpecialismList;
     private List<Equipment> equipmentList;
+    private List<Room> roomList;
+    private List<RoomSpecialism> roomSpecialismList;
+    private List<RoomEquipment> roomEquipmentList;
 
     private List<Exam> examList;
 
@@ -59,12 +61,39 @@
         this.equipmentList = equipmentList;
     }
 
+    public List<Room> getRoomList() {
+        return roomList;
+    }
+
+    public void setRoomList(List<Room> roomList) {
+        this.roomList = roomList;
+    }
+
+    public List<RoomSpecialism> getRoomSpecialismList() {
+        return roomSpecialismList;
+    }
+
+    public void setRoomSpecialismList(List<RoomSpecialism> roomSpecialismList) {
+        this.roomSpecialismList = roomSpecialismList;
+    }
+
+    public List<RoomEquipment> getRoomEquipmentList() {
+        return roomEquipmentList;
+    }
+
+    public void setRoomEquipmentList(List<RoomEquipment> roomEquipmentList) {
+        this.roomEquipmentList = roomEquipmentList;
+    }
+
     public Collection<? extends Object> getFacts() {
         List<Object> facts = new ArrayList<Object>();
         facts.addAll(specialismList);
         facts.addAll(departmentList);
         facts.addAll(departmentSpecialismList);
         facts.addAll(equipmentList);
+        facts.addAll(roomList);
+        facts.addAll(roomSpecialismList);
+        facts.addAll(roomEquipmentList);
 
 
 //        facts.addAll(roomList);
@@ -86,6 +115,9 @@
         clone.departmentList = departmentList;
         clone.departmentSpecialismList = departmentSpecialismList;
         clone.equipmentList = equipmentList;
+        clone.roomList = roomList;
+        clone.roomSpecialismList = roomSpecialismList;
+        clone.roomEquipmentList = roomEquipmentList;
 
         
 //        clone.roomList = roomList;

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 12:08:43 UTC (rev 27184)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionscheduling/domain/Room.java	2009-06-27 12:30:28 UTC (rev 27185)
@@ -8,9 +8,28 @@
  */
 public class Room extends AbstractPersistable implements Comparable<Room> {
 
-    private int capacity; // TODO clean me up
-    private int penalty;
+    private String name;
 
+    private Department department;
+    private int capacity;
+    private GenderLimitation genderLimitation;
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public Department getDepartment() {
+        return department;
+    }
+
+    public void setDepartment(Department department) {
+        this.department = department;
+    }
+
     public int getCapacity() {
         return capacity;
     }
@@ -19,12 +38,12 @@
         this.capacity = capacity;
     }
 
-    public int getPenalty() {
-        return penalty;
+    public GenderLimitation getGenderLimitation() {
+        return genderLimitation;
     }
 
-    public void setPenalty(int penalty) {
-        this.penalty = penalty;
+    public void setGenderLimitation(GenderLimitation genderLimitation) {
+        this.genderLimitation = genderLimitation;
     }
 
     public int compareTo(Room other) {
@@ -35,7 +54,7 @@
 
     @Override
     public String toString() {
-        return id + " {C" + capacity + "}";
+        return department + "_" + name;
     }
 
 }
\ No newline at end of file

Added: 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/RoomEquipment.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionscheduling/domain/RoomEquipment.java	2009-06-27 12:30:28 UTC (rev 27185)
@@ -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 RoomEquipment extends AbstractPersistable implements Comparable<RoomEquipment> {
+
+    private Room room;
+    private Equipment equipment;
+
+    public Room getRoom() {
+        return room;
+    }
+
+    public void setRoom(Room room) {
+        this.room = room;
+    }
+
+    public Equipment getEquipment() {
+        return equipment;
+    }
+
+    public void setEquipment(Equipment equipment) {
+        this.equipment = equipment;
+    }
+
+    public int compareTo(RoomEquipment other) {
+        return new CompareToBuilder()
+                .append(room, other.room)
+                .append(equipment, other.equipment)
+                .append(id, other.id)
+                .toComparison();
+    }
+
+    @Override
+    public String toString() {
+        return room + "-" + 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/RoomSpecialism.java (from rev 27179, labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionscheduling/domain/DepartmentSpecialism.java)
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionscheduling/domain/RoomSpecialism.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionscheduling/domain/RoomSpecialism.java	2009-06-27 12:30:28 UTC (rev 27185)
@@ -0,0 +1,56 @@
+package org.drools.solver.examples.patientadmissionscheduling.domain;
+
+import org.apache.commons.lang.builder.CompareToBuilder;
+import org.drools.solver.examples.common.domain.AbstractPersistable;
+import org.drools.solver.examples.manners2009.domain.Guest;
+import org.drools.solver.examples.manners2009.domain.Hobby;
+import org.drools.solver.examples.manners2009.domain.HobbyPractician;
+
+/**
+ * @author Geoffrey De Smet
+ */
+public class RoomSpecialism extends AbstractPersistable implements Comparable<RoomSpecialism> {
+
+    private Room room;
+    private Specialism specialism;
+
+    private int priority; // AKA choice
+
+    public Room getRoom() {
+        return room;
+    }
+
+    public void setRoom(Room room) {
+        this.room = room;
+    }
+
+    public Specialism getSpecialism() {
+        return specialism;
+    }
+
+    public void setSpecialism(Specialism specialism) {
+        this.specialism = specialism;
+    }
+
+    public int getPriority() {
+        return priority;
+    }
+
+    public void setPriority(int priority) {
+        this.priority = priority;
+    }
+
+    public int compareTo(RoomSpecialism other) {
+        return new CompareToBuilder()
+                .append(room, other.room)
+                .append(specialism, other.specialism)
+                .append(id, other.id)
+                .toComparison();
+    }
+
+    @Override
+    public String toString() {
+        return room + "-" + specialism;
+    }
+
+}
\ No newline at end of file

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 12:08:43 UTC (rev 27184)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/patientadmissionscheduling/persistence/PatientAdmissionSchedulingInputConvertor.java	2009-06-27 12:30:28 UTC (rev 27185)
@@ -12,6 +12,10 @@
 import org.drools.solver.examples.patientadmissionscheduling.domain.Department;
 import org.drools.solver.examples.patientadmissionscheduling.domain.DepartmentSpecialism;
 import org.drools.solver.examples.patientadmissionscheduling.domain.Equipment;
+import org.drools.solver.examples.patientadmissionscheduling.domain.Room;
+import org.drools.solver.examples.patientadmissionscheduling.domain.RoomSpecialism;
+import org.drools.solver.examples.patientadmissionscheduling.domain.GenderLimitation;
+import org.drools.solver.examples.patientadmissionscheduling.domain.RoomEquipment;
 import org.drools.solver.core.solution.Solution;
 
 /**
@@ -44,7 +48,9 @@
         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;
 
         public Solution readSolution() throws IOException {
             patientAdmissionSchedule = new PatientAdmissionSchedule();
@@ -58,7 +64,8 @@
             readEmptyLine();
             readEquipmentList();
             readEmptyLine();
-
+            readRoomListAndRoomSpecialismListAndRoomEquipmentList();
+            readEmptyLine();
             
 
             return patientAdmissionSchedule;
@@ -94,6 +101,7 @@
         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);
             for (int i = 0; i < departmentListSize; i++) {
@@ -113,6 +121,7 @@
                     department.setMaximumAge(Integer.valueOf(maximumAge));
                 }
                 departmentList.add(department);
+                idToDepartmentMap.put(department.getId(), department);
 
                 String[] departmentSpecialismTokens = splitBySpace(lineTokens[1]);
                 if (departmentSpecialismTokens.length % 2 != 0) {
@@ -121,13 +130,12 @@
                             + ") after pipeline (|) seperated by a space ( ).");
                 }
                 for (int j = 0; j < departmentSpecialismTokens.length; j += 2) {
-                    int priority = Integer.parseInt(departmentSpecialismTokens[j]);
-                    long specialismId = Long.parseLong(departmentSpecialismTokens[j + 1]);
                     DepartmentSpecialism departmentSpecialism = new DepartmentSpecialism();
                     departmentSpecialism.setId((long) j / 2);
                     departmentSpecialism.setDepartment(department);
-                    departmentSpecialism.setSpecialism(idToSpecialismMap.get(specialismId));
-                    departmentSpecialism.setPriority(priority);
+                    departmentSpecialism.setPriority(Integer.parseInt(departmentSpecialismTokens[j]));
+                    departmentSpecialism.setSpecialism(idToSpecialismMap.get(
+                            Long.parseLong(departmentSpecialismTokens[j + 1])));
                     departmentSpecialismList.add(departmentSpecialism);
                 }
             }
@@ -151,17 +159,81 @@
             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);
+            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 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((long) j / 2);
+                    roomSpecialism.setRoom(room);
+                    roomSpecialism.setSpecialism(idToSpecialismMap.get(specialismId));
+                    roomSpecialism.setPriority(priority);
+                    roomSpecialismList.add(roomSpecialism);
+                }
+
+                String[] roomEquipmentTokens = splitBySpace(lineTokens[5]);
+                if (roomEquipmentTokens.length % 2 != 0) {
+                    throw new IllegalArgumentException("Read line (" + line
+                            + ") is expected to contain even number of tokens (" + roomEquipmentTokens.length
+                            + ") after pipeline (|) seperated by a space ( ).");
+                }
+                for (int j = 0; j < roomEquipmentTokens.length; j++) {
+                    int hasEquipment = Integer.parseInt(roomEquipmentTokens[j]);
+                    if (hasEquipment == 1) {
+                        RoomEquipment roomEquipment = new RoomEquipment();
+                        roomEquipment.setId((long) j);
+                        roomEquipment.setRoom(room);
+                        roomEquipment.setEquipment(indexToEquipmentMap.get(j));
+                        roomEquipmentList.add(roomEquipment);
+                    } 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);
+        }
+
+
         // ************************************************************************
         // Helper methods
         // ************************************************************************
 
         private String[] splitBySpace(String line) {
-            String[] lineTokens = line.trim().split("\\ ");
+            String[] lineTokens = line.split("\\ ");
             return lineTokens;
         }
 
         private String[] splitBySpace(String line, int numberOfTokens) {
-            String[] lineTokens = line.trim().split("\\ ");
+            String[] lineTokens = line.split("\\ ");
             if (lineTokens.length != numberOfTokens) {
                 throw new IllegalArgumentException("Read line (" + line
                         + ") is expected to contain " +  numberOfTokens + " tokens seperated by a space ( ).");
@@ -170,11 +242,14 @@
         }
 
         private String[] splitByPipeline(String line, int numberOfTokens) {
-            String[] lineTokens = line.trim().split("\\|");
+            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;
         }
 




More information about the jboss-svn-commits mailing list