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

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Sat Apr 3 10:30:32 EDT 2010


Author: ge0ffrey
Date: 2010-04-03 10:30:32 -0400 (Sat, 03 Apr 2010)
New Revision: 32375

Added:
   labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/contract/
   labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/contract/Contract.java
   labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/contract/ContractLine.java
   labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/contract/ContractLineType.java
   labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/request/
   labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/request/DayOffRequest.java
   labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/request/DayOnRequest.java
   labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/request/ShiftOffRequest.java
   labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/request/ShiftOnRequest.java
Removed:
   labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/Contract.java
   labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/DayOffRequest.java
   labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/DayOnRequest.java
   labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/ShiftOffRequest.java
   labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/ShiftOnRequest.java
Modified:
   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/NurseRoster.java
   labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/persistence/NurseRosteringSolutionImporter.java
   labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/nurserostering/solver/nurseRosteringScoreRules.drl
Log:
nurse rostering: ContractLine

Deleted: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/Contract.java
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/Contract.java	2010-04-03 08:57:01 UTC (rev 32374)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/Contract.java	2010-04-03 14:30:32 UTC (rev 32375)
@@ -1,43 +0,0 @@
-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;
-
-/**
- * @author Geoffrey De Smet
- */
- at XStreamAlias("Contract")
-public class Contract extends AbstractPersistable implements Comparable<Contract> {
-
-    private String code;
-    private String description;
-
-    public String getCode() {
-        return code;
-    }
-
-    public void setCode(String code) {
-        this.code = code;
-    }
-
-    public String getDescription() {
-        return description;
-    }
-
-    public void setDescription(String description) {
-        this.description = description;
-    }
-
-    public int compareTo(Contract other) {
-        return new CompareToBuilder()
-                .append(id, other.id)
-                .toComparison();
-    }
-
-    @Override
-    public String toString() {
-        return code;
-    }
-
-}

Deleted: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/DayOffRequest.java
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/DayOffRequest.java	2010-04-03 08:57:01 UTC (rev 32374)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/DayOffRequest.java	2010-04-03 14:30:32 UTC (rev 32375)
@@ -1,53 +0,0 @@
-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;
-
-/**
- * @author Geoffrey De Smet
- */
- at XStreamAlias("DayOffRequest")
-public class DayOffRequest extends AbstractPersistable implements Comparable<DayOffRequest> {
-
-    private Employee employee;
-    private ShiftDate shiftDate;
-    private int weight;
-
-    public Employee getEmployee() {
-        return employee;
-    }
-
-    public void setEmployee(Employee employee) {
-        this.employee = employee;
-    }
-
-    public ShiftDate getShiftDate() {
-        return shiftDate;
-    }
-
-    public void setShiftDate(ShiftDate shiftDate) {
-        this.shiftDate = shiftDate;
-    }
-
-    public int getWeight() {
-        return weight;
-    }
-
-    public void setWeight(int weight) {
-        this.weight = weight;
-    }
-
-    public int compareTo(DayOffRequest other) {
-        return new CompareToBuilder()
-                .append(employee, other.employee)
-                .append(shiftDate, other.shiftDate)
-                .toComparison();
-    }
-
-    @Override
-    public String toString() {
-        return shiftDate + "_OFF_" + employee;
-    }
-
-}

Deleted: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/DayOnRequest.java
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/DayOnRequest.java	2010-04-03 08:57:01 UTC (rev 32374)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/DayOnRequest.java	2010-04-03 14:30:32 UTC (rev 32375)
@@ -1,53 +0,0 @@
-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;
-
-/**
- * @author Geoffrey De Smet
- */
- at XStreamAlias("DayOnRequest")
-public class DayOnRequest extends AbstractPersistable implements Comparable<DayOnRequest> {
-
-    private Employee employee;
-    private ShiftDate shiftDate;
-    private int weight;
-
-    public Employee getEmployee() {
-        return employee;
-    }
-
-    public void setEmployee(Employee employee) {
-        this.employee = employee;
-    }
-
-    public ShiftDate getShiftDate() {
-        return shiftDate;
-    }
-
-    public void setShiftDate(ShiftDate shiftDate) {
-        this.shiftDate = shiftDate;
-    }
-
-    public int getWeight() {
-        return weight;
-    }
-
-    public void setWeight(int weight) {
-        this.weight = weight;
-    }
-
-    public int compareTo(DayOnRequest other) {
-        return new CompareToBuilder()
-                .append(employee, other.employee)
-                .append(shiftDate, other.shiftDate)
-                .toComparison();
-    }
-
-    @Override
-    public String toString() {
-        return shiftDate + "_ON_" + employee;
-    }
-
-}

