[jboss-svn-commits] JBL Code SVN: r33152 - 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
Fri May 28 15:46:04 EDT 2010
Author: ge0ffrey
Date: 2010-05-28 15:46:03 -0400 (Fri, 28 May 2010)
New Revision: 33152
Added:
labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/PatternEntry.java
labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/PatternEntryPropertyWildcard.java
labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/contract/PatternContractLine.java
labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/solver/PatternEntryOccurrence.java
Modified:
labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/Assignment.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:
unwanted patterns (first attempt)
Modified: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/Assignment.java
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/Assignment.java 2010-05-28 17:39:15 UTC (rev 33151)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/Assignment.java 2010-05-28 19:46:03 UTC (rev 33152)
@@ -103,6 +103,10 @@
return shift.getShiftDate().getDayIndex();
}
+ public DayOfWeek getShiftDateDayOfWeek() {
+ return shift.getShiftDate().getDayOfWeek();
+ }
+
public Contract getContract() {
return employee.getContract();
}
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-28 17:39:15 UTC (rev 33151)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/NurseRoster.java 2010-05-28 19:46:03 UTC (rev 33152)
@@ -13,6 +13,7 @@
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.contract.PatternContractLine;
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;
@@ -30,8 +31,10 @@
private List<ShiftType> shiftTypeList;
private List<ShiftTypeSkillRequirement> shiftTypeSkillRequirementList;
private List<Pattern> patternList;
+ private List<PatternEntry> patternEntryList;
private List<Contract> contractList;
private List<ContractLine> contractLineList;
+ private List<PatternContractLine> patternContractLineList;
private List<Employee> employeeList;
private List<SkillProficiency> skillProficiencyList;
private List<ShiftDate> shiftDateList;
@@ -85,6 +88,14 @@
this.patternList = patternList;
}
+ public List<PatternEntry> getPatternEntryList() {
+ return patternEntryList;
+ }
+
+ public void setPatternEntryList(List<PatternEntry> patternEntryList) {
+ this.patternEntryList = patternEntryList;
+ }
+
public List<Contract> getContractList() {
return contractList;
}
@@ -101,6 +112,14 @@
this.contractLineList = contractLineList;
}
+ public List<PatternContractLine> getPatternContractLineList() {
+ return patternContractLineList;
+ }
+
+ public void setPatternContractLineList(List<PatternContractLine> patternContractLineList) {
+ this.patternContractLineList = patternContractLineList;
+ }
+
public List<Employee> getEmployeeList() {
return employeeList;
}
@@ -194,8 +213,10 @@
facts.addAll(shiftTypeList);
facts.addAll(shiftTypeSkillRequirementList);
facts.addAll(patternList);
+ facts.addAll(patternEntryList);
facts.addAll(contractList);
facts.addAll(contractLineList);
+ facts.addAll(patternContractLineList);
facts.addAll(employeeList);
facts.addAll(skillProficiencyList);
facts.addAll(shiftDateList);
@@ -224,8 +245,10 @@
clone.shiftTypeList = shiftTypeList;
clone.shiftTypeSkillRequirementList = shiftTypeSkillRequirementList;
clone.patternList = patternList;
+ clone.patternEntryList = patternEntryList;
clone.contractList = contractList;
clone.contractLineList = contractLineList;
+ clone.patternContractLineList = patternContractLineList;
clone.employeeList = employeeList;
clone.skillProficiencyList = skillProficiencyList;
clone.shiftDateList = shiftDateList;
Copied: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/PatternEntry.java (from rev 33127, labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/Pattern.java)
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/PatternEntry.java (rev 0)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/PatternEntry.java 2010-05-28 19:46:03 UTC (rev 33152)
@@ -0,0 +1,81 @@
+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("PatternEntry")
+public class PatternEntry extends AbstractPersistable implements Comparable<PatternEntry> {
+
+ private Pattern pattern;
+ private int entryIndex;
+
+ private PatternEntryPropertyWildcard dayOfWeekWildcard;
+ private DayOfWeek dayOfWeek;
+ private PatternEntryPropertyWildcard shiftTypeWildcard;
+ private ShiftType shiftType;
+
+ public Pattern getPattern() {
+ return pattern;
+ }
+
+ public void setPattern(Pattern pattern) {
+ this.pattern = pattern;
+ }
+
+ public int getEntryIndex() {
+ return entryIndex;
+ }
+
+ public void setEntryIndex(int entryIndex) {
+ this.entryIndex = entryIndex;
+ }
+
+ public PatternEntryPropertyWildcard getDayOfWeekWildcard() {
+ return dayOfWeekWildcard;
+ }
+
+ public void setDayOfWeekWildcard(PatternEntryPropertyWildcard dayOfWeekWildcard) {
+ this.dayOfWeekWildcard = dayOfWeekWildcard;
+ }
+
+ public DayOfWeek getDayOfWeek() {
+ return dayOfWeek;
+ }
+
+ public void setDayOfWeek(DayOfWeek dayOfWeek) {
+ this.dayOfWeek = dayOfWeek;
+ }
+
+ public PatternEntryPropertyWildcard getShiftTypeWildcard() {
+ return shiftTypeWildcard;
+ }
+
+ public void setShiftTypeWildcard(PatternEntryPropertyWildcard shiftTypeWildcard) {
+ this.shiftTypeWildcard = shiftTypeWildcard;
+ }
+
+ public ShiftType getShiftType() {
+ return shiftType;
+ }
+
+ public void setShiftType(ShiftType shiftType) {
+ this.shiftType = shiftType;
+ }
+
+ public int compareTo(PatternEntry other) {
+ return new CompareToBuilder()
+ .append(id, other.id)
+ .toComparison();
+ }
+
+ @Override
+ public String toString() {
+ return pattern + "-" + entryIndex + ": "
+ + dayOfWeekWildcard + "(" + dayOfWeek + ") " + shiftTypeWildcard + "(" + shiftType + ")";
+ }
+
+}
Copied: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/PatternEntryPropertyWildcard.java (from rev 33127, labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/DayOfWeek.java)
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/PatternEntryPropertyWildcard.java (rev 0)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/PatternEntryPropertyWildcard.java 2010-05-28 19:46:03 UTC (rev 33152)
@@ -0,0 +1,11 @@
+package org.drools.planner.examples.nurserostering.domain;
+
+/**
+ * @author Geoffrey De Smet
+ */
+public enum PatternEntryPropertyWildcard {
+ NONE,
+ SPECIFIC,
+ ANY;
+
+}
Added: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/contract/PatternContractLine.java
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/contract/PatternContractLine.java (rev 0)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/contract/PatternContractLine.java 2010-05-28 19:46:03 UTC (rev 33152)
@@ -0,0 +1,47 @@
+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;
+import org.drools.planner.examples.nurserostering.domain.DayOfWeek;
+import org.drools.planner.examples.nurserostering.domain.Pattern;
+import org.drools.planner.examples.nurserostering.domain.PatternEntryPropertyWildcard;
+import org.drools.planner.examples.nurserostering.domain.ShiftType;
+
+/**
+ * @author Geoffrey De Smet
+ */
+ at XStreamAlias("PatternContractLine")
+public class PatternContractLine extends AbstractPersistable implements Comparable<PatternContractLine> {
+
+ private Contract contract;
+ private Pattern pattern;
+
+ public Contract getContract() {
+ return contract;
+ }
+
+ public void setContract(Contract contract) {
+ this.contract = contract;
+ }
+
+ public Pattern getPattern() {
+ return pattern;
+ }
+
+ public void setPattern(Pattern pattern) {
+ this.pattern = pattern;
+ }
+
+ public int compareTo(PatternContractLine other) {
+ return new CompareToBuilder()
+ .append(id, other.id)
+ .toComparison();
+ }
+
+ @Override
+ public String toString() {
+ return contract + "-" + pattern;
+ }
+
+}
Copied: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/solver/PatternEntryOccurrence.java (from rev 33127, labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/solver/EmployeeWorkSequence.java)
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/solver/PatternEntryOccurrence.java (rev 0)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/solver/PatternEntryOccurrence.java 2010-05-28 19:46:03 UTC (rev 33152)
@@ -0,0 +1,100 @@
+package org.drools.planner.examples.nurserostering.domain.solver;
+
+import java.io.Serializable;
+
+import org.apache.commons.lang.builder.CompareToBuilder;
+import org.apache.commons.lang.builder.EqualsBuilder;
+import org.apache.commons.lang.builder.HashCodeBuilder;
+import org.drools.planner.examples.nurserostering.domain.Employee;
+import org.drools.planner.examples.nurserostering.domain.Pattern;
+import org.drools.planner.examples.nurserostering.domain.PatternEntry;
+import org.drools.planner.examples.nurserostering.domain.ShiftDate;
+
+/**
+ * @author Geoffrey De Smet
+ */
+public class PatternEntryOccurrence implements Comparable<PatternEntryOccurrence>, Serializable {
+
+ private PatternEntry patternEntry;
+ private Employee employee;
+ private ShiftDate shiftDate;
+
+ public PatternEntryOccurrence(PatternEntry patternEntry, Employee employee, ShiftDate shiftDate) {
+ this.patternEntry = patternEntry;
+ this.employee = employee;
+ this.shiftDate = shiftDate;
+ }
+
+ public PatternEntry getPatternEntry() {
+ return patternEntry;
+ }
+
+ public void setPatternEntry(PatternEntry patternEntry) {
+ this.patternEntry = patternEntry;
+ }
+
+ 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 boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ } else if (o instanceof PatternEntryOccurrence) {
+ PatternEntryOccurrence other = (PatternEntryOccurrence) o;
+ return new EqualsBuilder()
+ .append(patternEntry, other.patternEntry)
+ .append(employee, other.employee)
+ .append(shiftDate, other.shiftDate)
+ .isEquals();
+ } else {
+ return false;
+ }
+ }
+
+ public int hashCode() {
+ return new HashCodeBuilder()
+ .append(patternEntry)
+ .append(employee)
+ .append(shiftDate)
+ .toHashCode();
+ }
+
+ public int compareTo(PatternEntryOccurrence other) {
+ return new CompareToBuilder()
+ .append(patternEntry, other.patternEntry)
+ .append(employee, other.employee)
+ .append(shiftDate, other.shiftDate)
+ .toComparison();
+ }
+
+ @Override
+ public String toString() {
+ return patternEntry + " for " + employee + " on " + shiftDate;
+ }
+
+ public Pattern getPattern() {
+ return patternEntry.getPattern();
+ }
+
+ public int getEntryIndex() {
+ return patternEntry.getEntryIndex();
+ }
+
+ public int getDayIndex() {
+ return shiftDate.getDayIndex();
+ }
+
+}
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-28 17:39:15 UTC (rev 33151)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/persistence/NurseRosteringSolutionImporter.java 2010-05-28 19:46:03 UTC (rev 33152)
@@ -20,6 +20,8 @@
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.PatternEntry;
+import org.drools.planner.examples.nurserostering.domain.PatternEntryPropertyWildcard;
import org.drools.planner.examples.nurserostering.domain.Shift;
import org.drools.planner.examples.nurserostering.domain.ShiftDate;
import org.drools.planner.examples.nurserostering.domain.ShiftType;
@@ -32,6 +34,7 @@
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.contract.PatternContractLine;
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;
@@ -292,13 +295,17 @@
private void readPatternList(NurseRoster nurseRoster, Element patternsElement) throws JDOMException {
List<Pattern> patternList;
+ List<PatternEntry> patternEntryList;
if (patternsElement == null) {
patternList = Collections.emptyList();
+ patternEntryList = Collections.emptyList();
} else {
List<Element> patternElementList = (List<Element>) patternsElement.getChildren();
patternList = new ArrayList<Pattern>(patternElementList.size());
patternMap = new HashMap<String, Pattern>(patternElementList.size());
long id = 0L;
+ patternEntryList = new ArrayList<PatternEntry>(patternElementList.size() * 3);
+ long patternEntryId = 0L;
for (Element element : patternElementList) {
assertElementName(element, "Pattern");
Pattern pattern = new Pattern();
@@ -308,52 +315,48 @@
List<Element> patternEntryElementList = (List<Element>) element.getChild("PatternEntries")
.getChildren();
+ int entryIndex = 0;
for (Element patternEntryElement : patternEntryElementList) {
assertElementName(patternEntryElement, "PatternEntry");
Element shiftTypeElement = patternEntryElement.getChild("ShiftType");
+ PatternEntryPropertyWildcard shiftTypeWildcard;
ShiftType shiftType = shiftTypeMap.get(shiftTypeElement.getText());
if (shiftType == null) {
if (shiftTypeElement.getText().equals("Any")) {
- // TODO
-
-
+ shiftTypeWildcard = PatternEntryPropertyWildcard.ANY;
} else if (shiftTypeElement.getText().equals("None")) {
- // TODO
-
-
+ shiftTypeWildcard = PatternEntryPropertyWildcard.NONE;
} else {
throw new IllegalArgumentException("The shiftType (" + shiftTypeElement.getText()
+ ") of pattern (" + pattern.getCode() + ") does not exist.");
}
+ } else {
+ shiftTypeWildcard = PatternEntryPropertyWildcard.SPECIFIC;
}
Element dayElement = patternEntryElement.getChild("Day");
+ PatternEntryPropertyWildcard dayOfWeekWildcard;
DayOfWeek dayOfWeek = DayOfWeek.valueOfCode(dayElement.getText());
if (dayOfWeek == null) {
if (dayElement.getText().equals("Any")) {
- // TODO
-
-
+ dayOfWeekWildcard = PatternEntryPropertyWildcard.ANY;
} else {
throw new IllegalArgumentException("The dayOfWeek (" + dayElement.getText()
+ ") of pattern (" + pattern.getCode() + ") does not exist.");
}
+ } else {
+ dayOfWeekWildcard = PatternEntryPropertyWildcard.SPECIFIC;
}
-
- // TODO shiftType & day etc
-
- // <PatternEntry index="0">
- // <ShiftType>None</ShiftType>
- // <Day>Friday</Day>
- // </PatternEntry>
- // <PatternEntry index="1">
- // <ShiftType>Any</ShiftType>
- // <Day>Saturday</Day>
- // </PatternEntry>
- // <PatternEntry index="2">
- // <ShiftType>Any</ShiftType>
- // <Day>Sunday</Day>
- // </PatternEntry>
-
+ PatternEntry patternEntry = new PatternEntry();
+ patternEntry.setId(patternEntryId);
+ patternEntry.setPattern(pattern);
+ patternEntry.setEntryIndex(entryIndex);
+ patternEntry.setDayOfWeekWildcard(dayOfWeekWildcard);
+ patternEntry.setDayOfWeek(dayOfWeek);
+ patternEntry.setShiftTypeWildcard(shiftTypeWildcard);
+ patternEntry.setShiftType(shiftType);
+ patternEntryList.add(patternEntry);
+ patternEntryId++;
+ entryIndex++;
}
patternList.add(pattern);
@@ -366,6 +369,7 @@
}
}
nurseRoster.setPatternList(patternList);
+ nurseRoster.setPatternEntryList(patternEntryList);
}
private void readContractList(NurseRoster nurseRoster, Element contractsElement) throws JDOMException {
@@ -377,6 +381,9 @@
List<ContractLine> contractLineList = new ArrayList<ContractLine>(
contractElementList.size() * contractLineTypeListSize);
long contractLineId = 0L;
+ List<PatternContractLine> patternContractLineList = new ArrayList<PatternContractLine>(
+ contractElementList.size() * 3);
+ long patternContractLineId = 0L;
for (Element element : contractElementList) {
assertElementName(element, "Contract");
Contract contract = new Contract();
@@ -434,14 +441,12 @@
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>
-
-
+ PatternContractLine patternContractLine = new PatternContractLine();
+ patternContractLine.setId(patternContractLineId);
+ patternContractLine.setContract(contract);
+ patternContractLine.setPattern(pattern);
+ patternContractLineList.add(patternContractLine);
+ patternContractLineId++;
}
contractList.add(contract);
@@ -454,6 +459,7 @@
}
nurseRoster.setContractList(contractList);
nurseRoster.setContractLineList(contractLineList);
+ nurseRoster.setPatternContractLineList(patternContractLineList);
}
private long readBooleanContractLine(Contract contract, List<ContractLine> contractLineList,
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-28 17:39:15 UTC (rev 33151)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/resources/org/drools/planner/examples/nurserostering/solver/nurseRosteringScoreRules.drl 2010-05-28 19:46:03 UTC (rev 33152)
@@ -10,6 +10,9 @@
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.PatternEntry;
+import org.drools.planner.examples.nurserostering.domain.PatternEntryPropertyWildcard;
+import org.drools.planner.examples.nurserostering.domain.contract.PatternContractLine;
import org.drools.planner.examples.nurserostering.domain.RosterInfo;
import org.drools.planner.examples.nurserostering.domain.Shift;
import org.drools.planner.examples.nurserostering.domain.ShiftDate;
@@ -34,6 +37,7 @@
import org.drools.planner.examples.nurserostering.domain.solver.EmployeeFreeDaySequence;
import org.drools.planner.examples.nurserostering.domain.solver.EmployeeWeekendSequence;
import org.drools.planner.examples.nurserostering.domain.solver.EmployeeWorkSequence;
+import org.drools.planner.examples.nurserostering.domain.solver.PatternEntryOccurrence;
// @author Geoffrey De Smet
@@ -499,7 +503,62 @@
end
// Unwanted patterns
-// TODO
+rule "insertPatternEntryOccurrenceShiftType"
+ when
+ $patternEntry : PatternEntry(shiftTypeWildcard != PatternEntryPropertyWildcard.NONE,
+ $dayOfWeekWildcard : dayOfWeekWildcard, $dayOfWeek : dayOfWeek,
+ $shiftTypeWildcard : shiftTypeWildcard, $shiftType : shiftType,
+ $pattern : pattern
+ )
+ Assignment(
+ (PatternEntryPropertyWildcard.ANY == $dayOfWeekWildcard) || (shiftDateDayOfWeek == $dayOfWeek),
+ (PatternEntryPropertyWildcard.ANY == $shiftTypeWildcard) || (shiftType == $shiftType),
+ $contract : contract, $employee : employee, $shiftDate : shiftDate
+ )
+ PatternContractLine(
+ pattern == $pattern, contract == $contract
+ )
+ then
+ insertLogical(new PatternEntryOccurrence($patternEntry, $employee, $shiftDate));
+end
+rule "insertPatternEntryOccurrenceNoneShiftType"
+ when
+ $patternEntry : PatternEntry(shiftTypeWildcard == PatternEntryPropertyWildcard.NONE,
+ $dayOfWeekWildcard : dayOfWeekWildcard, $dayOfWeek : dayOfWeek,
+ $pattern : pattern
+ )
+ $employee : Employee(
+ $contract : contract
+ )
+ PatternContractLine(
+ pattern == $pattern, contract == $contract
+ )
+ $shiftDate : ShiftDate(
+ (PatternEntryPropertyWildcard.ANY == $dayOfWeekWildcard) || (dayOfWeek == $dayOfWeek)
+ )
+ not Assignment(
+ employee == $employee, shiftDate == $shiftDate
+ )
+ then
+ insertLogical(new PatternEntryOccurrence($patternEntry, $employee, $shiftDate));
+end
+rule "unwantedPatterns"
+ when
+ $pattern : Pattern()
+ PatternEntryOccurrence(
+ pattern == $pattern, entryIndex == 0,
+ $employee : employee, $firstDayIndex : dayIndex)
+ PatternEntryOccurrence(
+ pattern == $pattern, entryIndex == 1,
+ employee == $employee, dayIndex == ($firstDayIndex + 1))
+ PatternEntryOccurrence(
+ pattern == $pattern, entryIndex == 2,
+ employee == $employee, dayIndex == ($firstDayIndex + 2))
+ then
+ insertLogical(new IntConstraintOccurrence("unwantedPatterns", ConstraintType.NEGATIVE_SOFT,
+ $pattern.getWeight(),
+ $pattern, $employee, $firstDayIndex));
+end
// ############################################################################
// Calculate score
More information about the jboss-svn-commits
mailing list