[jboss-svn-commits] JBL Code SVN: r32746 - in labs/jbossrules/trunk/drools-planner/drools-planner-examples: src/main/java/org/drools/planner/examples/nurserostering/domain and 3 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Wed May 5 09:09:51 EDT 2010
Author: ge0ffrey
Date: 2010-05-05 09:09:50 -0400 (Wed, 05 May 2010)
New Revision: 32746
Added:
labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/contract/BooleanContractLine.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/MinMaxContractLine.java
Removed:
labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/contract/ContractLine.java
Modified:
labs/jbossrules/trunk/drools-planner/drools-planner-examples/data/nurserostering/input/toy1.xml
labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/EmployeeAssignment.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/persistence/NurseRosteringSolutionImporter.java
labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/nurserostering/solver/nurseRosteringScoreRules.drl
Log:
nurseRostering: import contract lines
Modified: labs/jbossrules/trunk/drools-planner/drools-planner-examples/data/nurserostering/input/toy1.xml
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/data/nurserostering/input/toy1.xml 2010-05-05 12:55:45 UTC (rev 32745)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/data/nurserostering/input/toy1.xml 2010-05-05 13:09:50 UTC (rev 32746)
@@ -77,7 +77,7 @@
<WeekendDefinition>SaturdaySunday</WeekendDefinition>
<CompleteWeekends weight="1">true</CompleteWeekends>
<IdenticalShiftTypesDuringWeekend weight="1">true</IdenticalShiftTypesDuringWeekend>
- <NoNightShiftBeforeFreeWeekend weight="0">true</NoNightShiftBeforeFreeWeekend>
+ <NoNightShiftBeforeFreeWeekend weight="1">true</NoNightShiftBeforeFreeWeekend>
<AlternativeSkillCategory weight="0">false</AlternativeSkillCategory>
<UnwantedPatterns>
<Pattern>0</Pattern>
Modified: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/EmployeeAssignment.java
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/EmployeeAssignment.java 2010-05-05 12:55:45 UTC (rev 32745)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/EmployeeAssignment.java 2010-05-05 13:09:50 UTC (rev 32746)
@@ -94,6 +94,10 @@
return getShift().getShiftDate();
}
+ public ShiftType getShiftType() {
+ return getShift().getShiftType();
+ }
+
public int getShiftDateDayIndex() {
return getShift().getShiftDate().getDayIndex();
}
Added: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/contract/BooleanContractLine.java
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/contract/BooleanContractLine.java (rev 0)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/contract/BooleanContractLine.java 2010-05-05 13:09:50 UTC (rev 32746)
@@ -0,0 +1,30 @@
+package org.drools.planner.examples.nurserostering.domain.contract;
+
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+
+/**
+ * @author Geoffrey De Smet
+ */
+ at XStreamAlias("BooleanContractLine")
+public class BooleanContractLine extends ContractLine {
+
+ private boolean enabled;
+ private int weight;
+
+ public boolean isEnabled() {
+ return enabled;
+ }
+
+ public void setEnabled(boolean enabled) {
+ this.enabled = enabled;
+ }
+
+ public int getWeight() {
+ return weight;
+ }
+
+ public void setWeight(int weight) {
+ this.weight = weight;
+ }
+
+}
Deleted: 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/ContractLine.java 2010-05-05 12:55:45 UTC (rev 32745)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/contract/ContractLine.java 2010-05-05 13:09:50 UTC (rev 32746)
@@ -1,107 +0,0 @@
-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 getMinimumIndexDiff() {
- return minimumValue - 1;
- }
-
- 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 getMaximumIndexDiff() {
- return maximumValue - 1;
- }
-
- 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;
- }
-
-}
Added: 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/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-05-05 13:09:50 UTC (rev 32746)
@@ -0,0 +1,42 @@
+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 abstract class ContractLine extends AbstractPersistable implements Comparable<ContractLine> {
+
+ private Contract contract;
+ private ContractLineType contractLineType;
+
+ 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 int compareTo(ContractLine other) {
+ return new CompareToBuilder()
+ .append(id, other.id)
+ .toComparison();
+ }
+
+ @Override
+ public String toString() {
+ return contract + "-" + contractLineType;
+ }
+}
Modified: 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/contract/ContractLineType.java 2010-05-05 12:55:45 UTC (rev 32745)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/contract/ContractLineType.java 2010-05-05 13:09:50 UTC (rev 32746)
@@ -4,9 +4,14 @@
* @author Geoffrey De Smet
*/
public enum ContractLineType {
+ SINGLE_ASSIGNMENT_PER_DAY,
TOTAL_ASSIGNMENTS,
CONSECUTIVE_WORKING_DAYS,
CONSECUTIVE_FREE_DAYS,
CONSECUTIVE_WORKING_WEEKENDS,
- TOTAL_WORKING_WEEKENDS_IN_FOUR_WEEKS
+ TOTAL_WORKING_WEEKENDS_IN_FOUR_WEEKS,
+ COMPLETE_WEEKENDS,
+ IDENTICAL_SHIFT_TYPES_DURING_WEEKEND,
+ NO_NIGHT_SHIFT_BEFORE_FREE_WEEKEND,
+ ALTERNATIVE_SKILL_CATEGORY
}
Copied: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/contract/MinMaxContractLine.java (from rev 32692, 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/MinMaxContractLine.java (rev 0)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/contract/MinMaxContractLine.java 2010-05-05 13:09:50 UTC (rev 32746)
@@ -0,0 +1,75 @@
+package org.drools.planner.examples.nurserostering.domain.contract;
+
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+
+/**
+ * @author Geoffrey De Smet
+ */
+ at XStreamAlias("MinMaxContractLine")
+public class MinMaxContractLine extends ContractLine {
+
+ private boolean minimumEnabled;
+ private int minimumValue;
+ private int minimumWeight;
+
+ private boolean maximumEnabled;
+ private int maximumValue;
+ private int maximumWeight;
+
+ 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 getMinimumIndexDiff() {
+ return minimumValue - 1;
+ }
+
+ 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 getMaximumIndexDiff() {
+ return maximumValue - 1;
+ }
+
+ public int getMaximumWeight() {
+ return maximumWeight;
+ }
+
+ public void setMaximumWeight(int maximumWeight) {
+ this.maximumWeight = maximumWeight;
+ }
+
+}
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-05-05 12:55:45 UTC (rev 32745)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/persistence/NurseRosteringSolutionImporter.java 2010-05-05 13:09:50 UTC (rev 32746)
@@ -26,13 +26,16 @@
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.BooleanContractLine;
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.contract.MinMaxContractLine;
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.DataConversionException;
import org.jdom.Element;
import org.jdom.JDOMException;
@@ -351,21 +354,108 @@
contract.setId(id);
contract.setCode(element.getAttribute("ID").getValue());
contract.setDescription(element.getChild("Description").getText());
-// 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>
-
+
List<ContractLine> contractLineListOfContract = new ArrayList<ContractLine>(contractLineTypeListSize);
- Element maxElement = element.getChild("MaxConsecutiveWorkingDays");
- Element minElement = element.getChild("MinConsecutiveWorkingDays");
+ contractLineId = readBooleanContractLine(contract, contractLineList, contractLineListOfContract,
+ contractLineId, element.getChild("SingleAssignmentPerDay"),
+ ContractLineType.SINGLE_ASSIGNMENT_PER_DAY);
+ contractLineId = readMinMaxContractLine(contract, contractLineList, contractLineListOfContract,
+ contractLineId, element.getChild("MinNumAssignments"),
+ element.getChild("MaxNumAssignments"),
+ ContractLineType.TOTAL_ASSIGNMENTS);
+ contractLineId = readMinMaxContractLine(contract, contractLineList, contractLineListOfContract,
+ contractLineId, element.getChild("MinConsecutiveWorkingDays"),
+ element.getChild("MaxConsecutiveWorkingDays"),
+ ContractLineType.CONSECUTIVE_WORKING_DAYS);
+ contractLineId = readMinMaxContractLine(contract, contractLineList, contractLineListOfContract,
+ contractLineId, element.getChild("MinConsecutiveFreeDays"),
+ element.getChild("MaxConsecutiveFreeDays"),
+ ContractLineType.CONSECUTIVE_FREE_DAYS);
+ contractLineId = readMinMaxContractLine(contract, contractLineList, contractLineListOfContract,
+ contractLineId, element.getChild("MinConsecutiveWorkingWeekends"),
+ element.getChild("MaxConsecutiveWorkingWeekends"),
+ ContractLineType.CONSECUTIVE_WORKING_WEEKENDS);
+ contractLineId = readMinMaxContractLine(contract, contractLineList, contractLineListOfContract,
+ contractLineId, null,
+ element.getChild("MaxWorkingWeekendsInFourWeeks"),
+ ContractLineType.TOTAL_WORKING_WEEKENDS_IN_FOUR_WEEKS);
+// TODO
+// <WeekendDefinition>SaturdaySunday</WeekendDefinition>
+ contractLineId = readBooleanContractLine(contract, contractLineList, contractLineListOfContract,
+ contractLineId, element.getChild("CompleteWeekends"),
+ ContractLineType.COMPLETE_WEEKENDS);
+ contractLineId = readBooleanContractLine(contract, contractLineList, contractLineListOfContract,
+ contractLineId, element.getChild("IdenticalShiftTypesDuringWeekend"),
+ ContractLineType.IDENTICAL_SHIFT_TYPES_DURING_WEEKEND);
+ contractLineId = readBooleanContractLine(contract, contractLineList, contractLineListOfContract,
+ contractLineId, element.getChild("NoNightShiftBeforeFreeWeekend"),
+ ContractLineType.NO_NIGHT_SHIFT_BEFORE_FREE_WEEKEND);
+ contractLineId = readBooleanContractLine(contract, contractLineList, contractLineListOfContract,
+ contractLineId, element.getChild("AlternativeSkillCategory"),
+ ContractLineType.ALTERNATIVE_SKILL_CATEGORY);
+ contract.setContractLineList(contractLineListOfContract);
- boolean minimumEnabled = minElement.getAttribute("on").getBooleanValue();
- boolean maximumEnabled = maxElement.getAttribute("on").getBooleanValue();
- ContractLine contractLine = new ContractLine();
+ List<Element> unwantedPatternElementList = (List<Element>) element.getChild("UnwantedPatterns")
+ .getChildren();
+ for (Element patternElement : unwantedPatternElementList) {
+ assertElementName(patternElement, "Pattern");
+ Pattern pattern = patternMap.get(patternElement.getText());
+ if (pattern == null) {
+ throw new IllegalArgumentException("The pattern (" + patternElement.getText()
+ + ") of contract (" + contract.getCode() + ") does not exist.");
+ }
+ // TODO unwanted pattern
+// <UnwantedPatterns>
+// <Pattern>0</Pattern>
+// <Pattern>1</Pattern>
+// <Pattern>2</Pattern>
+// </UnwantedPatterns>
+
+
+ }
+
+ contractList.add(contract);
+ contractMap.put(contract.getCode(), contract);
+ id++;
+ }
+ nurseRoster.setContractList(contractList);
+ nurseRoster.setContractLineList(contractLineList);
+ }
+
+ private long readBooleanContractLine(Contract contract, List<ContractLine> contractLineList,
+ List<ContractLine> contractLineListOfContract, long contractLineId, Element element,
+ ContractLineType contractLineType) throws DataConversionException {
+ boolean enabled = Boolean.valueOf(element.getText());
+ if (enabled) {
+ BooleanContractLine contractLine = new BooleanContractLine();
contractLine.setId(contractLineId);
contractLine.setContract(contract);
- contractLine.setContractLineType(ContractLineType.CONSECUTIVE_WORKING_DAYS);
+ contractLine.setContractLineType(contractLineType);
+ int weight = element.getAttribute("weight").getIntValue();
+ if (weight < 1) {
+ throw new IllegalArgumentException("The weight (" + weight
+ + ") of contract (" + contract.getCode() + ") and contractLineType (" + contractLineType
+ + ") should be at least 1.");
+ }
+ contractLine.setWeight(weight);
+ contractLineList.add(contractLine);
+ contractLineListOfContract.add(contractLine);
+ contractLineId++;
+ }
+ return contractLineId;
+ }
+
+ private long readMinMaxContractLine(Contract contract, List<ContractLine> contractLineList,
+ List<ContractLine> contractLineListOfContract, long contractLineId,
+ Element minElement, Element maxElement,
+ ContractLineType contractLineType) throws DataConversionException {
+ boolean minimumEnabled = minElement == null ? false : minElement.getAttribute("on").getBooleanValue();
+ boolean maximumEnabled = maxElement == null ? false : maxElement.getAttribute("on").getBooleanValue();
+ if (minimumEnabled || maximumEnabled) {
+ MinMaxContractLine contractLine = new MinMaxContractLine();
+ contractLine.setId(contractLineId);
+ contractLine.setContract(contract);
+ contractLine.setContractLineType(contractLineType);
contractLine.setMinimumEnabled(minimumEnabled);
if (minimumEnabled) {
int minimumValue = Integer.parseInt(minElement.getText());
@@ -377,7 +467,8 @@
int minimumWeight = minElement.getAttribute("weight").getIntValue();
if (minimumWeight < 1) {
throw new IllegalArgumentException("The minimumWeight (" + minimumWeight
- + ") of contract (" + contract.getCode() + ") should be at least 1.");
+ + ") of contract (" + contract.getCode() + ") and contractLineType (" + contractLineType
+ + ") should be at least 1.");
}
contractLine.setMinimumWeight(minimumWeight);
}
@@ -392,55 +483,16 @@
int maximumWeight = maxElement.getAttribute("weight").getIntValue();
if (maximumWeight < 1) {
throw new IllegalArgumentException("The maximumWeight (" + maximumWeight
- + ") of contract (" + contract.getCode() + ") should be at least 1.");
+ + ") of contract (" + contract.getCode() + ") and contractLineType (" + contractLineType
+ + ") 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) {
- assertElementName(patternElement, "Pattern");
- Pattern pattern = patternMap.get(patternElement.getText());
- if (pattern == null) {
- throw new IllegalArgumentException("The pattern (" + patternElement.getText()
- + ") of contract (" + contract.getCode() + ") does not exist.");
- }
- // TODO unwanted pattern
-// <UnwantedPatterns>
-// <Pattern>0</Pattern>
-// <Pattern>1</Pattern>
-// <Pattern>2</Pattern>
-// </UnwantedPatterns>
-
-
- }
-
- contractList.add(contract);
- contractMap.put(contract.getCode(), contract);
- id++;
}
- nurseRoster.setContractList(contractList);
- nurseRoster.setContractLineList(contractLineList);
+ return contractLineId;
}
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-05-05 12:55:45 UTC (rev 32745)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/nurserostering/solver/nurseRosteringScoreRules.drl 2010-05-05 13:09:50 UTC (rev 32746)
@@ -17,8 +17,10 @@
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.BooleanContractLine;
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.contract.MinMaxContractLine;
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;
@@ -82,7 +84,7 @@
// Maximum number of consecutive working days // TODO too slow!
//rule "maximumConsecutiveWorkingDays"
// when
-// $contractLine : ContractLine(
+// $contractLine : MinMaxContractLine(
// contractLineType == ContractLineType.CONSECUTIVE_WORKING_DAYS, maximumEnabled == true,
// $contract : contract, $maximumIndexDiff : maximumIndexDiff
// );
@@ -117,7 +119,7 @@
// Minimum number of consecutive working days
//rule "minimumConsecutiveWorkingDays"
// when
-// $contractLine : ContractLine(
+// $contractLine : MinMaxContractLine(
// contractLineType == ContractLineType.CONSECUTIVE_WORKING_DAYS, minimumEnabled == true,
// $contract : contract, $minimumIndexDiff : minimumIndexDiff
// );
@@ -155,7 +157,7 @@
// Minimum number of consecutive free days
//rule "minimumConsecutiveFreeDays"
// when
-// $contractLine : ContractLine(
+// $contractLine : MinMaxContractLine(
// contractLineType == ContractLineType.CONSECUTIVE_FREE_DAYS, minimumEnabled == true,
// $contract : contract, $minimumIndexDiff : minimumIndexDiff
// )
@@ -206,11 +208,11 @@
rule "dayOffRequest"
when
$dayOffRequest : DayOffRequest($employee : employee, $shiftDate : shiftDate, $weight : weight);
- $employeeAssignment : EmployeeAssignment(employee == $employee, shiftDate == $shiftDate);
+ exists EmployeeAssignment(employee == $employee, shiftDate == $shiftDate);
then
insertLogical(new IntConstraintOccurrence("dayOffRequest", ConstraintType.NEGATIVE_SOFT,
$weight,
- $dayOffRequest, $employeeAssignment));
+ $dayOffRequest));
end
rule "dayOnRequest"
when
@@ -226,11 +228,11 @@
rule "shiftOffRequest"
when
$shiftOffRequest : ShiftOffRequest($employee : employee, $shift : shift, $weight : weight);
- $employeeAssignment : EmployeeAssignment(employee == $employee, shift == $shift);
+ exists EmployeeAssignment(employee == $employee, shift == $shift);
then
insertLogical(new IntConstraintOccurrence("shiftOffRequest", ConstraintType.NEGATIVE_SOFT,
$weight,
- $shiftOffRequest, $employeeAssignment));
+ $shiftOffRequest));
end
rule "shiftOnRequest"
when
@@ -243,7 +245,16 @@
end
// Alternative skill
-// TODO
+rule "alternativeSkill"
+ when
+ $employeeAssignment : EmployeeAssignment($employee : employee, $shiftType : shiftType);
+ ShiftTypeSkillRequirement(shiftType == $shiftType, $skill : skill);
+ not SkillProficiency(employee == $employee, skill == $skill);
+ then
+ insertLogical(new IntConstraintOccurrence("alternativeSkill", ConstraintType.NEGATIVE_SOFT,
+ 1,
+ $employeeAssignment));
+end
// Unwanted patterns
// TODO
More information about the jboss-svn-commits
mailing list