Modified: 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/Employee.java	2010-04-03 08:57:01 UTC (rev 32374)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/Employee.java	2010-04-03 14:30:32 UTC (rev 32375)
@@ -3,6 +3,7 @@
 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

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-04-03 08:57:01 UTC (rev 32374)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/NurseRoster.java	2010-04-03 14:30:32 UTC (rev 32375)
@@ -11,6 +11,12 @@
 import org.drools.planner.core.score.Score;
 import org.drools.planner.core.solution.Solution;
 import org.drools.planner.examples.common.domain.AbstractPersistable;
+import org.drools.planner.examples.nurserostering.domain.contract.Contract;
+import org.drools.planner.examples.nurserostering.domain.contract.ContractLine;
+import org.drools.planner.examples.nurserostering.domain.request.DayOffRequest;
+import org.drools.planner.examples.nurserostering.domain.request.DayOnRequest;
+import org.drools.planner.examples.nurserostering.domain.request.ShiftOffRequest;
+import org.drools.planner.examples.nurserostering.domain.request.ShiftOnRequest;
 
 /**
  * @author Geoffrey De Smet
@@ -25,6 +31,7 @@
     private List<ShiftTypeSkillRequirement> shiftTypeSkillRequirementList;
     private List<Pattern> patternList;
     private List<Contract> contractList;
+    private List<ContractLine> contractLineList;
     private List<Employee> employeeList;
     private List<SkillProficiency> skillProficiencyList;
     private List<ShiftDate> shiftDateList;
@@ -86,6 +93,14 @@
         this.contractList = contractList;
     }
 
+    public List<ContractLine> getContractLineList() {
+        return contractLineList;
+    }
+
+    public void setContractLineList(List<ContractLine> contractLineList) {
+        this.contractLineList = contractLineList;
+    }
+
     public List<Employee> getEmployeeList() {
         return employeeList;
     }
@@ -178,6 +193,7 @@
         facts.addAll(shiftTypeSkillRequirementList);
         facts.addAll(patternList);
         facts.addAll(contractList);
+        facts.addAll(contractLineList);
         facts.addAll(employeeList);
         facts.addAll(skillProficiencyList);
         facts.addAll(shiftDateList);
@@ -207,6 +223,7 @@
         clone.shiftTypeSkillRequirementList = shiftTypeSkillRequirementList;
         clone.patternList = patternList;
         clone.contractList = contractList;
+        clone.contractLineList = contractLineList;
         clone.employeeList = employeeList;
         clone.skillProficiencyList = skillProficiencyList;
         clone.shiftDateList = shiftDateList;

Deleted: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/ShiftOffRequest.java
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/ShiftOffRequest.java	2010-04-03 08:57:01 UTC (rev 32374)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/ShiftOffRequest.java	2010-04-03 14:30:32 UTC (rev 32375)
@@ -1,53 +0,0 @@
-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;
-
-/**
- * @author Geoffrey De Smet
- */
- at XStreamAlias("ShiftOffRequest")
-public class ShiftOffRequest extends AbstractPersistable implements Comparable<ShiftOffRequest> {
-
-    private Employee employee;
-    private Shift shift;
-    private int weight;
-
-    public Employee getEmployee() {
-        return employee;
-    }
-
-    public void setEmployee(Employee employee) {
-        this.employee = employee;
-    }
-
-    public Shift getShift() {
-        return shift;
-    }
-
-    public void setShift(Shift shift) {
-        this.shift = shift;
-    }
-
-    public int getWeight() {
-        return weight;
-    }
-
-    public void setWeight(int weight) {
-        this.weight = weight;
-    }
-
-    public int compareTo(ShiftOffRequest other) {
-        return new CompareToBuilder()
-                .append(employee, other.employee)
-                .append(shift, other.shift)
-                .toComparison();
-    }
-
-    @Override
-    public String toString() {
-        return shift + "_OFF_" + employee;
-    }
-
-}

