[jboss-svn-commits] JBL Code SVN: r15966 - in labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples: itc2007/examination/persistence and 3 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Sun Oct 21 14:43:08 EDT 2007
Author: ge0ffrey
Date: 2007-10-21 14:43:08 -0400 (Sun, 21 Oct 2007)
New Revision: 15966
Added:
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/domain/Exam.java
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/domain/Topic.java
Removed:
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/domain/Exam.java
Modified:
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/domain/Examination.java
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/domain/Period.java
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/domain/PeriodHardConstraint.java
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/domain/Room.java
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/domain/RoomHardConstraint.java
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/persistence/ExaminationInputConvertor.java
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/lessonschedule/domain/Group.java
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/lessonschedule/domain/Lesson.java
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/lessonschedule/domain/Teacher.java
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/lessonschedule/domain/Timeslot.java
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/nqueens/domain/Queen.java
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/travelingtournament/domain/Day.java
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/travelingtournament/domain/Match.java
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/travelingtournament/domain/Team.java
labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/travelingtournament/domain/TravelingTournament.java
Log:
split up Exam in Exam and Topic, use solutionEquals and solutionHashcode
Deleted: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/domain/Exam.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/domain/Exam.java 2007-10-21 10:49:59 UTC (rev 15965)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/domain/Exam.java 2007-10-21 18:43:08 UTC (rev 15966)
@@ -1,38 +0,0 @@
-package org.drools.solver.examples.itc2007.examination.domain;
-
-import org.apache.commons.lang.builder.CompareToBuilder;
-import org.drools.solver.examples.common.domain.AbstractPersistable;
-
-/**
- * @author Geoffrey De Smet
- */
-public class Exam extends AbstractPersistable implements Comparable<Exam> {
-
- private int duration;
-
- public int getDuration() {
- return duration;
- }
-
- public void setDuration(int duration) {
- this.duration = duration;
- }
-
- public int compareTo(Exam other) {
- return new CompareToBuilder()
- .append(id, other.id)
- .toComparison();
- }
-
- public Exam clone() {
- Exam clone = new Exam();
- clone.id = id;
- clone.duration = duration;
- return clone;
- }
-
- public String toString() {
- return super.toString() + " " + duration + " + " + " @ ";
- }
-
-}
Added: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/domain/Exam.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/domain/Exam.java (rev 0)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/domain/Exam.java 2007-10-21 18:43:08 UTC (rev 15966)
@@ -0,0 +1,99 @@
+package org.drools.solver.examples.itc2007.examination.domain;
+
+import org.apache.commons.lang.builder.CompareToBuilder;
+import org.apache.commons.lang.builder.EqualsBuilder;
+import org.apache.commons.lang.builder.HashCodeBuilder;
+import org.drools.solver.examples.common.domain.AbstractPersistable;
+
+/**
+ * @author Geoffrey De Smet
+ */
+public class Exam extends AbstractPersistable implements Comparable<Exam> {
+
+ private Topic topic;
+
+ private Period period;
+ private Room room;
+
+ public Topic getTopic() {
+ return topic;
+ }
+
+ public void setTopic(Topic topic) {
+ this.topic = topic;
+ }
+
+ public Period getPeriod() {
+ return period;
+ }
+
+ public void setPeriod(Period period) {
+ this.period = period;
+ }
+
+ public Room getRoom() {
+ return room;
+ }
+
+ public void setRoom(Room room) {
+ this.room = room;
+ }
+
+ public int compareTo(Exam other) {
+ return new CompareToBuilder()
+ .append(period, other.period)
+ .append(room, other.room)
+ .append(topic, other.topic)
+ .toComparison();
+ }
+
+ public Exam clone() {
+ Exam clone = new Exam();
+ clone.id = id;
+ clone.topic = topic;
+ clone.period = period;
+ clone.room = room;
+ return clone;
+ }
+
+ /**
+ * The normal methods {@link #equals(Object)} and {@link #hashCode()} cannot be used
+ * because the rule engine already requires them (for performance in their original state).
+ * @see #solutionHashCode()
+ */
+ public boolean solutionEquals(Object o) {
+ if (this == o) {
+ return true;
+ } else if (o instanceof Exam) {
+ Exam other = (Exam) o;
+ return new EqualsBuilder()
+ .append(id, other.id)
+ .append(topic, other.topic)
+ .append(period, other.period)
+ .append(room, other.room)
+ .isEquals();
+ } else {
+ return false;
+ }
+ }
+
+ /**
+ * The normal methods {@link #equals(Object)} and {@link #hashCode()} cannot be used
+ * because the rule engine already requires them (for performance in their original state).
+ * @see #solutionEquals(Object)
+ */
+ public int solutionHashCode() {
+ return new HashCodeBuilder()
+ .append(id)
+ .append(topic)
+ .append(period)
+ .append(room)
+ .toHashCode();
+ }
+
+ @Override
+ public String toString() {
+ return topic + " @ " + period + " in " + room;
+ }
+
+}
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/domain/Examination.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/domain/Examination.java 2007-10-21 10:49:59 UTC (rev 15965)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/domain/Examination.java 2007-10-21 18:43:08 UTC (rev 15966)
@@ -2,10 +2,10 @@
import java.util.ArrayList;
import java.util.Collection;
-import java.util.HashMap;
+import java.util.Iterator;
import java.util.List;
-import java.util.Map;
+import org.apache.commons.lang.builder.HashCodeBuilder;
import org.drools.solver.core.solution.Solution;
import org.drools.solver.examples.common.domain.AbstractPersistable;
@@ -14,16 +14,26 @@
*/
public class Examination extends AbstractPersistable implements Solution {
+ private InstitutionalWeighting institutionalWeighting;
+
private List<Student> studentList;
+ private List<Topic> topicList;
private List<Period> periodList;
private List<Room> roomList;
- private List<Exam> examList;
-
private List<PeriodHardConstraint> periodHardConstraintList;
private List<RoomHardConstraint> roomHardConstraintList;
- private InstitutionalWeighting institutionalWeighting;
+ private List<Exam> examList;
+
+ public InstitutionalWeighting getInstitutionalWeighting() {
+ return institutionalWeighting;
+ }
+
+ public void setInstitutionalWeighting(InstitutionalWeighting institutionalWeighting) {
+ this.institutionalWeighting = institutionalWeighting;
+ }
+
public List<Student> getStudentList() {
return studentList;
}
@@ -32,6 +42,14 @@
this.studentList = studentList;
}
+ public List<Topic> getTopicList() {
+ return topicList;
+ }
+
+ public void setTopicList(List<Topic> topicList) {
+ this.topicList = topicList;
+ }
+
public List<Period> getPeriodList() {
return periodList;
}
@@ -48,14 +66,6 @@
this.roomList = roomList;
}
- public List<Exam> getExamList() {
- return examList;
- }
-
- public void setExamList(List<Exam> examList) {
- this.examList = examList;
- }
-
public List<PeriodHardConstraint> getPeriodHardConstraintList() {
return periodHardConstraintList;
}
@@ -72,24 +82,25 @@
this.roomHardConstraintList = roomHardConstraintList;
}
- public InstitutionalWeighting getInstitutionalWeighting() {
- return institutionalWeighting;
+ public List<Exam> getExamList() {
+ return examList;
}
- public void setInstitutionalWeighting(InstitutionalWeighting institutionalWeighting) {
- this.institutionalWeighting = institutionalWeighting;
+ public void setExamList(List<Exam> examList) {
+ this.examList = examList;
}
-
+
public Collection<? extends Object> getFacts() {
List<Object> facts = new ArrayList<Object>();
+ facts.add(institutionalWeighting);
facts.addAll(studentList);
+ facts.addAll(topicList);
facts.addAll(periodList);
facts.addAll(roomList);
- facts.addAll(examList);
facts.addAll(periodHardConstraintList);
facts.addAll(roomHardConstraintList);
- facts.add(institutionalWeighting);
+ facts.addAll(examList);
return facts;
}
@@ -98,63 +109,53 @@
*/
public Examination cloneSolution() {
Examination clone = new Examination();
+ clone.institutionalWeighting = institutionalWeighting;
clone.studentList = studentList;
+ clone.topicList = topicList;
clone.periodList = periodList;
clone.roomList = roomList;
+ clone.periodHardConstraintList = periodHardConstraintList;
+ clone.roomHardConstraintList = roomHardConstraintList;
+ // deep clone exams
List<Exam> clonedExamList = new ArrayList<Exam>(examList.size());
- Map<Long, Exam> idToClonedExamMap = new HashMap<Long, Exam>(examList.size());
for (Exam exam : examList) {
Exam clonedExam = exam.clone();
clonedExamList.add(clonedExam);
- idToClonedExamMap.put(clonedExam.getId(), clonedExam);
}
clone.examList = clonedExamList;
- List<PeriodHardConstraint> clonedPeriodHardConstraintList = new ArrayList<PeriodHardConstraint>(
- periodHardConstraintList.size());
- for (PeriodHardConstraint periodHardConstraint : periodHardConstraintList) {
- clonedPeriodHardConstraintList.add(periodHardConstraint.clone(idToClonedExamMap));
+ return clone;
+ }
+
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
}
- clone.periodHardConstraintList = clonedPeriodHardConstraintList;
- List<RoomHardConstraint> clonedRoomHardConstraintList = new ArrayList<RoomHardConstraint>(
- roomHardConstraintList.size());
- for (RoomHardConstraint roomHardConstraint : roomHardConstraintList) {
- clonedRoomHardConstraintList.add(roomHardConstraint.clone(idToClonedExamMap));
+ if (id == null || !(o instanceof Examination)) {
+ return false;
+ } else {
+ Examination other = (Examination) o;
+ if (examList.size() != other.examList.size()) {
+ return false;
+ }
+ for (Iterator<Exam> it = examList.iterator(), otherIt = other.examList.iterator(); it.hasNext();) {
+ Exam exam = it.next();
+ Exam otherExam = otherIt.next();
+ // Notice: we don't use equals()
+ if (!exam.solutionEquals(otherExam)) {
+ return false;
+ }
+ }
+ return true;
}
- clone.roomHardConstraintList = clonedRoomHardConstraintList;
- clone.institutionalWeighting = institutionalWeighting;
- return clone;
}
-// public boolean equals(Object o) {
-// if (this == o) {
-// return true;
-// }
-// if (id == null || !(o instanceof Examination)) {
-// return false;
-// } else {
-// Examination other = (Examination) o;
-// if (matchList.size() != other.matchList.size()) {
-// return false;
-// }
-// for (Iterator<Match> it = matchList.iterator(), otherIt = other.matchList.iterator(); it.hasNext();) {
-// Match match = it.next();
-// Match otherMatch = otherIt.next();
-// // Not delegated to a custom Match.equals(o) so Matches can be fetched from the WorkingMemory's HashSet
-// if (!match.getId().equals(otherMatch.getId()) || !match.getDay().equals(otherMatch.getDay())) {
-// return false;
-// }
-// }
-// return true;
-// }
-// }
-//
-// public int hashCode() {
-// int hashCode = 0;
-// for (Match match : matchList) {
-// // Not delegated to a custom Match.hashCode() so Matches can be fetched from the WorkingMemory's HashSet
-// hashCode = (hashCode * 31 + match.getId().hashCode()) * 31 + match.getDay().hashCode();
-// }
-// return hashCode;
-// }
+ public int hashCode() {
+ HashCodeBuilder hashCodeBuilder = new HashCodeBuilder();
+ for (Exam exam : examList) {
+ // Notice: we don't use hashCode()
+ hashCodeBuilder.append(exam.solutionHashCode());
+ }
+ return hashCodeBuilder.toHashCode();
+ }
}
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/domain/Period.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/domain/Period.java 2007-10-21 10:49:59 UTC (rev 15965)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/domain/Period.java 2007-10-21 18:43:08 UTC (rev 15966)
@@ -62,7 +62,7 @@
@Override
public String toString() {
- return super.toString() + " " + startDateTimeString + " {" + durationInMinutes + "}";
+ return startDateTimeString + " {" + durationInMinutes + "}";
}
}
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/domain/PeriodHardConstraint.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/domain/PeriodHardConstraint.java 2007-10-21 10:49:59 UTC (rev 15965)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/domain/PeriodHardConstraint.java 2007-10-21 18:43:08 UTC (rev 15966)
@@ -1,7 +1,5 @@
package org.drools.solver.examples.itc2007.examination.domain;
-import java.util.Map;
-
import org.apache.commons.lang.builder.CompareToBuilder;
import org.drools.solver.examples.common.domain.AbstractPersistable;
@@ -10,18 +8,10 @@
*/
public class PeriodHardConstraint extends AbstractPersistable implements Comparable<PeriodHardConstraint> {
- private Exam leftSideExam;
private PeriodHardConstraintType periodHardConstraintType;
- private Exam rightSideExam;
+ private Topic leftSideTopic;
+ private Topic rightSideTopic;
- public Exam getLeftSideExam() {
- return leftSideExam;
- }
-
- public void setLeftSideExam(Exam leftSideExam) {
- this.leftSideExam = leftSideExam;
- }
-
public PeriodHardConstraintType getPeriodHardConstraintType() {
return periodHardConstraintType;
}
@@ -30,32 +20,34 @@
this.periodHardConstraintType = periodHardConstraintType;
}
- public Exam getRightSideExam() {
- return rightSideExam;
+
+ public Topic getLeftSideExam() {
+ return leftSideTopic;
}
- public void setRightSideExam(Exam rightSideExam) {
- this.rightSideExam = rightSideExam;
+ public void setLeftSideExam(Topic leftSideTopic) {
+ this.leftSideTopic = leftSideTopic;
}
+ public Topic getRightSideExam() {
+ return rightSideTopic;
+ }
+ public void setRightSideExam(Topic rightSideTopic) {
+ this.rightSideTopic = rightSideTopic;
+ }
+
public int compareTo(PeriodHardConstraint other) {
return new CompareToBuilder()
+ .append(periodHardConstraintType, other.periodHardConstraintType)
+ .append(leftSideTopic, other.leftSideTopic)
+ .append(rightSideTopic, other.rightSideTopic)
.append(id, other.id)
.toComparison();
}
- public PeriodHardConstraint clone(Map<Long, Exam> idToClonedExamMap) {
- PeriodHardConstraint clone = new PeriodHardConstraint();
- clone.id = id;
- clone.leftSideExam = idToClonedExamMap.get(leftSideExam.getId());
- clone.periodHardConstraintType = periodHardConstraintType;
- clone.rightSideExam = idToClonedExamMap.get(rightSideExam.getId());
- return clone;
- }
-
@Override
public String toString() {
- return super.toString() + " {" + leftSideExam.getId() + " " + periodHardConstraintType + " " + rightSideExam.getId() + "}";
+ return periodHardConstraintType + "@" + leftSideTopic.getId() + "&" + rightSideTopic.getId();
}
}
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/domain/Room.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/domain/Room.java 2007-10-21 10:49:59 UTC (rev 15965)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/domain/Room.java 2007-10-21 18:43:08 UTC (rev 15966)
@@ -35,7 +35,7 @@
@Override
public String toString() {
- return super.toString() + " {" + capacity + "}";
+ return id + " {" + capacity + "}";
}
}
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/domain/RoomHardConstraint.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/domain/RoomHardConstraint.java 2007-10-21 10:49:59 UTC (rev 15965)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/domain/RoomHardConstraint.java 2007-10-21 18:43:08 UTC (rev 15966)
@@ -1,7 +1,5 @@
package org.drools.solver.examples.itc2007.examination.domain;
-import java.util.Map;
-
import org.apache.commons.lang.builder.CompareToBuilder;
import org.drools.solver.examples.common.domain.AbstractPersistable;
@@ -10,17 +8,9 @@
*/
public class RoomHardConstraint extends AbstractPersistable implements Comparable<RoomHardConstraint> {
- private Exam exam;
private RoomHardConstraintType roomHardConstraintType;
+ private Topic topic;
- public Exam getExam() {
- return exam;
- }
-
- public void setExam(Exam exam) {
- this.exam = exam;
- }
-
public RoomHardConstraintType getRoomHardConstraintType() {
return roomHardConstraintType;
}
@@ -29,23 +19,25 @@
this.roomHardConstraintType = roomHardConstraintType;
}
+ public Topic getExam() {
+ return topic;
+ }
+
+ public void setExam(Topic topic) {
+ this.topic = topic;
+ }
+
public int compareTo(RoomHardConstraint other) {
return new CompareToBuilder()
+ .append(roomHardConstraintType, other.roomHardConstraintType)
+ .append(topic, other.topic)
.append(id, other.id)
.toComparison();
}
- public RoomHardConstraint clone(Map<Long, Exam> idToClonedExamMap) {
- RoomHardConstraint clone = new RoomHardConstraint();
- clone.id = id;
- clone.exam = idToClonedExamMap.get(exam.getId());
- clone.roomHardConstraintType = roomHardConstraintType;
- return clone;
- }
-
@Override
public String toString() {
- return super.toString() + " {" + exam.getId() + " " + roomHardConstraintType + "}";
+ return roomHardConstraintType + "@" + topic.getId();
}
}
Copied: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/domain/Topic.java (from rev 15956, labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/domain/Exam.java)
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/domain/Topic.java (rev 0)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/domain/Topic.java 2007-10-21 18:43:08 UTC (rev 15966)
@@ -0,0 +1,42 @@
+package org.drools.solver.examples.itc2007.examination.domain;
+
+import java.util.List;
+
+import org.apache.commons.lang.builder.CompareToBuilder;
+import org.drools.solver.examples.common.domain.AbstractPersistable;
+
+/**
+ * @author Geoffrey De Smet
+ */
+public class Topic extends AbstractPersistable implements Comparable<Topic> {
+
+ private int duration;
+ private List<Student> studentList;
+
+ public int getDuration() {
+ return duration;
+ }
+
+ public void setDuration(int duration) {
+ this.duration = duration;
+ }
+
+ public List<Student> getStudentList() {
+ return studentList;
+ }
+
+ public void setStudentList(List<Student> studentList) {
+ this.studentList = studentList;
+ }
+
+ public int compareTo(Topic other) {
+ return new CompareToBuilder()
+ .append(id, other.id)
+ .toComparison();
+ }
+
+ public String toString() {
+ return id + " {" + duration + "}";
+ }
+
+}
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/persistence/ExaminationInputConvertor.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/persistence/ExaminationInputConvertor.java 2007-10-21 10:49:59 UTC (rev 15965)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/itc2007/examination/persistence/ExaminationInputConvertor.java 2007-10-21 18:43:08 UTC (rev 15966)
@@ -15,11 +15,14 @@
import org.apache.commons.io.IOUtils;
import org.drools.solver.examples.common.persistence.XstreamSolutionDaoImpl;
-import org.drools.solver.examples.itc2007.examination.domain.Exam;
import org.drools.solver.examples.itc2007.examination.domain.Examination;
+import org.drools.solver.examples.itc2007.examination.domain.InstitutionalWeighting;
import org.drools.solver.examples.itc2007.examination.domain.Period;
+import org.drools.solver.examples.itc2007.examination.domain.PeriodHardConstraint;
import org.drools.solver.examples.itc2007.examination.domain.Room;
+import org.drools.solver.examples.itc2007.examination.domain.RoomHardConstraint;
import org.drools.solver.examples.itc2007.examination.domain.Student;
+import org.drools.solver.examples.itc2007.examination.domain.Topic;
/**
* @author Geoffrey De Smet
@@ -70,8 +73,8 @@
examination.setId(0L);
Map<Integer, Student> studentMap = new HashMap<Integer, Student>();
- List<Exam> examList = readExamListAndFillStudentMap(studentMap, bufferedReader);
- examination.setExamList(examList);
+ List<Topic> topicList = readExamListAndFillStudentMap(studentMap, bufferedReader);
+ examination.setTopicList(topicList);
List<Student> studentList = new ArrayList<Student>(studentMap.size());
for (Student student : studentMap.values()) {
studentList.add(student);
@@ -81,32 +84,33 @@
examination.setPeriodList(periodList);
List<Room> roomList = readRoomList(bufferedReader);
examination.setRoomList(roomList);
+
+ List<PeriodHardConstraint> periodHardConstraintList = readPeriodHardConstraintList(bufferedReader);
+ examination.setPeriodHardConstraintList(periodHardConstraintList);
+ List<RoomHardConstraint> roomHardConstraintList = readRoomHardConstraintList(bufferedReader);
+ examination.setRoomHardConstraintList(roomHardConstraintList);
+ InstitutionalWeighting institutionalWeighting = readInstitutionalWeighting(bufferedReader);
+ examination.setInstitutionalWeighting(institutionalWeighting);
-
-// List<Day> dayList = constructDayList(n);
-// examination.setDayList(dayList);
-// List<List<Integer>> outerDistanceList = readOuterDistanceList(bufferedReader);
-// List<Match> matchList = constructMatchListAndSetDistancesInTeamList(teamList, outerDistanceList);
-// examination.setMatchList(matchList);
-// initializeMatchDays(examination);
+ initializeExamPeriodsAndRooms(examination);
return examination;
}
- private List<Exam> readExamListAndFillStudentMap(Map<Integer, Student> studentMap, BufferedReader bufferedReader) throws IOException {
+ private List<Topic> readExamListAndFillStudentMap(Map<Integer, Student> studentMap, BufferedReader bufferedReader) throws IOException {
int examSize = readHeaderWithNumber(bufferedReader, "Exams");
- List<Exam> examList = new ArrayList<Exam>(examSize);
+ List<Topic> topicList = new ArrayList<Topic>(examSize);
for (int i = 0; i < examSize; i++) {
- Exam exam = new Exam();
- exam.setId((long) i);
+ Topic topic = new Topic();
+ topic.setId((long) i);
String line = bufferedReader.readLine();
String[] lineTokens = line.split("\\,\\ ");
- exam.setDuration(Integer.parseInt(lineTokens[0]));
+ topic.setDuration(Integer.parseInt(lineTokens[0]));
for (int j = 1; j < lineTokens.length; j++) {
findOrCreateStudent(studentMap, Integer.parseInt(lineTokens[j]));
}
- examList.add(exam);
+ topicList.add(topic);
}
- return examList;
+ return topicList;
}
private Student findOrCreateStudent(Map<Integer, Student> studentMap, int id) {
@@ -181,6 +185,25 @@
return roomList;
}
+ private List<PeriodHardConstraint> readPeriodHardConstraintList(BufferedReader bufferedReader) {
+ // TODO generated
+ return null;
+ }
+
+ private List<RoomHardConstraint> readRoomHardConstraintList(BufferedReader bufferedReader) {
+ // TODO generated
+ return null;
+ }
+
+ private InstitutionalWeighting readInstitutionalWeighting(BufferedReader bufferedReader) {
+ // TODO generated
+ return null;
+ }
+
+ private void initializeExamPeriodsAndRooms(Examination examination) {
+ // TODO generated
+ }
+
private void readHeader(BufferedReader bufferedReader, String header) throws IOException {
String line = bufferedReader.readLine();
if (!line.equals("[" + header + "]")) {
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/lessonschedule/domain/Group.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/lessonschedule/domain/Group.java 2007-10-21 10:49:59 UTC (rev 15965)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/lessonschedule/domain/Group.java 2007-10-21 18:43:08 UTC (rev 15966)
@@ -25,6 +25,7 @@
.toComparison();
}
+ @Override
public String toString() {
return getName();
}
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/lessonschedule/domain/Lesson.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/lessonschedule/domain/Lesson.java 2007-10-21 10:49:59 UTC (rev 15965)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/lessonschedule/domain/Lesson.java 2007-10-21 18:43:08 UTC (rev 15966)
@@ -55,6 +55,7 @@
return clone;
}
+ @Override
public String toString() {
return super.toString() + " " + teacher + " + " + group + " @ " + timeslot;
}
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/lessonschedule/domain/Teacher.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/lessonschedule/domain/Teacher.java 2007-10-21 10:49:59 UTC (rev 15965)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/lessonschedule/domain/Teacher.java 2007-10-21 18:43:08 UTC (rev 15966)
@@ -25,6 +25,7 @@
.toComparison();
}
+ @Override
public String toString() {
return getName();
}
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/lessonschedule/domain/Timeslot.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/lessonschedule/domain/Timeslot.java 2007-10-21 10:49:59 UTC (rev 15965)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/lessonschedule/domain/Timeslot.java 2007-10-21 18:43:08 UTC (rev 15966)
@@ -25,6 +25,7 @@
.toComparison();
}
+ @Override
public String toString() {
return Integer.toString(index);
}
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/nqueens/domain/Queen.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/nqueens/domain/Queen.java 2007-10-21 10:49:59 UTC (rev 15965)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/nqueens/domain/Queen.java 2007-10-21 18:43:08 UTC (rev 15966)
@@ -52,6 +52,7 @@
return clone;
}
+ @Override
public String toString() {
return super.toString() + " " + x + " @ " + y;
}
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/travelingtournament/domain/Day.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/travelingtournament/domain/Day.java 2007-10-21 10:49:59 UTC (rev 15965)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/travelingtournament/domain/Day.java 2007-10-21 18:43:08 UTC (rev 15966)
@@ -25,6 +25,7 @@
.toComparison();
}
+ @Override
public String toString() {
return Integer.toString(index);
}
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/travelingtournament/domain/Match.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/travelingtournament/domain/Match.java 2007-10-21 10:49:59 UTC (rev 15965)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/travelingtournament/domain/Match.java 2007-10-21 18:43:08 UTC (rev 15966)
@@ -1,6 +1,8 @@
package org.drools.solver.examples.travelingtournament.domain;
import org.apache.commons.lang.builder.CompareToBuilder;
+import org.apache.commons.lang.builder.EqualsBuilder;
+import org.apache.commons.lang.builder.HashCodeBuilder;
import org.drools.solver.examples.common.domain.AbstractPersistable;
/**
@@ -55,6 +57,42 @@
return clone;
}
+ /**
+ * The normal methods {@link #equals(Object)} and {@link #hashCode()} cannot be used
+ * because the rule engine already requires them (for performance in their original state).
+ * @see #solutionHashCode()
+ */
+ public boolean solutionEquals(Object o) {
+ if (this == o) {
+ return true;
+ } else if (o instanceof Match) {
+ Match other = (Match) o;
+ return new EqualsBuilder()
+ .append(id, other.id)
+ .append(homeTeam, other.homeTeam)
+ .append(awayTeam, other.awayTeam)
+ .append(day, other.day)
+ .isEquals();
+ } else {
+ return false;
+ }
+ }
+
+ /**
+ * The normal methods {@link #equals(Object)} and {@link #hashCode()} cannot be used
+ * because the rule engine already requires them (for performance in their original state).
+ * @see #solutionEquals(Object)
+ */
+ public int solutionHashCode() {
+ return new HashCodeBuilder()
+ .append(id)
+ .append(homeTeam)
+ .append(awayTeam)
+ .append(day)
+ .toHashCode();
+ }
+
+ @Override
public String toString() {
return super.toString() + " " + homeTeam + " + " + awayTeam + " @ " + day;
}
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/travelingtournament/domain/Team.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/travelingtournament/domain/Team.java 2007-10-21 10:49:59 UTC (rev 15965)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/travelingtournament/domain/Team.java 2007-10-21 18:43:08 UTC (rev 15966)
@@ -36,6 +36,7 @@
.toComparison();
}
+ @Override
public String toString() {
return getName();
}
Modified: labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/travelingtournament/domain/TravelingTournament.java
===================================================================
--- labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/travelingtournament/domain/TravelingTournament.java 2007-10-21 10:49:59 UTC (rev 15965)
+++ labs/jbossrules/trunk/drools-solver/drools-solver-examples/src/main/java/org/drools/solver/examples/travelingtournament/domain/TravelingTournament.java 2007-10-21 18:43:08 UTC (rev 15966)
@@ -5,6 +5,7 @@
import java.util.Iterator;
import java.util.List;
+import org.apache.commons.lang.builder.HashCodeBuilder;
import org.drools.solver.core.solution.Solution;
import org.drools.solver.examples.common.domain.AbstractPersistable;
@@ -84,8 +85,8 @@
for (Iterator<Match> it = matchList.iterator(), otherIt = other.matchList.iterator(); it.hasNext();) {
Match match = it.next();
Match otherMatch = otherIt.next();
- // Not delegated to a custom Match.equals(o) so Matches can be fetched from the WorkingMemory's HashSet
- if (!match.getId().equals(otherMatch.getId()) || !match.getDay().equals(otherMatch.getDay())) {
+ // Notice: we don't use equals()
+ if (!match.solutionEquals(otherMatch)) {
return false;
}
}
@@ -94,12 +95,12 @@
}
public int hashCode() {
- int hashCode = 0;
+ HashCodeBuilder hashCodeBuilder = new HashCodeBuilder();
for (Match match : matchList) {
- // Not delegated to a custom Match.hashCode() so Matches can be fetched from the WorkingMemory's HashSet
- hashCode = (hashCode * 31 + match.getId().hashCode()) * 31 + match.getDay().hashCode();
+ // Notice: we don't use hashCode()
+ hashCodeBuilder.append(match.solutionHashCode());
}
- return hashCode;
+ return hashCodeBuilder.toHashCode();
}
}
More information about the jboss-svn-commits
mailing list