[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