Deleted: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/ShiftOnRequest.java
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/ShiftOnRequest.java	2010-04-03 08:57:01 UTC (rev 32374)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/ShiftOnRequest.java	2010-04-03 14:30:32 UTC (rev 32375)
@@ -1,53 +0,0 @@
-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;
-
-/**
- * @author Geoffrey De Smet
- */
- at XStreamAlias("ShiftOnRequest")
-public class ShiftOnRequest extends AbstractPersistable implements Comparable<ShiftOnRequest> {
-
-    private Employee employee;
-    private Shift shift;
-    private int weight;
-
-    public Employee getEmployee() {
-        return employee;
-    }
-
-    public void setEmployee(Employee employee) {
-        this.employee = employee;
-    }
-
-    public Shift getShift() {
-        return shift;
-    }
-
-    public void setShift(Shift shift) {
-        this.shift = shift;
-    }
-
-    public int getWeight() {
-        return weight;
-    }
-
-    public void setWeight(int weight) {
-        this.weight = weight;
-    }
-
-    public int compareTo(ShiftOnRequest other) {
-        return new CompareToBuilder()
-                .append(employee, other.employee)
-                .append(shift, other.shift)
-                .toComparison();
-    }
-
-    @Override
-    public String toString() {
-        return shift + "_ON_" + employee;
-    }
-
-}

