[jboss-svn-commits] JBL Code SVN: r33034 - in labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main: java/org/drools/planner/examples/nurserostering/domain/solver and 1 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Mon May 24 07:57:27 EDT 2010


Author: ge0ffrey
Date: 2010-05-24 07:57:26 -0400 (Mon, 24 May 2010)
New Revision: 33034

Added:
   labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/RosterInfo.java
Modified:
   labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/NurseRoster.java
   labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/solver/EmployeeConsecutiveAssignmentEnd.java
   labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/nurserostering/solver/nurseRosteringScoreRules.drl
Log:
nurse rostering: free days

Modified: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/NurseRoster.java
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/NurseRoster.java	2010-05-24 11:17:31 UTC (rev 33033)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/NurseRoster.java	2010-05-24 11:57:26 UTC (rev 33034)
@@ -188,6 +188,8 @@
 
     public Collection<? extends Object> getFacts() {
         List<Object> facts = new ArrayList<Object>();
+        // TODO add RosterInfo as a property on NurseRoster
+        facts.add(new RosterInfo(shiftDateList.get(0), shiftDateList.get(shiftDateList.size() - 1)));
         facts.addAll(skillList);
         facts.addAll(shiftTypeList);
         facts.addAll(shiftTypeSkillRequirementList);

Copied: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/RosterInfo.java (from rev 32994, labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/Employee.java)
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/RosterInfo.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/RosterInfo.java	2010-05-24 11:57:26 UTC (rev 33034)
@@ -0,0 +1,58 @@
+package org.drools.planner.examples.nurserostering.domain;
+
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+import org.apache.commons.lang.builder.CompareToBuilder;
+import org.drools.planner.examples.common.domain.AbstractPersistable;
+import org.drools.planner.examples.nurserostering.domain.contract.Contract;
+
+/**
+ * @author Geoffrey De Smet
+ */
+ at XStreamAlias("RosterInfo")
+public class RosterInfo extends AbstractPersistable implements Comparable<RosterInfo> {
+
+    private ShiftDate firstShiftDate;
+    private ShiftDate lastShiftDate;
+
+    public RosterInfo(ShiftDate firstShiftDate, ShiftDate lastShiftDate) {
+        this.firstShiftDate = firstShiftDate;
+        this.lastShiftDate = lastShiftDate;
+    }
+
+    public ShiftDate getFirstShiftDate() {
+        return firstShiftDate;
+    }
+
+    public void setFirstShiftDate(ShiftDate firstShiftDate) {
+        this.firstShiftDate = firstShiftDate;
+    }
+
+    public ShiftDate getLastShiftDate() {
+        return lastShiftDate;
+    }
+
+    public void setLastShiftDate(ShiftDate lastShiftDate) {
+        this.lastShiftDate = lastShiftDate;
+    }
+
+    public int compareTo(RosterInfo other) {
+        return new CompareToBuilder()
+                .append(firstShiftDate, other.firstShiftDate)
+                .append(lastShiftDate, other.lastShiftDate)
+                .toComparison();
+    }
+
+    @Override
+    public String toString() {
+        return firstShiftDate + " - " + lastShiftDate;
+    }
+
+    public int getFirstShiftDateDayIndex() {
+        return firstShiftDate.getDayIndex();
+    }
+
+    public int getLastShiftDateDayIndex() {
+        return lastShiftDate.getDayIndex();
+    }
+
+}

Modified: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/solver/EmployeeConsecutiveAssignmentEnd.java
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/solver/EmployeeConsecutiveAssignmentEnd.java	2010-05-24 11:17:31 UTC (rev 33033)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/solver/EmployeeConsecutiveAssignmentEnd.java	2010-05-24 11:57:26 UTC (rev 33034)
@@ -65,13 +65,13 @@
                 .toComparison();
     }
 
-    public int getShiftDateDayIndex() {
-        return shiftDate.getDayIndex();
-    }
-
     @Override
     public String toString() {
         return employee + " ... - " + shiftDate;
     }
 
+    public int getShiftDateDayIndex() {
+        return shiftDate.getDayIndex();
+    }
+
 }

Modified: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/nurserostering/solver/nurseRosteringScoreRules.drl
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/nurserostering/solver/nurseRosteringScoreRules.drl	2010-05-24 11:17:31 UTC (rev 33033)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/nurserostering/solver/nurseRosteringScoreRules.drl	2010-05-24 11:57:26 UTC (rev 33034)
@@ -10,6 +10,7 @@
 import org.drools.planner.examples.nurserostering.domain.Assignment;
 import org.drools.planner.examples.nurserostering.domain.NurseRoster;
 import org.drools.planner.examples.nurserostering.domain.Pattern;
+import org.drools.planner.examples.nurserostering.domain.RosterInfo;
 import org.drools.planner.examples.nurserostering.domain.Shift;
 import org.drools.planner.examples.nurserostering.domain.ShiftDate;
 import org.drools.planner.examples.nurserostering.domain.ShiftType;
@@ -219,7 +220,7 @@
 
         EmployeeConsecutiveAssignmentStart(
             employee == $employee,
-            shiftDateDayIndex >= $firstDayIndex,
+            shiftDateDayIndex > $firstDayIndex,
             $lastShiftDate : shiftDate,
             $lastDayIndex : shiftDateDayIndex
         )
@@ -227,11 +228,50 @@
         // There are no working days between the first and last day
         not EmployeeConsecutiveAssignmentStart(
             employee == $employee,
-            shiftDateDayIndex >= $firstDayIndex && < $lastDayIndex
+            shiftDateDayIndex > $firstDayIndex && < $lastDayIndex
         )
     then
+        // TODO $firstShiftDate + 1 and $lastShiftDate - 1
         insertLogical(new EmployeeFreeDaySequence($employee, $firstShiftDate, $lastShiftDate));
 end
+//rule "insertFirstEmployeeFreeDaySequence"
+//        salience 1 // Do these rules first (optional, for performance)
+//    when
+//        EmployeeConsecutiveAssignmentStart(
+//            $employee : employee,
+//            $lastShiftDate : shiftDate,
+//            $lastDayIndex : shiftDateDayIndex
+//        )
+//
+//        // There are no working days before the first day
+//        not EmployeeConsecutiveAssignmentEnd(
+//            employee == $employee,
+//            shiftDateDayIndex < $lastDayIndex
+//        )
+//        RosterInfo(firstShiftDateDayIndex < $lastDayIndex, $firstShiftDate : firstShiftDate)
+//    then
+//        // TODO $lastShiftDate - 1
+//        insertLogical(new EmployeeFreeDaySequence($employee, $firstShiftDate, $lastShiftDate));
+//end
+//rule "insertLastEmployeeFreeDaySequence"
+//        salience 1 // Do these rules first (optional, for performance)
+//    when
+//        EmployeeConsecutiveAssignmentEnd(
+//            $employee : employee,
+//            $firstShiftDate : shiftDate,
+//            $firstDayIndex : shiftDateDayIndex
+//        )
+//
+//        // There are no working days after the last day
+//        not EmployeeConsecutiveAssignmentStart(
+//            employee == $employee,
+//            shiftDateDayIndex > $firstDayIndex
+//        )
+//        RosterInfo(lastShiftDateDayIndex > $firstDayIndex, $lastShiftDate : lastShiftDate)
+//    then
+//        // TODO $firstShiftDate + 1
+//        insertLogical(new EmployeeFreeDaySequence($employee, $firstShiftDate, $lastShiftDate));
+//end
 
 // Minimum number of consecutive free days
 rule "minimumConsecutiveFreeDays"



More information about the jboss-svn-commits mailing list