[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