[jboss-svn-commits] JBL Code SVN: r32151 - in labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples: nurserostering/domain and 1 other directories.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Fri Mar 19 12:33:10 EDT 2010
Author: ge0ffrey
Date: 2010-03-19 12:33:09 -0400 (Fri, 19 Mar 2010)
New Revision: 32151
Added:
labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/ShiftPattern.java
Modified:
labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/common/persistence/AbstractTxtInputConverter.java
labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/common/persistence/AbstractTxtOutputConverter.java
labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/common/persistence/AbstractXmlInputConverter.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/NurseRosteringInputConverter.java
Log:
nurse rostering: shiftpattern (unfinished)
Modified: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/common/persistence/AbstractTxtInputConverter.java
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/common/persistence/AbstractTxtInputConverter.java 2010-03-19 16:11:02 UTC (rev 32150)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/common/persistence/AbstractTxtInputConverter.java 2010-03-19 16:33:09 UTC (rev 32151)
@@ -33,7 +33,7 @@
txtInputBuilder.setBufferedReader(bufferedReader);
return txtInputBuilder.readSolution();
} catch (IOException e) {
- throw new IllegalArgumentException(e);
+ throw new IllegalArgumentException("Could not read the file (" + inputFile.getName() + ").", e);
} finally {
IOUtils.closeQuietly(bufferedReader);
}
Modified: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/common/persistence/AbstractTxtOutputConverter.java
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/common/persistence/AbstractTxtOutputConverter.java 2010-03-19 16:11:02 UTC (rev 32150)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/common/persistence/AbstractTxtOutputConverter.java 2010-03-19 16:33:09 UTC (rev 32151)
@@ -34,7 +34,7 @@
txtOutputBuilder.setSolution(solution);
txtOutputBuilder.writeSolution();
} catch (IOException e) {
- throw new IllegalArgumentException(e);
+ throw new IllegalArgumentException("Could not write the file (" + outputFile.getName() + ").", e);
} finally {
IOUtils.closeQuietly(bufferedWriter);
}
Modified: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/common/persistence/AbstractXmlInputConverter.java
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/common/persistence/AbstractXmlInputConverter.java 2010-03-19 16:11:02 UTC (rev 32150)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/common/persistence/AbstractXmlInputConverter.java 2010-03-19 16:33:09 UTC (rev 32151)
@@ -41,9 +41,9 @@
txtInputBuilder.setDocument(document);
return txtInputBuilder.readSolution();
} catch (IOException e) {
- throw new IllegalArgumentException(e);
+ throw new IllegalArgumentException("Could not read the file (" + inputFile.getName() + ").", e);
} catch (JDOMException e) {
- throw new IllegalArgumentException(e);
+ throw new IllegalArgumentException("Could not parse the XML file (" + inputFile.getName() + ").", e);
} finally {
IOUtils.closeQuietly(in);
}
@@ -57,7 +57,7 @@
this.document = document;
}
- public abstract Solution readSolution() throws IOException;
+ public abstract Solution readSolution() throws IOException, JDOMException;
// ************************************************************************
// Helper methods
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-03-19 16:11:02 UTC (rev 32150)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/NurseRoster.java 2010-03-19 16:33:09 UTC (rev 32151)
@@ -23,6 +23,7 @@
private List<Skill> skillList;
private List<ShiftType> shiftTypeList;
private List<ShiftTypeSkillRequirement> shiftTypeSkillRequirementList;
+ private List<ShiftPattern> shiftPatternList;
private List<NurseAssignment> nurseAssignmentList;
@@ -60,6 +61,14 @@
this.shiftTypeSkillRequirementList = shiftTypeSkillRequirementList;
}
+ public List<ShiftPattern> getShiftPatternList() {
+ return shiftPatternList;
+ }
+
+ public void setShiftPatternList(List<ShiftPattern> shiftPatternList) {
+ this.shiftPatternList = shiftPatternList;
+ }
+
public List<NurseAssignment> getNurseAssignmentList() {
return nurseAssignmentList;
}
@@ -86,6 +95,7 @@
facts.add(skillList);
facts.addAll(shiftTypeList);
facts.addAll(shiftTypeSkillRequirementList);
+ facts.addAll(shiftPatternList);
// TODO add more properties
@@ -105,6 +115,7 @@
clone.skillList = skillList;
clone.shiftTypeList = shiftTypeList;
clone.shiftTypeSkillRequirementList = shiftTypeSkillRequirementList;
+ clone.shiftPatternList = shiftPatternList;
// TODO add more properties
Copied: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/ShiftPattern.java (from rev 32149, labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/ShiftType.java)
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/ShiftPattern.java (rev 0)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/domain/ShiftPattern.java 2010-03-19 16:33:09 UTC (rev 32151)
@@ -0,0 +1,43 @@
+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("ShiftPattern")
+public class ShiftPattern extends AbstractPersistable implements Comparable<ShiftPattern> {
+
+ private String code;
+ private int weight;
+
+ public String getCode() {
+ return code;
+ }
+
+ public void setCode(String code) {
+ this.code = code;
+ }
+
+ public int getWeight() {
+ return weight;
+ }
+
+ public void setWeight(int weight) {
+ this.weight = weight;
+ }
+
+ public int compareTo(ShiftPattern other) {
+ return new CompareToBuilder()
+ .append(id, other.id)
+ .toComparison();
+ }
+
+ @Override
+ public String toString() {
+ return code;
+ }
+
+}
Modified: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/persistence/NurseRosteringInputConverter.java
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/persistence/NurseRosteringInputConverter.java 2010-03-19 16:11:02 UTC (rev 32150)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/persistence/NurseRosteringInputConverter.java 2010-03-19 16:33:09 UTC (rev 32151)
@@ -13,10 +13,12 @@
import org.drools.planner.examples.common.persistence.AbstractTxtInputConverter;
import org.drools.planner.examples.common.persistence.AbstractXmlInputConverter;
import org.drools.planner.examples.nurserostering.domain.NurseRoster;
+import org.drools.planner.examples.nurserostering.domain.ShiftPattern;
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.jdom.Element;
+import org.jdom.JDOMException;
/**
* @author Geoffrey De Smet
@@ -37,33 +39,41 @@
public class NurseRosteringInputBuilder extends XmlInputBuilder {
- public Solution readSolution() throws IOException {
+ public Solution readSolution() throws IOException, JDOMException {
// Note: javax.xml is terrible. JDom is much much easier.
Element schedulingPeriodElement = document.getRootElement();
- // TODO verify root node name
+ assertElementName(schedulingPeriodElement, "SchedulingPeriod");
NurseRoster nurseRoster = new NurseRoster();
nurseRoster.setId(0L);
nurseRoster.setCode(schedulingPeriodElement.getAttribute("ID").getValue());
// TODO StartDate EndDate
- Map<String, Skill> skillMap = readSkillList(nurseRoster, schedulingPeriodElement.getChild("Skills"));
- readShiftTypeList(nurseRoster, skillMap, schedulingPeriodElement.getChild("ShiftTypes"));
+ Map<String, Skill> skillMap = readSkillList(nurseRoster,
+ schedulingPeriodElement.getChild("Skills"));
+ Map<String, ShiftType> shiftTypeMap = readShiftTypeList(nurseRoster, skillMap,
+ schedulingPeriodElement.getChild("ShiftTypes"));
+ Map<String, ShiftPattern> shiftPatternMap = readShiftPatternList(nurseRoster, shiftTypeMap,
+ schedulingPeriodElement.getChild("Patterns"));
+ logger.info("NurseRoster {} with TODO.",
+ new Object[]{nurseRoster.getCode()});
+ // TODO log other stats
+
return nurseRoster;
}
- private Map<String, Skill> readSkillList(NurseRoster nurseRoster, Element skillsElement) {
+ private Map<String, Skill> readSkillList(NurseRoster nurseRoster, Element skillsElement) throws JDOMException {
List<Element> skillElementList = (List<Element>) skillsElement.getChildren();
List<Skill> skillList = new ArrayList<Skill>(skillElementList.size());
Map<String, Skill> skillMap = new HashMap<String, Skill>(skillElementList.size());
long id = 0L;
- for (Element skillElement : skillElementList) {
- assertElementName(skillElement, "Skill");
+ for (Element element : skillElementList) {
+ assertElementName(element, "Skill");
Skill skill = new Skill();
skill.setId(id);
- skill.setCode(skillElement.getText());
+ skill.setCode(element.getText());
skillList.add(skill);
skillMap.put(skill.getCode(), skill);
id++;
@@ -72,24 +82,25 @@
return skillMap;
}
- private void readShiftTypeList(NurseRoster nurseRoster, Map<String, Skill> skillMap,
- Element shiftTypesElement) {
+ private Map<String, ShiftType> readShiftTypeList(NurseRoster nurseRoster, Map<String, Skill> skillMap,
+ Element shiftTypesElement) throws JDOMException {
List<Element> shiftElementList = (List<Element>) shiftTypesElement.getChildren();
List<ShiftType> shiftTypeList = new ArrayList<ShiftType>(shiftElementList.size());
+ Map<String, ShiftType> shiftTypeMap = new HashMap<String, ShiftType>(shiftElementList.size());
long id = 0L;
List<ShiftTypeSkillRequirement> shiftTypeSkillRequirementList
= new ArrayList<ShiftTypeSkillRequirement>(shiftElementList.size() * 2);
long shiftTypeSkillRequirementId = 0L;
- for (Element shiftElement : shiftElementList) {
- assertElementName(shiftElement, "Shift");
+ for (Element element : shiftElementList) {
+ assertElementName(element, "Shift");
ShiftType shiftType = new ShiftType();
shiftType.setId(id);
- shiftType.setCode(shiftElement.getAttribute("ID").getValue());
- shiftType.setStartTimeString(shiftElement.getChild("StartTime").getText());
- shiftType.setEndTimeString(shiftElement.getChild("EndTime").getText());
- shiftType.setDescription(shiftElement.getChild("Description").getText());
+ shiftType.setCode(element.getAttribute("ID").getValue());
+ shiftType.setStartTimeString(element.getChild("StartTime").getText());
+ shiftType.setEndTimeString(element.getChild("EndTime").getText());
+ shiftType.setDescription(element.getChild("Description").getText());
- List<Element> skillElementList = (List<Element>) shiftElement.getChild("Skills").getChildren();
+ List<Element> skillElementList = (List<Element>) element.getChild("Skills").getChildren();
for (Element skillElement : skillElementList) {
assertElementName(skillElement, "Skill");
ShiftTypeSkillRequirement shiftTypeSkillRequirement = new ShiftTypeSkillRequirement();
@@ -104,13 +115,62 @@
shiftTypeSkillRequirementList.add(shiftTypeSkillRequirement);
shiftTypeSkillRequirementId++;
}
+
shiftTypeList.add(shiftType);
+ shiftTypeMap.put(shiftType.getCode(), shiftType);
id++;
}
nurseRoster.setShiftTypeList(shiftTypeList);
nurseRoster.setShiftTypeSkillRequirementList(shiftTypeSkillRequirementList);
+ return shiftTypeMap;
}
+ private Map<String, ShiftPattern> readShiftPatternList(NurseRoster nurseRoster,
+ Map<String, ShiftType> shiftTypeMap, Element patternsElement) throws JDOMException {
+ List<Element> patternElementList = (List<Element>) patternsElement.getChildren();
+ List<ShiftPattern> shiftPatternList = new ArrayList<ShiftPattern>(patternElementList.size());
+ Map<String, ShiftPattern> shiftPatternMap = new HashMap<String, ShiftPattern>(patternElementList.size());
+ long id = 0L;
+ for (Element element : patternElementList) {
+ assertElementName(element, "Pattern");
+ ShiftPattern shiftPattern = new ShiftPattern();
+ shiftPattern.setId(id);
+ shiftPattern.setCode(element.getAttribute("ID").getValue());
+ shiftPattern.setWeight(element.getAttribute("weight").getIntValue());
+
+ List<Element> patternEntryElementList = (List<Element>) element.getChild("PatternEntries")
+ .getChildren();
+ for (Element patternEntryElement : patternEntryElementList) {
+ assertElementName(patternEntryElement, "PatternEntry");
+ Element shiftTypeElement = patternEntryElement.getChild("ShiftType");
+ ShiftType shiftType = shiftTypeMap.get(shiftTypeElement.getText());
+ if (shiftType == null) {
+ if (shiftTypeElement.getText().equals("Any")) {
+ // TODO
+
+
+ } else if (shiftTypeElement.getText().equals("None")) {
+ // TODO
+
+
+ } else {
+ throw new IllegalArgumentException("The shiftType (" + shiftTypeElement.getText()
+ + ") of shiftPattern (" + shiftPattern.getCode() + ") does not exist.");
+ }
+ }
+ // TODO shiftType & day etc
+
+
+ }
+
+ shiftPatternList.add(shiftPattern);
+ shiftPatternMap.put(shiftPattern.getCode(), shiftPattern);
+ id++;
+ }
+ nurseRoster.setShiftPatternList(shiftPatternList);
+ return shiftPatternMap;
+ }
+
}
}
More information about the jboss-svn-commits
mailing list