Copied: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/contract/Contract.java (from rev 32374, labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/Contract.java)
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/contract/Contract.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/contract/Contract.java	2010-04-03 14:30:32 UTC (rev 32375)
@@ -0,0 +1,55 @@
+package org.drools.planner.examples.nurserostering.domain.contract;
+
+import java.util.List;
+
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+import org.apache.commons.lang.builder.CompareToBuilder;
+import org.drools.planner.examples.common.domain.AbstractPersistable;
+
+/**
+ * @author Geoffrey De Smet
+ */
+ at XStreamAlias("Contract")
+public class Contract extends AbstractPersistable implements Comparable<Contract> {
+
+    private String code;
+    private String description;
+
+    private List<ContractLine> contractLineList;
+
+    public String getCode() {
+        return code;
+    }
+
+    public void setCode(String code) {
+        this.code = code;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    public List<ContractLine> getContractLineList() {
+        return contractLineList;
+    }
+
+    public void setContractLineList(List<ContractLine> contractLineList) {
+        this.contractLineList = contractLineList;
+    }
+
+    public int compareTo(Contract other) {
+        return new CompareToBuilder()
+                .append(id, other.id)
+                .toComparison();
+    }
+
+    @Override
+    public String toString() {
+        return code;
+    }
+
+}

Copied: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/contract/ContractLine.java (from rev 32374, labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/Contract.java)
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/contract/ContractLine.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/contract/ContractLine.java	2010-04-03 14:30:32 UTC (rev 32375)
@@ -0,0 +1,99 @@
+package org.drools.planner.examples.nurserostering.domain.contract;
+
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+import org.apache.commons.lang.builder.CompareToBuilder;
+import org.drools.planner.examples.common.domain.AbstractPersistable;
+
+/**
+ * @author Geoffrey De Smet
+ */
+ at XStreamAlias("ContractLine")
+public class ContractLine extends AbstractPersistable implements Comparable<ContractLine> {
+
+    private Contract contract;
+    private ContractLineType contractLineType;
+
+    private boolean minimumEnabled;
+    private int minimumValue;
+    private int minimumWeight;
+
+    private boolean maximumEnabled;
+    private int maximumValue;
+    private int maximumWeight;
+
+    public Contract getContract() {
+        return contract;
+    }
+
+    public void setContract(Contract contract) {
+        this.contract = contract;
+    }
+
+    public ContractLineType getContractLineType() {
+        return contractLineType;
+    }
+
+    public void setContractLineType(ContractLineType contractLineType) {
+        this.contractLineType = contractLineType;
+    }
+
+    public boolean isMinimumEnabled() {
+        return minimumEnabled;
+    }
+
+    public void setMinimumEnabled(boolean minimumEnabled) {
+        this.minimumEnabled = minimumEnabled;
+    }
+
+    public int getMinimumValue() {
+        return minimumValue;
+    }
+
+    public void setMinimumValue(int minimumValue) {
+        this.minimumValue = minimumValue;
+    }
+
+    public int getMinimumWeight() {
+        return minimumWeight;
+    }
+
+    public void setMinimumWeight(int minimumWeight) {
+        this.minimumWeight = minimumWeight;
+    }
+
+    public boolean isMaximumEnabled() {
+        return maximumEnabled;
+    }
+
+    public void setMaximumEnabled(boolean maximumEnabled) {
+        this.maximumEnabled = maximumEnabled;
+    }
+
+    public int getMaximumValue() {
+        return maximumValue;
+    }
+
+    public void setMaximumValue(int maximumValue) {
+        this.maximumValue = maximumValue;
+    }
+
+    public int getMaximumWeight() {
+        return maximumWeight;
+    }
+
+    public void setMaximumWeight(int maximumWeight) {
+        this.maximumWeight = maximumWeight;
+    }
+
+    public int compareTo(ContractLine other) {
+        return new CompareToBuilder()
+                .append(id, other.id)
+                .toComparison();
+    }
+
+    @Override
+    public String toString() {
+        return contract + "-" + contractLineType;
+    }
+
+}

Copied: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/contract/ContractLineType.java (from rev 32374, labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/examination/domain/PeriodHardConstraintType.java)
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/contract/ContractLineType.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/contract/ContractLineType.java	2010-04-03 14:30:32 UTC (rev 32375)
@@ -0,0 +1,12 @@
+package org.drools.planner.examples.nurserostering.domain.contract;
+
+/**
+ * @author Geoffrey De Smet
+ */
+public enum ContractLineType {
+    TOTAL_ASSIGNMENTS,
+    CONSECUTIVE_WORKING_DAYS,
+    CONSECUTIVE_FREE_DAYS,
+    CONSECUTIVE_WORKING_WEEKENDS,
+    TOTAL_WORKING_WEEKENDS_IN_FOUR_WEEKS
+}

Copied: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/request/DayOffRequest.java (from rev 32374, labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/DayOffRequest.java)
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/request/DayOffRequest.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/request/DayOffRequest.java	2010-04-03 14:30:32 UTC (rev 32375)
@@ -0,0 +1,55 @@
+package org.drools.planner.examples.nurserostering.domain.request;
+
+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.Employee;
+import org.drools.planner.examples.nurserostering.domain.ShiftDate;
+
+/**
+ * @author Geoffrey De Smet
+ */
+ at XStreamAlias("DayOffRequest")
+public class DayOffRequest extends AbstractPersistable implements Comparable<DayOffRequest> {
+
+    private Employee employee;
+    private ShiftDate shiftDate;
+    private int weight;
+
+    public Employee getEmployee() {
+        return employee;
+    }
+
+    public void setEmployee(Employee employee) {
+        this.employee = employee;
+    }
+
+    public ShiftDate getShiftDate() {
+        return shiftDate;
+    }
+
+    public void setShiftDate(ShiftDate shiftDate) {
+        this.shiftDate = shiftDate;
+    }
+
+    public int getWeight() {
+        return weight;
+    }
+
+    public void setWeight(int weight) {
+        this.weight = weight;
+    }
+
+    public int compareTo(DayOffRequest other) {
+        return new CompareToBuilder()
+                .append(employee, other.employee)
+                .append(shiftDate, other.shiftDate)
+                .toComparison();
+    }
+
+    @Override
+    public String toString() {
+        return shiftDate + "_OFF_" + employee;
+    }
+
+}

Copied: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/request/DayOnRequest.java (from rev 32374, labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/DayOnRequest.java)
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/request/DayOnRequest.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/request/DayOnRequest.java	2010-04-03 14:30:32 UTC (rev 32375)
@@ -0,0 +1,55 @@
+package org.drools.planner.examples.nurserostering.domain.request;
+
+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.Employee;
+import org.drools.planner.examples.nurserostering.domain.ShiftDate;
+
+/**
+ * @author Geoffrey De Smet
+ */
+ at XStreamAlias("DayOnRequest")
+public class DayOnRequest extends AbstractPersistable implements Comparable<DayOnRequest> {
+
+    private Employee employee;
+    private ShiftDate shiftDate;
+    private int weight;
+
+    public Employee getEmployee() {
+        return employee;
+    }
+
+    public void setEmployee(Employee employee) {
+        this.employee = employee;
+    }
+
+    public ShiftDate getShiftDate() {
+        return shiftDate;
+    }
+
+    public void setShiftDate(ShiftDate shiftDate) {
+        this.shiftDate = shiftDate;
+    }
+
+    public int getWeight() {
+        return weight;
+    }
+
+    public void setWeight(int weight) {
+        this.weight = weight;
+    }
+
+    public int compareTo(DayOnRequest other) {
+        return new CompareToBuilder()
+                .append(employee, other.employee)
+                .append(shiftDate, other.shiftDate)
+                .toComparison();
+    }
+
+    @Override
+    public String toString() {
+        return shiftDate + "_ON_" + employee;
+    }
+
+}

Copied: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/request/ShiftOffRequest.java (from rev 32374, labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/ShiftOffRequest.java)
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/request/ShiftOffRequest.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/request/ShiftOffRequest.java	2010-04-03 14:30:32 UTC (rev 32375)
@@ -0,0 +1,55 @@
+package org.drools.planner.examples.nurserostering.domain.request;
+
+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.Employee;
+import org.drools.planner.examples.nurserostering.domain.Shift;
+
+/**
+ * @author Geoffrey De Smet
+ */
+ at XStreamAlias("ShiftOffRequest")
+public class ShiftOffRequest extends AbstractPersistable implements Comparable<ShiftOffRequest> {
+
+    private Employee employee;
+    private Shift shift;
+    private int weight;
+
+    public Employee getEmployee() {
+        return employee;
+    }
+
+    public void setEmployee(Employee employee) {
+        this.employee = employee;
+    }
+
+    public Shift getShift() {
+        return shift;
+    }
+
+    public void setShift(Shift shift) {
+        this.shift = shift;
+    }
+
+    public int getWeight() {
+        return weight;
+    }
+
+    public void setWeight(int weight) {
+        this.weight = weight;
+    }
+
+    public int compareTo(ShiftOffRequest other) {
+        return new CompareToBuilder()
+                .append(employee, other.employee)
+                .append(shift, other.shift)
+                .toComparison();
+    }
+
+    @Override
+    public String toString() {
+        return shift + "_OFF_" + employee;
+    }
+
+}

Copied: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/request/ShiftOnRequest.java (from rev 32374, labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/ShiftOnRequest.java)
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/request/ShiftOnRequest.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/request/ShiftOnRequest.java	2010-04-03 14:30:32 UTC (rev 32375)
@@ -0,0 +1,55 @@
+package org.drools.planner.examples.nurserostering.domain.request;
+
+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.Employee;
+import org.drools.planner.examples.nurserostering.domain.Shift;
+
+/**
+ * @author Geoffrey De Smet
+ */
+ at XStreamAlias("ShiftOnRequest")
+public class ShiftOnRequest extends AbstractPersistable implements Comparable<ShiftOnRequest> {
+
+    private Employee employee;
+    private Shift shift;
+    private int weight;
+
+    public Employee getEmployee() {
+        return employee;
+    }
+
+    public void setEmployee(Employee employee) {
+        this.employee = employee;
+    }
+
+    public Shift getShift() {
+        return shift;
+    }
+
+    public void setShift(Shift shift) {
+        this.shift = shift;
+    }
+
+    public int getWeight() {
+        return weight;
+    }
+
+    public void setWeight(int weight) {
+        this.weight = weight;
+    }
+
+    public int compareTo(ShiftOnRequest other) {
+        return new CompareToBuilder()
+                .append(employee, other.employee)
+                .append(shift, other.shift)
+                .toComparison();
+    }
+
+    @Override
+    public String toString() {
+        return shift + "_ON_" + employee;
+    }
+
+}

Modified: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/persistence/NurseRosteringSolutionImporter.java
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/persistence/NurseRosteringSolutionImporter.java	2010-04-03 08:57:01 UTC (rev 32374)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/persistence/NurseRosteringSolutionImporter.java	2010-04-03 14:30:32 UTC (rev 32375)
@@ -16,21 +16,23 @@
 
 import org.drools.planner.core.solution.Solution;
 import org.drools.planner.examples.common.persistence.AbstractXmlSolutionImporter;
-import org.drools.planner.examples.nurserostering.domain.Contract;
 import org.drools.planner.examples.nurserostering.domain.DayOfWeek;
-import org.drools.planner.examples.nurserostering.domain.DayOffRequest;
-import org.drools.planner.examples.nurserostering.domain.DayOnRequest;
 import org.drools.planner.examples.nurserostering.domain.Employee;
 import org.drools.planner.examples.nurserostering.domain.NurseRoster;
 import org.drools.planner.examples.nurserostering.domain.Pattern;
 import org.drools.planner.examples.nurserostering.domain.Shift;
 import org.drools.planner.examples.nurserostering.domain.ShiftDate;
-import org.drools.planner.examples.nurserostering.domain.ShiftOffRequest;
-import org.drools.planner.examples.nurserostering.domain.ShiftOnRequest;
 import org.drools.planner.examples.nurserostering.domain.ShiftType;
 import org.drools.planner.examples.nurserostering.domain.ShiftTypeSkillRequirement;
 import org.drools.planner.examples.nurserostering.domain.Skill;
 import org.drools.planner.examples.nurserostering.domain.SkillProficiency;
+import org.drools.planner.examples.nurserostering.domain.contract.Contract;
+import org.drools.planner.examples.nurserostering.domain.contract.ContractLine;
+import org.drools.planner.examples.nurserostering.domain.contract.ContractLineType;
+import org.drools.planner.examples.nurserostering.domain.request.DayOffRequest;
+import org.drools.planner.examples.nurserostering.domain.request.DayOnRequest;
+import org.drools.planner.examples.nurserostering.domain.request.ShiftOffRequest;
+import org.drools.planner.examples.nurserostering.domain.request.ShiftOnRequest;
 import org.jdom.Element;
 import org.jdom.JDOMException;
 
@@ -335,34 +337,85 @@
         }
 
         private void readContractList(NurseRoster nurseRoster, Element contractsElement) throws JDOMException {
+            int contractLineTypeListSize = ContractLineType.values().length;
             List<Element> contractElementList = (List<Element>) contractsElement.getChildren();
             List<Contract> contractList = new ArrayList<Contract>(contractElementList.size());
             contractMap = new HashMap<String, Contract>(contractElementList.size());
             long id = 0L;
+            List<ContractLine> contractLineList = new ArrayList<ContractLine>(
+                    contractElementList.size() * contractLineTypeListSize);
+            long contractLineId = 0L;
             for (Element element : contractElementList) {
                 assertElementName(element, "Contract");
                 Contract contract = new Contract();
                 contract.setId(id);
                 contract.setCode(element.getAttribute("ID").getValue());
                 contract.setDescription(element.getChild("Description").getText());
-                // TODO the rest of the contract
+// TODO the rest of the contract
 //      <SingleAssignmentPerDay weight="1">true</SingleAssignmentPerDay>
 //      <MaxNumAssignments on="1" weight="1">16</MaxNumAssignments>
 //      <MinNumAssignments on="1" weight="1">6</MinNumAssignments>
-//      <MaxConsecutiveWorkingDays on="1" weight="1">7</MaxConsecutiveWorkingDays>
-//      <MinConsecutiveWorkingDays on="1" weight="1">1</MinConsecutiveWorkingDays>
+                
+                List<ContractLine> contractLineListOfContract = new ArrayList<ContractLine>(contractLineTypeListSize);
+                Element maxElement = element.getChild("MaxConsecutiveWorkingDays");
+                Element minElement = element.getChild("MinConsecutiveWorkingDays");
+
+                boolean minimumEnabled = minElement.getAttribute("on").getBooleanValue();
+                boolean maximumEnabled = maxElement.getAttribute("on").getBooleanValue();
+                ContractLine contractLine = new ContractLine();
+                contractLine.setId(contractLineId);
+                contractLine.setContract(contract);
+                contractLine.setContractLineType(ContractLineType.CONSECUTIVE_WORKING_DAYS);
+                contractLine.setMinimumEnabled(minimumEnabled);
+                if (minimumEnabled) {
+                    int minimumValue = Integer.parseInt(minElement.getText());
+                    if (minimumValue < 1) {
+                        throw new IllegalArgumentException("The minimumValue (" + minimumValue
+                                + ") of contract (" + contract.getCode() + ") should be at least 1.");
+                    }
+                    contractLine.setMinimumValue(minimumValue);
+                    int minimumWeight = minElement.getAttribute("weight").getIntValue();
+                    if (minimumWeight < 1) {
+                        throw new IllegalArgumentException("The minimumWeight (" + minimumWeight
+                                + ") of contract (" + contract.getCode() + ") should be at least 1.");
+                    }
+                    contractLine.setMinimumWeight(minimumWeight);
+                }
+                contractLine.setMaximumEnabled(maximumEnabled);
+                if (maximumEnabled) {
+                    int maximumValue = Integer.parseInt(maxElement.getText());
+                    if (maximumValue < 1) {
+                        throw new IllegalArgumentException("The maximumValue (" + maximumValue
+                                + ") of contract (" + contract.getCode() + ") should be at least 1.");
+                    }
+                    contractLine.setMaximumValue(maximumValue);
+                    int maximumWeight = maxElement.getAttribute("weight").getIntValue();
+                    if (maximumWeight < 1) {
+                        throw new IllegalArgumentException("The maximumWeight (" + maximumWeight
+                                + ") of contract (" + contract.getCode() + ") should be at least 1.");
+                    }
+                    contractLine.setMaximumWeight(maximumWeight);
+                }
+                contractLineList.add(contractLine);
+                contractLineListOfContract.add(contractLine);
+                contractLineId++;
+
+// TODO the rest of the contract
 //      <MaxConsecutiveFreeDays on="1" weight="1">5</MaxConsecutiveFreeDays>
 //      <MinConsecutiveFreeDays on="1" weight="1">1</MinConsecutiveFreeDays>
 //      <MaxConsecutiveWorkingWeekends on="0" weight="0">7</MaxConsecutiveWorkingWeekends>
 //      <MinConsecutiveWorkingWeekends on="0" weight="0">1</MinConsecutiveWorkingWeekends>
 //      <MaxWorkingWeekendsInFourWeeks on="0" weight="0">0</MaxWorkingWeekendsInFourWeeks>
+
 //      <WeekendDefinition>SaturdaySunday</WeekendDefinition>
 //      <CompleteWeekends weight="1">true</CompleteWeekends>
 //      <IdenticalShiftTypesDuringWeekend weight="1">true</IdenticalShiftTypesDuringWeekend>
 //      <NoNightShiftBeforeFreeWeekend weight="0">false</NoNightShiftBeforeFreeWeekend>
 //      <AlternativeSkillCategory weight="0">false</AlternativeSkillCategory>
 
+                contract.setContractLineList(contractLineListOfContract);
 
+
                 List<Element> unwantedPatternElementList = (List<Element>) element.getChild("UnwantedPatterns")
                         .getChildren();
                 for (Element patternElement : unwantedPatternElementList) {
@@ -387,6 +440,7 @@
                 id++;
             }
             nurseRoster.setContractList(contractList);
+            nurseRoster.setContractLineList(contractLineList);
         }
 
         private void readEmployeeList(NurseRoster nurseRoster, Element employeesElement) throws JDOMException {

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-04-03 08:57:01 UTC (rev 32374)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/nurserostering/solver/nurseRosteringScoreRules.drl	2010-04-03 14:30:32 UTC (rev 32375)
@@ -5,22 +5,24 @@
 import org.drools.planner.core.score.constraint.IntConstraintOccurrence;
 import org.drools.planner.core.score.constraint.ConstraintType;
 
-import org.drools.planner.examples.nurserostering.domain.Contract;
 import org.drools.planner.examples.nurserostering.domain.DayOfWeek;
-import org.drools.planner.examples.nurserostering.domain.DayOffRequest;
-import org.drools.planner.examples.nurserostering.domain.DayOnRequest;
 import org.drools.planner.examples.nurserostering.domain.Employee;
 import org.drools.planner.examples.nurserostering.domain.EmployeeAssignment;
 import org.drools.planner.examples.nurserostering.domain.NurseRoster;
 import org.drools.planner.examples.nurserostering.domain.Pattern;
 import org.drools.planner.examples.nurserostering.domain.Shift;
 import org.drools.planner.examples.nurserostering.domain.ShiftDate;
-import org.drools.planner.examples.nurserostering.domain.ShiftOffRequest;
-import org.drools.planner.examples.nurserostering.domain.ShiftOnRequest;
 import org.drools.planner.examples.nurserostering.domain.ShiftType;
 import org.drools.planner.examples.nurserostering.domain.ShiftTypeSkillRequirement;
 import org.drools.planner.examples.nurserostering.domain.Skill;
 import org.drools.planner.examples.nurserostering.domain.SkillProficiency;
+import org.drools.planner.examples.nurserostering.domain.contract.Contract;
+import org.drools.planner.examples.nurserostering.domain.contract.ContractLine;
+import org.drools.planner.examples.nurserostering.domain.contract.ContractLineType;
+import org.drools.planner.examples.nurserostering.domain.request.DayOffRequest;
+import org.drools.planner.examples.nurserostering.domain.request.DayOnRequest;
+import org.drools.planner.examples.nurserostering.domain.request.ShiftOffRequest;
+import org.drools.planner.examples.nurserostering.domain.request.ShiftOnRequest;
 
 // @author Geoffrey De Smet
 
@@ -80,7 +82,9 @@
 // Maximum number of consecutive working days
 rule "maximumConsecutiveWorkingDays"
     when
-        $employee : Employee();
+        $contractLine : ContractLine(contractLineType == ContractLineType.CONSECUTIVE_WORKING_DAYS,
+                maximumEnabled == true, $contract : contract, $maximumValue : maximumValue);
+        $employee : Employee(contract == $contract);
 
         // The first day has no working day before it
         EmployeeAssignment(employee == $employee, $firstDayIndex : shiftDateDayIndex, shift != null);
@@ -97,11 +101,11 @@
         );
 
         // There are to many days
-        eval(($lastDayIndex - $firstDayIndex) > 7);
+        eval(($lastDayIndex - $firstDayIndex) > $maximumValue);
     then
         insertLogical(new IntConstraintOccurrence("maximumConsecutiveWorkingDays", ConstraintType.NEGATIVE_SOFT,
-                ($lastDayIndex - $firstDayIndex - 7),
-                $employee, $firstDayIndex));
+                (($lastDayIndex - $firstDayIndex) - $maximumValue) * $contractLine.getMaximumWeight(),
+                $employee, $firstDayIndex, $lastDayIndex));
 end
 
 // Minimum number of consecutive working days



More information about the jboss-svn-commits mailing list