[jboss-svn-commits] JBL Code SVN: r32330 - in labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples: nurserostering/persistence and 1 other directory.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Wed Mar 31 14:45:48 EDT 2010


Author: ge0ffrey
Date: 2010-03-31 14:45:48 -0400 (Wed, 31 Mar 2010)
New Revision: 32330

Added:
   labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/common/persistence/AbstractXmlOutputConverter.java
   labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/persistence/NurseRosteringOutputConverter.java
Log:
nurse rostering: outputconverter

Copied: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/common/persistence/AbstractXmlOutputConverter.java (from rev 32306, 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/AbstractXmlOutputConverter.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/common/persistence/AbstractXmlOutputConverter.java	2010-03-31 18:45:48 UTC (rev 32330)
@@ -0,0 +1,73 @@
+package org.drools.planner.examples.common.persistence;
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.OutputStream;
+
+import org.apache.commons.io.IOUtils;
+import org.drools.planner.core.solution.Solution;
+import org.jdom.Document;
+import org.jdom.JDOMException;
+import org.jdom.input.SAXBuilder;
+import org.jdom.output.Format;
+import org.jdom.output.XMLOutputter;
+
+/**
+ * @author Geoffrey De Smet
+ */
+public abstract class AbstractXmlOutputConverter extends AbstractOutputConverter {
+
+    protected static final String DEFAULT_OUTPUT_FILE_SUFFIX = ".xml";
+
+    protected AbstractXmlOutputConverter(SolutionDao solutionDao) {
+        super(solutionDao);
+    }
+
+    protected String getOutputFileSuffix() {
+        return DEFAULT_OUTPUT_FILE_SUFFIX;
+    }
+
+    public abstract XmlOutputBuilder createXmlOutputBuilder();
+
+    public void writeSolution(Solution solution, File outputFile) {
+        OutputStream out = null;
+        try {
+            out = new FileOutputStream(outputFile);
+            Document document = new Document();
+            XmlOutputBuilder xmlOutputBuilder = createXmlOutputBuilder();
+            xmlOutputBuilder.setDocument(document);
+            xmlOutputBuilder.setSolution(solution);
+            xmlOutputBuilder.writeSolution();
+            XMLOutputter outputter = new XMLOutputter(Format.getPrettyFormat());
+            outputter.output(document, out);
+        } catch (IOException e) {
+            throw new IllegalArgumentException("Could not write the file (" + outputFile.getName() + ").", e);
+        } catch (JDOMException e) {
+            throw new IllegalArgumentException("Could not format the XML file (" + outputFile.getName() + ").", e);
+        } finally {
+            IOUtils.closeQuietly(out);
+        }
+    }
+
+    public abstract class XmlOutputBuilder {
+
+        protected Document document;
+
+        public void setDocument(Document document) {
+            this.document = document;
+        }
+
+        public abstract void setSolution(Solution solution);
+
+        public abstract void writeSolution() throws IOException, JDOMException;
+
+        // ************************************************************************
+        // Helper methods
+        // ************************************************************************
+
+    }
+
+}

Copied: labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/persistence/NurseRosteringOutputConverter.java (from rev 32306, labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/curriculumcourse/persistence/CurriculumCourseOutputConverter.java)
===================================================================
--- labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/persistence/NurseRosteringOutputConverter.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-planner/drools-planner-examples/src/main/java/org/drools/planner/examples/nurserostering/persistence/NurseRosteringOutputConverter.java	2010-03-31 18:45:48 UTC (rev 32330)
@@ -0,0 +1,76 @@
+package org.drools.planner.examples.nurserostering.persistence;
+
+import java.io.IOException;
+
+import org.drools.planner.core.solution.Solution;
+import org.drools.planner.examples.common.persistence.AbstractTxtOutputConverter;
+import org.drools.planner.examples.common.persistence.AbstractXmlOutputConverter;
+import org.drools.planner.examples.nurserostering.domain.EmployeeAssignment;
+import org.drools.planner.examples.nurserostering.domain.NurseRoster;
+import org.drools.planner.examples.nurserostering.domain.Shift;
+import org.jdom.Element;
+
+/**
+ * @author Geoffrey De Smet
+ */
+public class NurseRosteringOutputConverter extends AbstractXmlOutputConverter {
+
+    public static void main(String[] args) {
+        new NurseRosteringOutputConverter().convertAll();
+    }
+
+    public NurseRosteringOutputConverter() {
+        super(new NurseRosteringDaoImpl());
+    }
+
+    public XmlOutputBuilder createXmlOutputBuilder() {
+        return new NurseRosteringOutputBuilder();
+    }
+
+    public class NurseRosteringOutputBuilder extends XmlOutputBuilder {
+
+        private NurseRoster nurseRoster;
+
+        public void setSolution(Solution solution) {
+            nurseRoster = (NurseRoster) solution;
+        }
+
+        public void writeSolution() throws IOException {
+            Element solutionElement = new Element("Solution");
+            document.setRootElement(solutionElement);
+
+            Element schedulingPeriodIDElement = new Element("SchedulingPeriodID");
+            schedulingPeriodIDElement.setText(nurseRoster.getCode());
+            solutionElement.addContent(schedulingPeriodIDElement);
+
+            Element competitorElement = new Element("Competitor");
+            competitorElement.setText("Geoffrey De Smet with Drools Planner");
+            solutionElement.addContent(competitorElement);
+
+            Element softConstraintsPenaltyElement = new Element("SoftConstraintsPenalty");
+            softConstraintsPenaltyElement.setText(Integer.toString(nurseRoster.getScore().getSoftScore()));
+            solutionElement.addContent(softConstraintsPenaltyElement);
+
+            for (EmployeeAssignment employeeAssignment : nurseRoster.getEmployeeAssignmentList()) {
+                Shift shift = employeeAssignment.getShift();
+                if (shift != null) {
+                    Element assignmentElement = new Element("Assignment");
+                    solutionElement.addContent(assignmentElement);
+
+                    Element dateElement = new Element("Date");
+                    dateElement.setText(shift.getShiftDate().getDateString());
+                    assignmentElement.addContent(dateElement);
+
+                    Element employeeElement = new Element("Employee");
+                    employeeElement.setText(employeeAssignment.getEmployee().getCode());
+                    assignmentElement.addContent(employeeElement);
+
+                    Element shiftTypeElement = new Element("ShiftType");
+                    shiftTypeElement.setText(shift.getShiftType().getCode());
+                    assignmentElement.addContent(shiftTypeElement);
+                }
+            }
+        }
+    }
+
+}



More information about the jboss-svn-commits mailing list