[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