[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